From 4761c2527c024eb905995677ae093625b426c50e Mon Sep 17 00:00:00 2001 From: kangax Date: Tue, 14 Jan 2014 12:56:39 -0500 Subject: [PATCH] Build distribution --- dist/fabric.js | 64 +++++++++++++++++++++----------------- dist/fabric.min.js | 4 +-- dist/fabric.min.js.gz | Bin 53281 -> 53379 bytes dist/fabric.require.js | 64 +++++++++++++++++++++----------------- src/shapes/itext.class.js | 4 +-- 5 files changed, 76 insertions(+), 60 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 5b11f9ab..b35ddcab 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -18841,39 +18841,47 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag ctx.fillStyle = this.selectionColor; - var cursorLocation = this.get2DCursorLocation(), - lineIndex = cursorLocation.lineIndex, - charIndex = cursorLocation.charIndex, + var start = this.get2DCursorLocation(this.selectionStart), + end = this.get2DCursorLocation(this.selectionEnd), + startLine = start.lineIndex, + endLine = end.lineIndex, textLines = this.text.split(this._reNewline), - origLineIndex = lineIndex; + charIndex = start.charIndex - textLines[0].length; - for (var i = this.selectionStart; i < this.selectionEnd; i++) { + for (var i = startLine; i <= endLine; i++) { + var lineOffset = this._getCachedLineOffset(i, textLines) || 0, + lineHeight = this._getCachedLineHeight(i), + boxWidth = 0; - if (chars[i] === '\n') { - boundaries.leftOffset = 0; - boundaries.topOffset += this._getHeightOfLine(ctx, lineIndex); - lineIndex++; - charIndex = 0; - } - else if (i !== this.text.length) { - - var charWidth = this._getWidthOfChar(ctx, chars[i], lineIndex, charIndex), - lineOffset = this._getLineLeftOffset(this._getWidthOfLine(ctx, lineIndex, textLines)) || 0; - - if (lineIndex === origLineIndex) { - // only offset the line if we're rendering selection of 2nd, 3rd, etc. line - lineOffset = 0; + if (i === startLine) { + for (var j = 0, len = textLines[i].length; j < len; j++) { + if (j >= start.charIndex && (i !== endLine || j < end.charIndex)) { + boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + } + if (j < start.charIndex) { + lineOffset += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + } + charIndex++; } - - ctx.fillRect( - boundaries.left + boundaries.leftOffset + lineOffset, - boundaries.top + boundaries.topOffset, - charWidth, - this._getHeightOfLine(ctx, lineIndex)); - - boundaries.leftOffset += charWidth; - charIndex++; } + else if (i > startLine && i < endLine) { + boxWidth += this._getCachedLineWidth(i, textLines) || 5; + charIndex += textLines[i].length; + } + else if (i === endLine) { + for (var j2 = 0, j2len = end.charIndex; j2 < j2len; j2++) { + boxWidth += this._getWidthOfChar(ctx, textLines[i][j2], i, charIndex); + charIndex++; + } + } + + ctx.fillRect( + boundaries.left + lineOffset, + boundaries.top + boundaries.topOffset, + boxWidth, + lineHeight); + + boundaries.topOffset += lineHeight; } ctx.restore(); }, diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 7616c85e..cf7a4eff 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -3,5 +3,5 @@ e,t){this.x=e,this.y=t}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric. .canvas.fire("path:created",{path:a}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=e,this.canvas.renderAll()},_getOptimizedRects:function(e){var t={},n;for(var r=0,i=e.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach (function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("bl",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx||0,n=this.ry||0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0;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(s+t,o),e.lineTo(s+r-t,o),a&&e.quadraticCurveTo(s+r,o,s+r,o+n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.quadraticCurveTo(s+r,o+i,s+r-t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.quadraticCurveTo(s,o+i,s,o+i-n,s,o+i-n),e.lineTo(s,o+n),a&&e.quadraticCurveTo(s,o,s+t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0))})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation -(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +:function(e,t){if(!this.fill&&!this._skipFillStrokeCheck)return;this._boundaries=[];var n=0;for(var r=0,i=t.length;r-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(f!==o||ps&&f-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&(this.enterEditing(),this.initDelayedCursor(!0))})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right" +,this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 9686960a56ad5071d6266a45a496a430b3437cff..a7e72eca422231836e78596466eae8be63df9308 100644 GIT binary patch delta 25722 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 z zqoewh-=u0}V|$?f?de;Ad+bzSGrxb&ruFU4Yf>G&_m<@9!Ee2fgnar?%B2B05+x?= z5bBdWDwB|iFhPMa`4t^KMnY_sl!7u7KaTMS5^fz^%D?(NS?`kXT5+!W&sgKHi}zX8 z5s+}#0(0Hpe0AmNkD1Pfl?B2&*MxO~R~7z{izvQ(qnTVynQ}bae?@tAcVB-_uJOd%ZJXw+A4iD_s)g5>M6E%v*nTfl^-4%;_klaFkLYaZ@}>`Duz*>Ky)TW)p|*t3LKF zMF@{IthHn!mg{c<)PKX`cHF6jX^P~jD@!g<;&s}r#?eKUOWt0lHfFo;P$_15#`RCP z5O1CPS7qK67=72lr>gs%{DOMP`0wvXHd23ay^~U`lW_2a%`||bT9kj6VH6#r{H2`r zk{bV#M23H%MCQ}eku=n?9<_gW6U^^HFjBpLEw<+S{3=8JoBM4(S$j`8AbK3Ap$Lir z`*W%^;kz@cRPCR(w#Of_xW~Wi>f)vDTVWD8Y!V@9NE35u!}4(O z_|K1fo5R5$KmRk_;)Btj{u~{R29KYNMKL69_ROa(PVVUFMW4RNs%<&(O zvCNalpHZ2|qv+^(FuH?mieYxo4RZW1bT__1&kgt5HdudizuRz*?onW%^!LMu;15Ik zU!Y$4*f>_YJrfBIOl0y{@RIB)QMVrvul{VczDUC@Pj8<{#F5L*Y|*FjI$lf`$<`6F zvrdwCEKY~BLlXwD;}@qRCv6F7$4=Th8THKsI!nN=0gqNQkG4v3Byi{W2hY+4{eZKC z$w1Do4%dG%X93YV7awpsmc5I^^(Plq(EP_56v|PLISK!*i`(oT*DY52r&6KXyPT=9 zrX9?Q*sJ7T&Qk8FH)|SH7}QyV7BgtkAZ#86Z=ms(Gh9sE>IYXimTtS-tK7>i%U0MQ zRF%ETe#Khjqo1qk&&5&9*pp$VM)jFBs(`~G2IklR-(F_*0kn4TLwT73Or4~Lwu9>8NM3U)yXsA>&(g4RwMmvZt{l&ul@_kPX=v3F&|`mX*ZUn}qQ zsJH2=jw@SXx9G?)!8OCdwR|TFy>Y(}d}R`EH*dl5OAt09LB3^6V3m;;7^={22W*x-@f!JTytd1Fe)khg<%y4gUM}RX8iZ2Zt~@I;CJFJo7I@nGrM-hS~xFBtDIf# zYlmJz@IChY}5=SU-MGtV~ZwoRA4pl(~C+!eZ^nvHqr z>>7v}gio}o-iJrWWBmb?qp*?D0QP^G1HL;`*~w|k35)A^Mc5vw&5SD~H+*wi%pxh> zl9}kJNCe=_CA!uwLsIs1PTClxr4(QsI_x=J?vB`}Jqibn*@;_7G) zOs1vH8NXLWCX18zq}b`7RC>CY#Z_-jGmFvD90cG{8_BGQo$IiBd}7uj4XSNIT|KyH7#q5+6KuZ}RE zweOa~mqG>O0fd;;ty_c&kYoHe#A_g4tc0T;8=mUEGJym%C)#-3TEJ*I#;~AK3pXUY z;UVX4-!_ z?9e*m-n6!nAp>&Es>Rnq4oh-l8&oy6L6yK&sO{5U?RplGg@|XVH`Y>D?R8G$fBYlN zd-Y-E!+;p6p$~NGCPs5eYsc$Z*_Vc&eQhG;ere)qLTO48>tEr92~bz^;ln)KzM7xUF-k$ssh)6I&_&1>lsjHNGD773*HiE6w>;AcAghGvBCY{r~* zSVVDdi42Y+O5 zTr@Kl^7(haR_WS*8W~>DHPD?~eN=hp+a-`z>ov7DZfi(=ci63j_B_ympK-+_GOo7v z+8>QAMzNn+q7YS#yLKdp(zT{su`zFWbeCSmVu{A+TeAh$mJ9*~jdynp*YNo`|ACwW z%k_wZ6HGn`V&{}kAK~x*l0K3)lGY-H00jz<0&@BFh~A-pOlXL9NT1Yfg)W444a6g| zig1_Kvvb>(7-NZAze?|GJtyC;XXBpfBmC|!R6=4tvFLKDjXOpKG^2dyp>b?s&taTz znTE#{k{(64U^1Mi;+B!ggIun;K?)K)(6%FzpFV zT;cz;B<%4M!mLK8Z|-}}6y5hd8pFSfYgiF(#3_;;){gtab`NjISudm>roPN!M5~6Y zu23+FJ`8s_W;Ip^!C;WFcxT}de}k-^r|aye%M}5Clvfz1k8b~9!B|+f>Gc#IS1aCy zER0ppY3X6vg?NVQ0n*MRN8`V+HU5D&C{9aW-f3u7mP{sTx8;;|wy!H3FZ9x&S3m=y(#ZfkYG61FJ{@}oY8?s~E*u8Q{Oqx5i`i6cAUl;` zHIJizj-9*V%~5#wXmA~jgT-~wu|MlWM?N{O56k`b8**mb_gQ9bvKGL$T|UZj=GGzj zq!;lcd7g`23zm(7rSiQA*zvG&yzp_h^1$g?6ljQrForUz8`>B$k!?dc;8 zkuN*}b{w%$d%GYbaR*qraw`od+aaL^n!VtEvK0`WGj9#kr%ng678+J&=ypQ`E{ov8 zlu-o=IPrz42ZsUdwc;L}j}hGC=>8Ng;EWi-M^Zx&Qp~b=7t4|q?}F1u(V!`RI6tET zkGvt-IR3KMm=FuM7V(4SZykPF(>meca2kcD|L5nU*D{ox)I^HR7{{A{bpeq3ZXcEN|y{S)Tf_9OaM3{I(@&@S@4;?zEXRAy_oanRaTb+s6 zwCpKus1sfk3-eQGrd8)>aJK&#k4ArvkDok=hl9rv(9QLWMcz?cj+0dE*F1B{_{wGhj9cgU8Fq0`Z)|PBd>{_dU}LnXg)~;hlhWn>fU&J zz}{GEtYGRF*+u$3$8h$sxqTpyt!!!?J4b2vt)$?&R>6Tek&lp@Duf4+ijl`(T&|mI zR|Ug*pTsO3=*IB8$XPmy4r1s`8TS?R2}FWQsbmU1g~)(8@{Su)K#$jd_6GO(=r!}D zF62eNSY!plDTR|I?*TitRW-6ZeBr!{+1)|z{W_zH!pFECfTQpt1hHv#zM-Jv+9CI` zq!_GN(%GasX{@mKlAX4@2rC^+iPa=>aZhs+{d|q0b-{Uh zGT;Nx3V(<_?=ELc$49w;qqo;Z1UxeVC^RPcY7#T^R7F3u#Ovv>PM%Ve=A_jDMR@Xc z65Buly2#A;D(h^6uL-}xfFA}3>c}#DLbo&F!-RWhBUU+TvD@Cl#Fav# zutVQg2A!1qVq9nqD78Pv#i>r7iC?!ggXiLQhN3U!>q_@auh@s#OsTDi@6(3FO2csj z9c;~1VpAbOke}{jTnYOFfq^Q?u@%37bS$>_H<(TJycuLe0fFzl*1aA z-J4gwx=0y^6_GS2qP`}DPoYLol8mBP5?1*}1X@*j@cY&eiuP-V6squ*He@ebB!(Nt zY0{870w2n$8ol+3E^$#jjQSF&o~;=g7%(;vU}X4gT%tOE+KK0gO_nGH#DI0D%NY*o zXE@8tG^}jFbxof&)^W3;h@pu3&w7J)Ef&YU;v70DiZ`(d*e^&m^mh zOOz@4nifls4^X$}et$P#WpFC6T!=5Du$U=p?`~qbek?821x-G=uY1d6uq7h9=P)&a@{W<*8y za^0hUc{H(cThIa@F{a@F_Q(U8st*q3(7khTsS2qFSGW_l#RyWW)U}j8>LT94Xte2j z_PD9`LYWxMg;e0)cCn$JmD)W04Tev3{C6%B;8RbMl5sNQ-|j85j5iTR6Pa(p#Y=SP zJH&T?nk8(&I?}FhhUoeR5U(7A^m?;?Y7P?!v*m*%DL;HzpBU^@1nCzYXuXKB+0*qb zUdAch)$0?xz15!eQn(A~{=mUMtsg#Io|Msr_u^rk!ti(k6|IS>HUI#n>907xOpGZh ze?B|r^`6H^!z&C`NIn}FdJNA-W1NkPcpk-nMnW%{-xeOd(Jm_nGD;9^s3i#jO2|T? zMl&zdx-sk^1QTJJm!K(T)pyKFw%hz{*Nz-B#Zc}(2%C;uhG~Gb>+<95W#XTdwzHd+?d+y)@<0Hr<9WP77dW^QDZ1zASUCi_-v-44`%%mf6;g$N zUr^+1bkM<`QZFQl6D@NahAO$GHot#6);zo$5S0qV^FMhF(n0!gAKL6h0qjMXCUz1U z@^AxajpB*z2kViVoCinslek|lI_du7DER>VMM~#UISGfF;udIaAEq|B2;f7sfRum_ zbKX^ROw^E+$?lFYEDxJFCAa|ALAU9DjcImh*wii2y8@x0U5ka5N}}6sd&4NUCscM! zgRQ)ICid8E+nzj9Mt|0Z>CjQuTSq;?Pa8+&Mn>A*tv{G1Ay!wajyUMZ;gv}nVIxH< zn{LJ6Zg4!4xP3NN&KltPy!2_y8Su|#{2eviHp|X ztKZhFJNCu1wuZiWx0wb7ana9FabtgLy`F2W*M6S08!|AT+fS#u{XW;Pzem$+M$6vi z{#GI?RFWG?ejqS)Jq-~UctV=cVH;&0^kYaxmad)?x*K;gNMIkD05F%Y|cL8pxTiFJ* zl5@4QI&8&dpX~~$i|?x;x3b<}POMygMA!kA`qbE;zopv&eyIrchkZ@RVt*4cOGEQh z7yX+uqEyFEH>#17`V?p0z!F{!Mnklh@1T&KH-Q7wc}Q;C(ROry=Xrc7W-dbn2Y=d1 z>3Z_9&3IZdixkIzo2e^#`R`^Od{`$_aEi)3__CX*R_qrfW@U zlS@M^v7a-Jjuyy&w%zZJqtotOz^X`!J-0{I!Nz9#hkxwp{WVW9hxbBUeirz|3>H%W+rJLv3E>M zk2eLM!aNOB`-Oh-G=v24DAkF`?bB#;u}*nu=UD{ng5wxf0Y)C z6`IK!>V*9Cq8@~NMZPRIXRGY_Dxd%II=|ek zwg}p=!7>wnG#AbtPs^cr+X;k`LVn0)sA~Bz%9qyGUySn4F!Z2+oC! ziSMWkeNu20PvzDec|gWgQNBUX;m(}>%Q`^)bD;zEUGZIWp+d3C_`hZkm-wnU-mJSD z);gkq6<+}98rsCD^){J27~T51;r%%FEM0c@c>uS6kXC?37@`eqF@F$m#dLX{H zGQ@S@eN+wNQG8>^thV)zJHk-|aLVEhj8A5Y$kk4SYb+>tq5Ne=g}#kx{2r5n%s;hT z0*u|Y*T?2IxEOF03=EYMM{D%(A#F){(tJe}=VPTNUFUPx8Vt9u0csU>tpe_m-xKzT zT^ON%k*0dK*s9`yVP{d9%a{|^nka7t-j47=@GeWxf@m_b5ukZy4G4Hw@p$+0ANwnI zEPvBANf@MFze28ut61Ms5&8&--DP5Jpbqx}>ST}mstX{vy-3X*aVfOcn!KZYs$BRQ z%Hx`*7iyGRl{{P6rkQOoIYOz^(^tDEByaM6V)3`KS_svg^m6q-G6Xk)K~OLl;~J+L#o;Iih2)>a>tbn}8eikQzMCX*Itvch(jaz3uxW zi=rud$jB`HT?Hf<*wN|1&&AJ!c=F)q>CgSykpyneEmpK@LoYCq`SrJ}&GS?v)dM-% z5bKdm>2M54wvY%6C)}m_*9HkdqCbieq(>KT{zz)ixOP9vbGc)n6Oz3cf0i4cYMi78 zByI3K)Sj}8ke2?^NKaCHCZ6{Y-->&a?I`c??>6fNP;Q!;lVbMteJ0A1Ev@N|*_+Py z{9ZSxc+Jj%_YZ`H;g}$R(H6Q};0olC$*mRNFk3-{nBZXms%=1w@5d^k&bF`w(ZUs@ zd6HpZCL2nd0BT+F7pN@2e~X`p00!2SLvzjxc9$fIn>pxA$!bMF?o8WiCTgqLHk?8b zlh)E@mZ{{4yGjKFzz}!eLPuzX_EXYIdQ1GcvxU4iIJPyM#lJa*a_`YIltxiL6FZkm z>ZE3zYRhuI;TQ()?rsyISYknW$&CT2u?xD`fcMy4fY^fHxD8UPf56*zfw!@-TgLA8 ziLKo+?mReFu~=`M?i#ubd#)uxT^GRAA{#)nSJ>F`Zoz>u9sjm83!8xV?{>5FnY-mZ z+u1B{FO6rnZ>{n6ZpYYc#$KR~Q{Jkj^CAn^bg@s3SGTRC{nmwYTI$)w zvXEw=vV0nip+9_BWGD!+UOJnZ>Yr6$tMbwc%w>?7f+9rM>6!FgB&pz*@_i8*irGlz z@30Cs%j09v(`r)li>nB)fa4W0v}+*UMlJ0On{INiobtz9hCm z*?miKoIH-bf01injY$+$(l|is@SYa^5x$+?+@e^ait5whEXl&W-D*;k8HI8*TskNM z{U?w&m#>Q^EK#2HG{N`b`qWPC7c+MZcux80hDL%4H@7Z8XQ=-Ge|->W)e4(uq4g%d{lR~iS(A_o zC_ALuwBE7cm%Do-XCwPepbqo!wznkdoHx<95H@Va#L%JX*r@EROeoZB%^DW!(~b~G zE+a)8%}GHX4|d%ZKIG8s0hZ3e#^eqJT|?Lh&e~#fSoTYxKi+zFfnseK0y~G!^#OtRCf7}e~2ZV9L<>?wBGDkBv)$SS>+qn%q z&*zG82+2kpABMthJ~Fnw(tDrNeTLC#-B2lfQAm0e{`5=WtF>1jDDchpLRjScGDoS1 zQg~HQ#rVi8qs12V?E59849;?)N)gd3o67LSUwQ}Kd3!f~M~F)qPKg*vm<^=BEU({G zfB9NK1CGR0I#{F&oU-ParQL(P16E-D;ys23#AYP+s|~0^JMv_6LyNQ3j#j!s>RXK1 zyFwn2m<8oBG-l%0isP~wF!Z}*%xH^IyV+geH?ET>!=Y47HU~05QaT%4dGoF*@7l`y z+8ms*Y@c*+-s0bUs`;R#M=rdhhr6yae@qqb$jQT`l|oumSQ**R^qdYYIkdNvr1DFL zT8&pT$5E6qHEWbIMpqtQQeAnQwI_$*SgT>umsd4MADRxQS17CZ`IQ2Mj?Ace*p(Uy zHf$a1j<&VygMHfOxwx?M&dNZ1T|Nr7psRQ9RQ;clW^fg|sc#|mTBcgMG{Y@&e-R%K zgWk&5S@mLtL6_i4c@8Z6!skiM;t;ci)PGh^Qmz>%;v`yLl~j0E3&P)NoZrpPc^@w9 zwJ`Q(_gY{fdo8s1(1f6T=uo3KiS#DfZ?8<6r^&722 zq`Pk<=`scxlhqF;hMQi9>D*<*0CQ+4zEXNf_-}Acep*_2M0}D1C*p3(e>L($CcRwI zShzG=a+!IH?7Ygd`c3&my2#U_7S5Q{;(V1w_U4sSQ$r=2`faP&HSG>48E?Pacr?~7 zH~dT~4kd-JrFQKOd45uWHLFOu& z0O+xCl^w3u%N8d zi`k?~^0>qDLl1rtr^axm>;A>~!UVxjh%4$7L_{AxjFAPcp48DjTZk{X4Yu6dSPu50md=&b)7sHNhuJkte+_`r?Kc=zpbx)L zGVruSZ4B6IRWG%Uh+N!dlJ}Ruv_5qQLV0c?M}Ej3K3w+u@$z=7N62m5uAz4Bd26S} z(#7JNyoQ$Gw2AaZIVVS_aqvraZSkqlp39}icWDf$`non-`yLZ)rnjxr-hQ;VvJ~Q-x+VwG!Mdz-5+)p^ zXLY%P)+Pt&mhE6TIUvVu2mL?8|1esZJK(c&alMn$gdGbItiMgyUj+2l`DC(GaBl$xQnZD1^s9nu%Z1e+KyM^Kk%(=hw7ad`aS) z0A0&9)#^Xxm_C0p4wNco5PuH+&&&075dR6Pu7MqdLH!8^FyAx*iZ;Yv^4rj~2u;-a z7{L6WmkYzyyZ{IZ(@w3VQ&oC43x(%dYTnn3F%L407vCQ~V5Gt(g`bf{4xP5DIo;jv z!@%yTpK}{qe{kRFblD@$6Ky*St>U#ATM5S=H?h$(e*5pt2=jgFTUYjF- z&EZVY5Q_cTEi%}Wzh30?3ks#T&&DDm3{RJMncw25e{k9Y_}I5B`}i+KpEsV@*CMi= z#8GmAt}9CMQIe?iYw5oQg}l8Hy7}1*F4JayK_M!lpNr{Hgz*YjNvJXghd&o86Mb7_ zi4PxwKoVm9_W{HwbNxU7D^e+sxaP6%pdR|n`CjZG2#p@lw6;6C>;=ng*GU~O5~J3{ z_S&Xmf0av@ZF!QSU$*rw;w}gB?mhQ$u8T6ji&w%SOE`~LKul>H;HBuUH|m`;z2wyB zv_8)C6ndk$!=Tm}T@{&*Y#rd#^av9ZDX##sO34481jy=SK3Pf17nbF81yI=mlndw> zX!1=jS##w10w|+I_|RV@oBld}pKJi^jaQR1 zxTt@*m6Y)E!w2*Srf9nKHny+THa^;_iQ~6Dabz&=sSl+byd7Xcd$Y4yYx}Oi2LF~f z7q2lN+2D@+a?_L9$2ET(?)&b2HG41Ar~`4XZ+8Lr-`X>8!xj>EL)K>@!rZ_( zbtC%9Li9rqelJWl5%=;U8+-c9{r6OvK#sVN;2z@ZXmI%N&V{s(r&M$@xC2|7@7kMa z((M*<#Rz|%EaMCFHGE?GLRD@8q$AWcsqvL|zUxv+0fVl&kN1DAO9kkr_cZP*F5@{4 zRDimaSLpj*ZSmqx#eMFU{{K(zmhq}T+IqL3DTj5t{J8!t?iTyde)P@q<9ge@!nt?7 zRg5-2Dx8U3uAgLzgWO}z?dUZ9t=O5XS?Iadzc2Y@*m0K)qg{7F8)n`2@IDNtZx}FY zuLkALVehBYxZi)|T9$X6J7MTvz}Pz^+xG2uKSXi&3BbYWGmy2;fXr8?Alr5d-eJX- znq4+XSE}#RhSiEr1K0X8=oPb26hV*c;)e9pGA*#|TH;49p~FBjC)6YwiJ>`5q2h8; zCJmSC$f>wijJ^sivWnalzXxGSJIAyC-0e==Md~@oX<2`PVyHxL5BkyC4*LyTA)URc z$LW@lLv|qFxpo0*kGY#xjh@j(+JMu8JoOlhSLcbwOppkFG z397(;NTI9cy|>rhcoSoH2_a*9b8OpSCVSV>3T@I|8w~H9fKl)kQ$aB`V z>e*9DeJ9GrZ@RSSgTU`?tl@{)9>^6{e*3nKPMuDr^&6l01eBOs3RTVKDZ9X!QvXFKBgxN z)<@y7pHoMUK%%h%If#7i=C837O#GTFjjJNE>Cg|cA$od2u|X$h%+h!Kl#ak4dy#co zgd2Y-7%xyz6_*&V#uWg06Pj{3?^GfL1wHtU8XyLu&*c-;~L6)PAdMaN z58vJ$7&JHAc)QJ^r|?B z0<3<8jW@j-e`9R>7`>dsZ>ovkIeu|1{KU+sCr3E8r;lbz$Eh_v+<4m$p`ce@zdz@@ zlpWl46+6Wcld^pFDAmj~Oh?+S@3y1k8#}2m`32vgm+SD*Ko_E3Xrb&Ow z$-$TDh<*CVh(8ZyEHCYV#Mi475bRNKbRGwff~bcLjDsN7{@X#{&7iW*uqWrINeQam(x&{J5$9I@M!tee+Gk?6|y$L$q@nhX<%%STg!i+r~G+PWq;pfG60k`6Z`RpZw6$WM7p;F3>N?4 zL&!gpiZ7#ixzh1NE}CXtkAsLJ*M0WcN)kw(e)Z{`H=zZzd)FzZVS`X}~y(0Hl*fZsSuMa#5hqPb5{O;TDapP49 z8E2^hUR|yh163l1U8-lWsa8NN;Lg%%xGP2CYdaOD8?!4^ozC<E3UT?V;O8G}m^A})xw z%BcqTj6NBEQ3Z<~{QxYvA$*)u2a&cg9m8lEa+e)#N8=1niFJg72pN#6wOJ}CIMrA} zjv3R<1~ctU7@-1pJd*jiL@nuRl4-pCe||20t`Co5*4!0|KTq)~kkSCVU6R7i&T)FY zx*7vv6(KQ%+h}Y|$mL}FYmbe@f54nqJ_O&FkNB`nhWbj3eam4^@Iuh0Yo z?M<%}YC<&L;{wPEwxsS;!OHYjO$Cvj6K;>oVwn@p5ea~(nyhk{zCwxw)06DOhtnBt zdcyI4#*mp(;`9HqtX?5<_dTcY(2`XMgU8M7h0yKiL*NVP4DQNm>h%~k==D>BTtxYt6XEj29&^L-9V+G(NI;-}p%n0H1g|{t)OIfXt+jZAbkIN>MyW;v-C1CE>n|v(EYeI!f3xP{^R=> ztv<3Ho#;BKkH|qLtNi@6;IWeJ{nnz`WWQp*VVS*Y_xZ|>*BCJGg-p2SvDO?F+%2Ep xzP|SwVq}7VIi}q;x!i6b$o4v+zy-F0K^%d5z~OGwK?C^7{{_d%ODx(W0|1@@zl;C? delta 25634 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 Ne*q?j#tjA|0{{>7N&Nr- diff --git a/dist/fabric.require.js b/dist/fabric.require.js index ae59d675..cac65753 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -18841,39 +18841,47 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag ctx.fillStyle = this.selectionColor; - var cursorLocation = this.get2DCursorLocation(), - lineIndex = cursorLocation.lineIndex, - charIndex = cursorLocation.charIndex, + var start = this.get2DCursorLocation(this.selectionStart), + end = this.get2DCursorLocation(this.selectionEnd), + startLine = start.lineIndex, + endLine = end.lineIndex, textLines = this.text.split(this._reNewline), - origLineIndex = lineIndex; + charIndex = start.charIndex - textLines[0].length; - for (var i = this.selectionStart; i < this.selectionEnd; i++) { + for (var i = startLine; i <= endLine; i++) { + var lineOffset = this._getCachedLineOffset(i, textLines) || 0, + lineHeight = this._getCachedLineHeight(i), + boxWidth = 0; - if (chars[i] === '\n') { - boundaries.leftOffset = 0; - boundaries.topOffset += this._getHeightOfLine(ctx, lineIndex); - lineIndex++; - charIndex = 0; - } - else if (i !== this.text.length) { - - var charWidth = this._getWidthOfChar(ctx, chars[i], lineIndex, charIndex), - lineOffset = this._getLineLeftOffset(this._getWidthOfLine(ctx, lineIndex, textLines)) || 0; - - if (lineIndex === origLineIndex) { - // only offset the line if we're rendering selection of 2nd, 3rd, etc. line - lineOffset = 0; + if (i === startLine) { + for (var j = 0, len = textLines[i].length; j < len; j++) { + if (j >= start.charIndex && (i !== endLine || j < end.charIndex)) { + boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + } + if (j < start.charIndex) { + lineOffset += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + } + charIndex++; } - - ctx.fillRect( - boundaries.left + boundaries.leftOffset + lineOffset, - boundaries.top + boundaries.topOffset, - charWidth, - this._getHeightOfLine(ctx, lineIndex)); - - boundaries.leftOffset += charWidth; - charIndex++; } + else if (i > startLine && i < endLine) { + boxWidth += this._getCachedLineWidth(i, textLines) || 5; + charIndex += textLines[i].length; + } + else if (i === endLine) { + for (var j2 = 0, j2len = end.charIndex; j2 < j2len; j2++) { + boxWidth += this._getWidthOfChar(ctx, textLines[i][j2], i, charIndex); + charIndex++; + } + } + + ctx.fillRect( + boundaries.left + lineOffset, + boundaries.top + boundaries.topOffset, + boxWidth, + lineHeight); + + boundaries.topOffset += lineHeight; } ctx.restore(); }, diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 3351a090..127a445b 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -538,8 +538,8 @@ charIndex += textLines[i].length; } else if (i === endLine) { - for (var j = 0, len = end.charIndex; j < len; j++) { - boxWidth += this._getWidthOfChar(ctx, textLines[i][j], i, charIndex); + for (var j2 = 0, j2len = end.charIndex; j2 < j2len; j2++) { + boxWidth += this._getWidthOfChar(ctx, textLines[i][j2], i, charIndex); charIndex++; } }