{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/components/modal.js","webpack:///./node_modules/tingle.js/dist/tingle.min.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/util/form.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/util/common.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/product/sizePanel.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/analytics/helpers/helper.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/product/base.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/product/wishlistHeart.js","webpack:///./assets/scripts/woosmap.js","webpack:///./node_modules/fabric/dist/fabric.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/productTileComponent/productTile.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/components/productSlider.js","webpack:///(webpack)/buildin/global.js","webpack:///./assets/scripts/util/render.js","webpack:///./assets/scripts/storeLocator/mapStyles.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/productTileComponent/productTileCarousel.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/product/quickView.js","webpack:///./assets/scripts/components/modal.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/checkout/dispoHelpers.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/checkout/address.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/product/notify.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/product/productBox.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/customCarousel.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/customize.js","webpack:///(webpack)/node_modules/buffer/index.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/isarray/index.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/personalization/generateSvgForOTP.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/personalization/selectors.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/personalization/classes.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/product/detail.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/product/smartGiftHelper.js","webpack:///./assets/scripts/util/url.js","webpack:///./assets/scripts/product/findinstore.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/storeLocator/storeHours.js","webpack:///./assets/scripts/components/map.js","webpack:///./assets/scripts/storeLocator/storeHours.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/product/findinstore.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/util/render.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/checkout/gift.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/checkout/shipping.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/checkout/summary.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/checkout/formErrors.js","webpack:///./assets/scripts/checkout/emailDomainValidation.js","webpack:///./assets/scripts/checkout/dnsUtils.js","webpack:///./assets/scripts/checkout/slovakParcelService/slovakParcelServicePUP.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/findYourSize/findYourSize.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/checkout/pickupPoint.js","webpack:///./assets/scripts/components/pickupPointMap.js","webpack:///./assets/scripts/product/scalaPay.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/components/map.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/cart/cart.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/checkout/gifting.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/util/lazyload.js","webpack:///./assets/scripts/components/spsPickupPointMap.js","webpack:///./assets/scripts/product/klarna.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/cart/bonusProductModal.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/checkout/paypal.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/checkout/expressCheckout.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/checkout/googlePay.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/components/coupon.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/components/pickupPointMap.js","webpack:///./cartridges/app_intimissimi/cartridge/client/default/js/cart.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","footer","cssClass","modalOptions","closeMethods","onClose","modal","destroy","onOpen","$","addClass","beforeClose","length","removeClass","tingle","selectorID","contentModal","document","getElementById","setContent","innerHTML","html","ModalShowHide","selector","newModalType","toPropagateClick","classToPreventHide","this","$el","_scrollposition","isOpenTypeCustom","isOpen","events","_scrollPosition","window","pageYOffset","parent","scrollTo","on","e","target","hasClass","closest","data","hide","stopPropagation","define","beforeOpen","stickyFooter","closeLabel","opts","init","modalBoxFooter","style","width","modalBox","clientWidth","left","offsetLeft","createElement","classList","add","indexOf","display","forEach","modalCloseBtn","modalCloseBtnIcon","modalCloseBtnLabel","appendChild","modalBoxContent","_events","clickCloseBtn","close","clickOverlay","resize","checkOverflow","keyboardNav","addEventListener","which","clientX","parentElement","contains","a","removeEventListener","arguments","h","transition","OTransition","MozTransition","WebkitTransition","body","insertBefore","firstChild","addFooter","parentNode","removeChild","open","removeProperty","removeAttribute","top","setStickyFooter","remove","getContent","setFooterContent","getFooterContent","isOverflow","clientHeight","addFooterBtn","split","console","warn","innerHeight","addInputClearIcon","inputItem","$inputFieldContainer","clearIconTopPos","outerHeight","find","append","css","formElement","payload","form","empty","Foundation","MediaQuery","atLeast","selects","chosen","disable_search","each","ariaLabel","attr","next","fields","keys","feedbackElement","children","Array","isArray","join","siblings","show","error","index","currentTarget","val","firstNameIdList","lastNameIdList","firstNameId","lastNameId","parents","after","swapFirstLastName","parentSelector","fieldErrors","trigger","cardFieldSelector","cardTypeSelector","cleave","Cleave","creditCard","onCreditCardTypeChanged","type","creditCardTypes","amex","cardType","visa","mastercard","discover","jcb","diners","unknown","wasAmexSelected","serializedArray","serializeArray","item","getRawValue","param","task","requestAnimationFrame","preventDefault","off","url","method","hideSpinner","spinner","start","Promise","resolve","reject","ajax","success","response","stop","include","map","el","htmlMap","querySelector","params","newUrl","encodeURIComponent","cookie","filter","trim","expires","days","date","Date","setTime","getTime","toGMTString","parts","pop","shift","navigator","maxTouchPoints","msMaxTouchPoints","idName","openSizePanel","_self","infoURL","dataType","product","readyToOrder","sizeDisplayValue","text","pid","id","ADDTOCART","ADDTOCART_BUNDLE","PERSONALIZE","WISHILIST","SMARTGIFT","operation","Types","$sizeElements","bundleQuantity","element","parseInt","stopSpinner","selectedSize","removeAttr","testEnabled","productGenderMap","1","2","3","4","5","6","brandsMapping","ListType","getSkuCodes","sku","substring","color","size","replace","formatStringForAnalytics","str","toLowerCase","formatStringProductPropertyIfExists","avoidFormatting","getFormatSkuForAnalytics","formatFloatProductPropertyIfExists","parseFloat","formatIntegerProductPropertyIfExists","stringOrNotAvailable","String","numberOrZero","getStringAnalyticsValueFromStorage","sessionStorage","getItem","formattedSku","match","toUpperCase","skuComponents","isTestEnabled","getAvailableListTypes","listingItemsBaseClass","types","push","getSkuComponents","getProductGender","sapCategoryCode","categoryCode","getProductBaseInfo","colorObject","promo","promotions","enabled","appliedPromotions","productType","components","k","variationAttributes","variationAttribute","attributeId","j","values","selected","selectedVariation","formatProductForAnalytics","formatStringProductSalePropertyIfExists","checkPage","location","href","formatString","format4DigitNumber","number","toString","insertParameter","encodeURI","x","kvp","search","substr","insertParam","existsParameter","hasParam","pushObject","dataLayer","log","getFormatSku","formatNameForAnalytics","formatSkus","skus","formattedSkus","getProductNameEngFromPdp","getFormatedNewsletterPreferenceBrands","list","brandsStr","brand","getListId","container","provider","getProductList","items","obj","eq","item_list_name","item_list_id","quantity","getGrandTotal","getAppliedCoupon","coupon","getUpsellingMessage","upsellingMessage","vals","localStorage","setItem","getBeginCheckoutData","context","upselling_message","currency","helperData","getTypeOfAccount","typeOfAccount","storeGtmData","item_id","item_variant","JSON","stringify","getGtmData","GTMData","GTMItem","parse","setBonusProductData","$container","isMiniCartOpen","getPidValue","attributeSelectQuickAdd","selectedValueUrl","$productContainer","imagesShouldUpdate","handleVariantResponseQuickAdd","updateOptions","options","updateQuantities","quantities","selectedQuantity","activatePromoAnimationMessage","reactivatePromoAnimationMessage","promotionId","pdpCalloutMsgText","attributeSelect","ignoreCTA","prevObject","analyticsPromotion","isSize","variation","handleVariantResponse","handleVariationUrlsSelectSizeModal","variationUrls","handlePromotionTag","handleVariationUrlsSelectNotifyModal","handleVariationComingSoonNotifyModal","handleVariationComingSoon","comingSoon","handleVariationWishlistModal","updateImageSaveForLater","getPID","promoContainer","promoMessage","promoLoyaltyMessage","selectorPrefix","onSaleSelected","price","saleType","discountValue","calloutMsg","totalQuantityPrice","handleInexistentSizeQuickView","handleWishlistContainer","err","responseJSON","redirectUrl","current_url","pathname","localized_error_page","protocol","host","then","sizePanel","afterSizeSelection","getQuantitySelector","getQuantitySelected","updateAttrs","attrs","variantType","attrsWithSwatches","attrValue","$attrValue","$swatchAnchor","displayValue","displayName","images","swatch","outerHTML","selectable","isSoldout","processSwatchValues","$attr","resetUrl","$attrValueMobile","variationUrl","isComingSoon","selectedSizeSpan","prop","lowAvailability","toggleClass","disabled","$sizeSelectorContainer","processNonSwatchValues","updateScanTrustLink","$productAuthenticity","scanTrustUrlWithParams","updateAvailability","availabilityValue","availabilityMessages","availability","messages","orderable","message","resources","info_selectforstock","available","isSizeInexistent","option","$optionEl","valueEl","updateColorFamily","colorFamily","updatePrices","priceSelector","priceInfoSelector","$oldPriceInfoSelector","$regularPriceInfoDiscountSelector","$oldPriceInfoDiscountSelector","$pricePercentage","$priceSelector","$priceInfoSelector","$priceInfoInSaleContainerSelector","$priceInfoInSaleContainerSelector2","$omnibusPricelForSpecificCountries","onSalesInfoPrice","replaceWith","currentCountryOmnibus","isRegularOmnibusCountry","sales","formattedPriceInfo","tooltip_omnibus","oldPriceOmnibus","priceInfoDiscountValue","formatted","doubleCurrency","$doubleCurrencyContainer","innerContent","New","isGreen","small","title","partTypes","comp","percentage","material","endTag","mainComposition","primaryImageUrls","slick","selectedProductUrl","large","imageUrl","idx","$carouselInner","$imgContainer","slidesToShow","slidesToScroll","dots","arrows","infinite","responsive","breakpoint","settings","resizedUrls","sizes","scaleWidth","$imgContainerDesktop","$imgZoomModal","$imgZoomModalMobile","newCarouselSlideHtml","replaceAll","$galleryItemContainer","$zoomTemplate","videoUrl","videoURL","tmpl","clone","setAttribute","$secondItem","insertAfter","videoBlock","load","autoplay","videoListener","updatePrimaryImagesSlider","careAndMaintenance","countryEnabled","PersonalizationEnabledCountries","isPersonalizedVal","positions","showButton","updateModelSize","modelSize","promotionClass","cleanId","allocation","comingSoons","customizations","personalizationImgTop","personalizationImgDown","link","linkPlp","optionsHtml","getAddToCartUrl","$html","parseHTML","$results","undefined","handlePostCartAdd","cookies","cookieSizebaySessionId","startsWith","urlSessionId","getAttribute","fetch","ok","Error","json","createCookie","callSizebayAPI","brandURL","currentCountry","includes","permaURL","urlSizebay","URL","searchParams","has","set","device","referrerURL","referrerPolicy","headers","accept","tenant_id","referer","hostname","updateQuantityPicker","source","calculateWatchedTime","video","currentTime","duration","triggerVideoInteractionEvent","action","fullPageLoad","$videoBlockContainer","$videoPlayMiniatureIcon","percentageWatched","firstPlayback","watchedFullVideo","videoStartInSeconds","videoEndInSeconds","myVideo","onended","onplaying","onpause","loop","pause","paused","play","reorderSwatches","$swatchContainer","$soldoutColorsContainers","$lastNonSoldoutColorContainer","not","last","freeGiftDetailsModal","bonusProductModal","methods","colorAttribute","colorAttributeQuickAddListing","sizeAttribute","sizeAttributeQuickAddListing","sizeAttributeQuickAddPDP","sizeAttributeSet","addToCart","careAndMaintenanceClick","personalizationButton","sizeTU","quickAddListener","NotifyHelper","notifyMeModal","checkSoldoutAvailability","SmartGiftHelper","run","registerAttributionTokenSending","loadGoogleRecommendations","createNextPageToken","isSizeSelected","newModalFromString","runPersonalizationListener","description","firstPart","firstPartSplit","firstPartSKU","productId","first","colorValue","selectedColor","updateProductDetailUrl","$productTile","startCarouselTileImageFunction","selectedValue","isPdp","isPeronalizePage","sizeData","skuData","decodeURI","splitSkuData","originalEvent","code","$sizeSelected","addToCartFromListing","$button","$target","$input","newValue","addToCartUrl","pidsObj","setPids","_openStickySizeSelectorModal","isPersonalizedProduct","personalizationTextFont","personalizationText","personalizationTextColor","personalizationColorPref","PersonalizationColor","personalizationColor","personalizationColorJson","alt","src","lastIndexOf","personalizationPositionKey","customizationClassPref","CustomizationClass","customizationClass","customizationClassJson","category","personalizationTextSVG","personalizationFullSVG","personalizationSmallSVG","uniqueIdentifiers","random","Math","personalizedObj","isDate","isLove","GTMItemListName","GTMItemListId","GTMIndex","uniqueIdentifier","toggle","is","animate","scrollTop","offset","qty","pidSet","uid","buttonAdd","promoId","childProducts","uuid","completePromoItems","completePromoItemsLabel","quantityTotal","cart","numItems","cartModel","click","mustAdd","showQuickAddItems","sizeChecked","quantitySelected","attributesUpdateUrl","attributionToken","$googleConfig","servingConfig","nodeToAppendTo","cgid","route","appendTo","$googleAttributionToken","previousPageToken","searchTerm","displayMessageAndChangeIcon","icon","isAddAction","wishlistTotal","sender","updateAriaLabelForWishlistLink","blur","offsetTop","closeNotification","setTimeout","showWishlistNotification","renderedTemplate","newItems","oldItems","oldIdx","splice","updateWishlistInternalState","addDefinitelyToWishlist","productID","btn","addURL","removeURL","optionId","optionVal","shouldAdd","isAdding","added","labelAddWishlist","labelRemoveWishlist","checkItemInWishlist","itemCode","highlightIconsForAllItemsInWishlist","itemsInWishlist","plpWishlist","productDetailWishlist","moveToWishlistHelper","$btn","moveToWishlistHelperSaveForLater","addToWishlist","sizeModal","newModalFromSelector","$clickedButton","sizeValue","$inputToClick","_","getCountryAndLang","country","contentLang","language","countryList","getQueryMinimumLength","countryAndLang","minimumLength","localitiesWidgetFindInStore","woosmap","localities","Autocomplete","addListener","selection","getSelectedSuggestionDetails","_e","removeListener","resultsContainer","localitiesWidgetUPS","localitiesWidgetInPost","localitiesWidgetBRT","localitiesWidgetPPL","localitiesWidgetDHL","localitiesWidgetDPD","localitiesWidgetMenu","inputValue","selectionMenu","filterByCountry","config","localitiesWidgetFindYourStore","predictions","localitiesWidgetSPS","isReturnFlow","className","_initWoosmap","localitiesWidgetFooter","localitiesWidgetRUPup","localitiesWidgetHermes","localitiesWidgetCollisimo","localitiesWidgetPDB","shippingMethodType","localitiesWidget","pudoModalSelector","chooseOptionSelector","global","sqrt","atan2","pow","PiBy180","PiBy2","couldUseAttachEvent","parseEl","supportsOpacity","supportsFilters","reOpacity","setOpacity","proto","toFixed","min","max","degreesToRadians","originXOffset","originYOffset","fabric","version","HTMLDocument","Document","implementation","createHTMLDocument","virtualWindow","require","JSDOM","decodeURIComponent","features","FetchExternalResources","jsdomImplForWrapper","implForWrapper","nodeCanvas","Canvas","DOMParser","copyGLTo2DDrawImage","gl","pipelineState","glCanvas","canvas","targetCanvas","ctx","getContext","translate","height","scale","sourceY","drawImage","copyGLTo2DPutImageData","dWidth","destinationWidth","dHeight","destinationHeight","numBytes","u8","Uint8Array","imageBuffer","u8Clamped","Uint8ClampedArray","readPixels","RGBA","UNSIGNED_BYTE","imgData","ImageData","putImageData","isTouchSupported","isLikelyNode","Buffer","SHARED_ATTRIBUTES","DPI","reNum","rePathCommand","reNonWord","fontPaths","iMatrix","svgNS","perfLimitSizeTotal","maxCacheSideLimit","minCacheSideLimit","charWidthsCache","textureSize","disableStyleCopyPaste","enableGLFiltering","devicePixelRatio","webkitDevicePixelRatio","mozDevicePixelRatio","browserShadowBlurConstant","arcToSegmentsCache","boundsOfCurveCache","cachesBoundsOfCurve","forceGLPutImageData","initFilterBackend","isWebglSupported","maxTextureSize","WebglFilterBackend","tileSize","Canvas2dFilterBackend","_removeEventListener","eventName","handler","__eventListeners","eventListener","util","array","fill","observe","stopObserving","fire","listenersForEvent","len","Observable","Collection","_objects","apply","_onObjectAdded","renderOnAddRemove","requestRenderAll","insertAt","nonSplicing","objects","somethingRemoved","_onObjectRemoved","forEachObject","callback","getObjects","concat","isEmpty","complexity","reduce","memo","current","CommonMethods","_setOptions","_initGradient","filler","colorStops","Gradient","_initPattern","Pattern","_initClipping","clipTo","functionBody","getFunctionBody","Function","_setObject","_set","PI","cos","angle","sin","sign","removeFromArray","getRandomInt","floor","degrees","radiansToDegrees","radians","rotatePoint","point","origin","subtractEquals","v","rotateVector","Point","y","addEquals","vector","transformPoint","ignoreOffset","makeBoundingBoxFromPoints","points","transform","xPoints","minX","yPoints","minY","invertTransform","fractionDigits","Number","parseUnit","fontSize","unit","exec","Text","DEFAULT_SVG_FONT_SIZE","falseFunction","getKlass","namespace","string","camelize","charAt","slice","resolveNamespace","getSvgAttributes","attributes","loadImage","crossOrigin","img","createImage","onLoadCallback","onload","onerror","loadImageInDom","div","position","enlivenObjects","reviver","enlivenedObjects","numLoadedObjects","numTotalObjects","onLoaded","fromObject","enlivenPatterns","patterns","numLoadedPatterns","numPatterns","enlivenedPatterns","pattern","groupSVGElements","elements","path","centerPoint","Group","sourcePath","populateWithProperties","destination","properties","drawDashedLine","x2","y2","da","dx","dy","rot","dc","di","draw","save","moveTo","rotate","restore","createCanvasElement","copyCanvasElement","newCanvas","toDataURL","canvasEl","format","quality","clipContext","receiver","beginPath","clip","multiplyTransformMatrices","b","is2x2","qrDecompose","denom","scaleX","scaleY","skewX","skewY","translateX","translateY","calcRotateMatrix","theta","calcDimensionsMatrix","scaleMatrix","flipX","flipY","multiply","tan","composeMatrix","matrix","customTransformMatrix","resetObjectTransform","saveObjectTransform","fn","isTransparent","tolerance","_isTransparent","imageData","getImageData","parsePreserveAspectRatioAttribute","attribute","align","meetOrSlice","aspectRatioAttrs","alignX","alignY","clearFabricFontCache","fontFamily","limitDimsByArea","ar","maximumArea","roughWidth","perfLimitSizeY","capValue","findScaleToFit","findScaleToCover","matrixToSVG","NUM_FRACTION_DIGITS","_join","arcToSegments","toX","toY","rx","ry","sweep","rotateX","argsString","th","sinTh","cosTh","fromX","fromY","px","py","rx2","abs","ry2","py2","px2","pl","root","cx","cy","cx1","cy1","mTheta","calcVectorAngle","dtheta","segments","ceil","result","mDelta","mT","th3","segmentToBezier","th2","costh2","sinth2","costh3","sinth3","ux","uy","vx","vy","ta","tb","getBoundsOfCurve","x0","y0","x1","y1","x3","y3","t1","t2","b2ac","sqrtb2ac","tvalues","bounds","mt","jlen","drawArc","fx","fy","coords","segs","segsNorm","bezierCurveTo","getBoundsOfArc","tx","ty","bound","byProperty","condition","invoke","args","value1","value2","extend","deep","Element","getWholeChar","charCodeAt","isNaN","prev","character","capitalize","firstLetterOnly","escapeXml","graphemeSplit","textstring","chr","graphemes","emptyFunction","IS_DONTENUM_BUGGY","addMethods","klass","superclass","constructor","returnValue","valueOf","Subclass","callSuper","methodName","parentMethod","_this","superClassMethod","createClass","initialize","subclasses","attachEvent","getPointer","event","scroll","getScrollLeftTop","_evt","touchProp","changedTouches","getTouchInfo","clientY","opacity","es","currentStyle","hasLayout","zoom","test","setStyle","styles","elementStyle","cssText","styleFloat","_slice","sliceCanConvertNodelists","getElementStyle","selectProp","toArray","arrayLike","childNodes","makeElement","tagName","htmlFor","docElement","documentElement","scrollLeft","nodeType","arr","defaultView","getComputedStyle","makeElementUnselectable","onselectstart","unselectable","makeElementSelectable","getScript","headEl","getElementsByTagName","scriptEl","loading","onreadystatechange","readyState","getById","wrapElement","wrapper","replaceChild","getElementOffset","docElem","scrollLeftTop","doc","ownerDocument","box","offsetAttributes","borderLeftWidth","borderTopWidth","paddingLeft","paddingTop","getBoundingClientRect","clientLeft","clientTop","getNodeCanvas","impl","_canvas","_image","cleanUpJsdomNode","_currentSrc","_attributes","_classList","emptyFn","request","onComplete","xhr","XMLHttpRequest","parameters","addParamToUrl","setRequestHeader","send","noop","defaultEasing","_requestAnimFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","_cancelAnimFrame","cancelAnimationFrame","clearTimeout","requestAnimFrame","timestamp","time","finish","onChange","abort","easing","startValue","endValue","byValue","onStart","tick","ticktime","timePerc","valuePerc","cancelAnimFrame","animateColor","fromColor","toColor","startColor","Color","getSource","endColor","begin","end","pos","posValue","colorEasing","normalize","asin","elastic","easeInBounce","easeOutBounce","ease","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInOutBounce","attributesMap","visibility","colorAttributes","stroke","fSize","cPath","normalizeAttr","normalizeValue","parentAttributes","parsed","transformMatrix","parseTransformAttribute","visible","fillIndex","strokeIndex","getSvgRegex","RegExp","_getMultipleNodes","nodeNames","nodeName","nodeList","nodeArray","elementMatchesRule","selectors","firstMatching","parentMatching","selectorMatches","doesSomeParentMatch","matcher","classNames","elementById","node","nodelist","svgValidTagNamesRegEx","svgViewBoxElementsRegEx","svgInvalidAncestorsRegEx","svgValidParentsRegEx","cssRules","gradientDefs","clipPaths","skewMatrix","commaWsp","reTransformList","reTransform","attributeValue","matrices","translateMatrix","rotateMatrix","multiplierX","multiplierY","combinedMatrix","reViewBoxAttrValue","applyViewboxTransform","viewBoxWidth","viewBoxHeight","viewBoxAttr","widthAttr","heightAttr","preserveAspectRatio","missingViewBox","missingDimAttr","toBeParsed","parsedDim","widthDiff","heightDiff","viewboxTransform","createElementNS","recursivelyParseGradientsXlink","gradient","xlinkAttr","referencedGradient","hasAttribute","referenceClone","cloneNode","parseSVGDocument","parsingOptions","xlink","el2","currentTrans","oldLength","el3","setAttributeNS","nodeValue","parseUseDirectives","svgUid","__uid","descendants","selectNodes","hasAncestorWithNodeName","getGradientDefs","getCSSRules","parseElements","instances","reFontDeclaration","parseFontDeclaration","oStyle","fontStyle","fontWeight","lineHeight","elList","parseAttributes","parentFontSize","ownAttributes","cssAttrs","rule","getGlobalStylesForElement","parseStyleAttribute","normalizedAttr","normalizedValue","normalizedStyle","font","mergedAttrs","setAlpha","getAlpha","toRgba","_setStrokeFillOpacity","ElementsParser","chunk","pair","parseStyleString","parseStyleObject","parsePointsAttribute","parsedPoints","allRules","styleContents","textContent","ruleObj","propertyValuePairs","_rule","loadSVGFromURL","xml","responseXML","ActiveXObject","responseText","async","loadXML","results","_options","allElements","loadSVGFromString","parser","parseFromString","regexUrl","numElements","createObjects","createObject","findTag","fromElement","createCallback","checkIfDone","resolveGradient","Image","_originalElement","_removeTransformMatrix","resolveClipPath","extractPropertyDefinition","storage","regex","lastIndex","gradientDef","opacityAttr","createClipPathCallback","_newObj","fillRule","clipRule","usingElement","objTransformInv","gTransform","clipPath","calcTransformMatrix","clipPathTag","clipPathOwner","setPositionByOrigin","that","scalarAdd","scalar","scalarAddEquals","subtract","scalarSubtract","scalarSubtractEquals","multiplyEquals","divide","divideEquals","lt","lte","gt","gte","lerp","distanceFrom","midPointFrom","setXY","setX","setY","setFromPoint","swap","Intersection","status","appendPoint","appendPoints","intersectLineLine","a1","a2","b1","b2","uaT","ubT","uB","ua","ub","intersectLinePolygon","inter","intersectPolygonPolygon","points1","points2","intersectPolygonRectangle","r1","r2","topRight","bottomLeft","inter1","inter2","inter3","inter4","_tryParsingColor","setSource","hue2rgb","q","colorNameMap","sourceFromHex","sourceFromRgb","sourceFromHsl","_rgbToHsl","g","round","_source","toRgb","toHsl","hsl","toHsla","toHex","toHexa","alpha","toGrayscale","average","currentAlpha","toBlackWhite","threshold","overlayWith","otherColor","otherSource","reRGBa","reHSLa","reHex","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","fromRgb","fromSource","fromRgba","fromHsl","fromHsla","fromHex","isShortNotation","isRGBa","oColor","getColorStop","multiplier","colorAlpha","keyValuePairs","__convertPercentUnitsToValues","instance","svgOptions","gradientUnits","propValue","finalValue","offsetX","offsetY","gradientTransform","addColorStop","toObject","propertiesToInclude","toSVG","markup","commonAttributes","needsSwap","withViewport","additionalTransform","sort","pathOffset","reverse","minRadius","percentageShift","colorStop","toLive","stops","createLinearGradient","createRadialGradient","colorStopEls","getLinearCoords","getRadialCoords","forObject","repeat","patternTransform","setOptions","patternSource","patternWidth","patternHeight","patternOffsetX","patternOffsetY","patternImgSrc","complete","naturalWidth","naturalHeight","createPattern","Shadow","affectStroke","includeDefaultValues","nonScaling","_parseShadow","shadow","shadowStr","offsetsAndBlur","reOffsetsAndBlur","fBoxX","fBoxY","StaticCanvas","CANVAS_INIT_ERROR","renderAndResetBound","renderAndReset","requestRenderAllBound","_initStatic","backgroundColor","backgroundImage","overlayColor","overlayImage","stateful","controlsAboveOverlay","allowTouchScrolling","imageSmoothingEnabled","viewportTransform","backgroundVpt","overlayVpt","onBeforeScaleRotate","enableRetinaScaling","vptCoords","skipOffscreen","cb","_createLowerCanvas","_initOptions","_setImageSmoothing","interactive","_initRetinaScaling","setOverlayImage","setBackgroundImage","setBackgroundColor","setOverlayColor","calcOffset","_isRetinaScaling","getRetinaScaling","scaleRatio","__initRetinaScaling","lowerCanvasEl","contextContainer","upperCanvasEl","contextTop","_offset","image","__setBgOverlayImage","__setBgOverlayColor","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","msImageSmoothingEnabled","oImageSmoothingEnabled","_createCanvasElement","_applyCanvasStyle","getWidth","getHeight","setWidth","setDimensions","setHeight","dimensions","cssValue","cssOnly","_setBackstoreDimension","hasLostContext","backstoreOnly","_setCssDimension","_isCurrentlyDrawing","freeDrawingBrush","_setBrushStyles","cacheCanvasEl","wrapperEl","getZoom","setViewportTransform","vpt","activeObject","_activeObject","group","setCoords","calcViewportBoundaries","zoomToPoint","before","setZoom","absolutePan","relativePan","getElement","setupState","clearContext","clearRect","clear","_hasITextHandlers","_mouseUpITextHandler","_iTextInstances","renderAll","canvasToDrawOn","renderCanvas","isRendering","iVpt","tl","br","tr","bl","cancelRequestedRender","_renderBackground","_renderObjects","drawControls","shouldCache","_transformDone","renderCache","forClipping","drawClipPathOnCanvas","_renderOverlay","globalCompositeOperation","zoomX","zoomY","_cacheCanvas","cacheTranslationX","cacheTranslationY","render","_renderBackgroundOrOverlay","needsVpt","lineTo","closePath","fillStyle","getCenter","centerObjectH","_centerObject","getCenterPoint","centerObjectV","centerObject","center","viewportCenterObject","vpCenter","getVpCenter","viewportCenterObjectH","viewportCenterObjectV","toDatalessJSON","toDatalessObject","_toObjectMethod","_toObjects","_toObject","__serializeBgOverlay","excludeFromExport","originalValue","bgImage","overlay","background","svgViewportTransformation","_setSVGPreamble","_setSVGHeader","clipPathId","_setSVGBgOverlayColor","_setSVGBgOverlayImage","_setSVGObjects","suppressPreamble","encoding","viewBox","createSVGFontFacesMarkup","createSVGRefElementsMarkup","createSVGClipPathMarkup","toClipPathSVG","shouldTransform","row","rowIndex","charIndex","fontList","_setSVGObject","finalWidth","finalHeight","sendToBack","objs","activeSelection","unshift","bringToFront","sendBackwards","intersecting","newIdx","objsMoved","_findNewLowerIndex","intersectsWithObject","isContainedWithinObject","bringForward","_findNewUpperIndex","dispose","DataURLExporter","EMPTY_JSON","supports","setLineDash","toJSON","createPNGStream","createJPEGStream","BaseBrush","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeDashArray","setShadow","strokeStyle","lineWidth","lineCap","miterLimit","lineJoin","_saveAndTransform","_setShadow","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","needsFullRender","_resetShadow","PencilBrush","decimate","_points","_drawSegment","p1","p2","midPoint","quadraticCurveTo","onMouseDown","pointer","_isMainEvent","_prepareForDrawing","_captureDrawingPath","_render","onMouseMove","oldEnd","onMouseUp","_finalizeAndAddPath","_reset","_addPoint","pointerPoint","convertPointsToSVGPath","multSignX","multSignY","manyPoints","createPath","pathData","Path","strokeWidth","decimatePoints","distance","adjustedDistance","lastPoint","newPoints","CircleBrush","drawDot","addPoint","dot","arc","radius","originalRenderOnAddRemove","circles","circle","Circle","originX","originY","circleRadius","circleColor","SprayBrush","density","dotWidth","dotWidthVariance","randomOpacity","optimizeOverlapping","sprayChunks","addSprayChunk","sprayChunkPoints","rects","ilen","sprayChunk","rect","Rect","_getOptimizedRects","uniqueRects","uniqueRectsArray","globalAlpha","fillRect","PatternBrush","getPatternSrc","patternCanvas","patternCtx","getPatternSrcFunction","getPattern","topLeft","_getLeftTopCoords","supportLineDash","STROKE_OFFSET","_initInteractive","_createCacheCanvas","uniScaleTransform","uniScaleKey","centeredScaling","centeredRotation","centeredKey","altActionKey","selectionKey","altSelectionKey","selectionColor","selectionDashArray","selectionBorderColor","selectionLineWidth","selectionFullyContained","hoverCursor","moveCursor","defaultCursor","freeDrawingCursor","rotationCursor","notAllowedCursor","containerClass","perPixelTargetFind","targetFindTolerance","skipTargetFind","isDrawingMode","preserveObjectStacking","snapAngle","snapThreshold","stopContextMenu","fireRightClick","fireMiddleClick","targets","_hoveredTarget","_hoveredTargets","_currentTransform","_groupSelector","_initWrapperElement","_createUpperCanvas","_initEventListeners","_chooseObjectsToRender","objsToRender","activeGroupObjects","activeObjects","getActiveObjects","contextTopDirty","renderTopLayer","_drawSelection","renderTop","_resetCurrentTransform","original","_shouldCenterTransform","mouseXSign","mouseYSign","containsPoint","xy","_normalizePointer","_findTargetCorner","invertedM","vptPointer","restorePointerVpt","isTargetTransparent","normalizedPointer","targetRelativeX","targetRelativeY","_cacheContext","contextCache","originalColor","selectionBackgroundColor","_renderControls","hasBorders","transparentCorners","_isSelectionKeyPressed","_shouldClearSelection","evented","centerTransform","altKey","_getOriginFromCorner","corner","_getActionFromCorner","alreadySelected","_setupCurrentTransform","ex","ey","lastX","lastY","shiftKey","_beforeTransform","_translateObject","newLeft","newTop","moveX","moveY","_changeSkewTransformOrigin","mouseMove","by","origins","0","skew","originA","originB","flipSign","skewSign","_skewObject","skewed","lockSkewingX","lockSkewingY","actualMouseByOrigin","constraintPosition","actualMouseByCenter","toLocalPoint","lastMouseByCenter","dim","_getTransformedDimensions","translateToOriginPoint","_setObjectSkew","localMouse","_dim","newDim","dimNoSkew","otherBy","_otherBy","_by","newDimMouse","atan","_scaleObject","lockScalingX","lockScalingY","lockScalingFlip","scaled","_setLocalMouse","_setObjectScale","forbidScalingX","forbidScalingY","changeX","changeY","newScaleX","newScaleY","Textbox","w","getMinWidth","_scaleObjectEqually","_flipObject","dist","lastDist","signX","signY","padding","_rotateObject","lockRotation","lastAngle","curAngle","hasRotated","rightAngleLocked","leftAngleLocked","setCursor","cursor","groupSelector","aleft","atop","_setLineDash","strokeRect","findTarget","skipGroup","activeTarget","activeTargetSubs","aObjects","_searchPossibleTargets","_checkTarget","globalPointer","isEditing","subTarget","objToCheck","pointerToUse","subTargetCheck","ignoreZoom","_absolutePointer","_pointer","cssScale","boundsWidth","boundsHeight","bottom","right","retinaScaling","lowerCanvasClass","_copyCanvasStyle","fromEl","toEl","getSelectionContext","getSelectionElement","getActiveObject","active","_discardActiveObject","_fireSelectionEvents","oldObjects","somethingChanged","removed","opt","oldObject","deselected","updated","setActiveObject","currentActives","_setActiveObject","onSelect","onDeselect","discardActiveObject","removeListeners","originalProperties","_realizeGroupTransformOnObject","_unwindGroupTransformOnObject","originalValues","realizeTransform","clearContextTop","cursorOffset","mr","mb","ml","addEventOptions","passive","checkClick","button","cursorMap","mainTouchId","_bindEvents","addOrRemove","_getEventPrefix","enablePointerEvents","functor","eventjsFunctor","canvasElement","eventTypePrefix","_onResize","_onMouseDown","_onMouseMove","_onMouseOut","_onMouseEnter","_onMouseWheel","_onContextMenu","_onDoubleClick","_onDragOver","_onDragEnter","_onDragLeave","_onDrop","_onTouchStart","eventjs","_onGesture","_onDrag","_onOrientationChange","_onShake","_onLongPress","_onMouseUp","_onTouchEnd","eventsBound","_simpleEventHandler","self","__onTransformGesture","__onDrag","__onMouseWheel","_target","hiddenTextarea","focus","currentTransform","__onOrientationChange","__onShake","__onLongPress","_fireEnterLeaveEvents","_cacheTransformEventData","_handleEvent","_resetTransformEventData","getPointerId","evt","identifier","pointerId","isPrimary","touches","__onMouseDown","__onMouseUp","_willAddMouseDown","__onMouseMove","_shouldRender","shouldRender","isClick","_onMouseUpInDrawingMode","_finalizeCurrentTransform","actionPerformed","_maybeGroupObjects","isMoving","_setCursorFromEvent","__corner","eventType","subTargets","absolutePointer","_scaling","hasStateChanged","_addEventOptions","_fire","_onMouseDownInDrawingMode","_onMouseMoveInDrawingMode","_previousPointer","shouldGroup","_shouldGroup","_handleGrouping","saveState","_transformObject","_fireOverOutEvents","fireSyntheticInOutEvents","oldTarget","evtOut","canvasEvtOut","evtIn","canvasEvtIn","_draggedoverTarget","inOpt","outOpt","inFires","targetChanged","previousTarget","nextTarget","reset","_beforeScaleTransform","_performTransformAction","_onScale","_isUniscalePossible","currentAction","getCornerCursor","actionIsDisabled","_getRotatedCornerCursor","hasRotatingPoint","_updateActiveSelection","_createActiveSelection","currentActiveObjects","removeWithUpdate","addWithUpdate","_createGroup","groupObjects","exitEditing","ActiveSelection","_groupSelectedObjects","aGroup","_collectObjects","currentObject","selectionX1Y1","selectionX2Y2","allowIntersect","intersectsWithRect","isContainedWithinRect","toCanvasElement","cropping","scaledWidth","scaledHeight","originalWidth","originalHeight","newZoom","vp","originalInteractive","newVp","originalRetina","originalContextTop","loadFromDatalessJSON","loadFromJSON","serialized","_enlivenObjects","_setBgOverlay","enlivenedCanvasClip","__setupCanvas","loaded","cbIfLoaded","__setBgOverlay","enlivedObject","_toDataURL","_toDataURLWithMultiplier","toDataURLWithMultiplier","cloneWithoutData","backgroundImageOpacity","backgroundImageStretch","supportsLineDash","objectCaching","cornerSize","borderColor","borderDashArray","cornerColor","cornerStrokeColor","cornerStyle","cornerDashArray","strokeDashOffset","borderOpacityWhenMoving","borderScaleFactor","minScaleLimit","hasControls","rotatingPointOffset","lockMovementX","lockMovementY","lockUniScaling","statefullCache","noScaleCache","strokeUniform","dirty","paintFirst","stateProperties","cacheProperties","inverted","absolutePositioned","_cacheProperties","_updateCacheCanvas","_limitCacheSize","dims","limitedDims","capped","_getCacheCanvasDimensions","objectScale","getTotalObjectScaling","neededX","neededY","drawingWidth","drawingHeight","minCacheSize","dimensionsChanged","cacheWidth","cacheHeight","zoomChanged","shouldRedraw","additionalWidth","additionalHeight","shouldResizeCanvas","canvasWidth","canvasHeight","sizeGrowing","setTransform","calcOwnMatrix","_removeDefaultValues","getObjectScaling","retina","getObjectOpacity","shouldConstrainValue","isChanged","groupNeedsUpdate","_constrainScale","isOnACache","setOnGroup","getViewportTransform","isNotVisible","isOnScreen","_setupCompositeOperation","drawSelectionBackground","_setOpacity","drawCacheOnCanvas","_removeCacheCanvas","drawObject","propertySet","isCacheDirty","hasStroke","hasFill","needsItsOwnCache","ownCaching","willDrawShadow","drawClipPathOnCache","originalFill","originalStroke","_setClippingProperties","_setStrokeStyles","_setFillStyles","_drawClipPath","skipCanvas","_getNonTransformedDimensions","_removeShadow","decl","lineDashOffset","dashArray","alternative","styleOverride","drawBorders","forActiveSelection","drawBordersInGroup","scaling","multX","multY","_applyPatternGradientTransform","_renderPaintInOrder","_renderStroke","_renderFill","_renderDashedStroke","_applyPatternForTransformedGradient","pCtx","pCanvas","_findCenterFromElement","_assignTransformMatrixProps","preserveAspectRatioOptions","cropX","cropY","objectForm","_fromObject","cloneAsImage","utils","origParams","originalGroup","originalShadow","withoutTransform","withoutShadow","boundingRect","getBoundingRect","shadowOffset","originalCanvas","isType","setGradient","setPatternFill","setColor","shouldCenterOrigin","_setOriginToCenter","_resetOrigin","centerH","viewportCenterH","centerV","viewportCenterV","viewportCenter","getLocalPointer","pClicked","objectLeftTop","createAccessors","extraParam","enlivedProps","translateToGivenOrigin","fromOriginX","fromOriginY","toOriginX","toOriginY","translateToCenterPoint","leftTop","getPointByOrigin","adjustPosition","to","offsetFrom","offsetTo","hypotFull","getScaledWidth","xFull","yFull","_originalOriginX","_originalOriginY","originPoint","multiplyMatrices","oCoords","aCoords","ownMatrixCache","matrixCache","getCoords","absolute","calculate","calcCoords","pointTL","pointBR","other","lines","_getImageLines","_findCrossPoints","_containsCenterOfCanvas","isPartiallyOnScreen","topline","rightline","bottomline","leftline","xi","iLine","xcount","lineKey","getScaledHeight","scaleToWidth","boundingRectFactor","scaleToHeight","_calcRotateMatrix","_calcTranslateMatrix","startMatrix","finalMatrix","cosP","sinP","cosPSinP","cosPMinusSinP","mtr","skipAbsolute","_setCornerCoords","transformMatrixKey","sep","prefix","cache","tMatrix","_calcDimensionsTransformMatrix","flipping","dimX","dimY","noSkew","_finalizeDimensions","bbox","_calculateCurrentDimensions","getSvgColorString","getSvgStyles","skipShadow","getSvgFilter","getSvgSpanStyles","useWhiteSpace","term","textDecoration","getSvgTextDecoration","deltaY","decoration","getSvgCommons","getSvgTransform","full","getSvgTransformMatrix","_setSVGBg","textBgRects","_getFillAttributes","_createBaseSVGMarkup","_toSVG","_createBaseClipPathSVGMarkup","objectMarkup","commonPieces","clipPathMarkup","noStyle","styleInfo","shadowInfo","withShadow","vectorEffect","absoluteClipPath","addPaintOrder","originalSet","saveProps","props","tmpObj","_isEqual","origValue","currentValue","firstPass","dashedPropertySet","_controlsVisibility","isControlVisible","newTheta","cornerHypotenuse","cosHalfOffset","sinHalfOffset","wh","drawRotatingPoint","rotateHeight","scaleOffset","_drawControl","control","controlName","_getControlsVisibility","setControlVisible","setControlsVisibility","FX_DURATION","fxCenterObjectH","callbacks","fxCenterObjectV","fxRemove","skipCallbacks","propsToAnimate","_animate","propPair","from","valueProgress","timeProgress","coordProps","makeEdgeToOriginGetter","propertyNames","originValues","axis1","axis2","dimension","nearest","farthest","Line","_setWidthHeight","_getLeftToOriginX","_getTopToOriginY","calcLinePoints","origStrokeStyle","xMult","yMult","ATTRIBUTE_NAMES","parsedAttributes","pi","startAngle","endAngle","setRadius","svgString","startX","startY","endX","endY","largeFlag","getRadiusX","getRadiusY","Triangle","widthBy2","heightBy2","piBy2","Ellipse","getRx","getRy","_initRxRy","isRounded","Polyline","_setPositionDimensions","correctLeftTop","calcDim","_calcDimensions","fromSVG","diffX","diffY","commonRender","fromElementGenerator","_class","Polygon","_toString","commandLengths","repeatedCommands","M","fromArray","_parsePath","_renderPathCommands","tempX","tempY","previous","subpathStartX","subpathStartY","controlX","controlY","_getOffsetTransform","digits","currentPath","coordsStr","coordsParsed","re","command","commandLength","repeatedCommand","klen","aX","aY","pathUrl","useSetOnGroup","isAlreadyGrouped","_updateObjectsACoords","_calcBounds","_updateObjectsCoords","_updateObjectCoords","objectLeft","objectTop","_restoreObjectsState","_includeDefaultValues","objsToObject","originalDefaults","_obj","ownCache","_restoreObjectState","toActiveSelection","ungroupOnCanvas","setObjectsCoords","onlyWidthHeight","iLen","jLen","_getBounds","minXY","maxXY","enlivedClipPath","toGroup","newGroup","childrenOverride","srcFromAttribute","_lastScaleX","_lastScaleY","_filterScalingX","_filterScalingY","minimumScaleTrigger","cacheKey","filters","_initElement","_element","setElement","removeTexture","_initConfig","applyFilters","resizeFilter","applyResizeFilters","backend","filterBackend","evictCachesForKey","setCrossOrigin","getOriginalSize","_stroke","filterObj","getSrc","hasCrop","strokeSvg","imageMarkup","getSvgSrc","origFill","filtered","setSrc","minimumScale","elementToFilter","_filteredEl","sourceWidth","sourceHeight","isNeutralState","imgElement","_needsResize","elementToDraw","elWidth","elHeight","sX","sY","sW","sH","maxDestW","maxDestH","_resetWidthHeight","CSS_CANVAS","_initFilters","pAR","rWidth","rHeight","pWidth","pHeight","_object","resizeFilters","fromURL","imgOptions","_getAngleValueForStraighten","straighten","fxStraighten","straightenObject","fxStraightenObject","testPrecision","precision","fragmentSource","fragmentShader","createShader","FRAGMENT_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","setupGLContext","captureGPUInfo","isSupported","getParameter","MAX_TEXTURE_SIZE","precisions","webGlPrecision","createWebGLCanvas","aPosition","Float32Array","chooseFastestCopyGLTo2DMethod","canUseImageData","canMeasurePerf","performance","canUseArrayBuffer","ArrayBuffer","canUseUint8Clamped","copyGLTo2D","startTime","drawImageTime","testContext","now","glOptions","premultipliedAlpha","depth","stencil","antialias","clearColor","cachedTexture","getCachedTexture","sourceTexture","createTexture","targetTexture","originalTexture","passes","webgl","programCache","pass","tempFbo","createFramebuffer","bindFramebuffer","FRAMEBUFFER","applyTo","resizeCanvasIfNeeded","bindTexture","TEXTURE_2D","deleteTexture","deleteFramebuffer","clearWebGLCaches","textureCache","textureImageSource","texture","texParameteri","TEXTURE_MAG_FILTER","NEAREST","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","texImage2D","uniqueId","gpuInfo","renderer","vendor","ext","getExtension","UNMASKED_RENDERER_WEBGL","UNMASKED_VENDOR_WEBGL","sourceElement","originalEl","originalImageData","BaseFilter","vertexSource","createProgram","vertexShader","VERTEX_SHADER","getShaderInfoLog","program","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","attributeLocations","getAttributeLocations","uniformLocations","getUniformLocations","uStepW","getUniformLocation","uStepH","getAttribLocation","sendAttributeData","aPositionData","attributeLocation","buffer","createBuffer","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","vertexAttribPointer","FLOAT","bufferData","STATIC_DRAW","_setupFrameBuffer","framebufferTexture2D","COLOR_ATTACHMENT0","_swapTextures","temp","main","mainParameter","applyToWebGL","applyTo2d","retrieveShader","shader","useProgram","uniform1f","sendUniformData","viewport","drawArrays","TRIANGLE_STRIP","bindAdditionalTexture","textureUnit","activeTexture","TEXTURE0","unbindAdditionalTexture","getMainParameter","setMainParameter","createHelpLayer","helpLayer","mainP","ColorMatrix","colorsOnly","uColorMatrix","uConstants","constants","uniformMatrix4fv","uniform4fv","Brightness","brightness","uBrightness","Convolute","opaque","Convolute_3_1","Convolute_3_0","Convolute_5_1","Convolute_5_0","Convolute_7_1","Convolute_7_0","Convolute_9_1","Convolute_9_0","dstOff","scx","scy","srcOff","wt","weights","side","halfSide","sw","sh","output","createImageData","dst","alphaFac","uMatrix","uOpaque","uHalfSize","uSize","uniform1fv","Grayscale","lightness","luminosity","uMode","uniform1i","Invert","invert","uInvert","Noise","noise","rand","uNoise","uSeed","Pixelate","blocksize","_i","_j","_iLen","_jLen","uBlocksize","RemoveColor","useAlpha","lowC","highC","uLow","uHigh","Brownie","Vintage","Kodachrome","Technicolor","Polaroid","Sepia","BlackWhite","BlendColor","screen","diff","lighten","darken","exclusion","tint","buildSource","tg","alpha1","uColor","BlendImage","mask","TEXTURE1","calculateMatrix","canvas1","blendData","blendImage","uTransformMatrix","uImage","uniformMatrix3fv","Resize","resizeType","lanczosLobes","uDelta","uTaps","uniform2fv","horizontal","taps","filterWindow","getFilterWindow","generateShader","tempScale","getTaps","lobeFunction","lanczosCreate","offsets","fragmentSourceTOP","dW","dH","lobes","xx","rcpScaleX","rcpScaleY","newData","oW","oH","sliceByTwo","hermiteFastResize","bilinearFiltering","lanczosResize","tmpCanvas","mult","doneW","doneH","stepW","stepH","dX","dY","srcData","destImg","destData","lanczos","ratioX","ratioY","rcpRatioX","rcpRatioY","range2X","range2Y","cacheLanc","icenter","process","u","weight","fX","fY","xDiff","yDiff","chnl","origPix","w4","pixels","destImage","destPixels","ratioW","ratioH","ratioWHalf","ratioHHalf","img2","data2","weightsAlpha","gxR","gxG","gxB","gxA","centerY","yy","centerX","w0","Contrast","contrast","contrastF","uContrast","Saturation","saturation","adjust","uSaturation","Blur","aspectRatio","simpleBlur","canvas2","blurLayer1","blurLayer2","percent","ctx1","ctx2","nSamples","newImageData","delta","chooseRightDelta","blurScale","Gamma","gamma","rInv","gInv","bInv","rVals","gVals","bVals","uGamma","uniform3fv","Composed","subFilters","some","HueRotation","rotation","rad","aThird","aThirdSqtSin","OneMinusCos","_dimensionAffectingProps","_reNewline","_reSpacesAndTabs","_reSpaceAndTab","_reWords","underline","overline","linethrough","textAlign","superscript","baseline","subscript","textBackgroundColor","_fontSizeFraction","_fontSizeMult","charSpacing","_measuringContext","_styleProperties","__charBounds","CACHE_FONT_SIZE","MIN_TEXT_WIDTH","__skipDimension","initDimensions","getMeasuringContext","_splitText","newLines","_splitTextIntoLines","textLines","_textLines","graphemeLines","_unwrappedTextLines","_unwrappedLines","_text","graphemeText","_clearCache","calcTextWidth","cursorWidth","enlargeSpaces","calcTextHeight","diffSpace","currentLineWidth","numberOfSpaces","accumulatedSpace","line","charBound","spaces","isEndOfWrapping","getLineWidth","kernedWidth","lineIndex","missingNewlineOffset","_setTextStyles","_renderTextLinesBackground","_renderTextDecoration","_renderText","_renderTextStroke","_renderTextFill","charStyle","forMeasuring","textBaseline","_getFontDeclaration","maxWidth","_renderTextLine","_renderChars","styleHas","heightOfLine","lineLeftOffset","lastColor","charBox","currentColor","lineTopOffset","leftOffset","_getLeftOffset","topOffset","_getTopOffset","boxStart","boxWidth","getHeightOfLine","_getLineLeftOffset","getValueOfPropertyAt","getFontCache","cacheProp","_applyCharStyles","styleDeclaration","_measureChar","_char","previousChar","prevCharStyle","coupleWidth","previousWidth","fontCache","couple","stylesAreEqual","fontMultiplier","measureText","getHeightOfChar","measureLine","lineInfo","_measureLine","_getWidthOfCharSpacing","grapheme","prevGrapheme","graphemeInfo","lineBounds","_getGraphemeBox","numOfSpaces","skipLeft","getCompleteStyleDeclaration","prevStyle","info","previousBox","__lineHeights","maxHeight","_renderTextCommon","lineHeights","isEmptyStyles","actualStyle","nextStyle","timeToRender","isJustify","charsToRender","shortCut","_renderChar","_hasStyleChanged","_getStyleDeclaration","fullDecl","shouldFill","shouldStroke","fillText","strokeText","setSuperscript","_setScript","setSubscript","schema","loc","get2DCursorLocation","setSelectionStyles","thisStyle","_hasStyleChangedForSvg","__lineWidths","_shouldClearDimensionCache","shouldClear","_forceClearCache","_size","_dy","lastDecoration","currentDecoration","currentFill","lastFill","styleObject","family","fontIsGeneric","genericFonts","newLine","newText","additionalProperties","needsDims","_key","parsedAnchor","textAnchor","originalStrokeWidth","textHeightScaleFactor","scaledDiff","textHeight","offX","p3","cleanStyle","letterCount","stylePropertyValue","stylesCount","allStyleObjectPropertiesMatch","graphemeCount","removeStyle","lineNum","charNum","_extendStyles","_getLineStyle","_setLineStyle","_setStyleDeclaration","selectionStart","skipWrapping","getSelectionStyles","startIndex","endIndex","selectionEnd","getStyleAtPosition","lineStyle","_deleteStyleDeclaration","_deleteLineStyle","parseDecoration","IText","editable","editingBorderColor","cursorColor","cursorDelay","cursorDuration","caching","_reSpace","_currentCursorOpacity","_selectionDirection","_abortCursorAnimation","__widthOfSpace","inCompositionMode","initBehavior","setSelectionStart","_updateAndFire","setSelectionEnd","_fireSelectionChanged","_updateTextarea","initDelayedCursor","cursorOffsetCache","renderCursorOrSelection","skipRestore","_clearTextArea","boundaries","_getCursorBoundaries","renderCursor","renderSelection","_getCursorBoundariesOffsets","cursorPosition","cursorLocation","charHeight","__isMousedown","startLine","endLine","startChar","endChar","realLineHeight","lineOffset","boxEnd","compositionColor","getCurrentCharFontSize","cp","_getCurrentCharIndex","getCurrentCharColor","initAddedHandler","initRemovedHandler","initCursorSelectionHandlers","initDoubleClickSimulation","mouseMoveHandler","_initCanvasHandlers","_removeCanvasHandlers","_tick","_currentTickState","_animateCursor","targetOpacity","completeMethod","tickState","isAborted","_onTickComplete","_cursorTimeout1","_currentTickCompleteState","restart","delay","abortCursorAnimation","_cursorTimeout2","selectAll","getSelectedText","findWordBoundaryLeft","startFrom","findWordBoundaryRight","findLineBoundaryLeft","findLineBoundaryRight","searchWordBoundary","direction","selectWord","newSelectionStart","newSelectionEnd","selectLine","enterEditing","exitEditingOnOthers","initHiddenTextarea","_saveEditingProps","_setEditingProps","_textBeforeEdit","initMouseMoveHandler","getSelectionStartFromPointer","currentStart","currentEnd","__selectionStartOnMouseDown","restartCursorIfNeeded","fromStringToGraphemeSelection","smallerTextStart","graphemeStart","smallerTextEnd","fromGraphemeToStringSelection","newSelection","updateTextareaPosition","updateFromTextArea","_calcTextareaPosition","desiredPosition","compositionStart","upperCanvas","upperCanvasWidth","upperCanvasHeight","_savedProps","_restoreEditingProps","isTextChanged","_removeExtraneousStyles","removeStyleFromTo","styleObj","cursorStart","cursorEnd","lineStart","charStart","lineEnd","charEnd","shiftLineStyles","numericChar","clonedStyles","numericLine","insertNewlineStyleObject","copiedStyle","currentCharStyle","newLineStyles","somethingAdded","isEndOfLine","numIndex","styleCarriedOver","insertCharStyleObject","currentLineStyles","currentLineStylesCloned","numericIndex","newStyle","insertNewStyleBlock","insertedText","cursorLoc","addedLines","linesLength","setSelectionStartEndWithShift","setSelectionInBoundaries","__lastClickTime","__lastLastClickTime","__lastPointer","__newClickTime","newPointer","isTripleClick","_stopEvent","__lastIsEditing","__lastSelected","initMousedownHandler","initMouseupHandler","initClicks","doubleClickHandler","tripleClickHandler","_mouseDownHandler","setCursorByClick","_mouseDownHandlerBefore","mouseUpHandler","currentActive","mouseOffset","prevWidth","_getNewSelectionStartFromOffset","distanceBtwLastCharAndCursor","distanceBtwNextCharAndCursor","onKeyDown","onKeyUp","onInput","copy","paste","onCompositionStart","onCompositionUpdate","onCompositionEnd","_clickHandlerInitialized","onClick","keysMap","9","27","33","34","35","36","37","38","39","40","ctrlKeysMapUp","67","88","ctrlKeysMapDown","65","keyCode","ctrlKey","metaKey","stopImmediatePropagation","_copyDone","fromPaste","removedText","removeFrom","removeTo","nextText","charCount","nextCharCount","charDiff","textareaSelection","backDelete","copiedText","copiedTextStyle","compositionEnd","_getClipboardData","clipboardData","_getWidthBeforeCursor","widthBeforeCursor","getDownCursorOffset","isRight","selectionProp","_getSelectionForOffset","indexOnOtherLine","_getIndexOnLine","getUpCursorOffset","textBeforeCursor","charWidth","foundMatch","widthOfCharsOnLine","indexOnLine","leftEdge","rightEdge","offsetFromLeftEdge","moveCursorDown","_moveCursorUpOrDown","moveCursorUp","moveCursorWithShift","moveCursorWithoutShift","moveCursorLeft","_moveCursorLeftOrRight","_move","_moveLeft","_moveRight","moveCursorLeftWithoutShift","change","moveCursorLeftWithShift","moveCursorRight","actionName","moveCursorRightWithShift","moveCursorRightWithoutShift","changed","removeChars","insertChars","multipleSpacesRegex","_getSVGLeftTopOffsets","textAndBg","_getSVGTextAndBg","textTop","textLeft","_wrapSVGTextAndBg","lineTop","textSpans","textTopOffset","textLeftOffset","_setSVGTextLineBg","_setSVGTextLineText","_createTextCharSpan","styleDecl","shouldUseWhitespace","styleProps","fillStyles","dySpan","_pushTextBgRect","fillColor","_getSVGLineTopOffset","lastHeight","minWidth","dynamicMinWidth","__cachedLines","_wordJoiners","splitByGrapheme","_styleMap","_generateStyleMap","textInfo","realLineCount","realLineCharCount","isWrapping","nextOffset","shouldLimit","mapNextLine","_wrapText","desiredWidth","wrapped","_wrapLine","_measureWord","word","charOffset","_line","reservedSpace","words","infix","wordWidth","infixWidth","largestWordWidth","lineJustStarted","additionalSpace","linesToKeep","PRODUCT_GRID_PLP","initProdTileCarousel","initSlotCarousel","QUICKADD_BUTTON","openQuickAdd","PREVENT_DEFAULT","onResizeFunction","QUICKADD_CLOSE","QUICKADD_PROCEEDBUTTON","QUICKADD_SIZEBUTTON","isOpened","STYLE_QUICKADD_SIZEBUTTON_SELECTED","QUICKADD_MODAL_OPEN","containerClassName","$this","$modal","$modalForSlider","isCompletePromo","genericAjaxCall","newDOMModal","closeQuickAddShoppable","prepareAddToCart","searchSelectedSize","openQuickAddShoppable","$quickAddOutsideModal","prepend","analytics","slideDown","closeQuickAdd","forceLockScroll","exc","forceUnlockScroll","slideUp","closeQuickButton","closeAllQuickAdd","allQAopen","selectSize","sizeButton","prepareData","makeAddToCart","dataValue","history","scrollRestoration","variableWidth","environment","_completeMatch","varName","renderTemplate","$tileCarousel","IMAGE_CONTAINER_CAROUSEL_CLASS","lazyloadclass","lazyVideos","querySelectorAll","lazyVideoObserver","IntersectionObserver","entries","isIntersecting","videoSource","dataset","unobserve","lazyVideo","previousLabel","nextLabel","lazyLoad","draggable","accessibility","showQuickview","observeQuickBuy","productUrl","destroyModal","fillModalElement","newModal","DispoHelpers","removeExternalItems","copyGiftOptions","giftOptionsModal","giftOptionsLabel","triggerPersonalizationRemoved","addedWrapItems","addedKitItems","noDispoArrival","noDispoArivalLabel","htmlContent","productData","urlnotification","reload","showRemoveExternalNotification","totalGrossPrice","modalOpened","redirect","fragment","noBopisLabel","completeNoDispoArrivalLabel","wrapperGiftContainer","Gift","addedwrapitems","addedkititems","numaddedkititems","updateGiftCtas","populateAddressSummary","address","optionValueForAddress","shipping","order","safeOptions","isBilling","isSelected","isNew","safeShipping","shippingAddress","billing","matchingAddressId","billingAddress","UUID","optionEl","addNewAddress","firstName","lastName","address1","address2","city","state","stateCode","postalCode","selectedShippingMethod","newAddress","keyMap","mappedValue","giftObj","getAddressFieldsFromUI","addressId","countryCode","showDetails","eventAction","$option","$newEl","checkUserSavedAddresses","newAddressSelector","isIslandShippingMethodSelected","islandAddresses","mainlandAddresses","checkNewAddressForm","actualDiv","notifyMeAction","notifyMeDiv","paramUrl","innerText","quickAddFlow","rsp","FormHelpers","productName","cta","email","isValid","validateEmail","queryString","analyticsSku","dataForm","owner","messageComingSoon","duplicate","carousel","swipe","swipeToSlide","touchMove","gotoPDP","startCarouselTileImage","afterAttributesSelectionEvent","additionalData","newPriceData","checkCarouselLength","carouselContainer","carouselWidth","outerWidth","carouselItemsNumber","carouselItemsWidth","carouselItemsWidthSum","carouselScrolled","ready","carouselScroll","dir","customizePosition","customizeSide","customizeText","customizeFont","customizePattern","customizeColor","allowedCharactersRegex","canvasText","canvasRect","canvasGroup","canvasImage","topBack","leftBack","badWords","loadingTime","isStepTwo","rectColor","switchDisable","initText","textInput","SELECTORS","fontsButtons","colorsButtons","initVariables","pixelText","initCanvas","imageToLoad","imgFront","transformX","transformY","personalizationCanvas","transformOrigin","zoomButton","canvasRatio","initForm","updateCanvasElem","elem","choicePosition","page","mainChoice","showOtherSide","stepOne","stepTwo","termsBottomDesktop","CLASSES","pageStepOne","pageStepTwo","selectPosition","imgBack","hotspotOne","hotspotTwo","updateCanvas","defer","imagesNumber","loadComplete","jQuery","Deferred","one","promise","imageFront","imageBack","topPercentage","leftPercentage","topBackPercentage","leftBackPercentage","$position1","$position2","backChoicePosition","personalizeAddToCart","canvasOptions","svgAllFormat","generateSvgForOTP","base64FullSVG","base64TextFullSVG","base64TextSmallSVG","termsAndConditionsModal","analyticsCustomizeAction","pageClose","positionChoice","badWordsFlag","editTextOnCanvas","colorName","scaleValue","base64","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","RangeError","__proto__","arg","encodingOrOffset","allocUnsafe","TypeError","byteOffset","byteLength","fromArrayLike","fromArrayBuffer","isEncoding","actual","write","fromString","isBuffer","checked","assertSize","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","read","buf","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","fromByteArray","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","poolSize","_augment","species","configurable","allocUnsafeSlow","_isBuffer","compare","swap16","swap32","swap64","equals","inspect","thisStart","thisEnd","thisCopy","targetCopy","isFinite","_arr","ret","out","bytes","checkOffset","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","Infinity","leadSurrogate","toByteArray","stringtrim","base64clean","b64","lens","getLens","validLen","placeHoldersLen","tmp","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","maxChunkLength","len2","encodeChunk","lookup","num","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","LN2","createSvgFromCanvas","canvasToConvert","svg","canvasNode","computeCurrentlyVisibleImage","handleDetailsTabs","clickedTab","openQuickView","modalClass","setMinHeightPromoPanel","_array","_array2","maxHeightTitle","crossSellItems","getProductVariationGroup","requestUrl","isSizeChange","$result","$completePromoData","$completePromoSection","$completePromoProducts","$completePromoContainer","$completeLookData","$completeLookSection","$completeLookProducts","quickview","closeAllOpenMenus","removeNulls","updatePrimaryImagesSlide","enableImageSlideHeightObservers","imgNode","MutationObserver","mutationsList","observer","mutation","attributeName","childList","subtree","slickNode","initializePrimaryImagesSlider","primaryImages","carouselItems","ProductHelpers","showSpinner","updateAttribute","updateAddToCart","getCrossSellItems","afterUpdateImages","recentlyViewedItems","buyNowQuichview","suggedtedProductsPDP","observeCurtainTap","removeNullCrossSell","pdpCrossSell","handleAccordionsInPDP","changeAddToBagButton","$buyNowCta","initProductTile","cs","$csItem","$detailsAccordionShipping","$detailsAccordionDescription","basketBeforeRemovedProduct","basketObserverEnabled","basketAlreadyFetched","addSmartGift","enableAnalyticsBasketObserver","analyticsDataButton","basketButtonsSelector","SGBasket","getSkus","getSkusQuantity","eachSuggestion","dataSuggestion","suggestionLength","suggestionItem","infoSuggestion","imgSuggestion","hrefSuggestion","skuCode","skuUrl","recommendedItems","nameEng","addRecommendedItems","addItem","basket","removedProduct","targetWidgetNode","setAnalyticsProductIndex","getBasket","productIndex","triggerRemoveProduct","needle","qsKeyToUpdate","urlObject","qsKey","qsValue","replaceState","labelIndex","labels","increment","getPosition","geolocation","getCurrentPosition","FindInStore","coordinates","isGeolocalized","wasMapInitialized","elementSelector","radiusSelector","isCheckAvailability","btnSelector","minCharSearch","$element","geocodingApiKey","addEventListeners","addInfoWindowEventListeners","$pickupPointElement","pickupPointUrl","btnSelectorPickupPoint","addEventListenersPickupPoint","woosmapListener","woosmapListenerForModalClose","isCartOrCheckout","observeViewMore","launch","woosmapInitFindInStore","detectLocation","selectedStoreId","storeId","storeName","storeAddress","storeCity","storePhone","lat","updateCoordinates","getStores","$searchButton","getStoresPickupPoint","checkScreenSize","lng","centerMapOnCoordinates","scrollToMap","latitude","longitude","query","geocode","initMap","hasCoordinates","detectLocationPickupPoint","launchPickupPoint","woosmapInitUPS","storeAddress1","storePostalCode","selectedStoreName","resetStep","radiusValue","dataContainer","lon","handleStoresResults","stores","handleStoresResultsPickupPoint","_actualInitMap","initialCoordinates","initialCoordinatesString","Map","google","apiKey","googleMapsApiLazyValue","loadGoogleMapsApi","maps","searchForStores","searchForStoresPickupPoint","updateMarkers","currentStep","summary","store","ID","renderResultWithTemplate","renderResult","showMoreEnabled","applyRendering","StoreHours","renderResultPickupPoint","findInStoreIntimissimiData","buttonFragment","availabilityLabel","storeHours","storeHoursList","storeHoursListLabel","toggleDropdownIcon","select","storeOpenLabel","storeClosedLabel","storeOpenUntilLabel","storeReopensLabel","hasPhases","phases","firstPhase","label","phone","showOnMap","storeHoursLabel","storeResultData","long","isTemporaryClosed","custom","reopeningDate","infoCollection","$map","$wrapper","scrollHeight","geometry","lazyValue","called","googleMapsScriptIsInjected","injectGoogleMapsApiScript","optionsQuery","script","head","onGoogleMapsApiLoaded","additionDispoHours","daysOfTheWeek","currentDate","today","getDay","tomorrow","_idx","currentStore","nextPhase","getStoreHoursPhase","dispoArrival","getDispoArrival","isTemporarilyClosed","reopDate","toLocaleDateString","isStoreOpen","tomorrowFirstPhase","currentPhase","startPhase","startDate","setHours","setMinutes","tomorrowStartTime","getHours","getMinutes","phase","endPhase","endDate","setDate","getDate","hoursAndMinutes","totalMinutes","isTomorrow","currentHourArray","endCurrentPhaseArray","isStoreOpenInThreeHours","dispoArrivalHour","dispoMinutes","nextPhaseArray","currentMinutes","convertToMinutes","endPhaseMinutes","nextPhaseMinutes","newCurrentHourArray","convertToHoursAndMinutes","reachNextQuarter","currentPhaseArray","nowInThreeHourse","closingHourArray","closingDate","roundedMinutes","roundedHours","remainingMinutes","padStart","renderInfoWindow","untilOpenLabelValue","built","chooseStore","sizeLabel","sizeCode","getDirections","previousQuery","markers","mapOptions","scrollwheel","LatLng","LatLngBounds","infowindow","InfoWindow","zoomChangeBoundsListener","initialZoom","setCenter","fitBounds","setMap","labelsIndex","labelOrigin","storeUrl","storeLocation","marker","Marker","content","itemJSON","itemStore","geocoder","Geocoder","IntimissimiFindInStore","addBrandListeners","storeEvent","selectStore","scrollToMapDesktop","switchBopis","skuList","ind","skuListPdp","$storeRow","loadThreeLocationsLogic","loadThreeLocationsLogicPickupPoint","filterBopis","currentHour","elementBopis","visiblePickableText","firstPartBopis","bopisLabel","nextStep","handleStoresResultsFromOutsidePopup","searchForNearbyStores","dispoArrivalLabel","isBopisStore","exitFullscreen","storeInfoCollection","isBopisModal","fromCheckout","renderNearbyResult","storeBlock","isDispoActive","renderStoreBlock","handleDispoStores","IntimissimiStoreHours","isPersonalizedBasket","renderNearbyResultPickupPoint","storeHoursBlock","pickUpTimeLabel","tomorrowPickUpTimeLabel","isBopisEnabled","isToday","timeDetailsBopis","loadThreeLocationNearToYou","firstThreeStores","renderResultOutsidePopup","loadThreeLocationNearToYouPickupPoint","renderResultOutsidePopupPickupPoint","giftingHelper","summaryHelpers","addGiftWrapAjax","updateModal","isRemoval","pids","updateGiftingInformation","updateTotals","totals","listName","isGiftCardRemoved","resetGiftCardForm","isNoSpliced","_err","addGiftKitAjax","minicart","wrap","kit","wrapEventListeners","kitEventListeners","$giftWrap","giftWrapItemsLimit","modalContent","updateWrapCtas","showProducts","wrapModalListeners","giftMessage","productsname","updateCartUrl","$selectedOption","wrappedItemsNumber","datauuidr","manageDispoWrap","addedItemUUID","elementsOfSlice","productLineItem","$giftKitQuantity","$value","quantityLimit","sumTotal","numAdded","addressHelpers","formHelpers","updateEstimatedArriveTime","checkedMethodEstimatedArriveDays","$shippingDateDiv","$shippingDateSpan","updateShippingAddressSelector","customer","$shippingAddressSelector","uuidEl","shippings","hasSelectedAddress","shippingAddresses","aShipping","addresses","accountAddresses","updateShippingAddressFormValues","addressObject","isGift","formIndex","profile","updateShippingSummaryInformation","$shippingAddressLabel","$addressContainer","$shippingPhone","$shippingEmail","$methodTitle","$methodAnalytics","$methodArrivalTime","$shippingSummaryLabel","$summaryDetails","giftMessageSummary","$storeName","isBopis","isSpliced","pointPickupEnabled","pickUpPointName","orderEmail","shippingAddressLabel","shippingMethodRecapTitle","estimatedArriveDaysInterval","estimatedArriveDays","shippingName","storePickupEnabled","isExpressShipping","updatePLIShippingSummaryInformation","keepOpen","$pli","$viewBlock","hasAddress","selectedMethod","nameLine","address1Line","address2Line","phoneLine","shippingCost","methodNameLine","methodArrivalTime","estimatedArrivalTime","shipment","updateProductLineItemShipmentUUIDs","pli","toggleMultiShip","usingMultiShip","createNewShipment","shipmentData","selectShippingMethodAjax","urlParams","done","shouldUpdateShippingFormValidation","stateOptions","statesOptions","postalCodeRegex","updateShippingStatesAndPostalCode","newShippingFormData","selectMethodStep","fail","clearInputFields","shippingForm","billingForm","hideAddressFormForGiftcard","hideAddressForm","typeMethod","contactFormContainer","containerForPickup","showAddressForm","setMandatoryBilling","resetBillingState","updateShippingMethods","updateShippingInformation","productLineItems","updateMultiShipInformation","$checkoutMain","$checkbox","$submitShippingBtn","usingMultiShipping","shippingFormResponse","formSelector","loadFormErrors","cartError","shippingType","updateShippingMethodList","$shippingForm","$shippingMethodList","shipmentUUID","shippingSelectionResponse","isElectronicShipping","updateViewAfterChangeShippingMethod","stepShippingCompleted","pickupChosen","selectedStoreSap","serviceType","shippingMethodId","expressMethodEnabled","wrappedQuantity","isGiftKit","isApplePayEnabled","enableExpressButton","sap","proceedToBillingInCaseIsMandatoryForCurrentCountry","shippingData","selectShippingMethod","methodID","selectMultiShipping","selectSingleShipAddress","originalUUID","selectMultiShipAddress","selectedOption","pliUUID","productLineItemUUID","serialize","selectCityForAreas","loadAreas","selectedCityId","selectedAreaValue","inputAddressSelectorChecked","divTRaddress","loadBillingAreas","selectCityByZipCode","updateStateSelectMenu","section","currentZipCode","selectMenu","zipCode","stateSFID","changeCountry","selectedCountryId","currentCountryShipping","previousCountry","newCountry","emailDomainValidation","EmailDomainValidation","totalShippingCost","totalTax","subTotal","thereIsPers","fullTotalNoPers","persTotal","fullTotal","giftcardAmount","grandTotal","grandTotalValue","orderLevelDiscountTotal","productLevelDiscountTotal","shippingLevelDiscountTotal","giftWrapTotalPrice","codTotalPrice","updateOrderProductSummaryInformation","$productSummary","lineItem","stateRequiredAttr","isRequired","stateExists","stateBoolean","fromStoreId","addressIncomplete","$shippingSummary","clearPreviousErrors","elementName","errorElementName","$errorElement","check","emailValue","isValidEmail","domain","isValidDomain","exists","toggleErrorMessage","DnsResolver","validator","DnsValidator","valid","answer","SlovakParcelService","pickUpPointRadius","pickUpPointRadiusIndex","observePickUpPointModal","observePickUpPointSelection","handleShowOnMap","mapListener","loadMorePickupPoints","parcelShops","shop","storeLabel","addLabelToLocation","renderParcelShopResult","parcelShopData","woosmapInitSPS","handlePickupResults","getPickupPointList","calculateTableFromPdpESFRLU","underbrowSize","cupSize","suggestedSizes","initialCupSize","initialUnderBrowSize","arrSizes","PrevUnderbrowSize","prevCupSize","inputUnderbrowSize","inputCupSize","jsonUnderbrowTable","FindYourSizeData","findYourSizeData","underbrowTable","jsonCircTable","FindYourSizeDataCirc","findYourSizeDataCirc","circTable","eu","it","fr","us","gb","pt","hk","lu","firstElementChild","calculateTableFromPdp","calculateTableFromPdpUS","calculateTableFromPdpUK","calculateTableFromPdpHK","calculateTableFromPdpPT","calculateTableFromPdpEU","suggestedSizesString","calculateBraSizeFromPdp","PickupPoint","wasMapInitializedInPost","wasMapInitializedPPL","wasMapInitializedDHL","wasMapInitializedDPD","wasMapInitializedHermes","wasMapInitializedCLSS","wasMapInitializedBPOST","wasMapInitializedPDB","firstSearchLaunchedPDB","elementSelectorOSM","elementSelectorInPost","elementSelectorBRT","elementSelectorPPL","elementSelectorDHL","elementSelectorDPD","elementSelectorCLSS","elementSelectorHermes","elementSelectorBPOST","elementSelectorPDB","btnSelectorInPost","btnSelectorBRT","btnSelectorPPL","btnSelectorCLSS","btnSelectorDHL","btnSelectorDPD","btnSelectorHermes","btnSelectorOSM","btnSelectorBPOST","btnSelectorPDB","queryPPL","queryDPD","locality","zipcode","selectedShippingMethodId","selectedShippingMethodType","wasMapInitializedEVR","elementSelectorEVR","btnSelectorEVR","wasMapInitializedPTN","elementSelectorPTN","btnSelectorPTN","wasMapInitializedEST","elementSelectorEST","btnSelectorEST","wasMapInitializedDEL","elementSelectorDEL","btnSelectorDEL","wasMapInitializedGLS","elementSelectorGLS","btnSelectorGLS","wasMapInitializedMRE","elementSelectorMRE","btnSelectorMRE","wasMapInitializedGLSHU","elementSelectorGLSHU","btnSelectorGLSHU","wasMapInitializedFAN","elementSelectorFAN","btnSelectorFAN","wasMapInitializedXBS","elementSelectorXBS","btnSelectorXBS","woosmapListenerPudoBFFInitialized","$elementInPost","$elementBRT","$elementPPL","$elementDHL","$elementCLSS","$elementHermes","$elementBPOST","$elementPDB","$elementEVR","$elementPTN","$elementEST","$elementDEL","$elementGLS","$elementMRE","$elementGLSHU","$elementDPD","$elementFAN","$elementXBS","addSearchListener","addSearchListener2","showPUPPopupListener","observeViewMoreDHL","observeViewMoreDPD","observeViewMoreHermes","urlInpost","urlBRT","urlPPL","urlCLSS","urlDHL","urlHermes","urlBPOST","urlPDB","urlEVR","urlPTN","urlEST","urlDEL","urlGLS","urlMRE","urlGLSHU","urlDPD","urlFAN","urlXBS","checkboxDHL","checkboxInpost","woosmapListenerInPost","checkboxBRTExpress","checkboxBRT","woosmapListenerBRT","checkboxPPLExpress","checkboxPPL","woosmapListenerPPL","woosmapListenerCLSS","checkboxDHLLocationFinderExpress","checkboxDHLLocationFinder","woosmapListenerDHL","checkboxHermesExpress","checkboxHermes","woosmapListenerHermes","checkboxBPOSTExpress","checkboxBPOST","woosmapListenerPudoBFF","checkboxPDBExpress","checkboxPDB","checkboxEVRExpress","checkboxEVR","checkboxPTNExpress","checkboxPTN","checkboxESTExpress","checkboxEST","checkboxDELExpress","checkboxDEL","checkboxGLSExpress","checkboxGLS","checkboxMREExpress","checkboxMRE","checkboxGLSHUExpress","checkboxGLSHU","checkboxDPDExpress","checkboxDPD","checkboxFANExpress","checkboxFAN","checkboxXBSExpress","checkboxXBS","isProduction","wid","RuchWidget","readyCb","showWidget","setPointType","selectCb","a_al","a_c","a_pc","initialAddress","sandbox","showCodFilter","showPointTypeFilter","showDeliveryFilter","checkboxOSMExpress","checkboxOSM","mapType","cls","scrollToMapInPost","scrollToMapPPL","scrollToMapCLSS","scrollToMapDHL","scrollToMapBRT","scrollToMapDPD","scrollToMapHermes","storeSap","isPackstation","targetElement","scrollIntoView","behavior","block","postcode","street","house","handlePickupResultsInPost","updateMarkersInPost","renderResultInpost","viewMore","handlePickupResultsBRT","updateMarkersBRT","renderResultBRT","getStoresInPost","launchInPost","woosmapInitInPost","launchPPL","woosmapInitPPL","launchCLSS","woosmapInitCollissimo","launchDHL","woosmapInitDHL","launchBRT","woosmapInitBRT","getStoresBRT","launchHermes","woosmapInitHermes","getCoordsFromCity","getCoordsFromCityPPL","getCoordsFromCityDHL","getCoordsFromCityBRT","getCoordsFromCityDPD","getCoordsFromCityHermes","mapKey","launchPudoBFF","woosmapInitPudoBFF","getStoresFromBFF","phones","phonesList","centerOnPickupPoint","getStoresPPL","getStoresDHL","GetPickupPointDetailsCall","queryDHL","queryHermes","getStoresCLSS","getStoresHermes","initMapInPost","initMapPPL","initMapCLSS","initMapDHL","wasMapInitializedBRT","initMapBRT","initMapDPD","getStoresDPD","initMapHermes","addressComponent","handlePickupResultsCLSS","handlePickupResultsPPL","updateMarkersPPL","renderResultPPL","updateMarkersCLSS","renderResultCLSS","typeDePoint","handlePickupResultsDHL","updateMarkersDHL","renderResultDHL","handlePickupResultsDPD","updateMarkersDPD","renderResultDPD","handlePickupResultsHermes","updateMarkersHermes","renderResultHermes","address_components","long_name","initMapPudoBFF","firstSearchLaunchedFAN","updateMarkersFromBFF","fillMapModalSummary","renderResultFromBFF","providerId","maxDistance","stepLimits","currentStepIndex","selectedShippingMethodUrl","handlePickupResultsFromBFF","renderInfoWindowPPL","pinIcon","renderInfoWindowCLSS","renderInfoWindowBRT","renderInfoWindowHermes","renderInfoWindowDHL","renderInfoWindowDPD","renderInfoWindowFromBFF","pinIconMap","initiallyMarkers","markerCluster","places","clearMarkers","short_name","formatAmount","forceChange","oldText","updatePrice","setInterval","clearInterval","updatedText","currentPage","availableAPI","scalaPayWidget","loadWidget","checkWidget","prepareObservers","shadowRoot","scalaPayLabel","showPaymentMethod","scalaPaySettings","widgetText","payment","isEligible","scalapayTotals","paymentPageWidgetText","isApplicablePaymentMethod","applicablePaymentMethods","choosePoint","IntimissimMap","timeoutMinicart","processInclude","ScalaPay","Klarna","loadKlarnaWidgetAndObservers","headerHeight","ApplePaySession","canMakePayments","onscroll","addToCartCTA","addToCartStickyBar","addToCartCTATop","addToCartCTABottom","viewportTop","viewportBottom","isFooterHidden","createErrorNotification","errorHtml","confirmRemoveProduct","appendToUrl","actionUrl","outDiv","isWishlistMove","remove_type","emptyCartMsg","numberOfItems","toBeDeletedUUIDs","uniqueIdString","hasBonusProduct","discountsHtml","promocodesHtml","updateCartTotals","loyalty","updateApproachingDiscounts","approachingDiscounts","updateReachedDiscounts","appliedShippingDiscounts","isGiftCard","hasApproachingDiscount","shipments","shippingMethods","shippingMethod","validateBasket","currentlyOpenedModal","errorMessage","confirmRemovePromoCode","isPromoCode","couponCode","btnAction","moveModalCloseButton","forceShowWishlist","forceHideMinicart","startTimer","Cart","removeAllLineItemsModal","removeModalID","editModalID","removeCouponModalID","Coupon","btnOpenSelector","couponModal","btnLoyaltyCoupon","persistentLoginListener","removeAllLineItems","directRemoveProduct","afterRemoveFromCart","editProduct","addAnotherProduct","addToCartFromWishlist","afterAttributeSelect","updateCartProductGlobal","removeBonusProduct","moveToWishlist","renderRicamo","shippingRecap","mobileOpenCheckoutCTA","openTooltip","paypalUtilsInit","paypalMFRAInit","ExpressCheckoutHelpers","initCoupon","triggerExpressModal","bonusProductModalListener","promoCode","removeLoyaltyCouponFromCart","removePromoCode","loyaltyCouponModal","totalCount","loyaltyCouponModalResetStatus","loyaltyCouponConfirmSelection","loyaltyCouponManageSelection","reqUrl","$selectedCoupons","arrayOfCoupons","$coupon","pin","fidelityEventId","$allCoupons","arrayOfCouponsToRemove","coupons","couponsToRemove","$couponContainer","reedemedCoupons","couponUUID","loyaltyCouponAmount","totalOrder","errorMinimumOrder","couponValueMsg","errorFound","notRedimable","addLoyaltyCoupon","removeLoyaltyCoupon","removedCouponCount","$currentSelection","msg","handleRemoveSaveForlater","isgiftcard","fadeIn","$deleteConfirmBtn","$productToRemoveSpan","$item","uniqueIdentifierPers","uniqueIdentifierNew","clickedProductId","newModalWithOptions","bonusProductIdRemoveAction","submit","$form","couponcode","discounts","currentDiscount","promoCodeAmount","dialog","lowStockItems","allAvailable","every","allReady","isFreeGist","isQuickView","updateProductUrl","skuSplit","isGiftCardProduct","amountSelectorOk","errors","parsley","validate","destinationName","destinationMail","senderName","amount","dateString","getMonth","getFullYear","imgUrl","imgCodes","imgCode","shippingDate","imageCode","inStockDate","qtySelector","newProductId","priceTotal","listPriceSelector","updateGiftCardDetails","bonusProducts","colorAttr","colorSelector","newColor","attrId","sizeAttr","sizeSelector","newSize","imageSelector","decimalPrice","updateProductDetails","uuidToBeDeleted","oldSku","loyaltyData","totalPoints","loyaltyLabel","renderedPromotions","renderedPrice","template","plainDiscountMsg","reachedDiscounts","overrideMsg","storeID","getArrivalHour","pickupTimeLabel","findInStoreSummary","urlWithNoQuery","maxInterval","longDistanceTotalPrice","defaultApplePayMethod","giftKitQuantity","$drawer","_lazyloadCache","lazyload","$domElement","SlovakParcelServiceMap","disableDefaultUI","gestureHandling","componentRestrictions","renderInfoWindowSPS","KlarnaOnsiteService","openBonusModal","paypalUtils","openModalExpress","paymentMethod","consoleLog","consoleError","initButton","buttonEl","env","bmConfigurationInvalid","createPaymentUrl","createPaymentErrorHandle","defaultButtonConfig","locale","shape","tagline","fundingicons","maxbuttons","funding","allowed","paypal","FUNDING","CREDIT","disallowed","post","errorType","redirectUrlStr","showPaymentErrorMessage","token","onAuthorize","actions","stage","onCancel","onError","Button","initFraudnet","dom","where","iframe","role","frameElement","contentWindow","_l","js","scriptBaseURL","$paypalButton","billingAgreementFlow","billingAgreementFlowConfig","isShippingAddressExist","startBillingAgreementCheckoutUrl","layout","disable","$paypalAddShippingAddressModal","$paymentOptionsTabs","$paypalContent","$useAnotherAccountCheckbox","$useAnotherAccountCheckboxWrap","$saveBillingAgreementCheckbox","$saveBillingAgreementWrap","$useCustomerBillingAgreementCheckbox","$errorContainer","$emailContainer","continueButtonToggle","isRecurrentFlow","isExpressFlow","isPayPalSelected","billingAgreementCheckbox","paymentForm","paypalProcessorResult","isEmptyObject","serverErrors","paypalToken","$tabContent","$currentTabContent","flag","$continueButton","ExpressCheckout","updateExpressButton","shippingMethodinitialize","expressModalFlow","isStorePickup","isPUP","pupType","methodIdLastPup","poiId","poiTypeId","poiTypeName","technicalZip6","zip","recapPupExpress","postnumber","openModalExpressGoogle","openModalExpressAmazon","inventoryError","continueUrl","validatorContainer","amazonShippingNotConfirmed","prevConfirmedShippingIndex","nonCourierShippingMethods","selectedShipping","$expressForm","isBopisActive","isAllMainShipment","serializedData","analyticsShippingType","analyticsName","selectBopisStore","firstCourierAppleEnabled","isFirstCourierApple","Shipping","shippingPromoMessage","isCourierSelected","shippingCostLabel","deliveryInterval","deliveryMethod","removeNotMainPersonalization","buttonColor","buttonType","buttonLocale","_paymentsClientNoAddress","_paymentsCleintAddressRequired","baseRequest","apiVersion","apiVersionMinor","tokenizationSpecification","baseCardPaymentMethod","allowedAuthMethods","allowedCardNetworks","billingAddressRequired","billingAddressParameters","phoneNumberRequired","cardPaymentMethod","merchantInfo","merchantId","getGooglePaymentsClient","addressRequired","payments","api","PaymentsClient","paymentDataCallbacks","onPaymentAuthorized","onPaymentDataChanged","transInfo","currencyCode","totalPriceStatus","totalPrice","getGoogleTransactionInfo","isInExpressCheckout","getGooglePaymentDataRequest","isShippingRequired","isBillingRequired","isExpressCheckout","isCourierShippingSelectedForExpress","paymentDataRequest","assign","allowedPaymentMethods","transactionInfo","shippingAddressRequired","shippingAddressParameters","allowedCountryCodes","callbackIntents","emailRequired","onGooglePayLoaded","initialGPayConfig","hideGooglePayPaymentMethods","gateway","gatewayMerchantId","allowedCardAuthMethods","merchantName","transactionDetails","copyConfiguration","isReadyToPay","paymentsClient","createButton","onGooglePaymentButtonClicked","addGooglePayButton","prefetchPaymentData","updateUrl","canStartExpressUrl","openPaymentSheet","loadPaymentData","paymentData","submitTokenUrl","transactionState","paymentMethodData","tokenizationData","intermediatePaymentData","updateData","paymentDataRequestUpdate","newTransactionInfo","googlePayScriptAlreadyLoaded","drawerRu","$card","$header","opener","input","slideToggle","$inCouponCode","_card","_submit","renderInfoWindowInPost","streetViewControl"],"mappings":"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","file":"cart.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 103);\n","import tingle from 'tingle.js';\n\n/* eslint-disable new-cap */\n\n/**\n * This function retrieves another page of content to display in the content search grid\n * @param {Boolean} footer - HTML string\n * @return {Tingle} - https://robinparisi.github.io/tingle/\n */\nconst newModal = (footer, cssClass = []) => {\n // set optionts\n const modalOptions = {\n closeMethods: ['overlay', 'button', 'escape'],\n cssClass,\n onClose: () => {\n modal.destroy();\n },\n onOpen: () => { $('html').addClass('html-tingle-enabled'); },\n beforeClose: () => {\n if (($('.jsPersonalizationToolModal.tingle-modal--visible').length <= 0) || ($('.tingle-modal.tingle-modal--visible').length < 2)) {\n $('html').removeClass('html-tingle-enabled');\n }\n return true;\n }\n };\n if (footer) { modalOptions.footer = true; };\n\n // create modal\n const modal = new tingle.modal(modalOptions);\n\n return modal;\n};\n\n/**\n * This function retrieves another page of content to display in the content search grid\n * @param {String} selectorID - ID of the modal DOM element to clone\n * @return {Tingle} - https://robinparisi.github.io/tingle/\n */\nconst newModalFromSelector = (selectorID, footer, cssClass = [], onClose = null) => {\n // set optionts\n const modalOptions = {\n closeMethods: ['overlay', 'escape'],\n cssClass,\n onClose: () => {\n modal.destroy();\n if (typeof onClose === 'function') {\n onClose();\n }\n },\n onOpen: () => { $('html').addClass('html-tingle-enabled'); },\n beforeClose: () => {\n if (($('.jsPersonalizationToolModal.tingle-modal--visible').length <= 0) || ($('.tingle-modal.tingle-modal--visible').length < 2)) {\n $('html').removeClass('html-tingle-enabled');\n }\n return true;\n }\n };\n if (footer) { modalOptions.footer = true; };\n\n // create modal\n const modal = new tingle.modal(modalOptions);\n\n // clone content\n if (selectorID) {\n const contentModal = document.getElementById(selectorID);\n if (contentModal) {\n modal.setContent(contentModal.innerHTML);\n }\n }\n\n return modal;\n};\n\n/**\n * This function retrieves another page of content to display in the content search grid\n * @param {String} html - HTML string\n * @return {Tingle} - https://robinparisi.github.io/tingle/\n */\nconst newModalFromString = (html, footer, cssClass = [], onOpen, onClose) => {\n // set optionts\n const modalOptions = {\n closeMethods: ['overlay', 'button', 'escape'],\n cssClass,\n onClose: () => {\n modal.destroy();\n if (typeof onClose === 'function') {\n onClose();\n }\n },\n onOpen: () => {\n $('html').addClass('html-tingle-enabled');\n if (typeof onOpen === 'function') {\n onOpen();\n }\n },\n beforeClose: () => {\n if (($('.jsPersonalizationToolModal.tingle-modal--visible').length <= 0) || ($('.tingle-modal.tingle-modal--visible').length < 2)) {\n $('html').removeClass('html-tingle-enabled');\n }\n return true;\n }\n };\n if (footer) { modalOptions.footer = true; };\n\n // create modal\n const modal = new tingle.modal(modalOptions);\n\n // add content\n if (html) {\n modal.setContent(html);\n }\n\n return modal;\n};\n\n/**\n * This function creates a modal starting from supplied options\n * @return {Tingle} - https://robinparisi.github.io/tingle/\n */\nconst newModalWithOptions = (modalOptions) => {\n // create modal\n const modal = new tingle.modal(modalOptions);\n\n return modal;\n};\n\n// modal with forced choice\nconst newModalWithSelector = (html, footer, cssClass = [], onOpen, onClose) => {\n // set optionts\n const modalOptions = {\n closeMethods: [],\n cssClass,\n onClose: () => {\n modal.destroy();\n if (typeof onClose === 'function') {\n onClose();\n }\n },\n onOpen: () => {\n $('html').addClass('html-tingle-enabled');\n if (typeof onOpen === 'function') {\n onOpen();\n }\n },\n beforeClose: () => {\n if (($('.jsPersonalizationToolModal.tingle-modal--visible').length <= 0) || ($('.tingle-modal.tingle-modal--visible').length < 2)) {\n $('html').removeClass('html-tingle-enabled');\n }\n return true;\n }\n };\n if (footer) { modalOptions.footer = true; };\n\n // create modal\n const modal = new tingle.modal(modalOptions);\n\n // add content\n if (html) {\n modal.setContent(html);\n }\n\n return modal;\n};\n\n/**\n * This class creates a modal without copying or moving any HTML,\n * but simply showing and hiding an existing Node.\n * This is to avoid problems with manipulated elements such as Google Maps\n */\nclass ModalShowHide {\n constructor (selector = '', newModalType, toPropagateClick, classToPreventHide) {\n this.$el = $(selector);\n this.selector = selector;\n this._scrollposition = 0;\n this.toPropagateClick = toPropagateClick;\n this.classToPreventHide = classToPreventHide;\n if (newModalType) {\n this.isOpenTypeCustom = false;\n } else {\n this.isOpen = false;\n }\n\n this.events();\n }\n\n show (newModalType) {\n if (newModalType) {\n if (this.isOpenTypeCustom) {\n return;\n }\n this.isOpenTypeCustom = true;\n } else {\n if (this.isOpen) {\n return;\n }\n this.isOpen = true;\n }\n\n // mimic tingle scroll lock\n this._scrollPosition = window.pageYOffset;\n $('body').addClass('tingle-enabled');\n $('html').addClass('html-tingle-enabled');\n this.$el.parent('.tingle-modal').addClass('tingle-modal--visible');\n }\n\n hide (newModalType) {\n if (newModalType) {\n if (!this.isOpenTypeCustom) {\n return;\n }\n this.isOpenTypeCustom = false;\n } else {\n if (!this.isOpen) {\n return;\n }\n this.isOpen = false;\n }\n\n // mimic tingle scroll lock\n if (($('.jsPersonalizationToolModal.tingle-modal--visible').length <= 0) || ($('.tingle-modal.tingle-modal--visible').length < 2)) {\n $('body').removeClass('tingle-enabled');\n $('html').removeClass('html-tingle-enabled');\n window.scrollTo(0, this._scrollPosition);\n }\n this.$el.parent('.tingle-modal').removeClass('tingle-modal--visible');\n }\n\n events () {\n $('body').on('click', '.tingle-modal', (e) => {\n if ($(e.target).hasClass('tingle-modal') || !$(e.target).closest(this.classToPreventHide)) {\n var newModalType = $(e.target).data('modalType') || null;\n this.hide(newModalType);\n e.stopPropagation();\n }\n });\n $('body').on('click', '.modal-close', (e) => {\n var newModalType = $(e.target).data('modalType') || null;\n this.hide(newModalType);\n e.stopPropagation();\n });\n\n if (!this.toPropagateClick) {\n $('body').on('click', this.selector, (e) => {\n e.stopPropagation();\n });\n }\n }\n};\n\nexport {\n newModal,\n newModalFromSelector,\n newModalFromString,\n newModalWithOptions,\n ModalShowHide,\n newModalWithSelector\n};\n","!function(t,o){\"function\"==typeof define&&define.amd?define(o):\"object\"==typeof exports?module.exports=o():t.tingle=o()}(this,function(){function t(t){var o={onClose:null,onOpen:null,beforeOpen:null,beforeClose:null,stickyFooter:!1,footer:!1,cssClass:[],closeLabel:\"Close\",closeMethods:[\"overlay\",\"button\",\"escape\"]};this.opts=r({},o,t),this.init()}function o(){this.modalBoxFooter&&(this.modalBoxFooter.style.width=this.modalBox.clientWidth+\"px\",this.modalBoxFooter.style.left=this.modalBox.offsetLeft+\"px\")}function e(){this.modal=document.createElement(\"div\"),this.modal.classList.add(\"tingle-modal\"),0!==this.opts.closeMethods.length&&this.opts.closeMethods.indexOf(\"overlay\")!==-1||this.modal.classList.add(\"tingle-modal--noOverlayClose\"),this.modal.style.display=\"none\",this.opts.cssClass.forEach(function(t){\"string\"==typeof t&&this.modal.classList.add(t)},this),this.opts.closeMethods.indexOf(\"button\")!==-1&&(this.modalCloseBtn=document.createElement(\"button\"),this.modalCloseBtn.classList.add(\"tingle-modal__close\"),this.modalCloseBtnIcon=document.createElement(\"span\"),this.modalCloseBtnIcon.classList.add(\"tingle-modal__closeIcon\"),this.modalCloseBtnIcon.innerHTML=\"×\",this.modalCloseBtnLabel=document.createElement(\"span\"),this.modalCloseBtnLabel.classList.add(\"tingle-modal__closeLabel\"),this.modalCloseBtnLabel.innerHTML=this.opts.closeLabel,this.modalCloseBtn.appendChild(this.modalCloseBtnIcon),this.modalCloseBtn.appendChild(this.modalCloseBtnLabel)),this.modalBox=document.createElement(\"div\"),this.modalBox.classList.add(\"tingle-modal-box\"),this.modalBoxContent=document.createElement(\"div\"),this.modalBoxContent.classList.add(\"tingle-modal-box__content\"),this.modalBox.appendChild(this.modalBoxContent),this.opts.closeMethods.indexOf(\"button\")!==-1&&this.modal.appendChild(this.modalCloseBtn),this.modal.appendChild(this.modalBox)}function s(){this.modalBoxFooter=document.createElement(\"div\"),this.modalBoxFooter.classList.add(\"tingle-modal-box__footer\"),this.modalBox.appendChild(this.modalBoxFooter)}function i(){this._events={clickCloseBtn:this.close.bind(this),clickOverlay:l.bind(this),resize:this.checkOverflow.bind(this),keyboardNav:n.bind(this)},this.opts.closeMethods.indexOf(\"button\")!==-1&&this.modalCloseBtn.addEventListener(\"click\",this._events.clickCloseBtn),this.modal.addEventListener(\"mousedown\",this._events.clickOverlay),window.addEventListener(\"resize\",this._events.resize),document.addEventListener(\"keydown\",this._events.keyboardNav)}function n(t){this.opts.closeMethods.indexOf(\"escape\")!==-1&&27===t.which&&this.isOpen()&&this.close()}function l(t){this.opts.closeMethods.indexOf(\"overlay\")!==-1&&!d(t.target,\"tingle-modal\")&&t.clientX=t},t.prototype.checkOverflow=function(){this.modal.classList.contains(\"tingle-modal--visible\")&&(this.isOverflow()?this.modal.classList.add(\"tingle-modal--overflow\"):this.modal.classList.remove(\"tingle-modal--overflow\"),!this.isOverflow()&&this.opts.stickyFooter?this.setStickyFooter(!1):this.isOverflow()&&this.opts.stickyFooter&&(o.call(this),this.setStickyFooter(!0)))},{modal:t}});","/**\n * Remove all validation. Should be called every time before revalidating form\n * @param {element} form - Form to be cleared\n * @returns {void}\n */\nconst clearFormErrors = (form) => {\n $(form).find('.form-control.is-invalid').removeClass('is-invalid');\n $(form).find('.login-form-error').empty();\n $(form).find('.login-form-error').removeClass('login-form-error-block');\n $(form)\n .find('.login-form-error-generic')\n .removeClass('login-form-error-block')\n .addClass('hidden');\n};\n\n// If ja-JP language set, swap name and last name input form\nconst swapFirstLastName = () => {\n if ($('meta[http-equiv=content-language]').attr('content') != 'ja-JP') {\n return;\n }\n\n var firstNameIdList = [\n 'shippingFirstName', // 'Checkout' page\n 'nameformemail', // 'Send us an e-mail' page\n 'registration-form-fname', // 'Register' page\n 'billingFirstName', // 'Edit Billing' page\n 'firstName', // 'Add Address' page\n 'name-frm', // 'Fiscal code calc' modal\n ];\n\n var lastNameIdList = [\n 'shippingLastName',\n 'secondnameformemail',\n 'registration-form-lname',\n 'billingLastName',\n 'lastName',\n 'surname-frm',\n ];\n\n for (var i = 0; i < firstNameIdList.length; i++) {\n var firstNameId = firstNameIdList[i];\n var lastNameId = lastNameIdList[i];\n\n // Skip to next loop if one input doesn't exist\n if (!$('#' + firstNameId).length || !$('#' + lastNameId).length) {\n continue;\n }\n\n // Check two inputs are next to each other\n if (\n $('#' + firstNameId)\n .parents('.cell')\n .next('.cell')\n .find('#' + lastNameId)\n .length\n ) {\n $('#' + lastNameId)\n .closest('.cell')\n .after($('#' + firstNameId).closest('.cell'));\n\n // Adjust padding on 'Register' page\n if (i == 2) {\n $('#' + firstNameId)\n .parents('.register-form-final-padding-right')\n .removeClass('register-form-final-padding-right')\n .addClass('register-form-final-padding-left');\n $('#' + lastNameId)\n .parents('.register-form-final-padding-left')\n .removeClass('register-form-final-padding-left')\n .addClass('register-form-final-padding-right');\n }\n }\n }\n};\n\nexport const addInputClearIcon = (inputItem) => {\n var $inputFieldContainer = $(inputItem).closest(\n '.form-fields-item__label:not(.form-fields-item__label--select)'\n );\n var clearIconTopPos =\n $(inputItem).outerHeight() / 2 +\n ($('.form-fields-item__input-label', $inputFieldContainer).length > 0\n ? $('.form-fields-item__input-label', $inputFieldContainer).outerHeight(true)\n : 0);\n\n if ($inputFieldContainer.find('.form-fields-item__clearIcon').length === 0) {\n $inputFieldContainer.append('');\n }\n $('.form-fields-item__clearIcon', $inputFieldContainer).css('top', clearIconTopPos);\n\n if (inputItem.value !== '') {\n $(inputItem).addClass('cc-isPrefilled');\n }\n\n $(inputItem)\n .on('focus', function () {\n $inputFieldContainer.addClass('focused');\n $(this).removeClass('cc-isPrefilled');\n })\n .on('blur', function () {\n $inputFieldContainer.removeClass('focused');\n });\n};\nclass FormHelpers {\n init(formElement, payload) {\n // clear form validation first\n clearFormErrors(formElement);\n $('.alert', formElement).remove();\n\n // Chosen select\n if (Foundation.MediaQuery.atLeast('medium')) {\n const selects = $('select.chosen, select.custom-select');\n selects.chosen({ disable_search: true });\n selects.each(function () {\n const ariaLabel = $(this).attr('aria-label');\n \n $(this).next('.chosen-container')\n .find('.chosen-search-input')\n .attr('aria-label', ariaLabel);\n });\n }\n\n if (typeof payload === 'object' && payload.fields) {\n Object.keys(payload.fields).forEach(function (key) {\n if (payload.fields[key]) {\n var feedbackElement = $(formElement)\n .find('[name=\"' + key + '\"]')\n .parent()\n .children('.invalid-feedback');\n\n if (feedbackElement.length > 0) {\n if (Array.isArray(payload[key])) {\n feedbackElement.html(payload.fields[key].join('
'));\n } else {\n feedbackElement.html(payload.fields[key]);\n }\n feedbackElement.siblings('.form-control').addClass('is-invalid');\n feedbackElement.show();\n }\n }\n });\n }\n if (payload && payload.error) {\n $(formElement).find('.login-form-error').html(payload.error.join('
'));\n $(formElement).find('.login-form-error').addClass('login-form-error-block');\n }\n\n $('input[type=text], input[type=email], input[type=number]').each(function (index, inputItem) {\n if ($(inputItem).attr('name') !== 'q') {\n addInputClearIcon(inputItem);\n }\n });\n\n $('.form-fields-item__clearIcon').on('click touchstart', function (e) {\n $(e.currentTarget).siblings('.form-fields-item__input-field').val('');\n });\n\n swapFirstLastName();\n }\n\n /**\n * Display error messages and highlight form fields with errors.\n * @param {string} parentSelector - the form which contains the fields\n * @param {Object} fieldErrors - the fields with errors\n */\n loadFormErrors(parentSelector, fieldErrors) {\n // eslint-disable-line\n // Display error messages and highlight form fields with errors.\n $.each(fieldErrors, (attr) => {\n $('*[name=' + attr + ']', parentSelector)\n .addClass('is-invalid')\n .siblings('.invalid-feedback')\n .html(fieldErrors[attr])\n .show();\n });\n if (fieldErrors.length) {\n $(`*[name=${fieldErrors[0]}]`).trigger('focus');\n }\n }\n\n /**\n * Clear the form errors.\n * @param {string} parentSelector - the parent form selector.\n */\n clearPreviousErrors(parentSelector) {\n $(parentSelector).find('.form-control.is-invalid').removeClass('is-invalid');\n $('.error-message').hide();\n }\n\n handleAmexNumber(cardFieldSelector, cardTypeSelector) {\n var cleave = new Cleave(cardFieldSelector, {\n creditCard: true,\n onCreditCardTypeChanged: (type) => {\n const creditCardTypes = {\n amex: 'Amex',\n };\n\n const cardType =\n creditCardTypes[\n Object.keys(creditCardTypes).indexOf(type) > -1 ? type : 'unknown'\n ];\n $(cardTypeSelector).val(cardType);\n $('.card-number-wrapper').attr('data-type', type);\n if (type === 'visa' || type === 'mastercard' || type === 'discover') {\n $('#securityCode').attr('maxlength', 3);\n } else {\n $('#securityCode').attr('maxlength', 4);\n }\n },\n });\n\n $(cardFieldSelector).data('cleave', cleave);\n }\n handleCreditCardNumber(cardFieldSelector, cardTypeSelector) {\n var cleave = new Cleave(cardFieldSelector, {\n creditCard: true,\n onCreditCardTypeChanged: (type) => {\n const creditCardTypes = {\n visa: 'Visa',\n mastercard: 'Master Card',\n amex: 'Amex',\n discover: 'Discover',\n jcb: 'jcb',\n diners: 'diners',\n unknown: 'Unknown',\n };\n\n const cardType =\n creditCardTypes[\n Object.keys(creditCardTypes).indexOf(type) > -1 ? type : 'unknown'\n ];\n $(cardTypeSelector).val(cardType);\n $('.card-number-wrapper').attr('data-type', type);\n if (type === 'visa' || type === 'mastercard' || type === 'discover') {\n $('#securityCode').attr('maxlength', 3);\n } else {\n $('#securityCode').attr('maxlength', 4);\n }\n },\n });\n\n $(cardFieldSelector).data('cleave', cleave);\n }\n\n serializeData(form, wasAmexSelected) {\n const serializedArray = form.serializeArray();\n\n serializedArray.forEach((item) => {\n if (item.name.indexOf('cardNumber') > -1) {\n if (wasAmexSelected === true) {\n item.value = $('#cardNumberAmex').data('cleave').getRawValue(); // eslint-disable-line\n } else {\n item.value = $('#cardNumber').data('cleave').getRawValue(); // eslint-disable-line\n }\n }\n });\n\n return $.param(serializedArray);\n }\n}\n\nconst formHelpers = new FormHelpers();\nexport default formHelpers;\n","/**\n * Core SFRA function for run everything everywhere\n * @param {Function || Object} include - stuff to run\n */\nconst processInclude = (include) => {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n\n// Enqueues tasks to be executed afterwards\nfunction enqueueTask(task) {\n window.requestAnimationFrame(task);\n}\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nconst parseHtml = (html, map) => {\n const el = document.createElement('div');\n el.innerHTML = html;\n\n let htmlMap = {};\n for (var key in map) {\n if (map.hasOwnProperty(key)) {\n htmlMap[key] = el.querySelector(map[key]);\n }\n }\n\n return htmlMap;\n};\n\n/**\n * appends params to a url\n * @param {string} url - Original url\n * @param {Object} params - Parameters to append\n * @returns {string} result url with appended parameters\n */\nconst appendToUrl = (url, params) => {\n var newUrl = url;\n newUrl +=\n (newUrl.indexOf('?') !== -1 ? '&' : '?') +\n Object.keys(params)\n .map(function (key) {\n return key + '=' + encodeURIComponent(params[key]);\n })\n .join('&');\n\n return newUrl;\n};\n\nconst lockScroll = () => {\n $('body, html').css('overflow-y', 'hidden');\n};\n\nconst unlockScroll = () => {\n $('body, html').css('overflow-y', '');\n};\n\n/**\n * function for force lock scroll when open a modal or a drawer.\n * CAN CREATE SOME ISSUE WITH TOUCH EVENT - CHECK ON REAL DEVICE\n * the event is for prevent scrolling in iOS device\n */\nfunction forceLockScroll() {\n $('body, html,.page')\n .css({'overflow-y': 'hidden', 'touch-action': 'none'})\n .on('touchmove', preventDefault);\n}\n\nfunction forceUnlockScroll() {\n $('body, html,.page')\n .css({'overflow-y': '', 'touch-action': ''})\n .off('touchmove', preventDefault);\n}\n\nfunction preventDefault(e) {\n e.preventDefault();\n}\n\nconst cookieExists = (name) => {\n return document.cookie.split(';').filter((item) => {\n return item.trim().indexOf(`${name}=`) === 0;\n }).length;\n};\n\nconst createCookie = (name, value = false, days = 0) => {\n var expires;\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = '; expires=' + date.toGMTString();\n } else {\n expires = '';\n }\n document.cookie = name + '=' + value + expires + '; path=/';\n};\n\nconst getCookie = (name) => {\n var value = '; ' + document.cookie;\n var parts = value.split('; ' + name + '=');\n if (parts.length == 2) return parts.pop().split(';').shift();\n return '';\n};\n\nconst deleteCookie = (name) => {\n document.cookie = name + '=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';\n};\n\nconst isTouchDevice = () => {\n return (\n 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0\n );\n};\n\n/**\n * Generic Ajax Call\n * @param {string} url - url for the ajax call\n * @param {string} method - default GET (is possible to use POST,PUT)\n * @param {object} data - use in POST method\n * @param {boolean} hideSpinner - default false, use true to hide the spinner\n * @returns Promise with the response of the ajax call\n */\nfunction genericAjaxCall(url, method = 'GET', data = {}, hideSpinner = false) {\n if (!url) {\n console.error('Missing Url in ajax call');\n return;\n }\n if (hideSpinner !== true) {\n $.spinner().start();\n }\n return new Promise((resolve, reject) => {\n $.ajax({\n url: url,\n method: method,\n data: data,\n success: function (response) {\n if (hideSpinner !== true) {\n $.spinner().stop();\n }\n resolve(response);\n },\n error: function (error) {\n if (hideSpinner !== true) {\n $.spinner().stop();\n }\n console.error(error);\n reject(error);\n },\n });\n });\n}\n\nexport {\n appendToUrl,\n cookieExists,\n createCookie,\n deleteCookie,\n enqueueTask,\n forceLockScroll,\n forceUnlockScroll,\n genericAjaxCall,\n getCookie,\n isTouchDevice,\n lockScroll,\n parseHtml,\n preventDefault,\n processInclude,\n unlockScroll,\n};\n","import { ModalShowHide } from '../components/modal';\n\nclass SizePanel {\n #mobileSizeModal;\n Types = {\n ADDTOCART: 'add_to_cart',\n ADDTOCART_BUNDLE: 'add_to_cart_bundle',\n PERSONALIZE: 'personalize',\n WISHILIST: 'wishlist',\n SMARTGIFT: 'smartgift'\n }\n\n init (idName = '#size-panel-mobile') {\n this.idName = idName\n this.#onPanelOpenerClick();\n this.#onNotifyMeSizeClicked();\n this.#onCloseSizeModalMobile();\n this.#mobileSizeModal = new ModalShowHide(this.idName);\n this.#mobileSizeModal.hide();\n }\n\n openSizePanel (operation) {\n if (Foundation.MediaQuery.atLeast('large')) {\n $('.js-page-size-box').addClass('cc-sizeBox-isOpen');\n } else {\n this.#mobileSizeModal.show();\n }\n $(this.idName).data('operation', operation);\n if (operation === this.Types.ADDTOCART_BUNDLE) {\n let $sizeElements = $(\"[data-attr='size'] input,[data-attr='size-mobile'] input\");\n let bundleQuantity = $('.js-add-to-cart-multipack').data('bundle-quantity');\n $sizeElements.each(function (element){\n if(parseInt($(this).attr('data-allocation'), 10) < parseInt(bundleQuantity, 10)) {\n $(this).closest('label').addClass('cc-no-bundle');\n }\n })\n } else {\n $('.cc-no-bundle').removeClass('cc-no-bundle');\n }\n if(operation === this.Types.WISHILIST) {\n $('.notifyMe,.wishlistOnly').addClass('select-size-for-wishlist');\n } else {\n $('.notifyMe,.wishlistOnly').removeClass('select-size-for-wishlist');\n }\n }\n\n #closeSizePanel () {\n if (Foundation.MediaQuery.atLeast('large')) {\n $('.pdp-size-box').removeClass('cc-sizeBox-isOpen');\n } else {\n this.#mobileSizeModal.hide();\n }\n $('.pdp-size-box .js-sizeBox-openPanel').removeClass('cc-sizeBox-openPanel_error');\n $('#newsletter-error-msg').hide();\n $(this.idName).data('operation', '');\n $('.notifyMe,.wishlistOnly').removeClass('select-size-for-wishlist');\n $('.cc-no-bundle').removeClass('cc-no-bundle');\n }\n\n #onPanelOpenerClick () {\n $('.pdp-size-box .js-sizeBox-openPanel').on('click', e => {\n if ($('.pdp-size-box').hasClass('cc-sizeBox-isOpen')) {\n this.#closeSizePanel();\n } else {\n this.openSizePanel();\n }\n });\n $('.js-pdpStickyBar-size-openPanel').on('click', e => {\n if ($('.js-pdpStickyBar-select').hasClass('cc-sizeBox-isOpen')) {\n $('.js-pdpStickyBar-select').removeClass('cc-sizeBox-isOpen');\n } else {\n $('.js-pdpStickyBar-select').addClass('cc-sizeBox-isOpen');\n }\n });\n }\n\n afterSizeSelection (data, type) {\n let operation = $(this.idName).data('operation');\n this.#closeSizePanel();\n let stopSpinner = true;\n let selectedSize = $('[data-attr=\"size\"] input:checked');\n if (!selectedSize.length) {\n $('.pdp-size-box').removeClass('size-selected');\n return stopSpinner;\n } else {\n $('#newsletter-error-msg').hide();\n }\n if (type !== 'size') {\n return stopSpinner;\n }\n let sizeDisplayValue = selectedSize.closest('label').find('.js-size-button__span').text();\n $('.pdp-size-box .js-sizeBox-openPanel').attr('aria-invalid', 'false');\n $('.pdp-size-box .selected-size-value').text(sizeDisplayValue);\n $('.pdp-size-box').addClass('size-selected');\n if ($('.js-add-to-cart-multipack').length > 0) {\n let bundleQuantity = $('.js-add-to-cart-multipack').data('bundle-quantity');\n if(parseInt($(selectedSize).attr('data-allocation'), 10) < parseInt(bundleQuantity, 10)) {\n $('.js-add-to-cart-multipack').attr('disabled', true);\n } else {\n $('.js-add-to-cart-multipack').removeAttr('disabled');\n }\n }\n\n stopSpinner = false;\n switch (operation) {\n case this.Types.ADDTOCART:\n $('#add-to-cart-cta-pdp').trigger('click');\n break;\n case this.Types.ADDTOCART_BUNDLE:\n $('#add-to-cart-multipack-cta-pdp').trigger('click');\n break;\n case this.Types.PERSONALIZE:\n $('#personalizeButton .persButt').trigger('click');\n break\n case this.Types.WISHILIST:\n $('body').trigger('wishlist:add-pid', {pid: data.product.id});\n break;\n case this.Types.SMARTGIFT:\n $('.add-to-cart-actions .js-smart-gift').trigger('click');\n $('#smartgiftButton').trigger('click');\n break;\n default:\n stopSpinner = true;\n }\n return stopSpinner;\n }\n\n #onNotifyMeSizeClicked () {\n const _self = this;\n $('.notifyMe,.wishlistOnly').on('click', (e) => {\n if (!$(e.currentTarget).hasClass('select-size-for-wishlist')) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n $.spinner().start();\n const infoURL = $(e.currentTarget).closest('label').find('input').data('url');\n $.ajax({\n url: infoURL,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n if (data.product.readyToOrder) {\n if ($(e.currentTarget).hasClass('wishlistOnly')) {\n let sizeDisplayValue = $(e.currentTarget).closest('label').find('.size-list-item-display-value').text();\n $('.pdp-size-box .selected-size-value').text(sizeDisplayValue);\n $('.pdp-size-box').addClass('size-selected');\n }\n const pid = encodeURIComponent(data.product.id)\n $('body').trigger('wishlist:add-pid', {pid: pid});\n } else {\n $.spinner().stop();\n _self.#closeSizePanel();\n }\n },\n error: function () {\n $.spinner().stop();\n _self.#closeSizePanel();\n }\n });\n });\n\n $('body').on('wishlist:update', () => {\n $.spinner().stop();\n _self.#closeSizePanel();\n });\n }\n\n #onCloseSizeModalMobile () {\n const _self = this;\n $('body').on('click', '.size-selector-mobile-modal', () => {\n _self.#closeSizePanel();\n });\n }\n}\n\nconst sizePanel = new SizePanel();\nexport default sizePanel;\n","'use strict';\n\nvar testEnabled = false;\n\nlet productGenderMap = {\n 1: 'Woman',\n 2: 'Man',\n 3: 'Girl',\n 4: 'Boy',\n 5: 'Unisex',\n 6: 'Baby'\n};\n\nlet brandsMapping = {\n 'CALZEDONIA': 'clz',\n 'INTIMISSIMI': 'int',\n 'TEZENIS': 'tzn',\n 'FALCONERI': 'flc',\n 'SIGNORVINO': 'sgv',\n 'ATELIER_EME': 'eme'\n};\n\nvar ListType = {\n 'listing': {\n 'class': 'category',\n 'value': 'listing',\n 'associatedObject': '.search-results'\n },\n 'wishlist': {\n 'class': 'wishlist-container',\n 'value': 'wishlist',\n 'associatedObject': '.wishlistItemCards'\n },\n 'search': {\n 'class': 'search',\n 'value': 'search',\n 'associatedObject': '.search-results'\n },\n 'completeYourLook': {\n 'class': 'completeYourLook',\n 'value': 'complete_your_look',\n 'associatedObject': '.completeYourLookContainer'\n },\n 'recentlyViewed': {\n 'class': 'recentlyViewed',\n 'value': 'recently_viewed',\n 'associatedObject': '.recentlyViewedContainer'\n },\n 'suggestedProducts': {\n 'class': 'suggestedProducts',\n 'value': 'suggested_products',\n 'associatedObject': '.suggestedProductsContainer'\n },\n 'filteredProducts': {\n 'class': 'filteredProducts',\n 'value': 'filter_applied',\n 'associatedObject': '.filteredProducts'\n },\n 'bestSellers': {\n 'class': 'bestSellers',\n 'value': 'best_sellers',\n 'associatedObject': '.bestSellers'\n },\n 'cmBestSellers': {\n 'class': 'cmBestSellers',\n 'value': 'best_sellers',\n 'associatedObject': '.cm-bestsellerCarousel-carouselWrapper .cm-carouselCustom.js-plp-productGrid'\n },\n 'sortDecreasing': {\n 'class': 'sortDecreasing',\n 'value': 'sorting_decreasing_price',\n 'associatedObject': '.sortDecreasing'\n },\n 'sortIncreasing': {\n 'class': 'sortIncreasing',\n 'value': 'sorting_increasing_price',\n 'associatedObject': '.sortIncreasing'\n },\n 'newArrivals': {\n 'class': 'newArrivals',\n 'value': 'new_arrivals',\n 'associatedObject': '.newArrivals'\n },\n 'cmNewArrivals': {\n 'class': 'cmNewArrivals',\n 'value': 'new_arrivals',\n 'associatedObject': '.cm-productCarousel-cardWrp.cm-carouselCustom'\n },\n 'completeYourLookMiniCart': {\n 'class': 'completeYourLookMiniCart',\n 'value': 'complete_your_look_minicart',\n 'associatedObject': '.miniCartCrossSellContainer-carousel'\n },\n 'js-suggestedForYou': {\n 'class': 'js-suggestedForYou',\n 'value': 'suggested_for_you',\n 'associatedObject': '.js-slotCarousel_suggestedProducts-carousel'\n },\n 'js-completeThePromo': {\n 'class': 'completeThePromo',\n 'value': 'complete_your_look',\n 'associatedObject': '.js-completeThePromoContainer'\n },\n 'js-youMayAlsoLike': {\n 'class': 'js-youMayAlsoLike',\n 'value': 'you_may_also_like',\n 'associatedObject': '.js-youMayAlsoLikeContainer'\n }\n};\n\nfunction getProductGender (product) {\n if (product.sapCategoryCode) {\n let categoryCode = product.sapCategoryCode;\n return productGenderMap[parseInt(categoryCode[categoryCode.length - 1])];\n }\n return '';\n}\n\nfunction insertParam (key, value) {\n key = encodeURI(key); value = encodeURI(value);\n\n var kvp = document.location.search.substr(1).split('&');\n\n var i = kvp.length; var x; while (i--) {\n x = kvp[i].split('=');\n\n if (x[0] === key) {\n x[1] = value;\n kvp[i] = x.join('=');\n break;\n }\n }\n\n if (i < 0) { kvp[kvp.length] = [key, value].join('='); }\n\n // this will reload the page, it's likely better to store this until finished\n document.location.search = kvp.join('&');\n}\n\nfunction hasParam (key) {\n key = encodeURI(key);\n\n return document.location.search.substr(1).indexOf(key) !== -1;\n}\n\nfunction getSkuCodes (sku) {\n if (sku.length >= 13) {\n let style = sku.substring(0, 9).trim();\n let color = sku.substring(9, 13).trim();\n let size = sku.substring(13).trim().replace('~', '/');\n return { id: style, color: color, size: size };\n } else {\n let color = sku.split('_')[1];\n return { id: sku, color: color };\n }\n}\n\nfunction formatStringForAnalytics (str) {\n return ('' + str).split(' ').join('_').toLowerCase().replace(/-/g, '_');\n}\n\nfunction formatStringProductPropertyIfExists (product, property, avoidFormatting = false) {\n if (property in product) {\n if (property === 'item_sfcc') {\n product[property] = '' + getFormatSkuForAnalytics(product[property]);\n } else if (avoidFormatting) {\n product[property] = '' + product[property];\n } else {\n product[property] = formatStringForAnalytics(product[property]);\n }\n }\n return product;\n}\n\n/* function formatStringProductPricePropertyIfExists (product, property, avoidFormatting = false) {\n if (property in product) {\n if (avoidFormatting) {\n product[property] = '' + product[property];\n } else {\n product[property] = formatStringForAnalytics(product[property]);\n }\n if (product['discount'] && product['discount'] < 0) {\n product[property] = '0.00';\n product['discount'] = 0.00;\n }\n }\n return product;\n} */\n\nfunction formatStringProductSalePropertyIfExists (product, property, avoidFormatting = false) {\n if (property in product) {\n if (avoidFormatting) {\n product[property] = '' + product[property];\n } else {\n product[property] = formatStringForAnalytics(product[property]);\n }\n if (product['discount'] && parseFloat(product['discount'])) {\n product[property] = 'yes';\n }\n }\n return product;\n}\n\nfunction formatFloatProductPropertyIfExists (product, property) {\n if (property in product) {\n product[property] = (product[property] <= 0) ? 0.00 : parseFloat(product[property]);\n }\n return product;\n}\n\nfunction formatIntegerForAnalytics (value) {\n return parseInt(value);\n}\n\nfunction formatIntegerProductPropertyIfExists (product, property) {\n if (property in product) {\n product[property] = formatIntegerForAnalytics(product[property]);\n }\n return product;\n}\n\nfunction stringOrNotAvailable (s) {\n return (s !== null && typeof s !== 'undefined' && String(s)) || 'not_available';\n}\n\nfunction numberOrZero (n) {\n return parseFloat(n) || 0;\n}\n\nfunction getStringAnalyticsValueFromStorage (key) {\n return stringOrNotAvailable(window.sessionStorage.getItem(key));\n}\n\nfunction getNumberAnalyticsValueFromStorage (key) {\n return numberOrZero(window.sessionStorage.getItem(key));\n}\n\nfunction getFormatSkuForAnalytics (sku) {\n let id, color, size, formattedSku;\n if (sku.toLowerCase().indexOf('color') !== -1) { // variant group\n id = sku.split('_')[0].trim();\n color = sku.split('_')[2].trim();\n formattedSku = id + '_' + color;\n } else {\n if (sku.match('[^_]+_[^_]+_[^_]+')) {\n return sku.toUpperCase();\n }\n let skuComponents = getSkuCodes(sku);\n id = skuComponents.id;\n color = skuComponents.color;\n size = skuComponents.size;\n if (color && size) {\n formattedSku = id + '_' + color + '_' + size;\n } else { // master product\n formattedSku = id;\n }\n }\n return formattedSku.toUpperCase().replace(/_+/g, '_');\n}\n\nmodule.exports = {\n\n isTestEnabled () {\n return testEnabled;\n },\n\n getAvailableListTypes (listingItemsBaseClass) {\n let types = [];\n\n for (let key in ListType) {\n if (ListType.hasOwnProperty(key)) {\n if ($(listingItemsBaseClass + '.' + ListType[key].class).length > 0) {\n let item = ListType[key];\n types.push(item);\n }\n }\n }\n\n return types;\n },\n\n getSkuComponents (sku) {\n return getSkuCodes(sku);\n },\n\n getProductGender (product) {\n return getProductGender(product);\n },\n\n getProductBaseInfo (product) {\n let id = '';\n let color = '';\n let size = '';\n\n let colorObject = null;\n\n let promo = 'no_promotion';\n if ('promotions' in product && product.promotions && product.promotions.length > 0) {\n promo = product.promotions.map(function (el) { return el.enabled ? el.id : null; }).filter(function (el) { return el !== null; }).join('-');\n } else if ('appliedPromotions' in product && product.appliedPromotions && product.appliedPromotions.length > 0) {\n promo = product.appliedPromotions.map(function (el) { return el.name; }).join('-');\n }\n\n if (product.productType === 'variant') {\n let components = getSkuCodes(product.id);\n id = components.id;\n color = components.color;\n size = components.size;\n\n for (let k in product.variationAttributes) {\n const variationAttribute = product.variationAttributes[k];\n if (variationAttribute.attributeId === 'color') {\n if ('values' in variationAttribute) {\n for (let j in variationAttribute.values) {\n if (variationAttribute.values[j].selected === true) {\n colorObject = variationAttribute.values[j];\n break;\n }\n }\n } else {\n colorObject = variationAttribute;\n }\n break;\n }\n }\n } else if (product.productType === 'variationGroup') {\n // in this case the user only chose the color, and not the size\n id = product.id.split('_')[0].trim();\n color = product.id.split('_')[2].trim();\n\n let selectedVariation;\n\n for (let k in product.variationAttributes) {\n const variationAttribute = product.variationAttributes[k];\n if (variationAttribute.attributeId === 'color') {\n for (let j in variationAttribute.values) {\n if (variationAttribute.values[j].selected === true) {\n colorObject = variationAttribute.values[j];\n break;\n }\n }\n }\n if (selectedVariation !== undefined) {\n break;\n }\n }\n }\n\n return {\n id: id,\n color: color,\n colorObject: colorObject,\n size: size,\n promo: promo\n };\n },\n\n formatProductForAnalytics (product) {\n product = formatStringProductPropertyIfExists(product, 'item_name');\n product = formatStringProductPropertyIfExists(product, 'item_brand');\n product = formatStringProductPropertyIfExists(product, 'item_list_name');\n product = formatStringProductPropertyIfExists(product, 'item_list_id');\n product = formatStringProductPropertyIfExists(product, 'item_variant', true);\n product = formatFloatProductPropertyIfExists(product, 'price');\n product = formatStringProductPropertyIfExists(product, 'item_category');\n product = formatStringProductPropertyIfExists(product, 'item_category2');\n product = formatStringProductPropertyIfExists(product, 'item_category3');\n product = formatStringProductPropertyIfExists(product, 'item_category4');\n product = formatStringProductPropertyIfExists(product, 'item_category5');\n product = formatIntegerProductPropertyIfExists(product, 'quantity');\n product = formatStringProductPropertyIfExists(product, 'size', true);\n product = formatStringProductSalePropertyIfExists(product, 'item_on_sale');\n product = formatStringProductPropertyIfExists(product, 'item_availability');\n product = formatStringProductPropertyIfExists(product, 'coupon');\n product = formatStringProductPropertyIfExists(product, 'item_color');\n product = formatStringProductPropertyIfExists(product, 'item_sfcc');\n product = formatStringProductPropertyIfExists(product, 'item_customization');\n product = formatStringProductPropertyIfExists(product, 'item_sustainable');\n product = formatFloatProductPropertyIfExists(product, 'discount');\n return product;\n },\n\n checkPage (str) {\n return window.location.href.toLowerCase().indexOf(str) !== -1;\n },\n\n // Formatting\n formatString (str) {\n return formatStringForAnalytics(str);\n },\n\n format4DigitNumber (number) {\n if (number < 0) {\n return '0000';\n } else if (number < 10) {\n return '000' + number;\n } else if (number < 100) {\n return '00' + number;\n } else if (number < 1000) {\n return '0' + number;\n }\n return number.toString();\n },\n\n // URL Parameters\n insertParameter (key, value) {\n insertParam(key, value);\n },\n existsParameter (key) {\n return hasParam(key);\n },\n\n // Push on DataLayer\n push (pushObject, log = true) {\n // eslint-disable-next-line\n dataLayer.push(pushObject);\n\n if (log && testEnabled) {\n console.info(pushObject);\n }\n },\n\n log (data, inline = false) {\n if (!testEnabled) {\n return;\n }\n if (inline) {\n console.info('Analytics: ' + data);\n } else {\n console.info('Analytics: ');\n console.info(data);\n }\n },\n\n getFormatSku (sku) {\n return getFormatSkuForAnalytics(sku);\n },\n\n formatNameForAnalytics (name) {\n if (!name) {\n return '';\n }\n let formattedPlus = name.toLowerCase().replace(/[+]/g, '_plus_');\n let formattedName = formattedPlus.replace(/\\W/g, '_');\n let analyticsName = formattedName.split('_').filter((el) => { return el; }).join('_');\n return analyticsName;\n },\n\n formatSkus (skus) {\n let formattedSkus = '';\n for (let i = 0; i < skus.length; i++) {\n let formattedSku = getFormatSkuForAnalytics(skus[i]).replace(/\\W/g, '_');\n if (i === 0) {\n formattedSkus += formattedSku;\n } else {\n formattedSkus += '-' + formattedSku;\n }\n }\n return formattedSkus;\n },\n\n getProductNameEngFromPdp () {\n let nameEng = $('.analytics.product').data('name');\n return nameEng;\n },\n\n getFormatedNewsletterPreferenceBrands (list) {\n let brandsStr = '';\n for (let brand of list) {\n brandsStr += brandsMapping[brand] + '-';\n }\n\n brandsStr = brandsStr.substring(0, brandsStr.length - 1);\n\n return brandsStr;\n },\n\n getListId (container, provider) {\n let list = '';\n if (container && $(container).parents('.analytics-mini-cart').length > 0) {\n list = 'minicart';\n } else if ($(container).parents('.js-site-search-suggestions-products').length > 0) { // Search results\n list = 'plp';\n } else if ($('.page[data-action=\"Product-Show\"]').length > 0) {\n list = 'pdp';\n } else if ($('.page[data-action=\"Search-Show\"]').length > 0) {\n list = $('.page.js-page-home-gender').length > 0 ? 'home' : 'plp';\n } else if ($('.page[data-action=\"Cart-Show\"]').length > 0 || $('.page[data-action=\"Checkout-Begin\"]').length > 0) {\n list = 'cart';\n } else if ($('.page[data-action=\"Wishlist-Show\"]').length > 0) {\n list = 'wishlist';\n }\n\n if (list && provider && (list === 'pdp' || list === 'home' || list === 'cart')) {\n list = `${provider}_${list}`;\n }\n\n return list;\n },\n\n getProductList () {\n let items = [];\n let container = $('.analytics.checkout.checkout-product');\n\n for (let i = 0; i < container.length; i++) {\n let obj = container.eq(i).data();\n\n // Fix values for MEC-30160\n if (obj.item_list_name === 'not_available') {\n obj.item_list_name = 'listing'\n }\n \n if (obj.item_list_id === 'not_available') {\n obj.item_list_id = 'pdp'\n }\n\n if (obj.id !== 'PERS_PROD') {\n obj['quantity'] = obj.quantity;\n obj['index'] = i;\n items.push(this.formatProductForAnalytics(obj));\n }\n }\n return items;\n },\n\n getGrandTotal () {\n return $('.analytics-totals').data('grand-total');\n },\n\n getAppliedCoupon () {\n const coupon = [];\n $('#couponCode.coupon-code-field--applied').val() && coupon.push($('#couponCode.coupon-code-field--applied').val());\n $('.analytics-shipping-discount').length && coupon.push('shipping_discount');\n $('.analytics-order-discount').length && coupon.push('order_discount');\n return coupon.join(',');\n },\n\n getUpsellingMessage () {\n let upsellingMessage = 'no_message';\n const vals = [];\n $('.analytics-message').each(function () {\n if (vals.indexOf($(this).data('analytics-type')) === -1) {\n vals.push($(this).data('analytics-type'));\n }\n });\n if (vals.length > 0) {\n upsellingMessage = vals.join('-');\n }\n localStorage.setItem('upsellingMessage', upsellingMessage);\n return upsellingMessage;\n },\n\n getBeginCheckoutData (context) {\n return {\n upselling_message: this.getUpsellingMessage(),\n currency: context.helperData.currency,\n value: this.getGrandTotal(),\n coupon: this.getAppliedCoupon(),\n items: this.getProductList()\n };\n },\n\n getTypeOfAccount () {\n let typeOfAccount = 'only_registration';\n if ($('.loyalty-flag:checked').length === 1) {\n typeOfAccount = 'profile_loyalty';\n }\n return typeOfAccount;\n },\n storeGtmData (data) {\n if (data && data.item_list_name && data.item_list_id && (data.index || data.index === 0)) {\n if (data.item_id && data.item_variant) {\n window.sessionStorage.setItem('GTM_' + data.item_id + '_color_' + data.item_variant, JSON.stringify({'item_list_name': data.item_list_name, 'item_list_id': data.item_list_id, 'index': data.index}));\n }\n // Adding values for color change event\n window.sessionStorage.setItem('GTM_item_list_name', data.item_list_name);\n window.sessionStorage.setItem('GTM_item_list_id', data.item_list_id);\n window.sessionStorage.setItem('GTM_index', data.index);\n }\n },\n getGtmData (data) {\n const GTMData = {};\n if (data && data.item_id && data.item_variant) {\n const GTMItem = JSON.parse(window.sessionStorage.getItem('GTM_' + data.item_id + '_color_' + data.item_variant)) || {};\n GTMData.item_list_name = stringOrNotAvailable(GTMItem.item_list_name);\n GTMData.item_list_id = stringOrNotAvailable(GTMItem.item_list_id);\n GTMData.index = numberOrZero(GTMItem.index);\n } else {\n GTMData.item_list_name = getStringAnalyticsValueFromStorage('GTM_item_list_name');\n GTMData.item_list_id = getStringAnalyticsValueFromStorage('GTM_item_list_id');\n GTMData.index = getNumberAnalyticsValueFromStorage('GTM_index');\n }\n return GTMData;\n },\n setBonusProductData ($container, index) {\n $container.data('item_list_name', 'free_product');\n $container.data('item_list_id', this.getListId());\n $container.data('index', index);\n $container.data('discount', $container.data('price'));\n $container.data('price', 0);\n }\n};\n","import NotifyHelper from './notify';\nimport SmartGiftHelper from './smartGiftHelper';\nimport { startCarouselTileImageFunction } from './productBox';\nimport { updatePrimaryImagesSlider } from './detail';\nimport sizePanel from './sizePanel';\nimport { addToCartFromListing } from './quickView.js';\nimport { newModalFromString } from '../components/modal';\nimport { runPersonalizationListener } from '../customize';\nimport { updateProductDetailUrl } from 'util/url';\nimport { createCookie } from '../util/common';\nimport { getGtmData } from '../analytics/helpers/helper';\nimport { handleWishlistContainer } from './wishlistHeart.js';\n\nconst isMiniCartOpen = () => {\n return localStorage.getItem('isMiniCartOpen') === 'true';\n};\n\nfunction isChooseBonusProductModalOpen () {\n return ($('.js-chooseBonusProductModal').length > 0);\n}\n\nfunction isQuickUpdateFromModal () {\n return $('.js-quickUpdateModal').length > 0;\n}\n\nconst isMobileDevice = () => {\n return !Foundation.MediaQuery.atLeast('large');\n};\n/**\n * Move close button inside modal content box\n */\nconst moveModalCloseButton = () => {\n var close = document.querySelector('.tingle-modal__close');\n var modalContent = document.querySelector('.tingle-modal-box__content');\n modalContent.appendChild(close);\n};\n\n/**\n * Retrieves the relevant pid value\n * @param {jquery} $el - DOM container for a given add to cart button\n * @return {string} - value to be used when adding product to cart\n */\nconst getPidValue = ($el) => {\n let pid;\n\n if ($('.quickview-modal').hasClass('tingle-modal--visible') && !$('.product-set').length) {\n pid = $('.quickview-modal').find('.product-quickview').data('pid');\n } else if ($('.product-set-detail').length || $('.product-set').length) {\n pid = $($el).closest('.product-detail').find('.product-id').text();\n } else if ($('.modal-size-show').length) {\n pid = $('.modal-size-show').find('.js-add-to-cart').data('pid');\n } else if (isMiniCartOpen()) {\n pid = $($el).data('pid');\n } else {\n pid = $('.product-detail:not(\".bundle-item\")').data('pid');\n }\n\n return pid;\n};\n\n/**\n * updates the product view when a product attribute of quickAdd is selected or deselected or when\n * changing quantity\n * @param {string} selectedValueUrl - the Url for the selected variation value\n * @param {jQuery} $productContainer - DOM element for current product\n * @param {string} type - type of filter selected\n */\nconst attributeSelectQuickAdd = (selectedValueUrl, $productContainer, type = '_', imagesShouldUpdate = true) => {\n if (selectedValueUrl) {\n $('body').trigger('product:beforeAttributeSelect', {\n url: selectedValueUrl,\n container: $productContainer\n });\n\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n success: data => {\n handleVariantResponseQuickAdd(data, $productContainer, imagesShouldUpdate);\n updateOptions(data.product.options, $productContainer);\n updateQuantities(data.product.quantities, $productContainer);\n $productContainer.attr('data-pid', data.product.id);\n $productContainer.find('.add-to-cart-quick-add').attr('data-pid', data.product.id);\n $productContainer.find('.add-to-cart-quick-add').attr('data-quantity', data.product.selectedQuantity);\n if ($productContainer.find('.add-to-cart-quick-add').data('mustAdd') === true) {\n $productContainer.find('.add-to-cart-quick-add').trigger('click');\n } else {\n $productContainer.find('.js-panel-opener-size-quick-add').trigger('click');\n $.spinner().stop();\n }\n },\n error: () => {\n $.spinner().stop();\n }\n });\n }\n};\n\nconst activatePromoAnimationMessage = () => {\n $('.js-pdpPromo').removeClass('hide');\n};\n\nconst reactivatePromoAnimationMessage = (promotionId, pdpCalloutMsgText) => {\n $('.js-pdpPromo').attr('data-promotion-id', promotionId);\n $('.js-pdpPromo-message').html(pdpCalloutMsgText);\n activatePromoAnimationMessage();\n};\n\n/**\n * updates the product view when a product attribute is selected or deselected or when changing quantity\n * @param {string} selectedValueUrl - the Url for the selected variation value\n * @param {jQuery} $productContainer - DOM element for current product\n * @param {string} type - type of filter selected\n * @param {boolean} imagesShouldUpdate - update images on attribute selection\n * @param {boolean} ignoreCTA - add immediately to cart without clicking on CTA\n */\nconst attributeSelect = (selectedValueUrl, $productContainer, type = '_', imagesShouldUpdate = true, ignoreCTA = false) => {\n if (selectedValueUrl) {\n // destroyPrimaryImagesSlider();\n $productContainer.prevObject.analyticsPromotion = false;\n\n $('body').trigger('product:beforeAttributeSelect', {\n url: selectedValueUrl,\n container: $productContainer\n });\n\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n success: data => {\n var isSize = data.variation.isSize;\n var isQuickViewModal = $productContainer.hasClass('product-quickview');\n\n if (isQuickViewModal && type !== 'color') {\n imagesShouldUpdate = false;\n }\n\n handleVariantResponse(data, $productContainer, imagesShouldUpdate, type);\n\n // Update PDP link if we are in QuickView and a color was selected\n if (type === 'color' && $('.quickview-modal').length) {\n let container = $('.quickview-modal').find('.see-product-details-link');\n container.attr('href', data.product.url);\n }\n\n handleVariationUrlsSelectSizeModal(data.variation.variationUrls);\n handlePromotionTag(data.product ,$productContainer);\n handleVariationUrlsSelectNotifyModal(data.product.variationAttributes[1].values);\n handleVariationComingSoonNotifyModal(data.product.variationAttributes[1].values);\n handleVariationComingSoon(data.product.comingSoon);\n handleVariationWishlistModal(data.product.variationAttributes[1].values);\n\n // here we check if the selected product has the size, if not we put a flag on isToLoad\n if (isSize == false) {\n $('#pidToAdd').attr('isToLoad', 'true');\n } else {\n $('#pidToAdd').attr('isToLoad', 'false');\n }\n $('.persButtonPdpPers').attr('disabled', false);\n $('#custom-page').attr('data-pid', data.product.id);\n $('.js-personalizeButtonCheckout').removeClass('disabled');\n $('.js-personalizeButtonCheckout').attr('disabled', false);\n updateOptions(data.product.options, $productContainer);\n updateQuantities(data.product.quantities, $productContainer);\n updateImageSaveForLater(data.product, $productContainer);\n if ($('.product-detail-keeper').length) {\n var pid = getPID(data.product);\n try {\n $($productContainer).find('.product-set').attr('data-pid', pid);\n } catch (e) {\n }\n $('.product-detail-keeper').attr('data-variant-pid', encodeURIComponent(pid));\n }\n\n if (isSize) {\n $('body').trigger('product:afterAttributeSelect', {\n data: data,\n container: $productContainer,\n type: type\n });\n }\n\n if (type === 'color') {\n if (data.product.promotions && data.product.promotions.length > 0) {\n const promoContainer = $('.js-promo-loyalty-message-pdp-underprice');\n const promoMessage = data.product.promotions[0].promoLoyaltyMessage;\n if (promoContainer && promoMessage && promoMessage.length) {\n promoContainer.html(promoMessage);\n } else {\n promoContainer.html('');\n }\n } else {\n $('.js-promo-loyalty-message-pdp-underprice').html('');\n }\n }\n\n const _updateInformation = (product) => {\n let selectorPrefix = '';\n if (product.variationAttributes[0].onSaleSelected || product.price.saleType) {\n selectorPrefix = '.onSaleContainer';\n } else {\n selectorPrefix = '.notOnSaleContainer';\n }\n\n $productContainer.find(selectorPrefix + ' .js-discount-msg').addClass('hidden');\n $productContainer.find(selectorPrefix + ' .js-promo-msg').addClass('hidden');\n\n if (product.price.discountValue) {\n $productContainer.prevObject.analyticsPromotion = true;\n $productContainer.find(selectorPrefix + ' .js-discount-msg')\n .html(`(${product.price.discountValue}%)`)\n .removeClass('hidden');\n if (product.promotions && product.promotions.length > 0) {\n if (product.promotions[0].calloutMsg) {\n $productContainer.find(selectorPrefix + ' .js-promo-msg')\n .html(product.promotions[0].calloutMsg)\n .removeClass('hidden');\n } else if (product.promotions[1] && product.promotions[1].calloutMsg) {\n $productContainer.find(selectorPrefix + ' .js-promo-msg')\n .html(product.promotions[1].calloutMsg)\n .removeClass('hidden');\n }\n }\n } else if (product.promotions && product.promotions.length > 0) {\n $productContainer.prevObject.analyticsPromotion = true;\n if (product.promotions[0].calloutMsg) {\n $productContainer.find(selectorPrefix + ' .js-promo-msg')\n .html(product.promotions[0].calloutMsg)\n .removeClass('hidden');\n } else if (product.promotions[1] && product.promotions[1].calloutMsg) {\n $productContainer.find(selectorPrefix + ' .js-promo-msg')\n .html(product.promotions[1].calloutMsg)\n .removeClass('hidden');\n }\n }\n };\n\n if (type !== 'size') {\n _updateInformation(data.product);\n }\n\n if ($('.modal-size-show').length) {\n $.spinner().stop();\n if (type === 'size') {\n $('body').trigger('quickBuy:addToCart', data);\n }\n }\n\n if ($('.js-customizePage').length > 0 && data.totalQuantityPrice) {\n $('.js-personalizePrice').text(data.totalQuantityPrice);\n }\n\n handleInexistentSizeQuickView(data);\n handleWishlistContainer(data.product.id);\n },\n error: function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n let current_url = window.location.pathname.split('/');\n var localized_error_page = window.location.protocol + '://' + window.location.host;\n for (var i = 0; i < current_url.length; i++) {\n if (current_url[i] !== 'product') {\n localized_error_page += '/' + current_url[i];\n } else {\n localized_error_page += '/404/';\n break;\n }\n }\n console.log('localized_error_page = ' + localized_error_page);\n window.location.href = localized_error_page;\n }\n $.spinner().stop();\n }\n }).then(function (data) {\n let stopSpinner = sizePanel.afterSizeSelection(data, type);\n if (stopSpinner) {\n $.spinner().stop();\n }\n if (ignoreCTA) {\n $('.js-prod-select-size-modal').find('button.js-add-to-cart').trigger('click');\n }\n if (type === 'color') {\n if (data.product.promotions.length === 0) {\n $('.js-pdpPromo').addClass('hide');\n } else if (data.product.promotions[0].id && data.product.promotions[0].id != $('.js-pdpPromo').attr('data-promotion-id')) {\n reactivatePromoAnimationMessage(data.product.promotions[0].id, data.product.promotions[0].pdpCalloutMsgText);\n } else {\n $('.js-pdpPromo').removeClass('hide');\n }\n }\n });\n }\n};\n\n/**\n * Retrieve contextual quantity selector\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {jquery} - quantity selector DOM container\n */\nconst getQuantitySelector = ($el) => {\n return $el && $('.set-items').length ?\n $($el).closest('.product-detail').find('.quantity-select') :\n $('.quantity-select');\n};\n\n/**\n * Retrieves the value associated with the Quantity pull-down menu\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {string} - value found in the quantity input\n */\nconst getQuantitySelected = ($el) => {\n let quantity = 1;\n if ($el.hasClass('js-add-to-cart-multipack') && $el.data('bundle-quantity')) {\n quantity = $el.data('bundle-quantity');\n } else if ($el.closest('.js-complete-your-promo-quick-view').length > 0) {\n quantity = $el.closest('.wrapper-inner-quick-bottom').find('.js-quick-quantity').val();\n } else if (getQuantitySelector($el).val()) {\n quantity = getQuantitySelector($el).val();\n }\n return quantity;\n};\n\n/**\n * Process the attribute values for an attribute that has image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nconst processSwatchValues = (attr, $productContainer) => {\n attr.values.forEach(attrValue => {\n const $attrValue = $productContainer.find(`[data-attr=\"${attr.id}\"] [data-attr-value=\"${attrValue.value}\"]`);\n const $swatchAnchor = $attrValue.parent();\n\n if (attrValue.selected) {\n $productContainer.find('.attribute-label').text(attrValue.id.toLowerCase() + ' - ' + attrValue.displayValue.toLowerCase());\n if ($('.js-pdpStickyBar-colorWrapper').length > 0) {\n $('.js-pdpStickyBar-colorWrapper .label-inside').text(attr.displayName + ': ' + attrValue.displayValue.toLowerCase() + ' - ' + attrValue.id.toLowerCase());\n $('.js-pdpStickyBar-colorWrapper img').attr('src', attrValue.images.swatch[0].url);\n $('.js-pdpStickyBar-colorWrapper img').attr('alt', attrValue.displayValue.toLowerCase() + ' - ' + attrValue.id.toLowerCase());\n }\n if ($attrValue[0]) {\n $productContainer.find(`[data-opener=\"${attr.id}\"] .attribute-selection`).html($attrValue[0].outerHTML);\n $attrValue.addClass('selected');\n }\n } else {\n $attrValue.removeClass('selected');\n }\n\n if (attrValue.url) {\n $swatchAnchor.attr('href', attrValue.url);\n } else {\n $swatchAnchor.removeAttr('href');\n }\n\n // Disable if not selectable\n $attrValue.removeClass('selectable unselectable soldout');\n $attrValue.addClass((attrValue.selectable || attrValue.isSoldout) ? 'selectable' : 'unselectable');\n if (attrValue.isSoldout) {\n $attrValue.addClass('soldout');\n }\n });\n};\n\n/**\n * Process attribute values associated with an attribute that does not have image swatches\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nconst processNonSwatchValues = (attr, $productContainer, variantType) => {\n const $attr = `[data-attr=\"${attr.id}\"]`;\n const $defaultOption = $productContainer.find(`${$attr} .select-${attr.id} option:first`);\n $defaultOption.attr('value', attr.resetUrl);\n $productContainer.find(`[data-opener=\"${attr.id}\"] .attribute-selection`).html('');\n\n $productContainer.find('.js-intProductDetail-size-item').addClass('hide');\n attr.values.forEach(attrValue => {\n if ($('.page').data('action') && $('.page').data('action').toLowerCase().indexOf('product-show') > -1 && $('#personalize-page') && !$productContainer.hasClass('js-complete-your-promo-quick-view')) {\n $productContainer = $('.js-intProductDetail');\n }\n const $attrValue = $productContainer.find(`${$attr} [data-attr-value=\"${attrValue.value}\"]`);\n const $attrValueMobile = $productContainer.find(`.size-panel-mobile-content [data-attr-value=\"${attrValue.value}_mobile\"]`);\n $attrValue.attr('value', attrValue.url).removeAttr('disabled');\n $attrValueMobile.attr('value', attrValue.variationUrl);\n if (!attrValue.selected) {\n $attrValueMobile.removeAttr('disabled');\n }\n $attrValue.attr('disabled', !attrValue.selectable);\n if (attrValue.isComingSoon && $productContainer.hasClass('product-quickview')) {\n $attrValue.attr('disabled', attrValue.isComingSoon);\n }\n\n if (attrValue.selected && attrValue.selectable && attrValue.id !== 'TU') {\n $productContainer.find(`[data-opener=\"${attr.id}\"] .attribute-selection`).html(attrValue.displayValue);\n $productContainer.find('.product-quickview').data('pid', attrValue.sku);\n }\n\n if (attrValue.selected && attrValue.selectable) {\n const selectedSizeSpan = $productContainer.find('.js-selected-size');\n\n if (selectedSizeSpan.length) {\n selectedSizeSpan.text(attrValue.displayValue);\n }\n }\n\n if ($attrValue.length > 1) {\n $attrValue.each((i, el) => {\n $(el).prop('checked', attrValue.selected && attrValue.selectable);\n });\n } else {\n $attrValue.prop('checked', attrValue.selected && attrValue.selectable);\n }\n\n if (variantType !== 'size') {\n if (!attrValue.selectable || attrValue.isComingSoon) {\n if ($('#isNotifyActive').val() == 'true') {\n $attrValue.siblings().addClass('notifyMe');\n $attrValueMobile.siblings().addClass('notifyMe');\n } else {\n $attrValue.siblings().addClass('wishlistOnly');\n $attrValueMobile.siblings().addClass('wishlistOnly');\n }\n } else {\n $attrValue.siblings().removeClass('notifyMe wishlistOnly');\n $attrValueMobile.siblings().removeClass('notifyMe wishlistOnly');\n }\n if (attrValue.lowAvailability) {\n $attrValue.siblings().addClass('low-stock');\n $attrValueMobile.siblings().addClass('low-stock');\n } else {\n $attrValue.siblings().removeClass('low-stock');\n $attrValueMobile.siblings().removeClass('low-stock');\n }\n }\n\n // Toggle size if disabled or not\n $attrValue.closest('label').toggleClass('hide', attrValue.disabled);\n $attrValueMobile.closest('label').toggleClass('hide', attrValue.disabled);\n\n // Toggle size in stickybar\n $('.js-pdpStickyBar').find('#' + $attrValue[0].id.replace('/', '\\\\/')).closest('label').toggleClass('hide', attrValue.disabled);\n\n // Same check on quick view mobile\n $attrValue.closest('.label-wrapper').toggleClass('hide', attrValue.disabled);\n\n // Toggle selectable size on cart quickview\n if ($('.quickview-modal').length) {\n $attrValue.closest('.boolean-field').toggleClass('cc-cartQuickView_selectedSize', attrValue.selected);\n }\n });\n\n // Update also size selection modal\n const $sizeSelectorContainer = $('#fis-select-size');\n attr.values.forEach(attrValue => {\n const $attrValue = $sizeSelectorContainer.find(`[data-attr-value=\"${attrValue.value}\"]`);\n $attrValue.attr('disabled', !attrValue.selectable);\n if (attrValue.isComingSoon && $productContainer.hasClass('product-quickview')) {\n $attrValue.attr('disabled', attrValue.isComingSoon);\n }\n\n if ($('#isNotifyActive').val() == 'true') {\n if (!attrValue.selectable || attrValue.isComingSoon) {\n $attrValue.addClass('notifyMe notifyPopup');\n $attrValue.find('.notifyIcon').removeClass('hide');\n } else {\n $attrValue.removeClass('notifyMe notifyPopup');\n $attrValue.find('.notifyIcon').addClass('hide');\n }\n } else {\n if (!attrValue.selectable) {\n $attrValue.addClass('wishlistOnly');\n } else {\n $attrValue.removeClass('wishlistOnly');\n }\n }\n\n // Toggle size if disabled or not\n $attrValue.parent('li').toggleClass('hide', attrValue.disabled);\n\n // TODO: improve check. Force size selection of quick add on PDP mobile\n if (!Foundation.MediaQuery.atLeast('large') && $productContainer.closest('.product-quickview').length) {\n $productContainer.find(`.mobile-attributes-container input[id=\"${attrValue.value}\"]`).prop('checked', attrValue.selected && attrValue.selectable);\n }\n });\n};\n\n/**\n * Routes the handling of attribute processing depending on whether the attribute has image\n * swatches or not\n *\n * @param {Object} attrs - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {string} variantType - Size or Color selection\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nconst updateAttrs = (attrs, $productContainer, variantType) => {\n // Currently, the only attribute type that has image swatches is Color.\n const attrsWithSwatches = ['color'];\n\n if ($('.js-personalizeButtonModal').attr('data-personalized') === 'true') {\n $productContainer = $('.fis-select-size');\n }\n\n attrs.forEach(attr => {\n if (attrsWithSwatches.indexOf(attr.attributeId) > -1) {\n processSwatchValues(attr, $productContainer);\n } else {\n processNonSwatchValues(attr, $productContainer, variantType);\n }\n });\n};\n\nconst updateScanTrustLink = (attr, $productContainer) => {\n let $productAuthenticity = $productContainer.find('.cc-details-authenticity-paragraph');\n if ($productAuthenticity.length > 0) {\n $productAuthenticity.find('.js-update-scantrustUrl').attr('href', attr.scanTrustUrlWithParams);\n } \n}\n\n/**\n * Updates the availability status in the Product Detail Page\n *\n * @param {Object} response - Ajax response object after an\n * attribute value has been [de]selected\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nconst updateAvailability = (response, $productContainer) => {\n let availabilityValue = '';\n let availabilityMessages = response.product.availability.messages;\n if (!response.product.readyToOrder) {\n availabilityValue = `
${response.resources.info_selectforstock}
`;\n } else if (response.product.availability.orderable) {\n availabilityMessages.forEach(message => {\n availabilityValue += `
${message}
`;\n });\n }\n\n if ($('.js-personalizeButtonModal').length > 0) {\n $productContainer = $('.tingle-modal-box__content');\n }\n\n $('.js-soldOut-message').addClass('hidden');\n if (!response.product.available || response.product.comingSoon || response.product.isSizeInexistent) {\n $('.js-soldOut-message').removeClass('hidden');\n $('.js-selected-size:not(.js-selected-size-not-available)').text('-');\n }\n\n $($productContainer).trigger('product:updateAvailability', {\n product: response.product,\n $productContainer: $productContainer,\n message: availabilityValue,\n resources: response.resources\n });\n\n if ($productContainer.hasClass('js-intProductDetail')) {\n if (response.product.isSoldout === true) {\n $productContainer.addClass('cc-isSoldOut js-isSoldOut');\n } else {\n $productContainer.removeClass('cc-isSoldOut js-isSoldOut');\n }\n }\n};\n\n/**\n * Generates html for quick add form\n *\n * @param {string} pid - pid used to get variation\n * @param {string} url - url of the Controller\n * @return Compiled HTML\n */\nconst showQuickAddItems = (pid, url) => {\n if ($('.js-modal-quick-add-size-quantity').attr('data-pid') === pid) {\n $('.js-modal-quick-add-size-quantity').removeClass('hidden');\n return;\n }\n $('.select-size-quick-add-container').empty();\n $.spinner().start();\n $.ajax({\n url: url,\n method: 'GET',\n data: {\n pid: pid\n },\n success: function (data) {\n $('.select-size-quick-add-container[data-pid=\"' + pid + '\"]').html(data);\n const $productContainer = $('.select-size-quick-add-container[data-pid=\"' + pid + '\"]').closest('.product-detail-quick-add');\n $productContainer.find('.add-to-cart-quick-add').attr('data-quantity', 1);\n var selectedValue = $productContainer.find('.add-to-cart-quick-add').attr('data-size-selected');\n if (selectedValue) {\n $productContainer.find('[data-attr-id=\"' + selectedValue + '\"]').attr('checked', true);\n $productContainer.find('.add-to-cart-quick-add').attr('data-size-available', true);\n } else {\n $productContainer.find('.add-to-cart-quick-add').attr('data-size-available', false);\n $productContainer.find('.size-selected').empty();\n }\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n};\n\n/**\n * @typedef UpdatedOptionValue\n * @type Object\n * @property {string} id - Option value ID for look up\n * @property {string} url - Updated option value selection URL\n */\n\n/**\n * @typedef OptionSelectionResponse\n * @type Object\n * @property {string} priceHtml - Updated price HTML code\n * @property {Object} options - Updated Options\n * @property {string} options.id - Option ID\n * @property {UpdatedOptionValue[]} options.values - Option values\n */\n\n/**\n * Updates DOM using post-option selection Ajax response\n *\n * @param {OptionSelectionResponse} options - Ajax response options from selecting a product option\n * @param {jQuery} $productContainer - DOM element for current product\n */\nconst updateOptions = (options, $productContainer) => {\n options.forEach(option => {\n const $optionEl = $productContainer.find(`.product-option[data-option-id*=\"${option.id}\"]`);\n option.values.forEach(value => {\n const valueEl = $optionEl.find(`option[data-value-id*=\"${value.id}\"]`);\n valueEl.val(value.url);\n });\n\n option.values.forEach(value => {\n const valueEl = $optionEl.find(`input[id=\"${value.id}\"]`);\n valueEl.data('href', value.url);\n valueEl.attr('href', value.url);\n });\n });\n};\n\nconst updateColorFamily = (product, $productContainer) => {\n $productContainer.find('.family-color').text(product.colorFamily.toLowerCase() + ' - ');\n\n for (let attr of product.variationAttributes) {\n if (attr.attributeId === 'color') {\n if (attr.onSaleSelected) {\n $productContainer.find('.product-color-sales.on-sale').removeClass('hidden');\n $productContainer.find('.product-color-sales.not-on-sale').addClass('hidden');\n } else {\n $productContainer.find('.product-color-sales.on-sale').addClass('hidden');\n $productContainer.find('.product-color-sales.not-on-sale').removeClass('hidden');\n }\n }\n }\n};\n\nconst updatePrices = (product, $productContainer, resources) => {\n if (!product.variationAttributes ||\n !product.variationAttributes[0] ||\n product.variationAttributes[0].attributeId !== 'color') {\n return;\n }\n let selectorPrefix = '';\n if (product.variationAttributes[0].onSaleSelected || product.price.discountValue) {\n selectorPrefix = '.onSaleContainer';\n } else {\n selectorPrefix = '.notOnSaleContainer';\n }\n const priceSelector = selectorPrefix + '.prices .price';\n const priceInfoSelector = ':not(.js-omnibusLabel-wrapper) > .cc-priceOmnibusLabel .price-info';\n const $oldPriceInfoSelector = $(':not(.js-omnibusLabel-wrapper) > .cc-priceOmnibusLabel .js-oldPriceInfo');\n const $regularPriceInfoDiscountSelector = $('.js-priceInfo-discountValue');\n const $oldPriceInfoDiscountSelector = $('.js-oldPriceInfo-discountValue');\n const $pricePercentage = $('.js-pricePercentage');\n const $priceSelector = $(priceSelector, $productContainer).length ?\n $(priceSelector, $productContainer) :\n $(priceSelector);\n const $priceInfoSelector = $(priceInfoSelector, $productContainer).length ?\n $(priceInfoSelector, $productContainer) :\n $(priceInfoSelector);\n const priceInfoInSaleContainerSelector = '.cc-intProductDetail-colors .cc-priceOmnibusLabel .price-info';\n const $priceInfoInSaleContainerSelector = $(priceInfoInSaleContainerSelector, $productContainer);\n const priceInfoInSaleContainerSelector2 = '.cc-intProductDetail-colors .cc-priceOmnibusLabel .js-oldPriceInfo';\n const $priceInfoInSaleContainerSelector2 = $(priceInfoInSaleContainerSelector2, $productContainer);\n const $omnibusPricelForSpecificCountries = $('.js-intProductDetail-attributes-wrapper .js-priceOmnibusLabel .price-info');\n window.onSalesInfoPrice = $priceInfoInSaleContainerSelector.text();\n $priceSelector.replaceWith(product.price.html);\n const currentCountryOmnibus = $oldPriceInfoSelector.closest('.js-omnibusStack').data('currentcountry');\n const isRegularOmnibusCountry = $oldPriceInfoSelector.closest('.js-omnibusStack').data('omnibuscountry');\n if (product.price.sales.formattedPriceInfo) {\n $priceInfoSelector.parent().show();\n $priceInfoSelector.html(product.price.sales.formattedPriceInfo);\n const isCountryWithTooltip = currentCountryOmnibus === 'IT' || currentCountryOmnibus === 'ES' || currentCountryOmnibus === 'SI';\n if (isCountryWithTooltip && resources.tooltip_omnibus && $('i.omnibus-tooltip').length === 0) {\n $('.product-main-price.onSaleContainer .price').append('i

' + resources.tooltip_omnibus + '

');\n }\n if (isRegularOmnibusCountry) {\n $oldPriceInfoSelector.parent().show();\n $oldPriceInfoDiscountSelector.html(product.price.sales.oldPriceOmnibus.priceInfoDiscountValue + '%');\n $oldPriceInfoDiscountSelector.show();\n }\n $oldPriceInfoSelector.html(product.price.list.formatted);\n $regularPriceInfoDiscountSelector.html(product.price.discountValue + '%');\n $priceInfoInSaleContainerSelector.parent().addClass('hidden');\n $priceInfoInSaleContainerSelector2.parent().addClass('hidden');\n $omnibusPricelForSpecificCountries.parent().addClass('hidden');\n window.onSalesInfoPrice = product.price.sales.formattedPriceInfo;\n $priceInfoInSaleContainerSelector2.html(product.price.sales.oldPriceOmnibus.price);\n $pricePercentage.hide();\n } else {\n $priceInfoSelector.parent().hide();\n $priceInfoSelector.html('');\n if (window.onSalesInfoPrice) {\n if (currentCountryOmnibus === 'IT' || currentCountryOmnibus === 'ES' || currentCountryOmnibus === 'SI') {\n $omnibusPricelForSpecificCountries.parent().removeClass('hidden');\n $omnibusPricelForSpecificCountries.html(window.onSalesInfoPrice);\n } else if (isRegularOmnibusCountry) {\n $priceInfoInSaleContainerSelector.parent().removeClass('hidden');\n $priceInfoInSaleContainerSelector.html(window.onSalesInfoPrice);\n $priceInfoInSaleContainerSelector2.parent().removeClass('hidden');\n } else {\n $priceInfoInSaleContainerSelector.parent().removeClass('hidden');\n $priceInfoInSaleContainerSelector.html(window.onSalesInfoPrice);\n }\n }\n $oldPriceInfoSelector.parent().hide();\n $oldPriceInfoSelector.html('');\n if (product.price.discountValue) {\n $pricePercentage.show();\n }\n }\n\n if (product.doubleCurrency && product.doubleCurrency.html) {\n const $doubleCurrencyContainer = $('#descriptionSidebar .js-priceSecondCurrency', $productContainer);\n const innerContent = $(product.doubleCurrency.html).html();\n $doubleCurrencyContainer.html(innerContent);\n }\n\n $productContainer.find(selectorPrefix + ' .js-discount-msg').addClass('hidden');\n $productContainer.find(selectorPrefix + ' .js-promo-msg').addClass('hidden');\n if (product.price.discountValue) {\n $productContainer.find(selectorPrefix + ' .js-discount-msg')\n .html(`(${product.price.discountValue}%)`)\n .removeClass('hidden');\n if (product.promotions && product.promotions.length > 0) {\n if (product.promotions[0].calloutMsg) {\n $productContainer.find(selectorPrefix + ' .js-promo-msg')\n .html(product.promotions[0].calloutMsg)\n .removeClass('hidden');\n } else if (product.promotions[1] && product.promotions[1].calloutMsg) {\n $productContainer.find(selectorPrefix + ' .js-promo-msg')\n .html(product.promotions[1].calloutMsg)\n .removeClass('hidden');\n }\n }\n } else if (product.promotions && product.promotions.length > 0) {\n if (product.promotions[0].calloutMsg) {\n $productContainer.find(selectorPrefix + ' .js-promo-msg')\n .html(product.promotions[0].calloutMsg)\n .removeClass('hidden');\n } else if (product.promotions[1] && product.promotions[1].calloutMsg) {\n $productContainer.find(selectorPrefix + ' .js-promo-msg')\n .html(product.promotions[1].calloutMsg)\n .removeClass('hidden');\n }\n }\n\n $productContainer.find(selectorPrefix + ' .js-loyalty').addClass('hidden');\n $productContainer.find(selectorPrefix + ' .js-loyaltysale').addClass('hidden');\n if (product.price.saleType) {\n let saleType = product.price.saleType;\n if (saleType === 'loyalty1' || saleType === 'loyalty2' || saleType === 'loyalty3' || saleType === 'loyalty4') {\n saleType = 'loyalty';\n } else if (saleType === 'loyaltysale1' || saleType === 'loyaltysale2' || saleType === 'loyaltysale3' || saleType === 'loyaltysale4') {\n saleType = 'loyaltysale';\n }\n $productContainer.find(selectorPrefix + ' .js-' + saleType).removeClass('hidden');\n }\n\n if (product.comingSoon) {\n $productContainer.find('.comingSoonBox').removeClass('hide');\n $productContainer.find('.comingSoonLabel-pdp').removeClass('hidden');\n $productContainer.find(selectorPrefix + ' .js-new-msg').addClass('hidden');\n $productContainer.find(selectorPrefix + ' .js-green-msg').addClass('hidden');\n // $productContainer.find(selectorPrefix + '.js-promo-msg').addClass('hidden');\n } else {\n $productContainer.find('.comingSoonBox').addClass('hide');\n $productContainer.find('.comingSoonLabel-pdp').addClass('hidden');\n $productContainer.find(selectorPrefix + ' .js-new-msg').addClass('hidden');\n $productContainer.find(selectorPrefix + ' .js-green-msg').addClass('hidden');\n if (product.New) {\n $productContainer.find(selectorPrefix + ' .js-new-msg').removeClass('hidden');\n }\n if (product.isGreen) {\n $productContainer.find(selectorPrefix + ' .js-new-msg').addClass('hidden');\n $productContainer.find(selectorPrefix + ' .js-green-msg').removeClass('hidden');\n }\n // $productContainer.find(selectorPrefix + '.js-promo-msg').removeClass('hidden');\n }\n};\n\n/**\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\n * @param {Object} response - response from Ajax call\n * @param {Object} response.product - Product object\n * @param {string} response.product.id - Product ID\n * @param {Object[]} response.product.variationAttributes - Product attributes\n * @param {Object[]} response.product.images - Product images\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\n * attributes have been selected. Used partially to\n * determine whether the Add to Cart button can be enabled\n * @param {jQuery} $productContainer - DOM element for a given product.\n */\nconst handleVariantResponseQuickAdd = (response, $productContainer, imagesShouldUpdate = true) => {\n if (response.product.variationAttributes) {\n updateAttrs(response.product.variationAttributes, $productContainer);\n }\n\n updateAvailability(response, $productContainer);\n\n $('body').trigger('product:updateAddToCartQuickAdd', {\n product: response.product,\n $productContainer: $productContainer\n }).trigger('product:statusUpdate', response.product);\n};\n\nconst updateImageSaveForLater = (product, $productContainer) => {\n $productContainer.find('.js-product-image-saveForLater').attr('src', product.images.small[0].url);\n $productContainer.find('.js-product-image-saveForLater').attr('alt', product.images.small[0].url);\n $productContainer.find('.js-product-image-saveForLater').attr('title', product.images.small[0].title);\n};\n\n/**\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\n * @param {Object} response - response from Ajax call\n * @param {Object} response.product - Product object\n * @param {string} response.product.id - Product ID\n * @param {Object[]} response.product.variationAttributes - Product attributes\n * @param {Object[]} response.product.images - Product images\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\n * attributes have been selected. Used partially to\n * determine whether the Add to Cart button can be enabled\n * @param {jQuery} $productContainer - DOM element for a given product.\n */\nconst handleVariantResponse = (response, $productContainer, imagesShouldUpdate = true, variantType) => {\n if (response.product.variationAttributes) {\n updateAttrs(response.product.variationAttributes, $productContainer, variantType);\n updateColorFamily(response.product, $productContainer);\n updateScanTrustLink(response, $productContainer);\n }\n const $container = $('.js-composition-info');\n\n if (response.product.partTypes) {\n $container.empty();\n const html = `
`;\n $container.append(html);\n\n for (var k = 0; k < response.product.partTypes.length; k++) {\n if (k == 0) {\n var type = `${response.product.partTypes[k].type}: `;\n $container.append(type);\n }\n if (k < response.product.partTypes.length - 1) {\n if (response.product.partTypes[k].type == response.product.partTypes[k + 1].type) {\n var comp = `${response.product.partTypes[k].percentage} % ${response.product.partTypes[k].material}, `;\n $container.append(comp);\n } else {\n var comp = `${response.product.partTypes[k].percentage} % ${response.product.partTypes[k].material}`;\n var type = `
${response.product.partTypes[k + 1].type}: `;\n\n $container.append(comp);\n $container.append(type);\n }\n } else {\n var comp = `${response.product.partTypes[k].percentage} % ${response.product.partTypes[k].material} `;\n $container.append(comp);\n }\n }\n const endTag = `
`;\n $container.append(endTag);\n } else if (response.product.mainComposition) {\n $container.empty();\n const html = `
`;\n $container.append(html);\n\n for (var k = 0; k < response.product.mainComposition.length; k++) {\n if (k == response.product.mainComposition.length - 1) {\n var comp = `${response.product.mainComposition[k].percentage} % ${response.product.mainComposition[k].material} `;\n } else {\n var comp = `${response.product.mainComposition[k].percentage} % ${response.product.mainComposition[k].material}, `;\n }\n\n $container.append(comp);\n }\n const endTag = `
`;\n $container.append(endTag);\n }\n\n // Update primary images\n if (imagesShouldUpdate) {\n const primaryImageUrls = response.product.images;\n if ($productContainer.hasClass('product-quickview:not(.product-quickview--get-product)')) {\n if ($productContainer.find('.carousel-inner').hasClass('slick-initialized')) {\n $productContainer.find('.carousel-inner').slick('destroy');\n }\n $productContainer.find('.carousel-inner').empty();\n $productContainer.find('.product-link-carousel').attr('href', response.product.selectedProductUrl);\n\n primaryImageUrls.large.forEach((imageUrl, idx) => {\n let $carouselInner = $($('#outer').html());\n $productContainer.find('.carousel-inner').append($carouselInner);\n\n let $imgContainer = $carouselInner.find('img');\n $imgContainer.data('index', idx);\n $imgContainer.attr('id', null);\n $imgContainer.attr('src', imageUrl.url).removeClass('hidden');\n });\n\n if (Foundation.MediaQuery.atLeast('large')) {\n $productContainer.find('.carousel-inner').slick({\n slidesToShow: 1,\n slidesToScroll: 1,\n dots: false\n });\n }\n } else if ($productContainer.hasClass('product-quickview--get-product')) {\n if ($productContainer.find('.carousel-inner').hasClass('slick-initialized')) {\n $productContainer.find('.carousel-inner').slick('destroy');\n }\n $productContainer.find('.carousel-inner').empty();\n $productContainer.find('.product-link-carousel').attr('href', response.product.selectedProductUrl);\n\n primaryImageUrls.large.forEach((imageUrl, idx) => {\n let $carouselInner = $($('#outer').html());\n $productContainer.find('.carousel-inner').append($carouselInner);\n\n let $imgContainer = $carouselInner.find('img');\n $imgContainer.data('index', idx);\n $imgContainer.attr('id', null);\n $imgContainer.attr('src', imageUrl.url).removeClass('hidden');\n });\n\n $productContainer.find('.carousel-inner').slick({\n dots: false,\n arrows: false,\n slidesToShow: 2.35,\n infinite: false,\n slidesToScroll: 1,\n responsive: [\n {\n breakpoint: 1023,\n settings: {\n slidesToShow: 2.5\n }\n }]\n });\n } else {\n $('.mobile-gallery').slick('slickUnfilter');\n $productContainer.find('.primary-images .carousel-item').addClass('hidden');\n $productContainer.find('.js-intProductDetail-images-container .desktop-gallery-item').addClass('hidden');\n $productContainer.find('.cc-intProductDetail-images').addClass('hidden');\n $('#zoomModal').data('numberOfImages', primaryImageUrls.large.length);\n // For each image check if tag is generated otherwise generate it and change its src\n primaryImageUrls.large.forEach((imageUrl, idx) => {\n var resizedUrls = '';\n if (imageUrl.resizedUrls) {\n var srcSetArray = imageUrl.resizedUrls.map((element, index) => {\n return element + ' ' + imageUrl.sizes[index].scaleWidth + 'w';\n });\n resizedUrls = srcSetArray.join(',');\n }\n let $imgContainer = $productContainer.find('.primary-images').find(`img[data-index=\"${idx}\"]`);\n let $imgContainerDesktop = $productContainer.find('.js-intProductDetail-images-container').find(`img[data-index=\"${idx}\"]`);\n let $imgZoomModal = $productContainer.find('.js-zoomModal').find(`img[data-index=\"${idx}\"]`);\n let $imgZoomModalMobile = $productContainer.find('.js-zoomModalMobile').find(`img[data-index=\"${idx}\"]`);\n\n if (!$imgContainer.length) {\n let newCarouselSlideHtml = $('#outer').html().replaceAll('{imgIdx}', idx);\n $productContainer.find('.primary-images').slick('slickAdd', newCarouselSlideHtml);\n $imgContainer = $productContainer.find(`.primary-images img[data-index=\"${idx}\"]`);\n }\n if (!$imgContainerDesktop.length) {\n let $galleryItemContainer = $($('#outer-desktop').html().replaceAll('{imgIdx}', idx));\n $productContainer.find('.js-intProductDetail-images-container').append($galleryItemContainer);\n\n $imgContainerDesktop = $galleryItemContainer.find('img');\n $imgContainerDesktop.attr('data-index', idx);\n }\n if (!$imgZoomModal.length) {\n let $zoomTemplate = $($('#zoom-template').html());\n $productContainer.find('.js-zoomModal-content').append($zoomTemplate);\n\n $imgZoomModal = $zoomTemplate.find('img');\n $imgZoomModal.attr('data-index', idx);\n }\n\n if (!$imgZoomModalMobile.length) {\n let $zoomTemplate = $($('#zoom-template').html().replaceAll('{imgIdx}', idx));\n $productContainer.find('.js-zoomModal-content').append($zoomTemplate);\n\n $imgZoomModalMobile = $zoomTemplate.find('img');\n $imgZoomModalMobile.attr('data-index', idx);\n }\n\n if (imageUrl.resizedUrls) {\n $productContainer.find('.primary-images').find(`img[data-index=\"${idx}\"]`).attr('data-srcset', resizedUrls);\n $productContainer.find('.js-intProductDetail-images-container').find(`img[data-index=\"${idx}\"]`).attr('data-srcset', resizedUrls);\n if ($imgZoomModal.length) {\n $imgZoomModal.attr('srcset', resizedUrls).attr('data-srcset', resizedUrls);\n }\n if ($imgZoomModalMobile.length) {\n $imgZoomModalMobile.attr('srcset', resizedUrls).attr('data-srcset', resizedUrls);\n }\n }\n $imgZoomModalMobile.attr('src', imageUrl.url).attr('data-src', imageUrl.url).removeClass('hidden');\n $imgZoomModal.attr('src', imageUrl.url).attr('data-src', imageUrl.url).removeClass('hidden');\n $productContainer.find(`.cc-intProductDetail-images[data-index=\"${idx}\"]`).removeClass('hidden');\n $productContainer.find('.primary-images').find(`img[data-index=\"${idx}\"]`).attr('src', imageUrl.url).attr('data-src', imageUrl.url).removeClass('lazyloaded').addClass('lazyload');\n $productContainer.find('.js-intProductDetail-images-container').find(`img[data-index=\"${idx}\"]`).attr('src', imageUrl.url).attr('data-src', imageUrl.url).removeClass('lazyloaded').addClass('lazyload');\n $productContainer.find('.primary-images').find(`.carousel-item[data-index=${idx}]`).removeClass('hidden');\n $productContainer.find('.js-intProductDetail-images-container').find(`.desktop-gallery-item[data-index=${idx}]`).removeClass('hidden');\n });\n const videoUrl = response.product.videoURL;\n $('.primary-images .js-productVideoContainer').remove();\n $('.js-intProductDetail-images-container .js-productVideoContainer').remove();\n if (videoUrl) {\n // insert primary video in mobile carousel\n let tmpl = $('.js-productVideoContainerOuter').clone()[0];\n tmpl.setAttribute('class', 'carousel-item cc-productVideoContaner js-productVideoContainer');\n $productContainer.find('.primary-images').slick('slickAdd', tmpl, 2, true);\n\n // insert primary video in desktop gallery\n tmpl = $($('#pdp-video-template-desktop').html());\n let $secondItem = $productContainer.find('.js-intProductDetail-images-container .desktop-gallery-item')[1];\n tmpl.insertAfter($secondItem);\n\n $productContainer.find('.js-productVideoContainer source').attr('src', videoUrl);\n\n let videoBlock = $productContainer.find('.js-productVideoContainer video');\n if (videoBlock && videoBlock.length > 0) {\n videoBlock[0].load();\n videoBlock[0].autoplay = true;\n }\n videoListener();\n }\n $('.primary-images').slick('slickGoTo', 0);\n $('.primary-images').slick('slickFilter', ':not(.hidden)');\n if (primaryImageUrls.small.length > 0) {\n $('.still-life-img').data('still-life', primaryImageUrls.small[0].url);\n }\n\n updatePrimaryImagesSlider(primaryImageUrls.large);\n }\n }\n\n // Update pricing\n if (response.product.price) {\n updatePrices(response.product, $productContainer, response.resources);\n }\n\n updateAvailability(response, $productContainer);\n // Enable \"Add to Cart\" button if all required attributes have been selected\n $('button.js-add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\n product: response.product,\n $productContainer: $productContainer\n }).trigger('product:statusUpdate', response.product);\n\n if ($('.js-personalizeButtonModal').length == 0) {\n careAndMaintenance(response.product.id);\n }\n\n var countryEnabled = window.PersonalizationEnabledCountries.PersonalizationEnabledCountries;\n if (response.variation.isPersonalizedVal && response.variation.positions > 0 && countryEnabled) {\n showButton(response);\n } else {\n $('#personalizeButton').addClass('hidden');\n }\n\n updateModelSize(response, $productContainer);\n};\n\nconst updateModelSize = (response, $productContainer) => {\n $('.js-product-model-size').addClass('hide');\n var modelSize = response.product.modelSize;\n if (!modelSize) {\n return;\n }\n\n $('.js-product-model-size').removeClass('hide').find('.js-modelSizeValue').text(modelSize);\n};\n\nconst handleVariationUrlsSelectSizeModal = (variationUrls) => {\n variationUrls.forEach(function (element) {\n $('#whislistSizeSelection-' + element.id).attr('data-attr-info-url', element.variationUrl);\n });\n};\nconst handlePromotionTag = (product, $productContainer) => {\n $productContainer.find('.js-promo-msg').addClass('hidden');\n if (product.promotions && product.promotions.length > 0) {\n for (var i = 0; i < product.promotions.length; i++) {\n if (product.promotions[i].promotionClass === 'PRODUCT' && product.promotions[i].calloutMsg) {\n $productContainer.find('.js-promo-msg').html(product.promotions[i].calloutMsg).removeClass('hidden');\n break;\n }\n }\n }\n};\n\nconst handleVariationUrlsSelectNotifyModal = (variationUrls) => {\n variationUrls.forEach(function (element) {\n if ((element.id).indexOf('/') != -1) {\n let cleanId = (element.id).split('/')[0] + '\\\\/' + (element.id).split('/')[1];\n $('#' + cleanId).attr('data-url', element.variationUrl);\n $('#' + cleanId).parent().attr('sku', element.sku);\n $('.add-size-saveForLater input[data-attr-value=\"' + cleanId + '\"]').parent().removeClass('disabled');\n if (!element.selectable) {\n $('.add-size-saveForLater input[data-attr-value=\"' + cleanId + '\"][data-sku=\"' + element.sku + '\"]').parent().addClass('disabled');\n }\n } else {\n $('#' + element.id).attr('data-url', element.variationUrl);\n $('#' + element.id).parent().attr('data-sku', element.sku);\n $('#' + element.id).attr('data-sku', element.sku);\n $('#' + element.id).attr('data-allocation', element.allocation);\n $('#' + element.id).parent().find('.js-container').removeClass('notifyPopup').removeClass('notifyMe');\n $('#' + element.id + '_mobile').parent().find('.js-container').removeClass('notifyPopup').removeClass('notifyMe');\n $('.js-add-size-saveForLater input[data-attr-value=\"' + element.id + '\"]').parent().removeClass('cc-disabled');\n $('.js-add-size-saveForLater input[data-attr-value=\"' + element.id + '\"]').parent().removeClass('cc-selected');\n if (element.selectable === false) {\n $('.js-add-size-saveForLater input[data-attr-value=\"' + element.id + '\"]').parent().addClass('cc-disabled');\n }\n if (element.selected === true) {\n $('.js-add-size-saveForLater input[data-attr-value=\"' + element.id + '\"]').parent().addClass('cc-selected');\n }\n if (element.allocation === 0 || element.isComingSoon) {\n $('.js-add-size-saveForLater input[data-attr-value=\"' + element.id + '\"]').parent().addClass('cc-disabled');\n $('#' + element.id).parent().find('.js-container').addClass('notifyMe').addClass('notifyPopup');\n $('#' + element.id + '_mobile').parent().find('.js-container').addClass('notifyMe').addClass('notifyPopup');\n }\n }\n });\n};\n\nconst handleVariationComingSoonNotifyModal = (comingSoons) => {\n comingSoons.forEach(function (element) {\n if ((element.id).indexOf('/') != -1) {\n let cleanId = (element.id).split('/')[0] + '\\\\/' + (element.id).split('/')[1];\n $('#' + cleanId).attr('data-isComingSoon', element.isComingSoon);\n } else {\n $('#' + element.id).attr('data-isComingSoon', element.isComingSoon);\n }\n });\n};\nconst handleVariationComingSoon = (comingSoons) => {\n if (!comingSoons) {\n $('.marketing-budge.js-comingSoonBox').addClass('hide');\n $('.js-comingSoonBox.pdp-comingSoonBox').addClass('hide');\n } else {\n $('.marketing-budge.js-comingSoonBox').removeClass('hide');\n $('.js-comingSoonBox.pdp-comingSoonBox').removeClass('hide');\n }\n};\n\nconst handleVariationWishlistModal = (variationUrls) => {\n variationUrls.forEach(function (element) {\n if ((element.id).indexOf('/') != -1) {\n let cleanId = (element.id).split('/')[0] + '\\\\/' + (element.id).split('/')[1];\n $('#fis-select-size-wishlist').find('#whislistSizeSelection').find('button*[data-attr-value=\"' + cleanId + '\"]').attr('data-attr-info-url', element.variationUrl);\n $('#fis-select-size-wishlist').find('#whislistSizeSelection').find('button*[data-attr-value=\"' + cleanId + '\"]').attr('data-attr-selectable', element.selectable ? 'selectable' : 'not-selectable');\n } else {\n $('#fis-select-size-wishlist').find('#whislistSizeSelection').find('button*[data-attr-value=\"' + element.id + '\"]').attr('data-attr-info-url', element.variationUrl);\n $('#fis-select-size-wishlist').find('#whislistSizeSelection').find('button*[data-attr-value=\"' + element.id + '\"]').attr('data-attr-selectable', element.selectable ? 'selectable' : 'not-selectable');\n }\n });\n};\n\n/**\n * This is a workaround for inexisting sizes for the cart's quick view.\n * It should be handled at decorator level but the list of actual variants is incoherent.\n */\nconst handleInexistentSizeQuickView = (data) => {\n if (!data.product.isSizeInexistent || !$('.quickview-modal').length) {\n return;\n }\n\n $('.product-content-size').find('input[data-size-id]').removeClass('hide')\n .closest('.boolean-field').removeClass('hide')\n .closest('.label-wrapper').removeClass('hide');\n};\n\nfunction showButton (response) {\n // $('#iconPersMobile').removeClass('hidden');\n if (response.variation.isPersonalizedVal === true) {\n $('#personalizeButton').removeClass('hidden');\n } else {\n $('#personalizeButton').addClass('hidden');\n }\n $('#personalizeButton')\n .attr('product-id', response.product.id)\n .attr('data-positions', response.variation.positions)\n .attr('data-customizations', response.variation.customizations)\n .attr('data-personalizationImgTop', response.variation.personalizationImgTop)\n .attr('data-personalizationImgDown', response.variation.personalizationImgDown);\n\n var link = $('#personalizeButton').attr('data-url') + '?pid=' + response.product.id +\n '&positions=' + response.variation.positions +\n '&quantity=' + response.product.selectedQuantity;\n $('#personalizeButton a').attr('href', link);\n $('#personalizeButton button').attr('data-url', link);\n\n var linkPlp = $('#personalizeButton').attr('data-url') + '?pid=' + response.product.id +\n '&positions=' + response.variation.positions +\n '&quantity=' + response.product.selectedQuantity +\n '&sizeAttribute=' + $('.persButtonPdpPers').attr('size-attribute');\n\n $('#persButtonPdpPersLink').attr('href', linkPlp);\n}\n\nfunction careAndMaintenance (pid) {\n $('#main-and-care-label-wash-description').removeClass('hidden');\n $('#main-and-care-label').addClass('hidden');\n\n if (!$('#main-and-care').length) {\n return;\n }\n\n $.ajax({\n url: $('#main-and-care').attr('data-url'),\n data: {\n pid: pid\n },\n method: 'GET',\n success: data => {\n $('#cm-container').empty().html(data.html);\n $.spinner().stop();\n },\n error: () => {\n $.spinner().stop();\n }\n });\n}\n\n/**\n * @typespec UpdatedQuantity\n * @type Object\n * @property {boolean} selected - Whether the quantity has been selected\n * @property {string} value - The number of products to purchase\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options,\n * etc.\n */\n\n/**\n * Updates the quantity DOM elements post Ajax call\n * @param {UpdatedQuantity[]} quantities -\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nconst updateQuantities = (quantities, $productContainer) => {\n if (!($productContainer.parent('.bonus-product-item').length > 0)) {\n const optionsHtml = quantities.map(quantity => {\n const selected = quantity.selected ? 'selected' : '';\n return ``;\n }).join('');\n if ($productContainer.hasClass('product-detail-quick-add')) {\n $('.quantity-select-quick-add').empty().html(optionsHtml);\n } else {\n getQuantitySelector($productContainer).empty().html(optionsHtml);\n }\n }\n};\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @return {string} - The provided URL to use when adding a product to the cart\n */\nconst getAddToCartUrl = () => {\n return $('.add-to-cart-url').val();\n};\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nconst parseHtml = html => {\n var $html = $('
').append($.parseHTML(html));\n\n var body = '';\n let $results = $html.find('.choice-of-bonus-product');\n for (let i = 0; i < $results.length; i++) {\n body += $results[i].outerHTML;\n }\n var footer = $html.find('.modal-footer').children().html();\n\n return {\n body: body,\n footer: footer\n };\n};\n\n// Generates a PID based on the current selected attributes\nconst getPID = (product) => {\n if (typeof product === 'string') {\n return product.trim();\n }\n\n // size and color have already been selected. In this case, the variation\n // group is built with the style of the product, 'color' and the selected\n // color variation\n if (product.productType === 'variant') {\n let sku = product.id;\n return sku;\n } else if (product.productType === 'variationGroup') {\n // in this case the user only chose the color, and not the size\n let pid = product.id.split('_')[0].trim();\n\n let selectedVariation;\n\n for (let k in product.variationAttributes) {\n const variationAttribute = product.variationAttributes[k];\n if (variationAttribute.attributeId === 'color') {\n for (let j in variationAttribute.values) {\n if (variationAttribute.values[j].selected === true) {\n selectedVariation = variationAttribute.values[j].value;\n break;\n }\n }\n }\n if (selectedVariation !== undefined) {\n break;\n }\n }\n\n return pid + '_color_' + selectedVariation;\n }\n\n return '';\n};\n\n/**\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\n * @param {string} response - ajax response from clicking the add to cart button\n */\nconst handlePostCartAdd = (response) => {\n $('.js-mainHeader-minicart').trigger('count:update', response);\n \n const cookies = document.cookie.split(';');\n let cookieSizebaySessionId = null;\n for (let i = 0; i < cookies.length; i++) {\n const cookie = cookies[i].trim();\n if (cookie.startsWith('SIZEBAY_SESSION_ID_V4')) {\n cookieSizebaySessionId = cookie.substring('SIZEBAY_SESSION_ID_V4='.length).replaceAll('\"', '');\n break;\n }\n };\n\n if (cookieSizebaySessionId === null) {\n let urlSessionId = document.querySelector('#sizebayAddProduct').getAttribute('data-sizebaysessionidurl');\n fetch(urlSessionId)\n .then(response => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response.json();\n })\n .then(data => {\n createCookie('SIZEBAY_SESSION_ID_V4', data);\n callSizebayAPI(data);\n })\n } else {\n callSizebayAPI(cookieSizebaySessionId);\n }\n};\n\nfunction callSizebayAPI(data) {\n let url = document.querySelector('#sizebayAddProduct').getAttribute('data-sizebay-link') + '=' + data;\n let brandURL = document.querySelector('#sizebayAddProduct').getAttribute('data-referrer-sizebay-link');\n let currentCountry = document.querySelector('#sizebayAddProduct').getAttribute('data-sizebay-locale');\n if (!brandURL.includes(currentCountry)) {\n brandURL += '/' + currentCountry + '/';\n }\n let permaURL = brandURL + document.querySelector('.analytics.product.hidden').getAttribute('data-item_id');\n let urlSizebay = new URL(url);\n if (urlSizebay.searchParams.has('sid') && urlSizebay.searchParams.get('sid') === 'null') {\n urlSizebay.searchParams.set('sid', data.trim().replace(/^\"|\"$/g, ''));\n url = urlSizebay.toString();\n }\n let payload = JSON.stringify({\n \"products\": [\n {\n \"permalink\": permaURL\n }\n ],\n \"tenantId\": 2399\n });\n\n let device = $('.cc-intProductDetail-left-content .cell .js-intProductDetail-images-container.cc-intProductDetail-images-container').css('display') === 'block' ? 'mobile' : 'desktop';\n let referrerURL = new URL(window.location.href);\n try {\n fetch(url, {\n method: 'POST',\n body: payload,\n referrerPolicy: \"origin-when-cross-origin\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n tenant_id: '2399',\n device: device,\n referer: referrerURL.hostname\n }\n });\n } catch (error) {\n console.error(\"Error: \", error);\n }\n}\n\nfunction updateQuantityPicker (source) {\n if (source === null || source.closest('.js-pdpStickyBar-btn').length > 0 || source.closest('.js-customizePage').length > 0) {\n source = $('.attribute-container.quantity');\n } else {\n source = source.closest('.attribute-container.quantity');\n }\n\n let value = parseInt(source.find('.js-quantity-value').html());\n if (value === 10) {\n source.find('.js-quantity-button[data-action=\"increase\"]').addClass('disabled');\n source.find('.js-quantity-button[data-action=\"decrease\"]').removeClass('disabled');\n if ($('.js-pdpStickyBar-btn').length > 0) {\n $('.js-pdpStickyBar-btn .js-quantity-button[data-action=\"increase\"]').addClass('disabled');\n $('.js-pdpStickyBar-btn .js-quantity-button[data-action=\"decrease\"]').removeClass('disabled');\n }\n } else if (value === 1) {\n source.find('.js-quantity-button[data-action=\"decrease\"]').addClass('disabled');\n source.find('.js-quantity-button[data-action=\"increase\"]').removeClass('disabled');\n if ($('.js-pdpStickyBar-btn').length > 0) {\n $('.js-pdpStickyBar-btn .js-quantity-button[data-action=\"decrease\"]').addClass('disabled');\n $('.js-pdpStickyBar-btn .js-quantity-button[data-action=\"increase\"]').removeClass('disabled');\n }\n } else {\n source.find('.js-quantity-button[data-action=\"increase\"]').removeClass('disabled');\n source.find('.js-quantity-button[data-action=\"decrease\"]').removeClass('disabled');\n if ($('.js-pdpStickyBar-btn').length > 0) {\n $('.js-pdpStickyBar-btn .js-quantity-button[data-action=\"increase\"]').removeClass('disabled');\n $('.js-pdpStickyBar-btn .js-quantity-button[data-action=\"decrease\"]').removeClass('disabled');\n }\n }\n}\n\nconst calculateWatchedTime = (video) => {\n let percentageWatched = video.currentTime * 100 / video.duration;\n return percentageWatched;\n};\n\nconst triggerVideoInteractionEvent = (action, fullPageLoad) => {\n $('body').trigger('analytics:videoInteraction', {action: action, fullPageLoad: fullPageLoad});\n};\n\nconst videoListener = (fullPageLoad = false) => {\n const $videoBlockContainer = $('.js-productVideoContainer');\n const $videoPlayMiniatureIcon = $('.productVideoMiniatureMobile.js-productVideoMiniatureMobile').find('.videoMiniatureIcon');\n let percentageWatched = 0;\n let firstPlayback = true;\n let watchedFullVideo = false;\n let videoStartInSeconds = 0;\n let videoEndInSeconds = 0;\n if ($videoBlockContainer.length > 0 && !$videoBlockContainer.hasClass('hidden')) {\n var myVideo = $videoBlockContainer.find('video')[0];\n myVideo.onended = function () {\n myVideo.currentTime = 0;\n };\n myVideo.onplaying = function () {\n if (myVideo.autoplay) {\n triggerVideoInteractionEvent('auto_play', fullPageLoad);\n }\n myVideo.autoplay = false;\n };\n myVideo.onpause = function () {\n if (!firstPlayback) {\n watchedFullVideo = videoEndInSeconds - videoStartInSeconds > myVideo.duration;\n triggerVideoInteractionEvent('pause', fullPageLoad);\n if (watchedFullVideo) {\n triggerVideoInteractionEvent('full_view', fullPageLoad);\n } else if (percentageWatched >= 25 && percentageWatched < 50) {\n triggerVideoInteractionEvent('view25', fullPageLoad);\n } else if (percentageWatched >= 50 && percentageWatched < 75) {\n triggerVideoInteractionEvent('view50', fullPageLoad);\n } else if (percentageWatched >= 75 && percentageWatched < 100) {\n triggerVideoInteractionEvent('view75', fullPageLoad);\n } else if (percentageWatched === 100) {\n triggerVideoInteractionEvent('full_view', fullPageLoad);\n }\n }\n firstPlayback = false;\n };\n $('.js-pauseVideoIcon').on('click', function () {\n myVideo.loop = false;\n percentageWatched = calculateWatchedTime(myVideo);\n videoEndInSeconds = new Date().getTime() / 1000;\n myVideo.pause();\n myVideo.currentTime = 0;\n $videoBlockContainer.find('.js-pauseVideoIcon').addClass('hide');\n $videoBlockContainer.find('.js-playVideoIcon').removeClass('hide');\n $videoPlayMiniatureIcon.removeClass('black-border');\n });\n $('.js-playVideoIcon').on('click', function () {\n myVideo.loop = true;\n $videoBlockContainer.find('.js-pauseVideoIcon').removeClass('hide');\n $videoBlockContainer.find('.js-playVideoIcon').addClass('hide');\n $videoPlayMiniatureIcon.addClass('black-border');\n if (myVideo.paused && !myVideo.autoplay) {\n triggerVideoInteractionEvent('play', fullPageLoad);\n }\n videoStartInSeconds = new Date().getTime() / 1000;\n myVideo.play();\n });\n }\n};\n\n/**\n * reorder the swatches in $swatchContainer in order to push the soldout ones at the end\n */\nconst reorderSwatches = ($swatchContainer) => {\n if ($swatchContainer.find('span.swatch-value.soldout').length === 0) {\n return;\n }\n var $soldoutColorsContainers = $swatchContainer.find('span.swatch-value.soldout').closest('div');\n var $lastNonSoldoutColorContainer = $swatchContainer.find('span.swatch-value').closest('div').not($soldoutColorsContainers).last();\n $soldoutColorsContainers.insertAfter($lastNonSoldoutColorContainer);\n};\n\nclass ProductHelpers {\n constructor () {\n this.freeGiftDetailsModal = 'freeGiftDetailsModal';\n this.bonusProductModal = null;\n this.methods = {\n getPidValue: function ($el) {\n return getPidValue($el);\n }\n };\n }\n\n run () {\n this.colorAttribute();\n this.colorAttributeQuickAddListing();\n this.sizeAttribute();\n this.sizeAttributeQuickAddListing();\n this.sizeAttributeQuickAddPDP();\n this.sizeAttributeSet();\n this.quantity();\n this.availability();\n this.addToCart();\n // this.selectBonusProduct();\n // this.removeBonusProduct();\n // this.enableBonusProductSelection();\n // this.showMoreBonusProducts();\n // this.closeBonusProductModal();\n // this.enableAddAfterBonusColorSelection();\n // this.removeSizePickerPopup();\n // this.addBonusProductsToCart();\n // this.handleBonusSize();\n // this.handleBonusColor();\n // this.removeColorPickerPopup();\n this.careAndMaintenanceClick();\n this.personalizationButton();\n this.sizeTU();\n this.quickAddListener();\n videoListener(true);\n NotifyHelper.notifyMeModal();\n this.checkSoldoutAvailability();\n SmartGiftHelper.run();\n sizePanel.init();\n this.registerAttributionTokenSending();\n this.loadGoogleRecommendations();\n this.createNextPageToken();\n }\n\n personalizationButton () {\n $('body').on('click', '.persButt', (e) => {\n e.preventDefault();\n // Simulate disabled button with class to allow click and event\n if ($(e.currentTarget).data('disabled') || !this.isSizeSelected()) {\n // If no size is selected, open modal to choose one\n\n if ($(e.currentTarget).closest('.quickview-modal').length) {\n // QuickView (Open the other modal type)\n\n let modal = $('.js-modal-quick-size-quantity');\n // First check if it is open\n if (modal.hasClass('open')) {\n // Check if size is selected, then add to cart\n } else {\n // Show it\n modal.removeClass('hidden').addClass('open');\n modal.find('.slick-slider.slick-initialized').slick('refresh');\n\n modal.find('.js-close-select-size').on('click', function (e) {\n modal.addClass('hidden').removeClass('open');\n });\n }\n } else if (!($(e.currentTarget).hasClass('persButtMobile') && !$('.pdp-buy-look-container').hasClass('hidden'))) {\n sizePanel.openSizePanel(sizePanel.Types.PERSONALIZE);\n }\n\n // Prevent further progress until a size is selected\n e.preventDefault();\n } else {\n if ($('.jsPersonalizationToolModal').length === 0) {\n let url = $(e.currentTarget).attr('data-url') || $(e.currentTarget).data('url');\n $.get(url, function (data) {\n if (data && data !== '') {\n let modal = newModalFromString(data, true, ['jsPersonalizationToolModal'], () => {\n // TODO: On Open Actions\n $('.tingle-modal .close').on('click touchstart', function (e) {\n e.preventDefault();\n modal.close();\n modal.destroy();\n });\n }, () => {\n // TODO: On Close Actions\n $('[data-attr=\"size\"] input.js-mobile-size-selected').prop('checked', true);\n });\n $(modal.modalBox).addClass('rightModalAttribute cc-detailsPopup-modalBox rightModalAttribute_sizeXtraLarge');\n modal.open();\n runPersonalizationListener();\n }\n });\n }\n }\n });\n }\n\n careAndMaintenanceClick () {\n $(document).on('click', '.js-caremaintenance-container ul.tabs li', function () {\n $('.js-caremaintenance-container ul.tabs li').removeClass('current');\n $('.tab-content').removeClass('current');\n $(this).addClass('current');\n const description = $(this).data('tab');\n $(`#${description}`).addClass('current');\n });\n }\n\n colorAttribute () {\n $('body').on('click', '[data-attr=\"color\"] a', e => {\n e.preventDefault();\n if ($(e.currentTarget).attr('disabled') || $(e.currentTarget).find('.swatch-value').hasClass('selected')) {\n return;\n }\n var $productContainer = $(e.currentTarget).closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $(e.currentTarget).closest('.product-detail');\n }\n\n if (!$productContainer.length && $(e.currentTarget).hasClass('saveToLater')) {\n $productContainer = $('.wishlist-product-card').closest('.product-detail');\n }\n\n let imagesShouldUpdate = true;\n if ($productContainer.hasClass('cart-line-item')) {\n imagesShouldUpdate = false;\n }\n attributeSelect(e.currentTarget.href, $productContainer, 'color', imagesShouldUpdate);\n let color = $productContainer.prevObject.children('span').data('attr-value');\n var firstPart = $productContainer.attr('data-pid');\n var firstPartSplit = firstPart.split('_');\n var firstPartSKU = '';\n if (firstPartSplit.length > 1) {\n firstPartSKU = firstPartSplit[0];\n } else {\n firstPartSKU = firstPart;\n }\n\n var sku = null;\n let splitSku = firstPartSKU ? firstPartSKU.replace(/\\s+/g, '_').split('_') : [];\n let productId = splitSku[0];\n\n if ($('.page[data-action=\"Product-Show\"]').length > 0) {\n let size = $('.selected-size-value').first().text().trim();\n $('#analyticsSelectedColor').val(color);\n\n sku = size && size !== 'false' ? productId + '_' + color + '_' + size : productId + '_' + color;\n $('body').trigger('product:didChangeColor', {sku: sku});\n } else if ($('.page[data-action=\"Cart-Show\"]').length > 0) {\n let selectedSize = $('.cc-cartQuickView_selectedSize').attr('for');\n let colorValue = $(e.currentTarget).data('color-value');\n $('#analyticsSelectedColor').val(colorValue);\n\n sku = selectedSize ? productId + '_' + colorValue + '_' + selectedSize : productId + '_' + colorValue;\n $('body').trigger('product:didChangeColor', {sku: sku});\n }\n });\n\n $('body').on('click', '.product-detail [data-attr=\"color\"] a', e => {\n if ($(e.currentTarget).parents('.quickview-modal').length !== 0) {\n return;\n }\n // Get new color to push to query string\n var selectedColor = $(e.currentTarget).data('color-value');\n if (!selectedColor) {\n return;\n }\n // Perform URL query string update\n updateProductDetailUrl('_col_', selectedColor);\n });\n }\n\n colorAttributeQuickAddListing () {\n $('body').on('click', '[data-attr=\"color-listing\"] a', e => {\n e.preventDefault();\n if ($(e.currentTarget).attr('disabled') || $(e.currentTarget).find('.swatch-value').hasClass('selected')) {\n return;\n }\n\n var url = $(e.currentTarget).attr('href');\n $.spinner().start();\n $.ajax({\n url: url,\n type: 'GET',\n success: function (data) {\n const $productTile = $(e.target).closest('.product-tile-cell');\n $productTile.html(data);\n startCarouselTileImageFunction($productTile.find('.js-tileImageCarousel'));\n $('body').trigger('product:didChangeColor');\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n }\n\n sizeAttribute () {\n $('body').on('change', '[data-attr=\"size\"] input', e => {\n e.preventDefault();\n $('.size-available').attr('available', true);\n const selectedValue = $(e.currentTarget).attr('value');\n $('#size').attr('size-attribute', $(e.currentTarget).attr('data-attr-value'));\n $('.persButtonPdpPers').attr('size-attribute', $(e.currentTarget).attr('data-attr-value'));\n if (selectedValue === 'null') {\n return;\n }\n\n let $productContainer = $(e.currentTarget).closest('.set-item');\n if (!$productContainer.length) {\n if ($(e.currentTarget).hasClass('js-add-size-saveForLater')) {\n var sku = $(e.currentTarget).data('sku');\n $productContainer = $(e.currentTarget).closest('.cart-line-item-sku-' + sku);\n } else {\n $productContainer = $(e.currentTarget).closest('.product-detail');\n }\n }\n if ($(e.currentTarget).closest('.product-quickview') && $(e.currentTarget).closest('.product-quickview').length) {\n $('.selectSizeQuickView').removeClass('toSelect');\n }\n if ($(e.currentTarget).closest('.js-complete-your-promo-quick-view')) {\n $(e.currentTarget).closest('.js-complete-your-promo-quick-view').find('.add-to-cart-global').data('disabled', false);\n }\n\n let ignoreCTA = $('.js-prod-select-size-modal').length && !Foundation.MediaQuery.atLeast('large');\n let isPdp = $('.page').data('action') && $('.page').data('action').toLowerCase().indexOf('product-show') > -1;\n let isPeronalizePage = $('#personalize-page');\n if (isPdp && isPeronalizePage) {\n $productContainer = $('.js-intProductDetail');\n }\n if ($('.js-complete-your-promo-quick-view').length > 0) {\n $productContainer = $('.js-complete-your-promo-quick-view');\n }\n if (isPdp && $('.js-prod-select-size-modal').length || isPeronalizePage && $('.js-prod-select-size-modal').length) {\n ignoreCTA = false;\n }\n\n let imagesShouldUpdate = true;\n if ($productContainer.hasClass('cart-line-item') || $productContainer.hasClass('js-complete-your-promo-quick-view') ) {\n imagesShouldUpdate = false;\n }\n attributeSelect(selectedValue, $productContainer, 'size', imagesShouldUpdate, ignoreCTA);\n var sizeData = $(e.currentTarget).data('attr-value');\n var skuData = $productContainer.data('variant-pid');\n skuData = skuData ? decodeURI(skuData).replace(/\\s+/g, '_') : '';\n\n let color = $('#analyticsSelectedColor').val();\n let splitSkuData = skuData ? skuData.split('_') : [];\n\n skuData = splitSkuData.length >= 2 && color.trim().length > 0 ? splitSkuData[0] + '_' + color : skuData;\n\n if ($('.page[data-action=\"Product-Show\"]').length > 0) {\n $('body').trigger('product:didChangeSize', { size: sizeData, sku: skuData });\n } else if ($('.page[data-action=\"Cart-Show\"]').length > 0) {\n $('body').trigger('product:didChangeSize', { size: sizeData, sku: skuData });\n }\n });\n $('.js-container').on('keydown', function (e) {\n if (e.type === 'keydown' && e.originalEvent.code === 'Enter') {\n $(e.currentTarget).trigger('click');\n }\n });\n $('body').on('change', '[data-attr=\"size-mobile\"] input', e => {\n e.preventDefault();\n $(\"[data-attr='size-mobile'] input\")\n .removeClass('js-mobile-size-selected')\n .closest('.js-intProductDetail-size-item')\n .removeClass('cc-intProductDetail-size-item_selected');\n $(e.currentTarget)\n .addClass('js-mobile-size-selected')\n .closest('.js-intProductDetail-size-item')\n .addClass('cc-intProductDetail-size-item_selected');\n let selectedSize = $(e.currentTarget).data('size-id');\n let $sizeSelectedeElem = $(`[data-size-id=\"${selectedSize}\"]`);\n $sizeSelectedeElem.each(function (element) {\n $(this).closest('.js-intProductDetail-size-item').addClass('cc-intProductDetail-size-item_selected');\n });\n $('js-sizeBox-openPanel').attr('');\n $('.js-selectedSizeMobile').text($(e.currentTarget).data('size-value'));\n $('#product-error-msg-mobile').addClass('invisible');\n $('#product-error-msg').hide();\n });\n $('body').on('click', '.js-linkMobileModalConfirmSize', e => {\n let $sizeSelected = $(\"[data-attr='size-mobile'] input.js-mobile-size-selected\");\n $('.size-available').attr('available', true);\n const selectedValue = $sizeSelected.attr('value');\n $('#size').attr('size-attribute', $sizeSelected.attr('data-attr-value'));\n $('.persButtonPdpPers').attr('size-attribute', $sizeSelected.attr('data-attr-value'));\n if (selectedValue === undefined || selectedValue === null || selectedValue === 'null') {\n $('#product-error-msg-mobile').removeClass('invisible');\n return;\n }\n $('#product-error-msg-mobile').addClass('invisible');\n\n let $productContainer = $sizeSelected.closest('.set-item');\n if (!$productContainer.length) {\n $productContainer = $sizeSelected.closest('.product-detail');\n }\n if ($sizeSelected.closest('.product-quickview') && $sizeSelected.closest('.product-quickview').length) {\n $('.selectSizeQuickView').removeClass('toSelect');\n }\n\n let ignoreCTA = $('.js-prod-select-size-modal').length && !Foundation.MediaQuery.atLeast('large');\n let isPdp = $('.page').data('action') && $('.page').data('action').toLowerCase().indexOf('product-show') > -1;\n let isPeronalizePage = $('#personalize-page');\n if (isPdp && $('.js-prod-select-size-modal').length || isPeronalizePage && $('.js-prod-select-size-modal').length) {\n ignoreCTA = false;\n }\n\n let imagesShouldUpdate = true;\n if ($productContainer.hasClass('cart-line-item')) {\n imagesShouldUpdate = false;\n }\n attributeSelect(selectedValue, $productContainer, 'size', imagesShouldUpdate, ignoreCTA);\n var sizeData = null;\n var skuData = null;\n if ($('.page[data-action=\"Product-Show\"]').length > 0) {\n sizeData = $sizeSelected.attr('data-attr-value');\n skuData = $productContainer.data('master-pid');\n }\n $('body').trigger('product:didChangeSize', { size: sizeData, sku: skuData });\n });\n $('body').on('change', '[data-attr=\"size\"] input', e => {\n e.preventDefault();\n $(\"[data-attr='size'] input\")\n .removeClass('js-mobile-size-selected')\n .closest('.js-intProductDetail-size-item')\n .removeClass('cc-intProductDetail-size-item_selected');\n $(e.currentTarget)\n .addClass('js-mobile-size-selected');\n let selectedSize = $(e.currentTarget).data('size-id');\n let $sizeSelectedeElem = $(`[data-size-id=\"${selectedSize}\"]`);\n $sizeSelectedeElem.each(function (element) {\n $(this).closest('.js-intProductDetail-size-item').addClass('cc-intProductDetail-size-item_selected');\n });\n $('#product-error-msg').hide();\n });\n }\n\n sizeAttributeQuickAddListing () {\n $('body').on('click', '.quick-buy-sizes-item', function (e) {\n e.preventDefault();\n\n const selectedValue = $(e.currentTarget).data('url');\n if (selectedValue === 'null') {\n return;\n }\n\n let $productContainer = $(e.currentTarget).closest('.product-tile');\n let imagesShouldUpdate = true;\n if ($productContainer.hasClass('cart-line-item')) {\n imagesShouldUpdate = false;\n }\n attributeSelect(selectedValue, $productContainer, 'size', imagesShouldUpdate, true);\n $('body').trigger('product:didChangeSize');\n });\n\n $('body').on('quickBuy:addToCart', function (e, data) {\n if (!$('.modal-size-show').length) {\n return;\n }\n\n $('.modal-size-show').find('.js-add-to-cart').data('pid', data.product.id).trigger('click');\n $('body').trigger('quickBuy:afterAddToCart');\n });\n }\n\n sizeAttributeQuickAddPDP () {\n if ($('.page').data('action') !== 'Product-Show') {\n return;\n }\n $('body').on('click', '.js-quick-buy-sizes-item-pdp', function (e) {\n e.preventDefault();\n if ($(this).hasClass('disable') || !$(this).data('variant')) {\n return false;\n }\n\n var url = $(this).data('variant');\n $.spinner().start();\n $.ajax({\n url: url,\n type: 'GET',\n dataType: 'json',\n success: function (response) {\n $.spinner().stop();\n const $productContainer = $(e.target);\n\n // For minicart promo carousel\n var promotionId = $productContainer.closest('.product').find('.promotion-info-plp').data('promo-id') || false;\n\n if (response.product.available && !response.product.comingSoon) {\n addToCartFromListing(response.product.id, promotionId, $productContainer);\n } else {\n $('body').trigger('product:afterAddToCartFailed', {\n ...response,\n $productContainer\n });\n }\n },\n error: function (err) {\n console.error('ErrorCase: ' + err.message);\n $.spinner().stop();\n }\n });\n });\n }\n\n sizeAttributeSet () {\n $('.set-size').on('click', function (e) {\n $($(e.currentTarget).closest('.product-content-size')[0]).children('.set-size').children('.radio-label-set').removeClass('setsize-selected');\n $(e.currentTarget).children('.radio-label-set').addClass('setsize-selected');\n const selectedValue = e.currentTarget.children[0].value;\n if (selectedValue === 'null') {\n return;\n }\n\n var $productContainer = $(e.currentTarget).closest('.product-detail');\n attributeSelect(selectedValue, $productContainer, 'size', false);\n\n $('body').trigger('product:didChangeSize');\n });\n }\n\n isSizeSelected () {\n if ($('.page-checkout').length > 0 || $('.cart-page').length > 0 || $('.modal-size-show').length > 0 || isMiniCartOpen()) {\n return true;\n }\n return $('[data-attr=\"size\"] input:checked').length > 0;\n };\n\n quantity () {\n updateQuantityPicker(null);\n\n $('body').on('click', '.js-quantity-button', function (e) {\n const $button = $(this);\n var $target = $button.closest('.quantity').find('.js-quantity-value');\n var $input = $button.closest('.quantity').find('.quantity-select');\n if ($button.hasClass('js-quantity-button-quick-add')) {\n $target = $button.closest('.quantity').find('.js-quantity-value-quick-add');\n $input = $button.closest('.quantity').find('.quantity-select-quick-add');\n }\n const value = parseInt($target.text());\n if ($button.data('action') === 'increase' && value < 10 && !$button.hasClass('disabled')) {\n let newValue = value + 1;\n $('.js-quantity-value').text(newValue);\n $input.val(newValue);\n\n $('.update-cart-url').data('selected-quantity', newValue);\n $(`[data-opener=\"QNT\"] .attribute-selection`).html(newValue);\n\n updateQuantityPicker($button);\n $input.trigger('change');\n } else if ($button.data('action') === 'decrease' && value > 1 && !$button.hasClass('disabled')) {\n let newValue = value - 1;\n $('.js-quantity-value').text(newValue);\n $input.val(newValue);\n $('.update-cart-url').data('selected-quantity', newValue);\n $(`[data-opener=\"QNT\"] .attribute-selection`).html(newValue);\n\n updateQuantityPicker($button);\n $input.trigger('change');\n }\n });\n }\n\n availability () {\n $('body').on('change', '.quantity-select', e => {\n e.preventDefault();\n\n var $productContainer = $(e.currentTarget).closest('.product-detail');\n if (!$productContainer.length) {\n $productContainer = $(e.currentTarget).closest('.modal-content').find('.product-quickview');\n }\n if (!$productContainer.length) {\n $productContainer = $(e.currentTarget).closest('.product-tile-modal');\n }\n\n if ($('.bundle-items', $productContainer).length === 0) {\n attributeSelect($(e.currentTarget).find('option:selected').data('url'),\n $productContainer, '_', false);\n }\n });\n $('body').on('change', '.quantity-select-quick-add', e => {\n e.preventDefault();\n\n var $productContainer = $(e.currentTarget).closest('.product-detail-quick-add');\n if ($('.bundle-items', $productContainer).length === 0) {\n attributeSelectQuickAdd($(e.currentTarget).find('option:selected').data('url'),\n $productContainer, '_', false);\n }\n });\n }\n\n addToCart () {\n $('body').on('click', 'button.js-add-to-cart, button.add-to-cart-global, button.js-add-to-cart-multipack', (e) => {\n const _openStickySizeSelectorModal = (target) => {\n if ($(e.currentTarget).hasClass('add-to-cart-multipack')) {\n sizePanel.openSizePanel(sizePanel.Types.ADDTOCART_BUNDLE);\n } else if ($(e.currentTarget).closest('.js-pdpStickyBar-btn').length > 0) {\n $('.js-pdpStickyBar-select').addClass('cc-sizeBox-isOpen');\n } else {\n if ($('.cc-intProductDetail-size-item_selected').length === 0) {\n $('#product-error-msg-mobile').removeClass('invisible');\n }\n sizePanel.openSizePanel(sizePanel.Types.ADDTOCART);\n }\n $('.pdp-size-box .js-sizeBox-openPanel').addClass('cc-sizeBox-openPanel_error');\n $('#product-error-msg').show();\n $('.pdp-size-box .js-sizeBox-openPanel').attr('aria-invalid', 'true');\n };\n\n let addToCartUrl;\n let pid;\n let pidsObj;\n let setPids;\n let isPersonalizedProduct = $('.js-personalizeButtonCheckout').length > 0;\n\n let target = e.currentTarget;\n if ($(target).closest('.js-addToCartStickyBar').length > 0) {\n // open the size modal\n _openStickySizeSelectorModal(target);\n return;\n }\n if ($(target).closest('.js-addToCartStickyBar').length > 0) {\n // close quickview modal\n _openStickySizeSelectorModal(target);\n }\n\n var $productContainer = $(e.currentTarget).closest('.product-detail');\n\n if (!$productContainer.length) {\n $productContainer = $(e.currentTarget).closest('.quickview-modal').find('.product-detail');\n }\n\n if (!$productContainer.length) {\n $productContainer = $('.quickview-modal').find('.product-detail');\n }\n\n if (!$productContainer.length) {\n $productContainer = $('.product-detail');\n }\n\n const GTMItem = getGtmData({\n item_id: $('.analytics.product').attr('data-item_id'),\n item_variant: $('.analytics.product').attr('data-item_variant')\n });\n\n // here we add the personalized product - if there is the personalizeButtonCheckout button, we are adding a pers product\n if (isPersonalizedProduct) {\n var text = $('.form-text').val();\n\n // here we check the symbolType - in personalization we store the symbols with a number. Here we substitute them with character\n /*\n if ($('.form-symbolType').val() != '') {\n var symbol = $('.form-symbol').val();\n\n switch (symbol) {\n case '1':\n symbol = '/_%*_';\n break;\n case '2':\n symbol = '-_%*_';\n break;\n case '3':\n symbol = '__%*_';\n break;\n case '4':\n symbol = '*_%*_';\n break;\n }\n\n switch ($('.form-symbolType').val()) {\n case 'letters':\n switch ($('.form-text').val().length) {\n case 1:\n text = $('.form-text').val()[0] + symbol;\n break;\n case 2:\n text = $('.form-text').val()[0] + symbol + $('.form-text').val()[1];\n break;\n case 3:\n text = $('.form-text').val()[0] + $('.form-text').val()[1] + symbol + $('.form-text').val()[2];\n break;\n case 4:\n text = $('.form-text').val()[0] + $('.form-text').val()[1] + symbol + $('.form-text').val()[2] + $('.form-text').val()[3];\n break;\n }\n\n break;\n case 'nameSymbol':\n text = $('.form-text').val() + symbol;\n break;\n case 'symbolName':\n text = symbol + $('.form-text').val();\n break;\n default:\n text = $('.form-text').val();\n }\n }\n */\n var personalizationText = text;\n var personalizationTextFont;\n personalizationTextFont = $('.form-font').val().indexOf('GillSansNova') > -1\n ? 'Avant'\n : ($('.form-font').val().indexOf('Didot') > -1\n ? 'Didot'\n : $('.form-font').val().indexOf('Altastgreeting') > -1\n ? 'Altastgreeting'\n : '');\n\n var personalizationColorPref = window.PersonalizationColor.personalizationColor;\n var personalizationColorJson = JSON.parse(personalizationColorPref);\n\n var personalizationTextColor;\n for (var i = 0; i < personalizationColorJson.length; i++) {\n if (personalizationColorJson[i].alt === $('.form-color').val()) {\n var src = personalizationColorJson[i].src;\n src = src.substring(0, src.lastIndexOf('.'));\n personalizationTextColor = src;\n }\n }\n\n var personalizationPositionKey = $('.form-position').val();\n\n // ----\n\n var customizationClassPref = window.CustomizationClass.customizationClass;\n var customizationClassJson = JSON.parse(customizationClassPref);\n var category = $('#category').attr('category-attribute');\n personalizationPositionKey = (customizationClassJson[category]['customizationPositions'] === 1)\n ? customizationClassJson[category]['0']\n : customizationClassJson[category][($('.form-position').val()).toString()];\n\n // ----\n\n var personalizationTextSVG = $('#base64').attr('data-fullTextSVG');\n var personalizationFullSVG = $('#base64').attr('data-fullSVG');\n var personalizationSmallSVG = $('#base64').attr('data-smallSVG');\n\n $.spinner().start();\n\n addToCartUrl = $('#custom-page').attr('data-url');\n var quantity = $('.js-quantity-value').html();\n var uniqueIdentifiers = {};\n for (var i = 0; i < quantity; i++) {\n var random = Math.random();\n var id = 'uniqueIdentifier' + i;\n uniqueIdentifiers[id] = random;\n }\n uniqueIdentifiers = JSON.stringify(uniqueIdentifiers);\n\n if ($('#pidToAdd').attr('pidRecentlyAdded') == undefined) {\n // $('#custom-page').attr('data-pid', $('#pidToAdd').attr('data-pid'));\n $('#pidToAdd').attr('isToLoad', 'false');\n }\n\n if ($('#pidToAdd').attr('isToLoad') == 'true') {\n $('#custom-page').attr('data-pid', $('#pidToAdd').attr('pidRecentlyAdded'));\n }\n\n $('#pidToAdd').attr('pidRecentlyAdded', $('.personalizeButtonBtn').attr('product-id'));\n\n if (quantity > 1) {\n var form = {\n pid: $('.personalizeButtonBtn').attr('product-id'),\n quantity: quantity,\n personalizedObj: true,\n uniqueIdentifiers: uniqueIdentifiers, // Random value\n personalizationText: personalizationText,\n personalizationTextFont: personalizationTextFont,\n personalizationTextColor: personalizationTextColor,\n personalizationPositionKey: personalizationPositionKey,\n personalizationTextSVG: personalizationTextSVG,\n personalizationFullSVG: personalizationFullSVG,\n personalizationSmallSVG: personalizationSmallSVG,\n isDate: $('.choice-item.choice-item-3').hasClass('active'),\n isLove: $('#love').hasClass('active'),\n GTMItemListName: GTMItem.item_list_name,\n GTMItemListId: GTMItem.item_list_id,\n GTMIndex: GTMItem.index\n };\n } else {\n var form = {\n pid: $('.personalizeButtonBtn').attr('product-id'),\n quantity: quantity,\n personalizedObj: true,\n uniqueIdentifier: Math.random(), // Random value\n personalizationText: personalizationText,\n personalizationTextFont: personalizationTextFont,\n personalizationTextColor: personalizationTextColor,\n personalizationPositionKey: personalizationPositionKey,\n personalizationTextSVG: personalizationTextSVG,\n personalizationFullSVG: personalizationFullSVG,\n personalizationSmallSVG: personalizationSmallSVG,\n isDate: $('.choice-item.choice-item-3').hasClass('active'),\n isLove: $('#love').hasClass('active'),\n GTMItemListName: GTMItem.item_list_name,\n GTMItemListId: GTMItem.item_list_id,\n GTMIndex: GTMItem.index\n };\n }\n $('.js-customizePage .js-customizePage-icon_pageClose').trigger('click');\n } else {\n // ------\n if (!$(e.currentTarget).hasClass('product-set')) {\n // Simulate disabled button with class to allow click and event\n if ($(e.currentTarget).data('disabled') || !this.isSizeSelected()) {\n $('.persButtonPdpAdd').show();\n $('.persButtonPdpPers').hide();\n // If no size is selected, open modal to choose one\n if (!$('.cc-text.selected-size-msg.show-when-size-selected')) {\n $('#newsletter-error-msg').toggle();\n }\n if ($(e.currentTarget).closest('.quickview-modal').length) {\n // QuickView (Open the other modal type)\n\n let modal = $('.js-modal-quick-size-quantity');\n // First check if it is open\n if (modal.hasClass('open')) {\n // Check if size is selected, then add to cart\n } else {\n // Show it\n modal.removeClass('hidden').addClass('open');\n modal.find('.slick-slider.slick-initialized').slick('refresh');\n\n modal.find('.js-close-select-size').on('click', function (e) {\n modal.addClass('hidden').removeClass('open');\n });\n if ($('.js-modal-quick-size-quantity [data-attr=\"size\"] input#TU:checked').length > 0\n && $('.quickview-modal .global-availability').data('ready-to-order')) {\n $('.quickview-modal').find('button.add-to-cart-global').data('disabled', false);\n }\n if (Foundation.MediaQuery.is('small')) {\n $('.quickview-modal .wrapper-details').animate({\n scrollTop: $('.wrapper-inner-quick-bottom').eq(0).offset().top\n }, 500);\n }\n }\n } else {\n _openStickySizeSelectorModal(e.currentTarget);\n }\n\n // Prevent further progress until a size is selected\n return;\n }\n }\n\n $('body').trigger('product:beforeAddToCart', e.currentTarget);\n\n if ($('.set-items').length && $(e.currentTarget).hasClass('add-to-cart-global')) {\n setPids = [];\n\n $('.product-detail').each(function () {\n if (!$(e.currentTarget).hasClass('product-set-detail')) {\n setPids.push({\n pid: $(e.currentTarget).find('.product-id').text(),\n qty: $(e.currentTarget).find('.quantity-select').val(),\n options: []\n });\n }\n });\n pidsObj = JSON.stringify(setPids);\n }\n\n pid = getPidValue($(e.currentTarget));\n // console.log(pid);\n\n if ($(target).closest('div.js-pdpStickyBar-btn').length > 0) {\n $productContainer.addClass('analytics-addToCart-sticky');\n }\n\n addToCartUrl = getAddToCartUrl();\n\n let uid = $(e.currentTarget).data('uid');\n\n var pidSet;\n var buttonAdd = $('button.js-add-to-cart, button.add-to-cart-global, button.update-cart-product-global');\n\n for (var j = 0; j < buttonAdd.length; j++) {\n if (uid === $(buttonAdd[i]).data('uid')) {\n pidSet = $(buttonAdd[i]).attr('data-pid');\n }\n }\n\n var promoId = $('.js-promo-msg.marketing-budge', $productContainer).first().data('promotion-id') || false;\n\n // ------\n var form = {\n pid: pid || pidSet,\n pidsObj: pidsObj,\n childProducts: [],\n quantity: getQuantitySelected($(e.currentTarget)),\n uuid: uid,\n promoId: promoId,\n GTMItemListName: GTMItem.item_list_name,\n GTMItemListId: GTMItem.item_list_id,\n GTMIndex: GTMItem.index\n };\n\n if (!$('.bundle-item').length) {\n form.options = [];\n }\n\n if ($('.js-complete-your-promo').length > 0) {\n $('.js-complete-the-promo-status').val($('.js-complete-the-promo-status').val() - form.quantity);\n form.completePromoItems = $('.js-complete-the-promo-status').val();\n $productContainer.addClass('analytics-completeYourPromo');\n }\n }\n\n $(e.currentTarget).trigger('updateAddToCartFormData', form);\n $('body').trigger('updateQuickAddToCartModal', form);\n if (addToCartUrl) {\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: data => {\n $.spinner().stop();\n if (data.error && isPersonalizedProduct) {\n $('.content-input-err').removeClass('hidden');\n } else {\n if (data.completePromoItemsLabel && data.completePromoItemsLabel !== '' && $('.js-completeYourPromo-header_remaining').length > 0) {\n $('.js-completeYourPromo-header_remaining').html(data.completePromoItemsLabel);\n if (form.completePromoItems === '0') {\n $('.js-completeYourPromo-header_remaining').addClass('cc-cartPromotionModal-footer_completed');\n }\n }\n $('body').trigger('product:afterAddToCart', {\n ...data,\n form,\n $productContainer\n });\n data.quantityTotal = data.cart ? data.cart.numItems : data.cartModel.numItems;\n handlePostCartAdd(data);\n }\n },\n error: () => {\n $.spinner().stop();\n }\n });\n }\n });\n }\n\n /*\n selectBonusProduct () {\n $('body').on('click', '.select-bonus-product', function () {\n var $choiceOfBonusProduct = $(this).parents('.choice-of-bonus-product');\n var pid = $(this).data('pid');\n var maxPids = $('.choose-bonus-product-dialog').data('total-qty');\n var submittedQty = parseInt($(this).parents('.choice-of-bonus-product').find('.bonus-quantity-select').val(), 10);\n var totalQty = 0;\n $.each($('#chooseBonusProductModal .selected-bonus-products .selected-pid'), function () {\n totalQty += $(this).data('qty');\n });\n totalQty += submittedQty;\n var optionID = $(this).parents('.choice-of-bonus-product').find('.product-option').data('option-id');\n var valueId = $(this).parents('.choice-of-bonus-product').find('.options-select option:selected').data('valueId');\n if (totalQty <= maxPids) {\n const selectedBonusProductHtml = `\n
\n\n
${$choiceOfBonusProduct.find('.product-name').html()}
'\n
\n \n
\n
`;\n\n $('#chooseBonusProductModal .selected-bonus-products').append(selectedBonusProductHtml);\n $('.pre-cart-products').html(totalQty);\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\n } else {\n $('.selected-bonus-products .bonus-summary').addClass('alert-danger');\n }\n });\n }\n */\n\n sizeTU () {\n if (document.getElementById('TU')) {\n document.getElementById('TU').click();\n }\n }\n\n quickAddListener () {\n $('body').on('click', '.js-panel-opener-size-quick-add', function (e, data) {\n /** open/close quickAdd modal**/\n e.preventDefault();\n if ($(this).find('.icon-toggle-top.triangle-dropdown-pdp').hasClass('icon-toggle-opened')) {\n $('.js-modal-quick-add-size-quantity').addClass('hidden');\n $('.product-detail-quick-add .icon-toggle-top.triangle-dropdown-pdp').removeClass('icon-toggle-opened');\n $('.product-detail-quick-add .size-opener-opened').addClass('hidden');\n $('.product-detail-quick-add .size-opener-closed').removeClass('hidden');\n } else {\n $('.product-detail-quick-add .icon-toggle-top.triangle-dropdown-pdp').removeClass('icon-toggle-opened');\n $(this).find('.icon-toggle-top.triangle-dropdown-pdp').addClass('icon-toggle-opened');\n var mustAdd = (data && data.mustAdd === true) || false;\n $(this).closest('.product-detail-quick-add').find('.add-to-cart-quick-add').data('mustAdd', mustAdd);\n const pid = $(this).attr('data-pid');\n const url = $(this).attr('data-get-url');\n $(this).find('.size-opener-opened').removeClass('hidden');\n $(this).find('.size-opener-closed').addClass('hidden');\n showQuickAddItems(pid, url);\n }\n });\n\n $('body').on('click', '.js-close-select-size-quick-add', function (e) {\n /** close quickAdd modal**/\n e.preventDefault();\n $('.js-modal-quick-add-size-quantity').addClass('hidden');\n $('.product-detail-quick-add .icon-toggle-top.triangle-dropdown-pdp').removeClass('icon-toggle-opened');\n $('.product-detail-quick-add .size-opener-opened').addClass('hidden');\n $('.product-detail-quick-add .size-opener-closed').removeClass('hidden');\n });\n\n $('body').on('change', '[data-attr=\"size_qa\"] input ', e => {\n /** change size and update attribute for the cart**/\n e.preventDefault();\n const selectedValue = $(e.currentTarget).attr('value');\n if (selectedValue === 'null') {\n return;\n }\n\n let $productContainer = $(e.currentTarget).closest('.product-detail-quick-add');\n if ($productContainer && $productContainer.length > 0) {\n attributeSelectQuickAdd(selectedValue, $productContainer, '_', false);\n $productContainer.find('.add-to-cart-quick-add').attr('data-size-available', true);\n $productContainer.find('.add-to-cart-quick-add').attr('data-size-selected', $(e.currentTarget).data('attr-id'));\n $productContainer.find('.add-to-cart-quick-add').removeClass('item-added-quick');\n }\n $('body').trigger('product:didChangeSize');\n });\n\n $('body').on('product:updateAddToCartQuickAdd', (e, response) => {\n /** manage response variation after size selection **/\n let availabilityValue = '';\n let availabilityMessages = response.product.availability.messages;\n var $productContainer = response.$productContainer;\n $productContainer.find('.response-message-quick-add').empty();\n if ($productContainer.find('[data-attr=\"size_qa\"] input:checked') && $productContainer.find('[data-attr=\"size_qa\"] input:checked').length > 0) {\n var sizeChecked = $productContainer.find('[data-attr=\"size_qa\"] input:checked').attr('data-display-value');\n $productContainer.find('.size-selected').text(sizeChecked);\n $productContainer.find('.response-message-quick-add').addClass('hidden');\n $productContainer.find('.add-to-cart-quick-add').attr('data-size-available', true);\n $productContainer.find('.add-to-cart-quick-add').attr('data-pid', response.product.id);\n $productContainer.find('.response-error-quick-add').addClass('hidden');\n }\n if (!response.product.readyToOrder) {\n $productContainer.find('.add-to-cart-quick-add').attr('data-disabled', true);\n $productContainer.find('.add-to-cart-quick-add').attr('disabled', true);\n } else if (!response.product.available || response.product.comingSoon) {\n $productContainer.find('.add-to-cart-quick-add').attr('data-disabled', true);\n $productContainer.find('.add-to-cart-quick-add').attr('disabled', true);\n availabilityMessages.forEach(message => {\n availabilityValue += `
${message}
`;\n });\n $productContainer.find('.response-message-quick-add').html(availabilityValue);\n } else {\n $productContainer.find('.add-to-cart-quick-add').attr('data-disabled', false);\n $productContainer.find('.add-to-cart-quick-add').attr('disabled', false);\n }\n });\n\n $('body').on('click', 'button.add-to-cart-quick-add', (e) => {\n if ($(e.currentTarget).closest('.completeYourLookContainer').length > 0) {\n localStorage.setItem('prevlisttypeforcart', localStorage.getItem('listtypeforcart'));\n localStorage.setItem('listtypeforcart', 'complete_your_look');\n }\n\n let addToCartUrl;\n let pidsObj;\n const $productContainer = $(e.currentTarget).closest('.product-detail-quick-add');\n // Simulate disabled button with class to allow click and event\n if ($(e.currentTarget).attr('data-size-available') !== 'true') {\n $productContainer.find('.response-message-quick-add').removeClass('hidden');\n return;\n } else if ($(e.currentTarget).attr('data-disabled') === 'true' || $(e.currentTarget).attr('data-disabled') === 'NaN') {\n return;\n }\n $productContainer.find('.response-message-quick-add').addClass('hidden');\n $productContainer.find('.response-error-quick-add').addClass('hidden');\n\n $('body').trigger('product:beforeAddToCart', e.currentTarget);\n\n let pid = $(e.currentTarget).attr('data-pid');\n let uid = $(e.currentTarget).attr('data-uid');\n let quantitySelected = parseInt($(e.currentTarget).attr('data-quantity')) || 1;\n\n addToCartUrl = getAddToCartUrl();\n\n let promoId = false;\n if ($('.promoCrossSellEnabled').length > 0) {\n promoId = $('.js-promo-msg.marketing-budge').first().data('promotion-id') || false;\n }\n\n const GTMItem = getGtmData({\n item_id: $('.analytics.product').attr('data-item_id'),\n item_variant: $('.analytics.product').attr('data-item_variant')\n });\n\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: [],\n quantity: quantitySelected,\n uuid: uid,\n promoId: promoId,\n GTMItemListName: GTMItem.item_list_name,\n GTMItemListId: GTMItem.item_list_id,\n GTMIndex: GTMItem.index\n };\n\n $(e.currentTarget).trigger('updateAddToCartFormData', form);\n if (addToCartUrl) {\n $.ajax({\n url: addToCartUrl,\n method: 'POST',\n data: form,\n success: data => {\n $.spinner().stop();\n if (data.error) {\n $productContainer.find('.response-error-quick-add').removeClass('hidden');\n } else {\n $('body').trigger('product:afterAddToCart', {\n ...data,\n form,\n $productContainer\n });\n data.quantityTotal = data.cart.numItems;\n handlePostCartAdd(data);\n $productContainer.find('.add-to-cart-quick-add').addClass('item-added-quick');\n $('.js-modal-quick-add-size-quantity').addClass('hidden');\n $('.product-detail-quick-add .icon-toggle-top.triangle-dropdown-pdp').removeClass('icon-toggle-opened');\n $('.product-detail-quick-add .size-opener-opened').addClass('hidden');\n $('.product-detail-quick-add .size-opener-closed').removeClass('hidden');\n }\n },\n error: () => {\n $.spinner().stop();\n }\n });\n }\n });\n }\n\n checkSoldoutAvailability () {\n if ($('.page').data('action') !== 'Product-Show') {\n return;\n }\n var $productContainer = $('div.product-detail.container').first();\n var attributesUpdateUrl = $productContainer.data('variationAttrUpdate');\n if (!attributesUpdateUrl) {\n return;\n }\n $.ajax({\n url: attributesUpdateUrl,\n method: 'GET',\n dataType: 'json',\n success: data => {\n if (data.product && data.product.variationAttributes) {\n updateAttrs(data.product.variationAttributes, $productContainer);\n updateAvailability(data, $productContainer);\n $('body').trigger('product:updateAddToCart', {\n product: data.product,\n $productContainer: $productContainer\n });\n // reorder swatches in order to push soldout colors in the laste positions\n reorderSwatches($('.js-carousel-select-color.not-sale-container'));\n reorderSwatches($('.js-carousel-select-color.on-sale-container'));\n }\n }\n });\n }\n registerAttributionTokenSending () {\n $('body').on('click', '.js-google-recommendations-container .js-prodTile', function () {\n const attributionToken = $(this).closest('.js-google-recommendations-container').data('attributionToken');\n createCookie('attribution_token', attributionToken);\n });\n }\n loadGoogleRecommendations () {\n const $googleConfig = $('.js-googleRecommendationConfig');\n if ($googleConfig.length) {\n const url = $('#googleRecommendationsUrl').val();\n const servingConfig = $googleConfig.data('servingConfig');\n const nodeToAppendTo = $googleConfig.data('nodeToAppendTo');\n const cgid = $('#primaryCategoryId').val();\n const sku = $('#variationGroupSku').val();\n const route = $('.page').data('action');\n\n $.ajax({\n type: 'GET',\n url: url,\n data: {\n cgid: cgid,\n sku: sku,\n route: route,\n servingConfig: servingConfig\n },\n success: function (html) {\n const $outputContainer = $(nodeToAppendTo).find('.google-recommendation-results');\n if (!$outputContainer.length) {\n $('
').appendTo(nodeToAppendTo);\n }\n $(nodeToAppendTo).find('.google-recommendation-results').empty().append(html);\n },\n error: function () {\n $('#youMayAlsoLikeContainer').addClass('hidden');\n }\n });\n }\n }\n\n createNextPageToken () {\n const $googleAttributionToken = $('.js-google-search-token');\n if ($googleAttributionToken.length) {\n const attributionToken = $googleAttributionToken.data('attributiontoken');\n const previousPageToken = $googleAttributionToken.data('nextpagetoken');\n const url = new URL(window.location.href);\n const searchTerm = url.searchParams.get('q');\n createCookie('prev_search_query', searchTerm);\n createCookie('search_attribution_token', attributionToken);\n if (previousPageToken !== null) {\n createCookie('previousPageToken', previousPageToken);\n }\n }\n }\n}\n\nconst productHelpers = new ProductHelpers();\nexport default productHelpers;\nexport {\n moveModalCloseButton,\n parseHtml,\n activatePromoAnimationMessage,\n updateColorFamily,\n updatePrices,\n updateAvailability,\n updateOptions,\n updateQuantities,\n isMiniCartOpen,\n isChooseBonusProductModalOpen,\n isQuickUpdateFromModal,\n isMobileDevice\n};\n","'use strict';\n\nimport {\n newModalFromSelector\n} from '../components/modal';\n\nimport sizePanel from './sizePanel';\n\n// Checks if size is selected before adding to wishlist\nfunction isSizeSelected () {\n if ($('.page-checkout').length > 0 || $('.cart-page').length > 0) {\n return true;\n }\n if ($('.form-control.pdp-size-box.checkbox-size').length > 0 || $('.form-control.pdp-size-box.checkbox-quickview-mobile').length > 0) {\n return ($('.form-control.pdp-size-box.checkbox-size input:checked').length > 0 || $('.form-control.pdp-size-box.checkbox-quickview-mobile input:checked').length > 0);\n } else {\n return $('[data-attr=\"size\"] input:checked').length > 0;\n }\n};\n\n\n/**\n * Adapts FE to the current state of the wishlist:\n * - Add / Remove the `added` class to the correct target (either button or icon)\n * - Shows the \"correctly added\" / \"correctly removed\" notification\n * - Triggers ADD event for analytics\n * - Add/remove the PID from the ID in page to always have the correct state\n * (updateWishlistInternalState)\n * @param {string} data - data returned from the server's ajax call\n * @param {Object} icon - icon that was clicked to toggle a product to the wishlist\n * @param {boolean} isAddAction - if the te action was add or remove\n */\nfunction displayMessageAndChangeIcon (data, icon, isAddAction) {\n if (data.success) {\n $('body').trigger('wishlist:update', data.wishlistTotal);\n\n if (icon) {\n if (isAddAction) {\n if ($('.page').data('action') === 'Product-Show' && $('.js-pdpStickyBar').length > 0) {\n $('.wishlist-icon').addClass('added');\n $('.wishlist-icon').find('use').attr('href', icon.data('full-heart'));\n } else {\n icon.addClass('added');\n icon.find('use').attr('href', icon.data('full-heart'));\n }\n let sender = icon.data('analytics-sender') ? icon.data('analytics-sender') : '';\n $('body').trigger('wishlist:add', { sku: data.pid, sender: sender });\n } else {\n if ($('.page').data('action') === 'Product-Show' && $('.js-pdpStickyBar').length > 0) {\n $('.wishlist-icon').removeClass('added');\n $('.wishlist-icon').find('use').attr('href', icon.data('empty-heart'));\n } else {\n icon.removeClass('added');\n icon.find('use').attr('href', icon.data('empty-heart'));\n }\n }\n updateAriaLabelForWishlistLink($('.wishlist-icon'));\n icon.blur();\n }\n\n showWishlistNotification(data.renderedTemplate);\n\n updateWishlistInternalState(data.pid, isAddAction);\n }\n}\n\nfunction showWishlistNotification (html) {\n $('body').append(html);\n let offsetTop = 12;\n if (Foundation.MediaQuery.atLeast('large')) {\n offsetTop = $('.js-mainHeader').outerHeight() + 10;\n }\n $('.js-add-to-wishlist-notification').css({\n top: offsetTop\n });\n\n function closeNotification () {\n $('.js-add-to-wishlist-notification').off('click', '.js-close-notification');\n $('.js-add-to-wishlist-notification').remove();\n }\n\n $('.js-add-to-wishlist-notification').on('click', '.js-close-notification', closeNotification);\n\n setTimeout(closeNotification, 5000);\n}\n\n/**\n * Updates the internal state of the wishlist with the new item:\n * - adds the item in the state if the item was added\n * - removes the item if the item was removed\n * @param {string} pid - The PID of the product changed in the wishlist\n * @param {boolean} isAddAction - true if the item has been added, false is it has been removed\n */\nfunction updateWishlistInternalState (pid, isAddAction) {\n /** @type {Array.} */\n let oldItems = $('#wishlistItems').val().split(',');\n let newItems;\n if (isAddAction) {\n oldItems.push(pid);\n newItems = oldItems.join(',');\n } else {\n let oldIdx = oldItems.indexOf(pid);\n if (oldIdx > -1) {\n oldItems.splice(oldIdx, 1);\n newItems = oldItems.join(',');\n }\n }\n $('#wishlistItems').val(newItems);\n};\n\nfunction addDefinitelyToWishlist (sender, productID, e) {\n // If productID is set then it means that it belongs to an unavailable size\n // Add or remove from wishlist now!\n\n var btn = sender;\n var addURL = btn.data('href');\n var removeURL = btn.data('remove');\n\n let pid = '';\n if (productID === null) {\n pid = $('.product-detail-keeper').attr('data-variant-pid');\n } else {\n pid = productID;\n }\n var optionId = btn.closest('.product-detail-keeper').find('.product-option').attr('data-option-id');\n var optionVal = btn.closest('.product-detail-keeper').find('.options-select option:selected').attr('data-value-id');\n optionId = optionId || null;\n optionVal = optionVal || null;\n\n var shouldAdd = !btn.hasClass('added');\n\n if (!(addURL && removeURL) || !pid) {\n return;\n }\n\n $.spinner().start();\n $.ajax({\n url: shouldAdd ? addURL : removeURL,\n type: shouldAdd ? 'post' : 'get',\n dataType: 'json',\n data: {\n pid: pid,\n optionId: optionId,\n optionVal: optionVal\n },\n success: function (data) {\n // if (productID === null) {\n // displayMessageAndChangeIcon(data, btn, shouldAdd);\n // }\n if ($('.size-available').attr('available') != 'false') {\n displayMessageAndChangeIcon(data, btn, shouldAdd);\n }\n\n $('body').trigger('wishlist:changedSuccessfully', {\n data: data,\n isAdding: shouldAdd,\n pid: pid\n });\n var $productContainer = $(e.currentTarget).closest('.product-detail');\n\n if (!$productContainer.length) {\n $productContainer = $(e.currentTarget).closest('.quickview-modal').find('.product-detail');\n }\n\n if (!$productContainer.length) {\n $productContainer = $('.quickview-modal').find('.product-detail');\n }\n\n if (!$productContainer.length) {\n $productContainer = $('.product-detail');\n }\n if (shouldAdd) {\n $('body').trigger('product:afterAddToWishlist', { ...data, $productContainer });\n } else {\n $('body').trigger('product:afterRemoveFromWishlist');\n }\n $('body').trigger('wishlist:update', data.wishlistTotal);\n\n $.spinner().stop();\n },\n error: function (err) {\n $.spinner().stop();\n $('body').trigger('product:failedAddToWishlist');\n displayMessageAndChangeIcon(err, btn, shouldAdd);\n }\n });\n}\n\nfunction updateAriaLabelForWishlistLink (product) {\n var added = $(product).hasClass('added');\n var labelAddWishlist = product.data('label-add-wishlist');\n var labelRemoveWishlist = product.data('label-remove-wishlist');\n if (added) {\n product.attr('aria-label', labelRemoveWishlist);\n } else {\n product.attr('aria-label', labelAddWishlist);\n }\n}\n\nmodule.exports = {\n handleWishlistContainer: function (item) {\n if (module.exports.checkItemInWishlist(item)) {\n $('.wishlist-icon').addClass('added');\n $('.wishlist-icon').find('use').attr('href', $('.wishlist-icon').data('full-heart'));\n } else {\n $('.wishlist-icon').removeClass('added');\n $('.wishlist-icon').find('use').attr('href', $('.wishlist-icon').data('empty-heart'));\n }\n updateAriaLabelForWishlistLink($('.wishlist-icon'));\n },\n\n checkItemInWishlist: function (itemCode) {\n return $('#wishlistItems').length > 0 && $('#wishlistItems').val().split(',').indexOf(itemCode) > -1;\n },\n\n /**\n * Add the `added' class to the wishlist icon if the item is available in the wishlist.\n * It is not possible to do it in ISML because both the PDP and the PLP are cached\n *\n * Read the DOM element `#wishlistItems` and adds the `added` class to all the\n * `plp-wishlist` or `add-to-wish-list` items available in>\n * - quickview\n * - PDP\n * - PLP\n */\n highlightIconsForAllItemsInWishlist: function () {\n if (!$('#wishlistItems').length) {\n return;\n }\n\n var itemsInWishlist = $('#wishlistItems').val().split(',');\n for (var i = 0; i < itemsInWishlist.length; i++) {\n var itemCode = itemsInWishlist[i];\n\n let plpWishlist = $(`.product[data-pid=\"${itemCode}\"] .plp-wishlist`);\n let productDetailWishlist = $(`.product-detail[data-pid=\"${itemCode}\"] .add-to-wish-list`);\n\n plpWishlist.addClass('added');\n updateAriaLabelForWishlistLink(plpWishlist);\n plpWishlist.find('use').attr('xlink:href', plpWishlist.data('full-heart'));\n plpWishlist.blur();\n\n productDetailWishlist.addClass('added');\n updateAriaLabelForWishlistLink(productDetailWishlist);\n productDetailWishlist.find('use').attr('xlink:href', productDetailWishlist.data('full-heart'));\n productDetailWishlist.blur();\n }\n },\n\n moveToWishlistHelper: function (e) {\n if (!e) {\n return;\n }\n e.preventDefault();\n\n var $btn = $(e.currentTarget);\n var url = $btn.data('href');\n var pid = $btn.data('pid');\n\n $.spinner().start();\n return $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: {\n pid: pid,\n optionId: null,\n optionVal: null\n },\n success: function (data) {\n displayMessageAndChangeIcon(data, null);\n },\n error: function (err) {\n displayMessageAndChangeIcon(err, null);\n }\n });\n },\n\n\n moveToWishlistHelperSaveForLater: function (e) {\n if (!e) {\n return;\n }\n e.preventDefault();\n\n var $btn = $(e.currentTarget);\n var url = $btn.data('href');\n var pid = $btn.data('pid');\n\n $.spinner().start();\n return $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: {\n pid: pid,\n optionId: null,\n optionVal: null\n },\n success: function (data) {\n //displayMessageAndChangeIcon(data, null);\n },\n error: function (err) {\n displayMessageAndChangeIcon(err, null);\n }\n });\n },\n\n /**\n * Adds the current item referenced by the current target to the wishlist\n * and updates the front-end\n */\n addToWishlist () {\n $('body').on('click', '.add-to-wish-list', (e) => {\n e.preventDefault();\n let target = $(e.currentTarget);\n // Simulate disabled button with class to allow click and event\n if (($(e.currentTarget).hasClass('add-to-wish-list-quickview-mobile') && !isSizeSelected()) || ($(e.currentTarget).hasClass('wishlistButtMobile') && !$('.pdp-buy-look-container').hasClass('hidden'))) {\n return;\n } else if (!isSizeSelected()) {\n // If no size is selected, open modal to choose one\n if (target.closest('.product-quickview').length) {\n this.sizeModal = newModalFromSelector('fis-select-size-wishlist', false, ['js-prod-select-size-modal']);\n this.sizeModal.open();\n\n $(this.sizeModal.modalBox).find('.add-to-wish-list-confirm').attr('disabled', true);\n\n $(this.sizeModal.modalBox)\n .on('click', '.modal__closeIcon', (e) => {\n this.sizeModal.close();\n this.sizeModal.destroy();\n })\n .on('click', '.size-selector', (e) => {\n const $clickedButton = $(e.currentTarget);\n const sizeValue = $clickedButton.data('size-fixed');\n $clickedButton.closest('ul').find('button').not(e.currentTarget).removeClass('selected');\n $clickedButton.addClass('selected');\n\n const $inputToClick = $('[data-attr=\"size\"] input').filter(`[data-size-fixed=\"${sizeValue}\"]`);\n\n if ($clickedButton.data('attr-selectable') === 'selectable' && $inputToClick.prop('disabled') === false) {\n // Select size in PDP by passing click to attribute selector click only if selectable\n $inputToClick.trigger('click');\n $(this.sizeModal.modalBox).find('.add-to-wish-list-confirm').prop('disabled', false);\n $('.size-available').attr('available', true);\n } else {\n // Only if the size is not available\n let infoURL = $clickedButton.data('attr-info-url');\n if ($('.product-quickview').length > 0) {\n $('.product-quickview').find('.wishlist-icon').removeClass('added');\n $('.product-quickview').find('.wishlist-icon').find('use').attr('xlink:href', $('.wishlist-icon').data('empty-heart'));\n }\n var _self = this;\n $.spinner().start();\n $.ajax({\n url: infoURL,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n $(_self.sizeModal.modalBox)\n .find('.add-to-wish-list-confirm')\n .prop('disabled', !data.product.readyToOrder);\n $('.product-detail-keeper').attr('data-variant-pid', encodeURIComponent(data.product.id));\n $('.product-detail').data('pid', data.product.id);\n $('.size-available').attr('available', false);\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n });\n\n $(this.sizeModal.modalBox).on('click', '.add-to-wish-list-confirm', (e) => {\n // Add to wishlist definitely\n let pid = null;\n if ($('.product-detail')) {\n pid = $('.product-detail').data('pid');\n } else if ($('.product-quickview')) {\n pid = $('.product-quickview').data('pid');\n }\n addDefinitelyToWishlist(target, pid, e);\n });\n\n $('body').on('product:afterAddToWishlist', (e) => {\n if (this.sizeModal.modal) {\n this.sizeModal.close();\n this.sizeModal.destroy();\n }\n });\n\n $('body').on('product:failedAddToWishlist', (e) => {\n if (this.sizeModal.modal) {\n this.sizeModal.close();\n this.sizeModal.destroy();\n }\n });\n } else {\n sizePanel.openSizePanel(sizePanel.Types.WISHILIST);\n $('.pdp-size-box .js-sizeBox-openPanel').addClass('cc-sizeBox-openPanel_error');\n }\n return;\n }\n addDefinitelyToWishlist(target, null, e);\n });\n\n $('body').on('wishlist:add-pid', (_, d) => {\n const target = $('.add-to-wish-list').eq(0);\n addDefinitelyToWishlist(target, d.pid, {currentTarget: target});\n });\n }\n};\n","/* globals woosmap sessionStorage */\n\nfunction getCountryAndLang () {\n var country = $('#country-code').val() || '';\n var contentLang = $('meta[http-equiv=content-language]').attr('content') || '';\n var language = '';\n if (contentLang) {\n language = contentLang.split('-')[0] || '';\n }\n var countryList = [];\n if (country) {\n country = country.toLowerCase();\n countryList = [country];\n } else {\n country = contentLang.split('-')[1] || '';\n if (country) {\n countryList = [country];\n }\n }\n\n // Fix for Hong Kong\n if (countryList[0] && countryList[0].toLowerCase() === 'hk') {\n countryList = ['cn'];\n }\n\n return [countryList, language];\n}\n\nfunction getQueryMinimumLength (countryList) {\n var country = countryList[0];\n\n /* eslint-disable */\n switch (country) {\n case 'JP' :\n case 'HK' :\n return 2;\n default :\n return 3;\n }\n /* eslint-enable */\n}\n\nfunction woosmapInitFindInStore () {\n var countryAndLang = getCountryAndLang();\n var countryList = countryAndLang[0];\n var language = countryAndLang[1];\n var minimumLength = getQueryMinimumLength(countryList);\n\n let localitiesWidgetFindInStore = new woosmap.localities.Autocomplete(\n 'input-text-woosmap-findinstore', {\n 'minLength': minimumLength,\n 'components': {\n 'country': countryList\n },\n 'data': 'advanced',\n 'language': language\n }\n );\n localitiesWidgetFindInStore.addListener('selected_suggestion', () => {\n let selection = localitiesWidgetFindInStore.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:chooseOptionFindInStore', selection);\n });\n\n $('body').on('woosmap:modalClose', function (_e) {\n localitiesWidgetFindInStore.removeListener('selected_suggestion');\n $(localitiesWidgetFindInStore.resultsContainer).addClass('hidden');\n });\n}\n\nfunction woosmapInitUPS () {\n var countryAndLang = getCountryAndLang();\n var countryList = countryAndLang[0];\n var language = countryAndLang[1];\n\n let localitiesWidgetUPS = new woosmap.localities.Autocomplete(\n 'input-text-woosmap-ups', {\n 'minLength': 3,\n 'components': {\n 'country': countryList\n },\n 'data': 'advanced',\n 'language': language\n }\n );\n localitiesWidgetUPS.addListener('selected_suggestion', () => {\n let selection = localitiesWidgetUPS.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:chooseOptionUPS', selection);\n });\n\n $('body').on('woosmap:modalClose', function (_e) {\n localitiesWidgetUPS.removeListener('selected_suggestion');\n $(localitiesWidgetUPS.resultsContainer).addClass('hidden');\n });\n}\n\nfunction woosmapInitInPost () {\n var countryAndLang = getCountryAndLang();\n var countryList = countryAndLang[0];\n var language = countryAndLang[1];\n\n let localitiesWidgetInPost = new woosmap.localities.Autocomplete(\n 'input-text-woosmap-inpost', {\n 'minLength': 3,\n 'components': {\n 'country': countryList\n },\n 'data': 'advanced',\n 'language': language\n }\n );\n\n localitiesWidgetInPost.addListener('selected_suggestion', () => {\n let selection = localitiesWidgetInPost.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:chooseOptionInPost', selection);\n });\n\n $('body').on('woosmap:modalClose', function (_e) {\n localitiesWidgetInPost.removeListener('selected_suggestion');\n $(localitiesWidgetInPost.resultsContainer).addClass('hidden');\n });\n}\n\nfunction woosmapInitPPL () {\n var countryAndLang = getCountryAndLang();\n var countryList = countryAndLang[0];\n var language = countryAndLang[1];\n\n // PPL\n let localitiesWidgetPPL = new woosmap.localities.Autocomplete(\n 'input-text-woosmap-ppl', {\n 'minLength': 3,\n 'components': {\n 'country': countryList\n },\n 'data': 'advanced',\n 'language': language\n }\n );\n\n localitiesWidgetPPL.addListener('selected_suggestion', () => {\n let selection = localitiesWidgetPPL.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:chooseOptionPPL', selection);\n });\n\n $('body').on('woosmap:modalClose', function (_e) {\n localitiesWidgetPPL.removeListener('selected_suggestion');\n $(localitiesWidgetPPL.resultsContainer).addClass('hidden');\n });\n}\n\nfunction woosmapInitBRT () {\n var countryAndLang = getCountryAndLang();\n var countryList = countryAndLang[0];\n var language = countryAndLang[1];\n\n let localitiesWidgetBRT = new woosmap.localities.Autocomplete(\n 'input-text-woosmap-brt', {\n 'minLength': 3,\n 'components': {\n 'country': countryList\n },\n 'data': 'advanced',\n 'language': language\n }\n );\n\n localitiesWidgetBRT.addListener('selected_suggestion', () => {\n let selection = localitiesWidgetBRT.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:chooseOptionBRT', selection);\n });\n\n $('body').on('woosmap:modalClose', function (_e) {\n localitiesWidgetBRT.removeListener('selected_suggestion');\n $(localitiesWidgetBRT.resultsContainer).addClass('hidden');\n });\n}\n\nfunction woosmapInitFindYourStoreMenu () {\n if (!$('#store-locator-menu').length) {\n return;\n }\n\n var countryAndLang = getCountryAndLang();\n var countryList = countryAndLang[0];\n var language = countryAndLang[1];\n var minimumLength = getQueryMinimumLength(countryList);\n\n let localitiesWidgetMenu = new woosmap.localities.Autocomplete(\n 'store-locator-menu', {\n 'minLength': minimumLength,\n 'components': {\n 'country': countryList\n },\n 'data': 'advanced',\n 'language': language\n }\n );\n\n localitiesWidgetMenu.addListener('selected_suggestion', () => {\n let inputValue = $('#store-locator-menu').val();\n\n let redirectUrl = $('#store-locator-menu').closest('[data-url]').data('url');\n let selectionMenu = localitiesWidgetMenu.getSelectedSuggestionDetails();\n selectionMenu = JSON.stringify(selectionMenu);\n\n sessionStorage.setItem('selectionMenu', selectionMenu);\n sessionStorage.setItem('inputValue', inputValue);\n\n window.location.href = redirectUrl;\n });\n}\n\nfunction woosmapInitFindYourStore (filterByCountry = true) {\n var countryAndLang = getCountryAndLang();\n var countryList = countryAndLang[0];\n var language = countryAndLang[1];\n var minimumLength = getQueryMinimumLength(countryList);\n\n var config = {};\n if (filterByCountry) {\n config = {\n 'minLength': minimumLength,\n 'components': {\n 'country': countryList\n },\n 'data': 'advanced',\n 'language': language\n };\n } else {\n config = {\n 'minLength': minimumLength,\n 'data': 'advanced',\n 'language': language\n };\n }\n\n let localitiesWidgetFindYourStore = new woosmap.localities.Autocomplete('store-postal-code', config);\n localitiesWidgetFindYourStore.addListener('selected_suggestion', () => {\n var selection = localitiesWidgetFindYourStore.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:chooseOptionFindYourStore', selection);\n });\n\n $('body').on('woosmap:openDropdownStoreLocator', () => {\n localitiesWidgetFindYourStore.predictions();\n });\n}\n\nfunction woosmapInitFooter (filterByCountry = true) {\n const _initWoosmap = () => {\n if (!$('#footer-find-store').length) {\n return;\n }\n\n var countryAndLang = getCountryAndLang();\n var countryList = countryAndLang[0];\n var language = countryAndLang[1];\n var minimumLength = getQueryMinimumLength(countryList);\n\n var config = {};\n if (filterByCountry) {\n config = {\n 'minLength': minimumLength,\n 'components': {\n 'country': countryList\n },\n 'data': 'advanced',\n 'language': language\n };\n } else {\n config = {\n 'minLength': minimumLength,\n 'data': 'advanced',\n 'language': language\n };\n }\n\n // eslint-disable-next-line no-undef la\n let localitiesWidgetFooter = new woosmap.localities.Autocomplete('footer-find-store', config);\n\n localitiesWidgetFooter.addListener('selected_suggestion', () => {\n let selection = localitiesWidgetFooter.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:chooseOptionFooter', selection);\n });\n };\n\n if (window.woosmap) {\n _initWoosmap();\n } else {\n $('body').on('woosmap:loaded', _initWoosmap);\n }\n}\n\nfunction woosmapInitSPS () {\n var countryAndLang = getCountryAndLang();\n var countryList = countryAndLang[0];\n var language = countryAndLang[1];\n\n // SPS\n let localitiesWidgetSPS = new woosmap.localities.Autocomplete(\n 'input-text-woosmap-sps', {\n 'minLength': 3,\n 'components': {\n 'country': countryList\n },\n 'data': 'advanced',\n 'language': language\n }\n );\n\n localitiesWidgetSPS.addListener('selected_suggestion', () => {\n let selection = localitiesWidgetSPS.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:chooseOptionSPS', selection);\n });\n\n $('body').on('woosmap:modalClose', function (_e) {\n localitiesWidgetSPS.removeListener('selected_suggestion');\n $(localitiesWidgetSPS.resultsContainer).addClass('hidden');\n });\n}\n\nfunction woosmapInitRUPup () {\n var countryAndLang = getCountryAndLang();\n var countryList = countryAndLang[0];\n var language = countryAndLang[1];\n\n // RU PUP\n let localitiesWidgetRUPup = new woosmap.localities.Autocomplete(\n 'input-text-woosmap-ru-pup', {\n 'minLength': 3,\n 'components': {\n 'country': countryList\n },\n 'language': language\n }\n );\n\n localitiesWidgetRUPup.addListener('selected_suggestion', () => {\n let selection = localitiesWidgetRUPup.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:chooseOptionRuPup', selection);\n });\n\n $('body').on('woosmap:modalClose', function (_e) {\n localitiesWidgetRUPup.removeListener('selected_suggestion');\n $(localitiesWidgetRUPup.resultsContainer).addClass('hidden');\n });\n}\n\nfunction woosmapInitDHL () {\n var countryAndLang = getCountryAndLang();\n var countryList = countryAndLang[0];\n var language = countryAndLang[1];\n\n // DHL\n let localitiesWidgetDHL = new woosmap.localities.Autocomplete(\n 'input-text-woosmap-dhl', {\n 'minLength': 3,\n 'components': {\n 'country': countryList\n },\n 'data': 'advanced',\n 'language': language\n }\n );\n localitiesWidgetDHL.addListener('selected_suggestion', () => {\n let selection = localitiesWidgetDHL.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:chooseOptionDHL', selection);\n });\n}\n\nfunction woosmapInitDPD () {\n var countryAndLang = getCountryAndLang();\n var countryList = countryAndLang[0];\n var language = countryAndLang[1];\n\n // DPD\n let localitiesWidgetDPD = new woosmap.localities.Autocomplete(\n 'input-text-woosmap-dpd', {\n 'minLength': 3,\n 'components': {\n 'country': countryList\n },\n 'data': 'advanced',\n 'language': language\n }\n );\n localitiesWidgetDPD.addListener('selected_suggestion', () => {\n let selection = localitiesWidgetDPD.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:chooseOptionDPD', selection);\n });\n}\n\nfunction woosmapInitHermes () {\n var countryAndLang = getCountryAndLang();\n var countryList = countryAndLang[0];\n var language = countryAndLang[1];\n\n // Hermes\n let localitiesWidgetHermes = new woosmap.localities.Autocomplete(\n 'input-text-woosmap-hermes', {\n 'minLength': 3,\n 'components': {\n 'country': countryList\n },\n 'data': 'advanced',\n 'language': language\n }\n );\n localitiesWidgetHermes.addListener('selected_suggestion', () => {\n let selection = localitiesWidgetHermes.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:chooseOptionHermes', selection);\n });\n}\n\nfunction woosmapListenerForModalClose () {\n $('body').on('click', '.tingle-modal:not(.express-button-modal)', (e) => {\n /**\n * Mandatory classes to skip the trigger below for return flow. \"isReturnFlow\" is TRUE if the target action is:\n * (1) CTA find in store.\n * (2) CTA proceed.\n * (3) CTA edit store\n */\n var isReturnFlow = $(e.target).hasClass('js-returnOpen-searchStores') || $(e.target).hasClass('js-returnOpen-footer_buttonProceed') || $(e.target).closest('.js-returnOpen-shippingMethod_editStore').length > 0;\n\n if (e.target.className === '' || isReturnFlow) {\n return;\n }\n $('body').trigger('woosmap:modalClose');\n });\n $('body').on('click', '.modal-close:not(.modal-close-express)', (e) => {\n $('body').trigger('woosmap:modalClose');\n });\n}\n\nfunction woosmapInitCollissimo () {\n var countryAndLang = getCountryAndLang();\n var countryList = countryAndLang[0];\n var language = countryAndLang[1];\n\n // Collissimo\n let localitiesWidgetCollisimo = new woosmap.localities.Autocomplete(\n 'input-text-woosmap-collissimo', {\n 'minLength': 3,\n 'components': {\n 'country': countryList\n },\n 'data': 'advanced',\n 'language': language\n }\n );\n\n localitiesWidgetCollisimo.addListener('selected_suggestion', () => {\n let selection = localitiesWidgetCollisimo.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:chooseOptionCLSS', selection);\n });\n\n $('body').on('woosmap:modalClose', function (_e) {\n localitiesWidgetCollisimo.removeListener('selected_suggestion');\n $(localitiesWidgetCollisimo.resultsContainer).addClass('hidden');\n });\n}\n\n// TODO: DELETE AFTER REFACTORING FILE pickupPoint.js ON EME\nfunction woosmapInitPDB () {\n var countryAndLang = getCountryAndLang();\n var countryList = countryAndLang[0];\n var language = countryAndLang[1];\n\n let localitiesWidgetPDB = new woosmap.localities.Autocomplete(\n 'input-text-woosmap-PDB', {\n 'minLength': 3,\n 'components': {\n 'country': countryList\n },\n 'data': 'advanced',\n 'language': language\n }\n );\n\n localitiesWidgetPDB.addListener('selected_suggestion', () => {\n let selection = localitiesWidgetPDB.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:chooseOptionPDB', selection);\n });\n\n $('body').on('woosmap:modalClose', function (_e) {\n localitiesWidgetPDB.removeListener('selected_suggestion');\n $(localitiesWidgetPDB.resultsContainer).addClass('hidden');\n });\n\n $('body').on('click', '#pickupPointPDB input[name=\"pickup-point-service-type\"]', (e) => {\n e.stopPropagation();\n\n let selection = localitiesWidgetPDB.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:chooseOptionPDB', selection);\n });\n}\n\nfunction woosmapInitPudoBFF (shippingMethodType) {\n var countryAndLang = getCountryAndLang();\n var countryList = countryAndLang[0];\n var language = countryAndLang[1];\n\n let localitiesWidget;\n\n // switch case for customizations on shippingMethodType\n switch (shippingMethodType) {\n case 'DEL' :\n case 'GLS' :\n case 'XBS':\n localitiesWidget = new woosmap.localities.Autocomplete(\n `input-text-woosmap-${shippingMethodType}`, {\n 'minLength': 3,\n 'components': {\n 'country': countryList\n },\n 'data': 'advanced',\n 'language': language,\n 'types': 'postal_code'\n }\n );\n break;\n\n default :\n localitiesWidget = new woosmap.localities.Autocomplete(\n `input-text-woosmap-${shippingMethodType}`, {\n 'minLength': 3,\n 'components': {\n 'country': countryList\n },\n 'data': 'advanced',\n 'language': language\n }\n );\n break;\n }\n\n const pudoModalSelector = `#pickupPoint${shippingMethodType}`;\n const chooseOptionSelector = `chooseOption${shippingMethodType}`;\n\n localitiesWidget.addListener('selected_suggestion', () => {\n let selection = localitiesWidget.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:' + chooseOptionSelector, selection);\n });\n\n $('body').on('woosmap:modalClose', function (_e) {\n localitiesWidget.removeListener('selected_suggestion');\n $(localitiesWidget.resultsContainer).addClass('hidden');\n });\n\n $('body').on('click', pudoModalSelector + ' input[name=\"pickup-point-service-type\"]', (e) => {\n e.stopPropagation();\n\n let selection = localitiesWidget.getSelectedSuggestionDetails();\n $('body').trigger('woosmap:' + chooseOptionSelector, selection);\n });\n}\n\nexport {\n woosmapInitFindInStore,\n woosmapInitUPS,\n woosmapInitInPost,\n woosmapInitBRT,\n woosmapInitPPL,\n woosmapInitDHL,\n woosmapInitDPD,\n woosmapInitFindYourStoreMenu,\n woosmapInitFindYourStore,\n woosmapInitSPS,\n woosmapListenerForModalClose,\n woosmapInitFooter,\n woosmapInitRUPup,\n woosmapInitHermes,\n woosmapInitCollissimo,\n woosmapInitPDB,\n woosmapInitPudoBFF\n};\n","/* build: `node build.js modules=ALL exclude=gestures,accessors requirejs minifier=uglifyjs` */\n/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */\n\nvar fabric = fabric || { version: '3.6.6' };\nif (typeof exports !== 'undefined') {\n exports.fabric = fabric;\n}\n/* _AMD_START_ */\nelse if (typeof define === 'function' && define.amd) {\n define([], function() { return fabric; });\n}\n/* _AMD_END_ */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n if (document instanceof (typeof HTMLDocument !== 'undefined' ? HTMLDocument : Document)) {\n fabric.document = document;\n }\n else {\n fabric.document = document.implementation.createHTMLDocument('');\n }\n fabric.window = window;\n}\nelse {\n // assume we're running under node.js when document/window are not present\n var jsdom = require('jsdom');\n var virtualWindow = new jsdom.JSDOM(\n decodeURIComponent('%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E'),\n {\n features: {\n FetchExternalResources: ['img']\n },\n resources: 'usable'\n }).window;\n fabric.document = virtualWindow.document;\n fabric.jsdomImplForWrapper = require('jsdom/lib/jsdom/living/generated/utils').implForWrapper;\n fabric.nodeCanvas = require('jsdom/lib/jsdom/utils').Canvas;\n fabric.window = virtualWindow;\n DOMParser = fabric.window.DOMParser;\n}\n\n/**\n * True when in environment that supports touch events\n * @type boolean\n */\nfabric.isTouchSupported = 'ontouchstart' in fabric.window || 'ontouchstart' in fabric.document ||\n (fabric.window && fabric.window.navigator && fabric.window.navigator.maxTouchPoints > 0);\n\n/**\n * True when in environment that's probably Node.js\n * @type boolean\n */\nfabric.isLikelyNode = typeof Buffer !== 'undefined' &&\n typeof window === 'undefined';\n\n/* _FROM_SVG_START_ */\n/**\n * Attributes parsed from all SVG elements\n * @type array\n */\nfabric.SHARED_ATTRIBUTES = [\n 'display',\n 'transform',\n 'fill', 'fill-opacity', 'fill-rule',\n 'opacity',\n 'stroke', 'stroke-dasharray', 'stroke-linecap', 'stroke-dashoffset',\n 'stroke-linejoin', 'stroke-miterlimit',\n 'stroke-opacity', 'stroke-width',\n 'id', 'paint-order', 'vector-effect',\n 'instantiated_by_use', 'clip-path'\n];\n/* _FROM_SVG_END_ */\n\n/**\n * Pixel per Inch as a default value set to 96. Can be changed for more realistic conversion.\n */\nfabric.DPI = 96;\nfabric.reNum = '(?:[-+]?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:[eE][-+]?\\\\d+)?)';\nfabric.rePathCommand = /([-+]?((\\d+\\.\\d+)|((\\d+)|(\\.\\d+)))(?:[eE][-+]?\\d+)?)/ig;\nfabric.reNonWord = /[ \\n\\.,;!\\?\\-]/;\nfabric.fontPaths = { };\nfabric.iMatrix = [1, 0, 0, 1, 0, 0];\nfabric.svgNS = 'http://www.w3.org/2000/svg';\n\n/**\n * Pixel limit for cache canvases. 1Mpx , 4Mpx should be fine.\n * @since 1.7.14\n * @type Number\n * @default\n */\nfabric.perfLimitSizeTotal = 2097152;\n\n/**\n * Pixel limit for cache canvases width or height. IE fixes the maximum at 5000\n * @since 1.7.14\n * @type Number\n * @default\n */\nfabric.maxCacheSideLimit = 4096;\n\n/**\n * Lowest pixel limit for cache canvases, set at 256PX\n * @since 1.7.14\n * @type Number\n * @default\n */\nfabric.minCacheSideLimit = 256;\n\n/**\n * Cache Object for widths of chars in text rendering.\n */\nfabric.charWidthsCache = { };\n\n/**\n * if webgl is enabled and available, textureSize will determine the size\n * of the canvas backend\n * @since 2.0.0\n * @type Number\n * @default\n */\nfabric.textureSize = 2048;\n\n/**\n * When 'true', style information is not retained when copy/pasting text, making\n * pasted text use destination style.\n * Defaults to 'false'.\n * @type Boolean\n * @default\n */\nfabric.disableStyleCopyPaste = false;\n\n/**\n * Enable webgl for filtering picture is available\n * A filtering backend will be initialized, this will both take memory and\n * time since a default 2048x2048 canvas will be created for the gl context\n * @since 2.0.0\n * @type Boolean\n * @default\n */\nfabric.enableGLFiltering = true;\n\n/**\n * Device Pixel Ratio\n * @see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html\n */\nfabric.devicePixelRatio = fabric.window.devicePixelRatio ||\n fabric.window.webkitDevicePixelRatio ||\n fabric.window.mozDevicePixelRatio ||\n 1;\n/**\n * Browser-specific constant to adjust CanvasRenderingContext2D.shadowBlur value,\n * which is unitless and not rendered equally across browsers.\n *\n * Values that work quite well (as of October 2017) are:\n * - Chrome: 1.5\n * - Edge: 1.75\n * - Firefox: 0.9\n * - Safari: 0.95\n *\n * @since 2.0.0\n * @type Number\n * @default 1\n */\nfabric.browserShadowBlurConstant = 1;\n\n/**\n * This object contains the result of arc to beizer conversion for faster retrieving if the same arc needs to be converted again.\n * It was an internal variable, is accessible since version 2.3.4\n */\nfabric.arcToSegmentsCache = { };\n\n/**\n * This object keeps the results of the boundsOfCurve calculation mapped by the joined arguments necessary to calculate it.\n * It does speed up calculation, if you parse and add always the same paths, but in case of heavy usage of freedrawing\n * you do not get any speed benefit and you get a big object in memory.\n * The object was a private variable before, while now is appended to the lib so that you have access to it and you\n * can eventually clear it.\n * It was an internal variable, is accessible since version 2.3.4\n */\nfabric.boundsOfCurveCache = { };\n\n/**\n * If disabled boundsOfCurveCache is not used. For apps that make heavy usage of pencil drawing probably disabling it is better\n * @default true\n */\nfabric.cachesBoundsOfCurve = true;\n\n/**\n * Skip performance testing of setupGLContext and force the use of putImageData that seems to be the one that works best on\n * Chrome + old hardware. if your users are experiencing empty images after filtering you may try to force this to true\n * this has to be set before instantiating the filtering backend ( before filtering the first image )\n * @type Boolean\n * @default false\n */\nfabric.forceGLPutImageData = false;\n\nfabric.initFilterBackend = function() {\n if (fabric.enableGLFiltering && fabric.isWebglSupported && fabric.isWebglSupported(fabric.textureSize)) {\n console.log('max texture size: ' + fabric.maxTextureSize);\n return (new fabric.WebglFilterBackend({ tileSize: fabric.textureSize }));\n }\n else if (fabric.Canvas2dFilterBackend) {\n return (new fabric.Canvas2dFilterBackend());\n }\n};\n\n\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n // ensure globality even if entire library were function wrapped (as in Meteor.js packaging system)\n window.fabric = fabric;\n}\n\n\n(function() {\n\n /**\n * @private\n * @param {String} eventName\n * @param {Function} handler\n */\n function _removeEventListener(eventName, handler) {\n if (!this.__eventListeners[eventName]) {\n return;\n }\n var eventListener = this.__eventListeners[eventName];\n if (handler) {\n eventListener[eventListener.indexOf(handler)] = false;\n }\n else {\n fabric.util.array.fill(eventListener, false);\n }\n }\n\n /**\n * Observes specified event\n * @deprecated `observe` deprecated since 0.8.34 (use `on` instead)\n * @memberOf fabric.Observable\n * @alias on\n * @param {String|Object} eventName Event name (eg. 'after:render') or object with key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function that receives a notification when an event of the specified type occurs\n * @return {Self} thisArg\n * @chainable\n */\n function observe(eventName, handler) {\n if (!this.__eventListeners) {\n this.__eventListeners = { };\n }\n // one object with key/value pairs was passed\n if (arguments.length === 1) {\n for (var prop in eventName) {\n this.on(prop, eventName[prop]);\n }\n }\n else {\n if (!this.__eventListeners[eventName]) {\n this.__eventListeners[eventName] = [];\n }\n this.__eventListeners[eventName].push(handler);\n }\n return this;\n }\n\n /**\n * Stops event observing for a particular event handler. Calling this method\n * without arguments removes all handlers for all events\n * @deprecated `stopObserving` deprecated since 0.8.34 (use `off` instead)\n * @memberOf fabric.Observable\n * @alias off\n * @param {String|Object} eventName Event name (eg. 'after:render') or object with key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function to be deleted from EventListeners\n * @return {Self} thisArg\n * @chainable\n */\n function stopObserving(eventName, handler) {\n if (!this.__eventListeners) {\n return this;\n }\n\n // remove all key/value pairs (event name -> event handler)\n if (arguments.length === 0) {\n for (eventName in this.__eventListeners) {\n _removeEventListener.call(this, eventName);\n }\n }\n // one object with key/value pairs was passed\n else if (arguments.length === 1 && typeof arguments[0] === 'object') {\n for (var prop in eventName) {\n _removeEventListener.call(this, prop, eventName[prop]);\n }\n }\n else {\n _removeEventListener.call(this, eventName, handler);\n }\n return this;\n }\n\n /**\n * Fires event with an optional options object\n * @deprecated `fire` deprecated since 1.0.7 (use `trigger` instead)\n * @memberOf fabric.Observable\n * @alias trigger\n * @param {String} eventName Event name to fire\n * @param {Object} [options] Options object\n * @return {Self} thisArg\n * @chainable\n */\n function fire(eventName, options) {\n if (!this.__eventListeners) {\n return this;\n }\n\n var listenersForEvent = this.__eventListeners[eventName];\n if (!listenersForEvent) {\n return this;\n }\n\n for (var i = 0, len = listenersForEvent.length; i < len; i++) {\n listenersForEvent[i] && listenersForEvent[i].call(this, options || { });\n }\n this.__eventListeners[eventName] = listenersForEvent.filter(function(value) {\n return value !== false;\n });\n return this;\n }\n\n /**\n * @namespace fabric.Observable\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#events}\n * @see {@link http://fabricjs.com/events|Events demo}\n */\n fabric.Observable = {\n observe: observe,\n stopObserving: stopObserving,\n fire: fire,\n\n on: observe,\n off: stopObserving,\n trigger: fire\n };\n})();\n\n\n/**\n * @namespace fabric.Collection\n */\nfabric.Collection = {\n\n _objects: [],\n\n /**\n * Adds objects to collection, Canvas or Group, then renders canvas\n * (if `renderOnAddRemove` is not `false`).\n * in case of Group no changes to bounding box are made.\n * Objects should be instances of (or inherit from) fabric.Object\n * Use of this function is highly discouraged for groups.\n * you can add a bunch of objects with the add method but then you NEED\n * to run a addWithUpdate call for the Group class or position/bbox will be wrong.\n * @param {...fabric.Object} object Zero or more fabric instances\n * @return {Self} thisArg\n * @chainable\n */\n add: function () {\n this._objects.push.apply(this._objects, arguments);\n if (this._onObjectAdded) {\n for (var i = 0, length = arguments.length; i < length; i++) {\n this._onObjectAdded(arguments[i]);\n }\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Inserts an object into collection at specified index, then renders canvas (if `renderOnAddRemove` is not `false`)\n * An object should be an instance of (or inherit from) fabric.Object\n * Use of this function is highly discouraged for groups.\n * you can add a bunch of objects with the insertAt method but then you NEED\n * to run a addWithUpdate call for the Group class or position/bbox will be wrong.\n * @param {Object} object Object to insert\n * @param {Number} index Index to insert object at\n * @param {Boolean} nonSplicing When `true`, no splicing (shifting) of objects occurs\n * @return {Self} thisArg\n * @chainable\n */\n insertAt: function (object, index, nonSplicing) {\n var objects = this._objects;\n if (nonSplicing) {\n objects[index] = object;\n }\n else {\n objects.splice(index, 0, object);\n }\n this._onObjectAdded && this._onObjectAdded(object);\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\n * @param {...fabric.Object} object Zero or more fabric instances\n * @return {Self} thisArg\n * @chainable\n */\n remove: function() {\n var objects = this._objects,\n index, somethingRemoved = false;\n\n for (var i = 0, length = arguments.length; i < length; i++) {\n index = objects.indexOf(arguments[i]);\n\n // only call onObjectRemoved if an object was actually removed\n if (index !== -1) {\n somethingRemoved = true;\n objects.splice(index, 1);\n this._onObjectRemoved && this._onObjectRemoved(arguments[i]);\n }\n }\n\n this.renderOnAddRemove && somethingRemoved && this.requestRenderAll();\n return this;\n },\n\n /**\n * Executes given function for each object in this group\n * @param {Function} callback\n * Callback invoked with current object as first argument,\n * index - as second and an array of all objects - as third.\n * Callback is invoked in a context of Global Object (e.g. `window`)\n * when no `context` argument is given\n *\n * @param {Object} context Context (aka thisObject)\n * @return {Self} thisArg\n * @chainable\n */\n forEachObject: function(callback, context) {\n var objects = this.getObjects();\n for (var i = 0, len = objects.length; i < len; i++) {\n callback.call(context, objects[i], i, objects);\n }\n return this;\n },\n\n /**\n * Returns an array of children objects of this instance\n * Type parameter introduced in 1.3.10\n * since 2.3.5 this method return always a COPY of the array;\n * @param {String} [type] When specified, only objects of this type are returned\n * @return {Array}\n */\n getObjects: function(type) {\n if (typeof type === 'undefined') {\n return this._objects.concat();\n }\n return this._objects.filter(function(o) {\n return o.type === type;\n });\n },\n\n /**\n * Returns object at specified index\n * @param {Number} index\n * @return {Self} thisArg\n */\n item: function (index) {\n return this._objects[index];\n },\n\n /**\n * Returns true if collection contains no objects\n * @return {Boolean} true if collection is empty\n */\n isEmpty: function () {\n return this._objects.length === 0;\n },\n\n /**\n * Returns a size of a collection (i.e: length of an array containing its objects)\n * @return {Number} Collection size\n */\n size: function() {\n return this._objects.length;\n },\n\n /**\n * Returns true if collection contains an object\n * @param {Object} object Object to check against\n * @return {Boolean} `true` if collection contains an object\n */\n contains: function(object) {\n return this._objects.indexOf(object) > -1;\n },\n\n /**\n * Returns number representation of a collection complexity\n * @return {Number} complexity\n */\n complexity: function () {\n return this._objects.reduce(function (memo, current) {\n memo += current.complexity ? current.complexity() : 0;\n return memo;\n }, 0);\n }\n};\n\n\n/**\n * @namespace fabric.CommonMethods\n */\nfabric.CommonMethods = {\n\n /**\n * Sets object's properties from options\n * @param {Object} [options] Options object\n */\n _setOptions: function(options) {\n for (var prop in options) {\n this.set(prop, options[prop]);\n }\n },\n\n /**\n * @private\n * @param {Object} [filler] Options object\n * @param {String} [property] property to set the Gradient to\n */\n _initGradient: function(filler, property) {\n if (filler && filler.colorStops && !(filler instanceof fabric.Gradient)) {\n this.set(property, new fabric.Gradient(filler));\n }\n },\n\n /**\n * @private\n * @param {Object} [filler] Options object\n * @param {String} [property] property to set the Pattern to\n * @param {Function} [callback] callback to invoke after pattern load\n */\n _initPattern: function(filler, property, callback) {\n if (filler && filler.source && !(filler instanceof fabric.Pattern)) {\n this.set(property, new fabric.Pattern(filler, callback));\n }\n else {\n callback && callback();\n }\n },\n\n /**\n * @private\n * @param {Object} [options] Options object\n */\n _initClipping: function(options) {\n if (!options.clipTo || typeof options.clipTo !== 'string') {\n return;\n }\n\n var functionBody = fabric.util.getFunctionBody(options.clipTo);\n if (typeof functionBody !== 'undefined') {\n this.clipTo = new Function('ctx', functionBody);\n }\n },\n\n /**\n * @private\n */\n _setObject: function(obj) {\n for (var prop in obj) {\n this._set(prop, obj[prop]);\n }\n },\n\n /**\n * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`.\n * @param {String|Object} key Property name or object (if object, iterate over the object properties)\n * @param {Object|Function} value Property value (if function, the value is passed into it and its return value is used as a new one)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n set: function(key, value) {\n if (typeof key === 'object') {\n this._setObject(key);\n }\n else {\n if (typeof value === 'function' && key !== 'clipTo') {\n this._set(key, value(this.get(key)));\n }\n else {\n this._set(key, value);\n }\n }\n return this;\n },\n\n _set: function(key, value) {\n this[key] = value;\n },\n\n /**\n * Toggles specified property from `true` to `false` or from `false` to `true`\n * @param {String} property Property to toggle\n * @return {fabric.Object} thisArg\n * @chainable\n */\n toggle: function(property) {\n var value = this.get(property);\n if (typeof value === 'boolean') {\n this.set(property, !value);\n }\n return this;\n },\n\n /**\n * Basic getter\n * @param {String} property Property name\n * @return {*} value of a property\n */\n get: function(property) {\n return this[property];\n }\n};\n\n\n(function(global) {\n\n var sqrt = Math.sqrt,\n atan2 = Math.atan2,\n pow = Math.pow,\n PiBy180 = Math.PI / 180,\n PiBy2 = Math.PI / 2;\n\n /**\n * @namespace fabric.util\n */\n fabric.util = {\n\n /**\n * Calculate the cos of an angle, avoiding returning floats for known results\n * @static\n * @memberOf fabric.util\n * @param {Number} angle the angle in radians or in degree\n * @return {Number}\n */\n cos: function(angle) {\n if (angle === 0) { return 1; }\n if (angle < 0) {\n // cos(a) = cos(-a)\n angle = -angle;\n }\n var angleSlice = angle / PiBy2;\n switch (angleSlice) {\n case 1: case 3: return 0;\n case 2: return -1;\n }\n return Math.cos(angle);\n },\n\n /**\n * Calculate the sin of an angle, avoiding returning floats for known results\n * @static\n * @memberOf fabric.util\n * @param {Number} angle the angle in radians or in degree\n * @return {Number}\n */\n sin: function(angle) {\n if (angle === 0) { return 0; }\n var angleSlice = angle / PiBy2, sign = 1;\n if (angle < 0) {\n // sin(-a) = -sin(a)\n sign = -1;\n }\n switch (angleSlice) {\n case 1: return sign;\n case 2: return 0;\n case 3: return -sign;\n }\n return Math.sin(angle);\n },\n\n /**\n * Removes value from an array.\n * Presence of value (and its position in an array) is determined via `Array.prototype.indexOf`\n * @static\n * @memberOf fabric.util\n * @param {Array} array\n * @param {*} value\n * @return {Array} original array\n */\n removeFromArray: function(array, value) {\n var idx = array.indexOf(value);\n if (idx !== -1) {\n array.splice(idx, 1);\n }\n return array;\n },\n\n /**\n * Returns random number between 2 specified ones.\n * @static\n * @memberOf fabric.util\n * @param {Number} min lower limit\n * @param {Number} max upper limit\n * @return {Number} random value (between min and max)\n */\n getRandomInt: function(min, max) {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n },\n\n /**\n * Transforms degrees to radians.\n * @static\n * @memberOf fabric.util\n * @param {Number} degrees value in degrees\n * @return {Number} value in radians\n */\n degreesToRadians: function(degrees) {\n return degrees * PiBy180;\n },\n\n /**\n * Transforms radians to degrees.\n * @static\n * @memberOf fabric.util\n * @param {Number} radians value in radians\n * @return {Number} value in degrees\n */\n radiansToDegrees: function(radians) {\n return radians / PiBy180;\n },\n\n /**\n * Rotates `point` around `origin` with `radians`\n * @static\n * @memberOf fabric.util\n * @param {fabric.Point} point The point to rotate\n * @param {fabric.Point} origin The origin of the rotation\n * @param {Number} radians The radians of the angle for the rotation\n * @return {fabric.Point} The new rotated point\n */\n rotatePoint: function(point, origin, radians) {\n point.subtractEquals(origin);\n var v = fabric.util.rotateVector(point, radians);\n return new fabric.Point(v.x, v.y).addEquals(origin);\n },\n\n /**\n * Rotates `vector` with `radians`\n * @static\n * @memberOf fabric.util\n * @param {Object} vector The vector to rotate (x and y)\n * @param {Number} radians The radians of the angle for the rotation\n * @return {Object} The new rotated point\n */\n rotateVector: function(vector, radians) {\n var sin = fabric.util.sin(radians),\n cos = fabric.util.cos(radians),\n rx = vector.x * cos - vector.y * sin,\n ry = vector.x * sin + vector.y * cos;\n return {\n x: rx,\n y: ry\n };\n },\n\n /**\n * Apply transform t to point p\n * @static\n * @memberOf fabric.util\n * @param {fabric.Point} p The point to transform\n * @param {Array} t The transform\n * @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied\n * @return {fabric.Point} The transformed point\n */\n transformPoint: function(p, t, ignoreOffset) {\n if (ignoreOffset) {\n return new fabric.Point(\n t[0] * p.x + t[2] * p.y,\n t[1] * p.x + t[3] * p.y\n );\n }\n return new fabric.Point(\n t[0] * p.x + t[2] * p.y + t[4],\n t[1] * p.x + t[3] * p.y + t[5]\n );\n },\n\n /**\n * Returns coordinates of points's bounding rectangle (left, top, width, height)\n * @param {Array} points 4 points array\n * @param {Array} [transform] an array of 6 numbers representing a 2x3 transform matrix\n * @return {Object} Object with left, top, width, height properties\n */\n makeBoundingBoxFromPoints: function(points, transform) {\n if (transform) {\n for (var i = 0; i < points.length; i++) {\n points[i] = fabric.util.transformPoint(points[i], transform);\n }\n }\n var xPoints = [points[0].x, points[1].x, points[2].x, points[3].x],\n minX = fabric.util.array.min(xPoints),\n maxX = fabric.util.array.max(xPoints),\n width = maxX - minX,\n yPoints = [points[0].y, points[1].y, points[2].y, points[3].y],\n minY = fabric.util.array.min(yPoints),\n maxY = fabric.util.array.max(yPoints),\n height = maxY - minY;\n\n return {\n left: minX,\n top: minY,\n width: width,\n height: height\n };\n },\n\n /**\n * Invert transformation t\n * @static\n * @memberOf fabric.util\n * @param {Array} t The transform\n * @return {Array} The inverted transform\n */\n invertTransform: function(t) {\n var a = 1 / (t[0] * t[3] - t[1] * t[2]),\n r = [a * t[3], -a * t[1], -a * t[2], a * t[0]],\n o = fabric.util.transformPoint({ x: t[4], y: t[5] }, r, true);\n r[4] = -o.x;\n r[5] = -o.y;\n return r;\n },\n\n /**\n * A wrapper around Number#toFixed, which contrary to native method returns number, not string.\n * @static\n * @memberOf fabric.util\n * @param {Number|String} number number to operate on\n * @param {Number} fractionDigits number of fraction digits to \"leave\"\n * @return {Number}\n */\n toFixed: function(number, fractionDigits) {\n return parseFloat(Number(number).toFixed(fractionDigits));\n },\n\n /**\n * Converts from attribute value to pixel value if applicable.\n * Returns converted pixels or original value not converted.\n * @param {Number|String} value number to operate on\n * @param {Number} fontSize\n * @return {Number|String}\n */\n parseUnit: function(value, fontSize) {\n var unit = /\\D{0,2}$/.exec(value),\n number = parseFloat(value);\n if (!fontSize) {\n fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE;\n }\n switch (unit[0]) {\n case 'mm':\n return number * fabric.DPI / 25.4;\n\n case 'cm':\n return number * fabric.DPI / 2.54;\n\n case 'in':\n return number * fabric.DPI;\n\n case 'pt':\n return number * fabric.DPI / 72; // or * 4 / 3\n\n case 'pc':\n return number * fabric.DPI / 72 * 12; // or * 16\n\n case 'em':\n return number * fontSize;\n\n default:\n return number;\n }\n },\n\n /**\n * Function which always returns `false`.\n * @static\n * @memberOf fabric.util\n * @return {Boolean}\n */\n falseFunction: function() {\n return false;\n },\n\n /**\n * Returns klass \"Class\" object of given namespace\n * @memberOf fabric.util\n * @param {String} type Type of object (eg. 'circle')\n * @param {String} namespace Namespace to get klass \"Class\" object from\n * @return {Object} klass \"Class\"\n */\n getKlass: function(type, namespace) {\n // capitalize first letter only\n type = fabric.util.string.camelize(type.charAt(0).toUpperCase() + type.slice(1));\n return fabric.util.resolveNamespace(namespace)[type];\n },\n\n /**\n * Returns array of attributes for given svg that fabric parses\n * @memberOf fabric.util\n * @param {String} type Type of svg element (eg. 'circle')\n * @return {Array} string names of supported attributes\n */\n getSvgAttributes: function(type) {\n var attributes = [\n 'instantiated_by_use',\n 'style',\n 'id',\n 'class'\n ];\n switch (type) {\n case 'linearGradient':\n attributes = attributes.concat(['x1', 'y1', 'x2', 'y2', 'gradientUnits', 'gradientTransform']);\n break;\n case 'radialGradient':\n attributes = attributes.concat(['gradientUnits', 'gradientTransform', 'cx', 'cy', 'r', 'fx', 'fy', 'fr']);\n break;\n case 'stop':\n attributes = attributes.concat(['offset', 'stop-color', 'stop-opacity']);\n break;\n }\n return attributes;\n },\n\n /**\n * Returns object of given namespace\n * @memberOf fabric.util\n * @param {String} namespace Namespace string e.g. 'fabric.Image.filter' or 'fabric'\n * @return {Object} Object for given namespace (default fabric)\n */\n resolveNamespace: function(namespace) {\n if (!namespace) {\n return fabric;\n }\n\n var parts = namespace.split('.'),\n len = parts.length, i,\n obj = global || fabric.window;\n\n for (i = 0; i < len; ++i) {\n obj = obj[parts[i]];\n }\n\n return obj;\n },\n\n /**\n * Loads image element from given url and passes it to a callback\n * @memberOf fabric.util\n * @param {String} url URL representing an image\n * @param {Function} callback Callback; invoked with loaded image\n * @param {*} [context] Context to invoke callback in\n * @param {Object} [crossOrigin] crossOrigin value to set image element to\n */\n loadImage: function(url, callback, context, crossOrigin) {\n if (!url) {\n callback && callback.call(context, url);\n return;\n }\n\n var img = fabric.util.createImage();\n\n /** @ignore */\n var onLoadCallback = function () {\n callback && callback.call(context, img);\n img = img.onload = img.onerror = null;\n };\n\n img.onload = onLoadCallback;\n /** @ignore */\n img.onerror = function() {\n fabric.log('Error loading ' + img.src);\n callback && callback.call(context, null, true);\n img = img.onload = img.onerror = null;\n };\n\n // data-urls appear to be buggy with crossOrigin\n // https://github.com/kangax/fabric.js/commit/d0abb90f1cd5c5ef9d2a94d3fb21a22330da3e0a#commitcomment-4513767\n // see https://code.google.com/p/chromium/issues/detail?id=315152\n // https://bugzilla.mozilla.org/show_bug.cgi?id=935069\n if (url.indexOf('data') !== 0 && crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n\n // IE10 / IE11-Fix: SVG contents from data: URI\n // will only be available if the IMG is present\n // in the DOM (and visible)\n if (url.substring(0,14) === 'data:image/svg') {\n img.onload = null;\n fabric.util.loadImageInDom(img, onLoadCallback);\n }\n\n img.src = url;\n },\n\n /**\n * Attaches SVG image with data: URL to the dom\n * @memberOf fabric.util\n * @param {Object} img Image object with data:image/svg src\n * @param {Function} callback Callback; invoked with loaded image\n * @return {Object} DOM element (div containing the SVG image)\n */\n loadImageInDom: function(img, onLoadCallback) {\n var div = fabric.document.createElement('div');\n div.style.width = div.style.height = '1px';\n div.style.left = div.style.top = '-100%';\n div.style.position = 'absolute';\n div.appendChild(img);\n fabric.document.querySelector('body').appendChild(div);\n /**\n * Wrap in function to:\n * 1. Call existing callback\n * 2. Cleanup DOM\n */\n img.onload = function () {\n onLoadCallback();\n div.parentNode.removeChild(div);\n div = null;\n };\n },\n\n /**\n * Creates corresponding fabric instances from their object representations\n * @static\n * @memberOf fabric.util\n * @param {Array} objects Objects to enliven\n * @param {Function} callback Callback to invoke when all objects are created\n * @param {String} namespace Namespace to get klass \"Class\" object from\n * @param {Function} reviver Method for further parsing of object elements,\n * called after each fabric object created.\n */\n enlivenObjects: function(objects, callback, namespace, reviver) {\n objects = objects || [];\n\n var enlivenedObjects = [],\n numLoadedObjects = 0,\n numTotalObjects = objects.length;\n\n function onLoaded() {\n if (++numLoadedObjects === numTotalObjects) {\n callback && callback(enlivenedObjects.filter(function(obj) {\n // filter out undefined objects (objects that gave error)\n return obj;\n }));\n }\n }\n\n if (!numTotalObjects) {\n callback && callback(enlivenedObjects);\n return;\n }\n\n objects.forEach(function (o, index) {\n // if sparse array\n if (!o || !o.type) {\n onLoaded();\n return;\n }\n var klass = fabric.util.getKlass(o.type, namespace);\n klass.fromObject(o, function (obj, error) {\n error || (enlivenedObjects[index] = obj);\n reviver && reviver(o, obj, error);\n onLoaded();\n });\n });\n },\n\n /**\n * Create and wait for loading of patterns\n * @static\n * @memberOf fabric.util\n * @param {Array} patterns Objects to enliven\n * @param {Function} callback Callback to invoke when all objects are created\n * called after each fabric object created.\n */\n enlivenPatterns: function(patterns, callback) {\n patterns = patterns || [];\n\n function onLoaded() {\n if (++numLoadedPatterns === numPatterns) {\n callback && callback(enlivenedPatterns);\n }\n }\n\n var enlivenedPatterns = [],\n numLoadedPatterns = 0,\n numPatterns = patterns.length;\n\n if (!numPatterns) {\n callback && callback(enlivenedPatterns);\n return;\n }\n\n patterns.forEach(function (p, index) {\n if (p && p.source) {\n new fabric.Pattern(p, function(pattern) {\n enlivenedPatterns[index] = pattern;\n onLoaded();\n });\n }\n else {\n enlivenedPatterns[index] = p;\n onLoaded();\n }\n });\n },\n\n /**\n * Groups SVG elements (usually those retrieved from SVG document)\n * @static\n * @memberOf fabric.util\n * @param {Array} elements SVG elements to group\n * @param {Object} [options] Options object\n * @param {String} path Value to set sourcePath to\n * @return {fabric.Object|fabric.Group}\n */\n groupSVGElements: function(elements, options, path) {\n var object;\n if (elements && elements.length === 1) {\n return elements[0];\n }\n if (options) {\n if (options.width && options.height) {\n options.centerPoint = {\n x: options.width / 2,\n y: options.height / 2\n };\n }\n else {\n delete options.width;\n delete options.height;\n }\n }\n object = new fabric.Group(elements, options);\n if (typeof path !== 'undefined') {\n object.sourcePath = path;\n }\n return object;\n },\n\n /**\n * Populates an object with properties of another object\n * @static\n * @memberOf fabric.util\n * @param {Object} source Source object\n * @param {Object} destination Destination object\n * @return {Array} properties Properties names to include\n */\n populateWithProperties: function(source, destination, properties) {\n if (properties && Object.prototype.toString.call(properties) === '[object Array]') {\n for (var i = 0, len = properties.length; i < len; i++) {\n if (properties[i] in source) {\n destination[properties[i]] = source[properties[i]];\n }\n }\n }\n },\n\n /**\n * Draws a dashed line between two points\n *\n * This method is used to draw dashed line around selection area.\n * See dotted stroke in canvas\n *\n * @param {CanvasRenderingContext2D} ctx context\n * @param {Number} x start x coordinate\n * @param {Number} y start y coordinate\n * @param {Number} x2 end x coordinate\n * @param {Number} y2 end y coordinate\n * @param {Array} da dash array pattern\n */\n drawDashedLine: function(ctx, x, y, x2, y2, da) {\n var dx = x2 - x,\n dy = y2 - y,\n len = sqrt(dx * dx + dy * dy),\n rot = atan2(dy, dx),\n dc = da.length,\n di = 0,\n draw = true;\n\n ctx.save();\n ctx.translate(x, y);\n ctx.moveTo(0, 0);\n ctx.rotate(rot);\n\n x = 0;\n while (len > x) {\n x += da[di++ % dc];\n if (x > len) {\n x = len;\n }\n ctx[draw ? 'lineTo' : 'moveTo'](x, 0);\n draw = !draw;\n }\n\n ctx.restore();\n },\n\n /**\n * Creates canvas element\n * @static\n * @memberOf fabric.util\n * @return {CanvasElement} initialized canvas element\n */\n createCanvasElement: function() {\n return fabric.document.createElement('canvas');\n },\n\n /**\n * Creates a canvas element that is a copy of another and is also painted\n * @param {CanvasElement} canvas to copy size and content of\n * @static\n * @memberOf fabric.util\n * @return {CanvasElement} initialized canvas element\n */\n copyCanvasElement: function(canvas) {\n var newCanvas = fabric.util.createCanvasElement();\n newCanvas.width = canvas.width;\n newCanvas.height = canvas.height;\n newCanvas.getContext('2d').drawImage(canvas, 0, 0);\n return newCanvas;\n },\n\n /**\n * since 2.6.0 moved from canvas instance to utility.\n * @param {CanvasElement} canvasEl to copy size and content of\n * @param {String} format 'jpeg' or 'png', in some browsers 'webp' is ok too\n * @param {Number} quality <= 1 and > 0\n * @static\n * @memberOf fabric.util\n * @return {String} data url\n */\n toDataURL: function(canvasEl, format, quality) {\n return canvasEl.toDataURL('image/' + format, quality);\n },\n\n /**\n * Creates image element (works on client and node)\n * @static\n * @memberOf fabric.util\n * @return {HTMLImageElement} HTML image element\n */\n createImage: function() {\n return fabric.document.createElement('img');\n },\n\n /**\n * @static\n * @memberOf fabric.util\n * @deprecated since 2.0.0\n * @param {fabric.Object} receiver Object implementing `clipTo` method\n * @param {CanvasRenderingContext2D} ctx Context to clip\n */\n clipContext: function(receiver, ctx) {\n ctx.save();\n ctx.beginPath();\n receiver.clipTo(ctx);\n ctx.clip();\n },\n\n /**\n * Multiply matrix A by matrix B to nest transformations\n * @static\n * @memberOf fabric.util\n * @param {Array} a First transformMatrix\n * @param {Array} b Second transformMatrix\n * @param {Boolean} is2x2 flag to multiply matrices as 2x2 matrices\n * @return {Array} The product of the two transform matrices\n */\n multiplyTransformMatrices: function(a, b, is2x2) {\n // Matrix multiply a * b\n return [\n a[0] * b[0] + a[2] * b[1],\n a[1] * b[0] + a[3] * b[1],\n a[0] * b[2] + a[2] * b[3],\n a[1] * b[2] + a[3] * b[3],\n is2x2 ? 0 : a[0] * b[4] + a[2] * b[5] + a[4],\n is2x2 ? 0 : a[1] * b[4] + a[3] * b[5] + a[5]\n ];\n },\n\n /**\n * Decomposes standard 2x3 matrix into transform components\n * @static\n * @memberOf fabric.util\n * @param {Array} a transformMatrix\n * @return {Object} Components of transform\n */\n qrDecompose: function(a) {\n var angle = atan2(a[1], a[0]),\n denom = pow(a[0], 2) + pow(a[1], 2),\n scaleX = sqrt(denom),\n scaleY = (a[0] * a[3] - a[2] * a [1]) / scaleX,\n skewX = atan2(a[0] * a[2] + a[1] * a [3], denom);\n return {\n angle: angle / PiBy180,\n scaleX: scaleX,\n scaleY: scaleY,\n skewX: skewX / PiBy180,\n skewY: 0,\n translateX: a[4],\n translateY: a[5]\n };\n },\n\n /**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet\n * @static\n * @memberOf fabric.util\n * @param {Object} options\n * @param {Number} [options.angle] angle in degrees\n * @return {Number[]} transform matrix\n */\n calcRotateMatrix: function(options) {\n if (!options.angle) {\n return fabric.iMatrix.concat();\n }\n var theta = fabric.util.degreesToRadians(options.angle),\n cos = fabric.util.cos(theta),\n sin = fabric.util.sin(theta);\n return [cos, sin, -sin, cos, 0, 0];\n },\n\n /**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet.\n * is called DimensionsTransformMatrix because those properties are the one that influence\n * the size of the resulting box of the object.\n * @static\n * @memberOf fabric.util\n * @param {Object} options\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewX]\n * @return {Number[]} transform matrix\n */\n calcDimensionsMatrix: function(options) {\n var scaleX = typeof options.scaleX === 'undefined' ? 1 : options.scaleX,\n scaleY = typeof options.scaleY === 'undefined' ? 1 : options.scaleY,\n scaleMatrix = [\n options.flipX ? -scaleX : scaleX,\n 0,\n 0,\n options.flipY ? -scaleY : scaleY,\n 0,\n 0],\n multiply = fabric.util.multiplyTransformMatrices,\n degreesToRadians = fabric.util.degreesToRadians;\n if (options.skewX) {\n scaleMatrix = multiply(\n scaleMatrix,\n [1, 0, Math.tan(degreesToRadians(options.skewX)), 1],\n true);\n }\n if (options.skewY) {\n scaleMatrix = multiply(\n scaleMatrix,\n [1, Math.tan(degreesToRadians(options.skewY)), 0, 1],\n true);\n }\n return scaleMatrix;\n },\n\n /**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet\n * @static\n * @memberOf fabric.util\n * @param {Object} options\n * @param {Number} [options.angle]\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewX]\n * @param {Number} [options.translateX]\n * @param {Number} [options.translateY]\n * @return {Number[]} transform matrix\n */\n composeMatrix: function(options) {\n var matrix = [1, 0, 0, 1, options.translateX || 0, options.translateY || 0],\n multiply = fabric.util.multiplyTransformMatrices;\n if (options.angle) {\n matrix = multiply(matrix, fabric.util.calcRotateMatrix(options));\n }\n if (options.scaleX || options.scaleY || options.skewX || options.skewY || options.flipX || options.flipY) {\n matrix = multiply(matrix, fabric.util.calcDimensionsMatrix(options));\n }\n return matrix;\n },\n\n /**\n * Returns a transform matrix that has the same effect of scaleX, scaleY and skewX.\n * Is deprecated for composeMatrix. Please do not use it.\n * @static\n * @deprecated since 3.4.0\n * @memberOf fabric.util\n * @param {Number} scaleX\n * @param {Number} scaleY\n * @param {Number} skewX\n * @return {Number[]} transform matrix\n */\n customTransformMatrix: function(scaleX, scaleY, skewX) {\n return fabric.util.composeMatrix({ scaleX: scaleX, scaleY: scaleY, skewX: skewX });\n },\n\n /**\n * reset an object transform state to neutral. Top and left are not accounted for\n * @static\n * @memberOf fabric.util\n * @param {fabric.Object} target object to transform\n */\n resetObjectTransform: function (target) {\n target.scaleX = 1;\n target.scaleY = 1;\n target.skewX = 0;\n target.skewY = 0;\n target.flipX = false;\n target.flipY = false;\n target.rotate(0);\n },\n\n /**\n * Extract Object transform values\n * @static\n * @memberOf fabric.util\n * @param {fabric.Object} target object to read from\n * @return {Object} Components of transform\n */\n saveObjectTransform: function (target) {\n return {\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n angle: target.angle,\n left: target.left,\n flipX: target.flipX,\n flipY: target.flipY,\n top: target.top\n };\n },\n\n /**\n * Returns string representation of function body\n * @param {Function} fn Function to get body of\n * @return {String} Function body\n */\n getFunctionBody: function(fn) {\n return (String(fn).match(/function[^{]*\\{([\\s\\S]*)\\}/) || {})[1];\n },\n\n /**\n * Returns true if context has transparent pixel\n * at specified location (taking tolerance into account)\n * @param {CanvasRenderingContext2D} ctx context\n * @param {Number} x x coordinate\n * @param {Number} y y coordinate\n * @param {Number} tolerance Tolerance\n */\n isTransparent: function(ctx, x, y, tolerance) {\n\n // If tolerance is > 0 adjust start coords to take into account.\n // If moves off Canvas fix to 0\n if (tolerance > 0) {\n if (x > tolerance) {\n x -= tolerance;\n }\n else {\n x = 0;\n }\n if (y > tolerance) {\n y -= tolerance;\n }\n else {\n y = 0;\n }\n }\n\n var _isTransparent = true, i, temp,\n imageData = ctx.getImageData(x, y, (tolerance * 2) || 1, (tolerance * 2) || 1),\n l = imageData.data.length;\n\n // Split image data - for tolerance > 1, pixelDataSize = 4;\n for (i = 3; i < l; i += 4) {\n temp = imageData.data[i];\n _isTransparent = temp <= 0;\n if (_isTransparent === false) {\n break; // Stop if colour found\n }\n }\n\n imageData = null;\n\n return _isTransparent;\n },\n\n /**\n * Parse preserveAspectRatio attribute from element\n * @param {string} attribute to be parsed\n * @return {Object} an object containing align and meetOrSlice attribute\n */\n parsePreserveAspectRatioAttribute: function(attribute) {\n var meetOrSlice = 'meet', alignX = 'Mid', alignY = 'Mid',\n aspectRatioAttrs = attribute.split(' '), align;\n\n if (aspectRatioAttrs && aspectRatioAttrs.length) {\n meetOrSlice = aspectRatioAttrs.pop();\n if (meetOrSlice !== 'meet' && meetOrSlice !== 'slice') {\n align = meetOrSlice;\n meetOrSlice = 'meet';\n }\n else if (aspectRatioAttrs.length) {\n align = aspectRatioAttrs.pop();\n }\n }\n //divide align in alignX and alignY\n alignX = align !== 'none' ? align.slice(1, 4) : 'none';\n alignY = align !== 'none' ? align.slice(5, 8) : 'none';\n return {\n meetOrSlice: meetOrSlice,\n alignX: alignX,\n alignY: alignY\n };\n },\n\n /**\n * Clear char widths cache for the given font family or all the cache if no\n * fontFamily is specified.\n * Use it if you know you are loading fonts in a lazy way and you are not waiting\n * for custom fonts to load properly when adding text objects to the canvas.\n * If a text object is added when its own font is not loaded yet, you will get wrong\n * measurement and so wrong bounding boxes.\n * After the font cache is cleared, either change the textObject text content or call\n * initDimensions() to trigger a recalculation\n * @memberOf fabric.util\n * @param {String} [fontFamily] font family to clear\n */\n clearFabricFontCache: function(fontFamily) {\n fontFamily = (fontFamily || '').toLowerCase();\n if (!fontFamily) {\n fabric.charWidthsCache = { };\n }\n else if (fabric.charWidthsCache[fontFamily]) {\n delete fabric.charWidthsCache[fontFamily];\n }\n },\n\n /**\n * Given current aspect ratio, determines the max width and height that can\n * respect the total allowed area for the cache.\n * @memberOf fabric.util\n * @param {Number} ar aspect ratio\n * @param {Number} maximumArea Maximum area you want to achieve\n * @return {Object.x} Limited dimensions by X\n * @return {Object.y} Limited dimensions by Y\n */\n limitDimsByArea: function(ar, maximumArea) {\n var roughWidth = Math.sqrt(maximumArea * ar),\n perfLimitSizeY = Math.floor(maximumArea / roughWidth);\n return { x: Math.floor(roughWidth), y: perfLimitSizeY };\n },\n\n capValue: function(min, value, max) {\n return Math.max(min, Math.min(value, max));\n },\n\n /**\n * Finds the scale for the object source to fit inside the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @memberOf fabric.util\n * @param {Object | fabric.Object} source\n * @param {Number} source.height natural unscaled height of the object\n * @param {Number} source.width natural unscaled width of the object\n * @param {Object | fabric.Object} destination\n * @param {Number} destination.height natural unscaled height of the object\n * @param {Number} destination.width natural unscaled width of the object\n * @return {Number} scale factor to apply to source to fit into destination\n */\n findScaleToFit: function(source, destination) {\n return Math.min(destination.width / source.width, destination.height / source.height);\n },\n\n /**\n * Finds the scale for the object source to cover entirely the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @memberOf fabric.util\n * @param {Object | fabric.Object} source\n * @param {Number} source.height natural unscaled height of the object\n * @param {Number} source.width natural unscaled width of the object\n * @param {Object | fabric.Object} destination\n * @param {Number} destination.height natural unscaled height of the object\n * @param {Number} destination.width natural unscaled width of the object\n * @return {Number} scale factor to apply to source to cover destination\n */\n findScaleToCover: function(source, destination) {\n return Math.max(destination.width / source.width, destination.height / source.height);\n },\n\n /**\n * given an array of 6 number returns something like `\"matrix(...numbers)\"`\n * @memberOf fabric.util\n * @param {Array} trasnform an array with 6 numbers\n * @return {String} transform matrix for svg\n * @return {Object.y} Limited dimensions by Y\n */\n matrixToSVG: function(transform) {\n return 'matrix(' + transform.map(function(value) {\n return fabric.util.toFixed(value, fabric.Object.NUM_FRACTION_DIGITS);\n }).join(' ') + ')';\n }\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n\n var _join = Array.prototype.join;\n\n /* Adapted from http://dxr.mozilla.org/mozilla-central/source/content/svg/content/src/nsSVGPathDataParser.cpp\n * by Andrea Bogazzi code is under MPL. if you don't have a copy of the license you can take it here\n * http://mozilla.org/MPL/2.0/\n */\n function arcToSegments(toX, toY, rx, ry, large, sweep, rotateX) {\n var argsString = _join.call(arguments);\n if (fabric.arcToSegmentsCache[argsString]) {\n return fabric.arcToSegmentsCache[argsString];\n }\n\n var PI = Math.PI, th = rotateX * PI / 180,\n sinTh = fabric.util.sin(th),\n cosTh = fabric.util.cos(th),\n fromX = 0, fromY = 0;\n\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n var px = -cosTh * toX * 0.5 - sinTh * toY * 0.5,\n py = -cosTh * toY * 0.5 + sinTh * toX * 0.5,\n rx2 = rx * rx, ry2 = ry * ry, py2 = py * py, px2 = px * px,\n pl = rx2 * ry2 - rx2 * py2 - ry2 * px2,\n root = 0;\n\n if (pl < 0) {\n var s = Math.sqrt(1 - pl / (rx2 * ry2));\n rx *= s;\n ry *= s;\n }\n else {\n root = (large === sweep ? -1.0 : 1.0) *\n Math.sqrt( pl / (rx2 * py2 + ry2 * px2));\n }\n\n var cx = root * rx * py / ry,\n cy = -root * ry * px / rx,\n cx1 = cosTh * cx - sinTh * cy + toX * 0.5,\n cy1 = sinTh * cx + cosTh * cy + toY * 0.5,\n mTheta = calcVectorAngle(1, 0, (px - cx) / rx, (py - cy) / ry),\n dtheta = calcVectorAngle((px - cx) / rx, (py - cy) / ry, (-px - cx) / rx, (-py - cy) / ry);\n\n if (sweep === 0 && dtheta > 0) {\n dtheta -= 2 * PI;\n }\n else if (sweep === 1 && dtheta < 0) {\n dtheta += 2 * PI;\n }\n\n // Convert into cubic bezier segments <= 90deg\n var segments = Math.ceil(Math.abs(dtheta / PI * 2)),\n result = [], mDelta = dtheta / segments,\n mT = 8 / 3 * Math.sin(mDelta / 4) * Math.sin(mDelta / 4) / Math.sin(mDelta / 2),\n th3 = mTheta + mDelta;\n\n for (var i = 0; i < segments; i++) {\n result[i] = segmentToBezier(mTheta, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY);\n fromX = result[i][4];\n fromY = result[i][5];\n mTheta = th3;\n th3 += mDelta;\n }\n fabric.arcToSegmentsCache[argsString] = result;\n return result;\n }\n\n function segmentToBezier(th2, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY) {\n var costh2 = fabric.util.cos(th2),\n sinth2 = fabric.util.sin(th2),\n costh3 = fabric.util.cos(th3),\n sinth3 = fabric.util.sin(th3),\n toX = cosTh * rx * costh3 - sinTh * ry * sinth3 + cx1,\n toY = sinTh * rx * costh3 + cosTh * ry * sinth3 + cy1,\n cp1X = fromX + mT * ( -cosTh * rx * sinth2 - sinTh * ry * costh2),\n cp1Y = fromY + mT * ( -sinTh * rx * sinth2 + cosTh * ry * costh2),\n cp2X = toX + mT * ( cosTh * rx * sinth3 + sinTh * ry * costh3),\n cp2Y = toY + mT * ( sinTh * rx * sinth3 - cosTh * ry * costh3);\n\n return [\n cp1X, cp1Y,\n cp2X, cp2Y,\n toX, toY\n ];\n }\n\n /*\n * Private\n */\n function calcVectorAngle(ux, uy, vx, vy) {\n var ta = Math.atan2(uy, ux),\n tb = Math.atan2(vy, vx);\n if (tb >= ta) {\n return tb - ta;\n }\n else {\n return 2 * Math.PI - (ta - tb);\n }\n }\n\n /**\n * Draws arc\n * @param {CanvasRenderingContext2D} ctx\n * @param {Number} fx\n * @param {Number} fy\n * @param {Array} coords\n */\n fabric.util.drawArc = function(ctx, fx, fy, coords) {\n var rx = coords[0],\n ry = coords[1],\n rot = coords[2],\n large = coords[3],\n sweep = coords[4],\n tx = coords[5],\n ty = coords[6],\n segs = [[], [], [], []],\n segsNorm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);\n\n for (var i = 0, len = segsNorm.length; i < len; i++) {\n segs[i][0] = segsNorm[i][0] + fx;\n segs[i][1] = segsNorm[i][1] + fy;\n segs[i][2] = segsNorm[i][2] + fx;\n segs[i][3] = segsNorm[i][3] + fy;\n segs[i][4] = segsNorm[i][4] + fx;\n segs[i][5] = segsNorm[i][5] + fy;\n ctx.bezierCurveTo.apply(ctx, segs[i]);\n }\n };\n\n /**\n * Calculate bounding box of a elliptic-arc\n * @param {Number} fx start point of arc\n * @param {Number} fy\n * @param {Number} rx horizontal radius\n * @param {Number} ry vertical radius\n * @param {Number} rot angle of horizontal axe\n * @param {Number} large 1 or 0, whatever the arc is the big or the small on the 2 points\n * @param {Number} sweep 1 or 0, 1 clockwise or counterclockwise direction\n * @param {Number} tx end point of arc\n * @param {Number} ty\n */\n fabric.util.getBoundsOfArc = function(fx, fy, rx, ry, rot, large, sweep, tx, ty) {\n\n var fromX = 0, fromY = 0, bound, bounds = [],\n segs = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);\n\n for (var i = 0, len = segs.length; i < len; i++) {\n bound = getBoundsOfCurve(fromX, fromY, segs[i][0], segs[i][1], segs[i][2], segs[i][3], segs[i][4], segs[i][5]);\n bounds.push({ x: bound[0].x + fx, y: bound[0].y + fy });\n bounds.push({ x: bound[1].x + fx, y: bound[1].y + fy });\n fromX = segs[i][4];\n fromY = segs[i][5];\n }\n return bounds;\n };\n\n /**\n * Calculate bounding box of a beziercurve\n * @param {Number} x0 starting point\n * @param {Number} y0\n * @param {Number} x1 first control point\n * @param {Number} y1\n * @param {Number} x2 secondo control point\n * @param {Number} y2\n * @param {Number} x3 end of beizer\n * @param {Number} y3\n */\n // taken from http://jsbin.com/ivomiq/56/edit no credits available for that.\n function getBoundsOfCurve(x0, y0, x1, y1, x2, y2, x3, y3) {\n var argsString;\n if (fabric.cachesBoundsOfCurve) {\n argsString = _join.call(arguments);\n if (fabric.boundsOfCurveCache[argsString]) {\n return fabric.boundsOfCurveCache[argsString];\n }\n }\n\n var sqrt = Math.sqrt,\n min = Math.min, max = Math.max,\n abs = Math.abs, tvalues = [],\n bounds = [[], []],\n a, b, c, t, t1, t2, b2ac, sqrtb2ac;\n\n b = 6 * x0 - 12 * x1 + 6 * x2;\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n c = 3 * x1 - 3 * x0;\n\n for (var i = 0; i < 2; ++i) {\n if (i > 0) {\n b = 6 * y0 - 12 * y1 + 6 * y2;\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n c = 3 * y1 - 3 * y0;\n }\n\n if (abs(a) < 1e-12) {\n if (abs(b) < 1e-12) {\n continue;\n }\n t = -c / b;\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n b2ac = b * b - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n sqrtb2ac = sqrt(b2ac);\n t1 = (-b + sqrtb2ac) / (2 * a);\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n t2 = (-b - sqrtb2ac) / (2 * a);\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n var x, y, j = tvalues.length, jlen = j, mt;\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n x = (mt * mt * mt * x0) + (3 * mt * mt * t * x1) + (3 * mt * t * t * x2) + (t * t * t * x3);\n bounds[0][j] = x;\n\n y = (mt * mt * mt * y0) + (3 * mt * mt * t * y1) + (3 * mt * t * t * y2) + (t * t * t * y3);\n bounds[1][j] = y;\n }\n\n bounds[0][jlen] = x0;\n bounds[1][jlen] = y0;\n bounds[0][jlen + 1] = x3;\n bounds[1][jlen + 1] = y3;\n var result = [\n {\n x: min.apply(null, bounds[0]),\n y: min.apply(null, bounds[1])\n },\n {\n x: max.apply(null, bounds[0]),\n y: max.apply(null, bounds[1])\n }\n ];\n if (fabric.cachesBoundsOfCurve) {\n fabric.boundsOfCurveCache[argsString] = result;\n }\n return result;\n }\n\n fabric.util.getBoundsOfCurve = getBoundsOfCurve;\n\n})();\n\n\n(function() {\n\n var slice = Array.prototype.slice;\n\n /**\n * Invokes method on all items in a given array\n * @memberOf fabric.util.array\n * @param {Array} array Array to iterate over\n * @param {String} method Name of a method to invoke\n * @return {Array}\n */\n function invoke(array, method) {\n var args = slice.call(arguments, 2), result = [];\n for (var i = 0, len = array.length; i < len; i++) {\n result[i] = args.length ? array[i][method].apply(array[i], args) : array[i][method].call(array[i]);\n }\n return result;\n }\n\n /**\n * Finds maximum value in array (not necessarily \"first\" one)\n * @memberOf fabric.util.array\n * @param {Array} array Array to iterate over\n * @param {String} byProperty\n * @return {*}\n */\n function max(array, byProperty) {\n return find(array, byProperty, function(value1, value2) {\n return value1 >= value2;\n });\n }\n\n /**\n * Finds minimum value in array (not necessarily \"first\" one)\n * @memberOf fabric.util.array\n * @param {Array} array Array to iterate over\n * @param {String} byProperty\n * @return {*}\n */\n function min(array, byProperty) {\n return find(array, byProperty, function(value1, value2) {\n return value1 < value2;\n });\n }\n\n /**\n * @private\n */\n function fill(array, value) {\n var k = array.length;\n while (k--) {\n array[k] = value;\n }\n return array;\n }\n\n /**\n * @private\n */\n function find(array, byProperty, condition) {\n if (!array || array.length === 0) {\n return;\n }\n\n var i = array.length - 1,\n result = byProperty ? array[i][byProperty] : array[i];\n if (byProperty) {\n while (i--) {\n if (condition(array[i][byProperty], result)) {\n result = array[i][byProperty];\n }\n }\n }\n else {\n while (i--) {\n if (condition(array[i], result)) {\n result = array[i];\n }\n }\n }\n return result;\n }\n\n /**\n * @namespace fabric.util.array\n */\n fabric.util.array = {\n fill: fill,\n invoke: invoke,\n min: min,\n max: max\n };\n\n})();\n\n\n(function() {\n /**\n * Copies all enumerable properties of one js object to another\n * this does not and cannot compete with generic utils.\n * Does not clone or extend fabric.Object subclasses.\n * This is mostly for internal use and has extra handling for fabricJS objects\n * it skips the canvas property in deep cloning.\n * @memberOf fabric.util.object\n * @param {Object} destination Where to copy to\n * @param {Object} source Where to copy from\n * @return {Object}\n */\n\n function extend(destination, source, deep) {\n // JScript DontEnum bug is not taken care of\n // the deep clone is for internal use, is not meant to avoid\n // javascript traps or cloning html element or self referenced objects.\n if (deep) {\n if (!fabric.isLikelyNode && source instanceof Element) {\n // avoid cloning deep images, canvases,\n destination = source;\n }\n else if (source instanceof Array) {\n destination = [];\n for (var i = 0, len = source.length; i < len; i++) {\n destination[i] = extend({ }, source[i], deep);\n }\n }\n else if (source && typeof source === 'object') {\n for (var property in source) {\n if (property === 'canvas') {\n destination[property] = extend({ }, source[property]);\n }\n else if (source.hasOwnProperty(property)) {\n destination[property] = extend({ }, source[property], deep);\n }\n }\n }\n else {\n // this sounds odd for an extend but is ok for recursive use\n destination = source;\n }\n }\n else {\n for (var property in source) {\n destination[property] = source[property];\n }\n }\n return destination;\n }\n\n /**\n * Creates an empty object and copies all enumerable properties of another object to it\n * @memberOf fabric.util.object\n * TODO: this function return an empty object if you try to clone null\n * @param {Object} object Object to clone\n * @return {Object}\n */\n function clone(object, deep) {\n return extend({ }, object, deep);\n }\n\n /** @namespace fabric.util.object */\n fabric.util.object = {\n extend: extend,\n clone: clone\n };\n fabric.util.object.extend(fabric.util, fabric.Observable);\n})();\n\n\n(function() {\n\n /**\n * Camelizes a string\n * @memberOf fabric.util.string\n * @param {String} string String to camelize\n * @return {String} Camelized version of a string\n */\n function camelize(string) {\n return string.replace(/-+(.)?/g, function(match, character) {\n return character ? character.toUpperCase() : '';\n });\n }\n\n /**\n * Capitalizes a string\n * @memberOf fabric.util.string\n * @param {String} string String to capitalize\n * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized\n * and other letters stay untouched, if false first letter is capitalized\n * and other letters are converted to lowercase.\n * @return {String} Capitalized version of a string\n */\n function capitalize(string, firstLetterOnly) {\n return string.charAt(0).toUpperCase() +\n (firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase());\n }\n\n /**\n * Escapes XML in a string\n * @memberOf fabric.util.string\n * @param {String} string String to escape\n * @return {String} Escaped version of a string\n */\n function escapeXml(string) {\n return string.replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(//g, '>');\n }\n\n /**\n * Divide a string in the user perceived single units\n * @memberOf fabric.util.string\n * @param {String} textstring String to escape\n * @return {Array} array containing the graphemes\n */\n function graphemeSplit(textstring) {\n var i = 0, chr, graphemes = [];\n for (i = 0, chr; i < textstring.length; i++) {\n if ((chr = getWholeChar(textstring, i)) === false) {\n continue;\n }\n graphemes.push(chr);\n }\n return graphemes;\n }\n\n // taken from mdn in the charAt doc page.\n function getWholeChar(str, i) {\n var code = str.charCodeAt(i);\n\n if (isNaN(code)) {\n return ''; // Position not found\n }\n if (code < 0xD800 || code > 0xDFFF) {\n return str.charAt(i);\n }\n\n // High surrogate (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xD800 <= code && code <= 0xDBFF) {\n if (str.length <= (i + 1)) {\n throw 'High surrogate without following low surrogate';\n }\n var next = str.charCodeAt(i + 1);\n if (0xDC00 > next || next > 0xDFFF) {\n throw 'High surrogate without following low surrogate';\n }\n return str.charAt(i) + str.charAt(i + 1);\n }\n // Low surrogate (0xDC00 <= code && code <= 0xDFFF)\n if (i === 0) {\n throw 'Low surrogate without preceding high surrogate';\n }\n var prev = str.charCodeAt(i - 1);\n\n // (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xD800 > prev || prev > 0xDBFF) {\n throw 'Low surrogate without preceding high surrogate';\n }\n // We can pass over low surrogates now as the second component\n // in a pair which we have already processed\n return false;\n }\n\n\n /**\n * String utilities\n * @namespace fabric.util.string\n */\n fabric.util.string = {\n camelize: camelize,\n capitalize: capitalize,\n escapeXml: escapeXml,\n graphemeSplit: graphemeSplit\n };\n})();\n\n\n(function() {\n\n var slice = Array.prototype.slice, emptyFunction = function() { },\n\n IS_DONTENUM_BUGGY = (function() {\n for (var p in { toString: 1 }) {\n if (p === 'toString') {\n return false;\n }\n }\n return true;\n })(),\n\n /** @ignore */\n addMethods = function(klass, source, parent) {\n for (var property in source) {\n\n if (property in klass.prototype &&\n typeof klass.prototype[property] === 'function' &&\n (source[property] + '').indexOf('callSuper') > -1) {\n\n klass.prototype[property] = (function(property) {\n return function() {\n\n var superclass = this.constructor.superclass;\n this.constructor.superclass = parent;\n var returnValue = source[property].apply(this, arguments);\n this.constructor.superclass = superclass;\n\n if (property !== 'initialize') {\n return returnValue;\n }\n };\n })(property);\n }\n else {\n klass.prototype[property] = source[property];\n }\n\n if (IS_DONTENUM_BUGGY) {\n if (source.toString !== Object.prototype.toString) {\n klass.prototype.toString = source.toString;\n }\n if (source.valueOf !== Object.prototype.valueOf) {\n klass.prototype.valueOf = source.valueOf;\n }\n }\n }\n };\n\n function Subclass() { }\n\n function callSuper(methodName) {\n var parentMethod = null,\n _this = this;\n\n // climb prototype chain to find method not equal to callee's method\n while (_this.constructor.superclass) {\n var superClassMethod = _this.constructor.superclass.prototype[methodName];\n if (_this[methodName] !== superClassMethod) {\n parentMethod = superClassMethod;\n break;\n }\n // eslint-disable-next-line\n _this = _this.constructor.superclass.prototype;\n }\n\n if (!parentMethod) {\n return console.log('tried to callSuper ' + methodName + ', method not found in prototype chain', this);\n }\n\n return (arguments.length > 1)\n ? parentMethod.apply(this, slice.call(arguments, 1))\n : parentMethod.call(this);\n }\n\n /**\n * Helper for creation of \"classes\".\n * @memberOf fabric.util\n * @param {Function} [parent] optional \"Class\" to inherit from\n * @param {Object} [properties] Properties shared by all instances of this class\n * (be careful modifying objects defined here as this would affect all instances)\n */\n function createClass() {\n var parent = null,\n properties = slice.call(arguments, 0);\n\n if (typeof properties[0] === 'function') {\n parent = properties.shift();\n }\n function klass() {\n this.initialize.apply(this, arguments);\n }\n\n klass.superclass = parent;\n klass.subclasses = [];\n\n if (parent) {\n Subclass.prototype = parent.prototype;\n klass.prototype = new Subclass();\n parent.subclasses.push(klass);\n }\n for (var i = 0, length = properties.length; i < length; i++) {\n addMethods(klass, properties[i], parent);\n }\n if (!klass.prototype.initialize) {\n klass.prototype.initialize = emptyFunction;\n }\n klass.prototype.constructor = klass;\n klass.prototype.callSuper = callSuper;\n return klass;\n }\n\n fabric.util.createClass = createClass;\n})();\n\n\n(function () {\n // since ie10 or ie9 can use addEventListener but they do not support options, i need to check\n var couldUseAttachEvent = !!fabric.document.createElement('div').attachEvent;\n /**\n * Adds an event listener to an element\n * @function\n * @memberOf fabric.util\n * @param {HTMLElement} element\n * @param {String} eventName\n * @param {Function} handler\n */\n fabric.util.addListener = function(element, eventName, handler, options) {\n element && element.addEventListener(eventName, handler, couldUseAttachEvent ? false : options);\n };\n\n /**\n * Removes an event listener from an element\n * @function\n * @memberOf fabric.util\n * @param {HTMLElement} element\n * @param {String} eventName\n * @param {Function} handler\n */\n fabric.util.removeListener = function(element, eventName, handler, options) {\n element && element.removeEventListener(eventName, handler, couldUseAttachEvent ? false : options);\n };\n\n function getTouchInfo(event) {\n var touchProp = event.changedTouches;\n if (touchProp && touchProp[0]) {\n return touchProp[0];\n }\n return event;\n }\n\n fabric.util.getPointer = function(event) {\n var element = event.target,\n scroll = fabric.util.getScrollLeftTop(element),\n _evt = getTouchInfo(event);\n return {\n x: _evt.clientX + scroll.left,\n y: _evt.clientY + scroll.top\n };\n };\n})();\n\n\n(function () {\n\n /**\n * Cross-browser wrapper for setting element's style\n * @memberOf fabric.util\n * @param {HTMLElement} element\n * @param {Object} styles\n * @return {HTMLElement} Element that was passed as a first argument\n */\n function setStyle(element, styles) {\n var elementStyle = element.style;\n if (!elementStyle) {\n return element;\n }\n if (typeof styles === 'string') {\n element.style.cssText += ';' + styles;\n return styles.indexOf('opacity') > -1\n ? setOpacity(element, styles.match(/opacity:\\s*(\\d?\\.?\\d*)/)[1])\n : element;\n }\n for (var property in styles) {\n if (property === 'opacity') {\n setOpacity(element, styles[property]);\n }\n else {\n var normalizedProperty = (property === 'float' || property === 'cssFloat')\n ? (typeof elementStyle.styleFloat === 'undefined' ? 'cssFloat' : 'styleFloat')\n : property;\n elementStyle[normalizedProperty] = styles[property];\n }\n }\n return element;\n }\n\n var parseEl = fabric.document.createElement('div'),\n supportsOpacity = typeof parseEl.style.opacity === 'string',\n supportsFilters = typeof parseEl.style.filter === 'string',\n reOpacity = /alpha\\s*\\(\\s*opacity\\s*=\\s*([^\\)]+)\\)/,\n\n /** @ignore */\n setOpacity = function (element) { return element; };\n\n if (supportsOpacity) {\n /** @ignore */\n setOpacity = function(element, value) {\n element.style.opacity = value;\n return element;\n };\n }\n else if (supportsFilters) {\n /** @ignore */\n setOpacity = function(element, value) {\n var es = element.style;\n if (element.currentStyle && !element.currentStyle.hasLayout) {\n es.zoom = 1;\n }\n if (reOpacity.test(es.filter)) {\n value = value >= 0.9999 ? '' : ('alpha(opacity=' + (value * 100) + ')');\n es.filter = es.filter.replace(reOpacity, value);\n }\n else {\n es.filter += ' alpha(opacity=' + (value * 100) + ')';\n }\n return element;\n };\n }\n\n fabric.util.setStyle = setStyle;\n\n})();\n\n\n(function() {\n\n var _slice = Array.prototype.slice;\n\n /**\n * Takes id and returns an element with that id (if one exists in a document)\n * @memberOf fabric.util\n * @param {String|HTMLElement} id\n * @return {HTMLElement|null}\n */\n function getById(id) {\n return typeof id === 'string' ? fabric.document.getElementById(id) : id;\n }\n\n var sliceCanConvertNodelists,\n /**\n * Converts an array-like object (e.g. arguments or NodeList) to an array\n * @memberOf fabric.util\n * @param {Object} arrayLike\n * @return {Array}\n */\n toArray = function(arrayLike) {\n return _slice.call(arrayLike, 0);\n };\n\n try {\n sliceCanConvertNodelists = toArray(fabric.document.childNodes) instanceof Array;\n }\n catch (err) { }\n\n if (!sliceCanConvertNodelists) {\n toArray = function(arrayLike) {\n var arr = new Array(arrayLike.length), i = arrayLike.length;\n while (i--) {\n arr[i] = arrayLike[i];\n }\n return arr;\n };\n }\n\n /**\n * Creates specified element with specified attributes\n * @memberOf fabric.util\n * @param {String} tagName Type of an element to create\n * @param {Object} [attributes] Attributes to set on an element\n * @return {HTMLElement} Newly created element\n */\n function makeElement(tagName, attributes) {\n var el = fabric.document.createElement(tagName);\n for (var prop in attributes) {\n if (prop === 'class') {\n el.className = attributes[prop];\n }\n else if (prop === 'for') {\n el.htmlFor = attributes[prop];\n }\n else {\n el.setAttribute(prop, attributes[prop]);\n }\n }\n return el;\n }\n\n /**\n * Adds class to an element\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to add class to\n * @param {String} className Class to add to an element\n */\n function addClass(element, className) {\n if (element && (' ' + element.className + ' ').indexOf(' ' + className + ' ') === -1) {\n element.className += (element.className ? ' ' : '') + className;\n }\n }\n\n /**\n * Wraps element with another element\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to wrap\n * @param {HTMLElement|String} wrapper Element to wrap with\n * @param {Object} [attributes] Attributes to set on a wrapper\n * @return {HTMLElement} wrapper\n */\n function wrapElement(element, wrapper, attributes) {\n if (typeof wrapper === 'string') {\n wrapper = makeElement(wrapper, attributes);\n }\n if (element.parentNode) {\n element.parentNode.replaceChild(wrapper, element);\n }\n wrapper.appendChild(element);\n return wrapper;\n }\n\n /**\n * Returns element scroll offsets\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to operate on\n * @return {Object} Object with left/top values\n */\n function getScrollLeftTop(element) {\n\n var left = 0,\n top = 0,\n docElement = fabric.document.documentElement,\n body = fabric.document.body || {\n scrollLeft: 0, scrollTop: 0\n };\n\n // While loop checks (and then sets element to) .parentNode OR .host\n // to account for ShadowDOM. We still want to traverse up out of ShadowDOM,\n // but the .parentNode of a root ShadowDOM node will always be null, instead\n // it should be accessed through .host. See http://stackoverflow.com/a/24765528/4383938\n while (element && (element.parentNode || element.host)) {\n\n // Set element to element parent, or 'host' in case of ShadowDOM\n element = element.parentNode || element.host;\n\n if (element === fabric.document) {\n left = body.scrollLeft || docElement.scrollLeft || 0;\n top = body.scrollTop || docElement.scrollTop || 0;\n }\n else {\n left += element.scrollLeft || 0;\n top += element.scrollTop || 0;\n }\n\n if (element.nodeType === 1 && element.style.position === 'fixed') {\n break;\n }\n }\n\n return { left: left, top: top };\n }\n\n /**\n * Returns offset for a given element\n * @function\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to get offset for\n * @return {Object} Object with \"left\" and \"top\" properties\n */\n function getElementOffset(element) {\n var docElem,\n doc = element && element.ownerDocument,\n box = { left: 0, top: 0 },\n offset = { left: 0, top: 0 },\n scrollLeftTop,\n offsetAttributes = {\n borderLeftWidth: 'left',\n borderTopWidth: 'top',\n paddingLeft: 'left',\n paddingTop: 'top'\n };\n\n if (!doc) {\n return offset;\n }\n\n for (var attr in offsetAttributes) {\n offset[offsetAttributes[attr]] += parseInt(getElementStyle(element, attr), 10) || 0;\n }\n\n docElem = doc.documentElement;\n if ( typeof element.getBoundingClientRect !== 'undefined' ) {\n box = element.getBoundingClientRect();\n }\n\n scrollLeftTop = getScrollLeftTop(element);\n\n return {\n left: box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left,\n top: box.top + scrollLeftTop.top - (docElem.clientTop || 0) + offset.top\n };\n }\n\n /**\n * Returns style attribute value of a given element\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to get style attribute for\n * @param {String} attr Style attribute to get for element\n * @return {String} Style attribute value of the given element.\n */\n var getElementStyle;\n if (fabric.document.defaultView && fabric.document.defaultView.getComputedStyle) {\n getElementStyle = function(element, attr) {\n var style = fabric.document.defaultView.getComputedStyle(element, null);\n return style ? style[attr] : undefined;\n };\n }\n else {\n getElementStyle = function(element, attr) {\n var value = element.style[attr];\n if (!value && element.currentStyle) {\n value = element.currentStyle[attr];\n }\n return value;\n };\n }\n\n (function () {\n var style = fabric.document.documentElement.style,\n selectProp = 'userSelect' in style\n ? 'userSelect'\n : 'MozUserSelect' in style\n ? 'MozUserSelect'\n : 'WebkitUserSelect' in style\n ? 'WebkitUserSelect'\n : 'KhtmlUserSelect' in style\n ? 'KhtmlUserSelect'\n : '';\n\n /**\n * Makes element unselectable\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to make unselectable\n * @return {HTMLElement} Element that was passed in\n */\n function makeElementUnselectable(element) {\n if (typeof element.onselectstart !== 'undefined') {\n element.onselectstart = fabric.util.falseFunction;\n }\n if (selectProp) {\n element.style[selectProp] = 'none';\n }\n else if (typeof element.unselectable === 'string') {\n element.unselectable = 'on';\n }\n return element;\n }\n\n /**\n * Makes element selectable\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to make selectable\n * @return {HTMLElement} Element that was passed in\n */\n function makeElementSelectable(element) {\n if (typeof element.onselectstart !== 'undefined') {\n element.onselectstart = null;\n }\n if (selectProp) {\n element.style[selectProp] = '';\n }\n else if (typeof element.unselectable === 'string') {\n element.unselectable = '';\n }\n return element;\n }\n\n fabric.util.makeElementUnselectable = makeElementUnselectable;\n fabric.util.makeElementSelectable = makeElementSelectable;\n })();\n\n (function() {\n\n /**\n * Inserts a script element with a given url into a document; invokes callback, when that script is finished loading\n * @memberOf fabric.util\n * @param {String} url URL of a script to load\n * @param {Function} callback Callback to execute when script is finished loading\n */\n function getScript(url, callback) {\n var headEl = fabric.document.getElementsByTagName('head')[0],\n scriptEl = fabric.document.createElement('script'),\n loading = true;\n\n /** @ignore */\n scriptEl.onload = /** @ignore */ scriptEl.onreadystatechange = function(e) {\n if (loading) {\n if (typeof this.readyState === 'string' &&\n this.readyState !== 'loaded' &&\n this.readyState !== 'complete') {\n return;\n }\n loading = false;\n callback(e || fabric.window.event);\n scriptEl = scriptEl.onload = scriptEl.onreadystatechange = null;\n }\n };\n scriptEl.src = url;\n headEl.appendChild(scriptEl);\n // causes issue in Opera\n // headEl.removeChild(scriptEl);\n }\n\n fabric.util.getScript = getScript;\n })();\n\n function getNodeCanvas(element) {\n var impl = fabric.jsdomImplForWrapper(element);\n return impl._canvas || impl._image;\n };\n\n function cleanUpJsdomNode(element) {\n if (!fabric.isLikelyNode) {\n return;\n }\n var impl = fabric.jsdomImplForWrapper(element);\n if (impl) {\n impl._image = null;\n impl._canvas = null;\n // unsure if necessary\n impl._currentSrc = null;\n impl._attributes = null;\n impl._classList = null;\n }\n }\n\n fabric.util.getById = getById;\n fabric.util.toArray = toArray;\n fabric.util.makeElement = makeElement;\n fabric.util.addClass = addClass;\n fabric.util.wrapElement = wrapElement;\n fabric.util.getScrollLeftTop = getScrollLeftTop;\n fabric.util.getElementOffset = getElementOffset;\n fabric.util.getElementStyle = getElementStyle;\n fabric.util.getNodeCanvas = getNodeCanvas;\n fabric.util.cleanUpJsdomNode = cleanUpJsdomNode;\n\n})();\n\n\n(function() {\n\n function addParamToUrl(url, param) {\n return url + (/\\?/.test(url) ? '&' : '?') + param;\n }\n\n function emptyFn() { }\n\n /**\n * Cross-browser abstraction for sending XMLHttpRequest\n * @memberOf fabric.util\n * @param {String} url URL to send XMLHttpRequest to\n * @param {Object} [options] Options object\n * @param {String} [options.method=\"GET\"]\n * @param {String} [options.parameters] parameters to append to url in GET or in body\n * @param {String} [options.body] body to send with POST or PUT request\n * @param {Function} options.onComplete Callback to invoke when request is completed\n * @return {XMLHttpRequest} request\n */\n function request(url, options) {\n options || (options = { });\n\n var method = options.method ? options.method.toUpperCase() : 'GET',\n onComplete = options.onComplete || function() { },\n xhr = new fabric.window.XMLHttpRequest(),\n body = options.body || options.parameters;\n\n /** @ignore */\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n onComplete(xhr);\n xhr.onreadystatechange = emptyFn;\n }\n };\n\n if (method === 'GET') {\n body = null;\n if (typeof options.parameters === 'string') {\n url = addParamToUrl(url, options.parameters);\n }\n }\n\n xhr.open(method, url, true);\n\n if (method === 'POST' || method === 'PUT') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n }\n\n xhr.send(body);\n return xhr;\n }\n\n fabric.util.request = request;\n})();\n\n\n/**\n * Wrapper around `console.log` (when available)\n * @param {*} [values] Values to log\n */\nfabric.log = console.log;\n\n/**\n * Wrapper around `console.warn` (when available)\n * @param {*} [values] Values to log as a warning\n */\nfabric.warn = console.warn;\n\n\n(function() {\n\n function noop() {\n return false;\n }\n\n function defaultEasing(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n }\n\n /**\n * Changes value from one to another within certain period of time, invoking callbacks as value is being changed.\n * @memberOf fabric.util\n * @param {Object} [options] Animation options\n * @param {Function} [options.onChange] Callback; invoked on every value change\n * @param {Function} [options.onComplete] Callback; invoked when value change is completed\n * @param {Number} [options.startValue=0] Starting value\n * @param {Number} [options.endValue=100] Ending value\n * @param {Number} [options.byValue=100] Value to modify the property by\n * @param {Function} [options.easing] Easing function\n * @param {Number} [options.duration=500] Duration of change (in ms)\n * @param {Function} [options.abort] Additional function with logic. If returns true, onComplete is called.\n */\n function animate(options) {\n\n requestAnimFrame(function(timestamp) {\n options || (options = { });\n\n var start = timestamp || +new Date(),\n duration = options.duration || 500,\n finish = start + duration, time,\n onChange = options.onChange || noop,\n abort = options.abort || noop,\n onComplete = options.onComplete || noop,\n easing = options.easing || defaultEasing,\n startValue = 'startValue' in options ? options.startValue : 0,\n endValue = 'endValue' in options ? options.endValue : 100,\n byValue = options.byValue || endValue - startValue;\n\n options.onStart && options.onStart();\n\n (function tick(ticktime) {\n // TODO: move abort call after calculation\n // and pass (current,valuePerc, timePerc) as arguments\n time = ticktime || +new Date();\n var currentTime = time > finish ? duration : (time - start),\n timePerc = currentTime / duration,\n current = easing(currentTime, startValue, byValue, duration),\n valuePerc = Math.abs((current - startValue) / byValue);\n if (abort()) {\n onComplete(endValue, 1, 1);\n return;\n }\n if (time > finish) {\n onChange(endValue, 1, 1);\n onComplete(endValue, 1, 1);\n return;\n }\n else {\n onChange(current, valuePerc, timePerc);\n requestAnimFrame(tick);\n }\n })(start);\n });\n }\n\n var _requestAnimFrame = fabric.window.requestAnimationFrame ||\n fabric.window.webkitRequestAnimationFrame ||\n fabric.window.mozRequestAnimationFrame ||\n fabric.window.oRequestAnimationFrame ||\n fabric.window.msRequestAnimationFrame ||\n function(callback) {\n return fabric.window.setTimeout(callback, 1000 / 60);\n };\n\n var _cancelAnimFrame = fabric.window.cancelAnimationFrame || fabric.window.clearTimeout;\n\n /**\n * requestAnimationFrame polyfill based on http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n * In order to get a precise start time, `requestAnimFrame` should be called as an entry into the method\n * @memberOf fabric.util\n * @param {Function} callback Callback to invoke\n * @param {DOMElement} element optional Element to associate with animation\n */\n function requestAnimFrame() {\n return _requestAnimFrame.apply(fabric.window, arguments);\n }\n\n function cancelAnimFrame() {\n return _cancelAnimFrame.apply(fabric.window, arguments);\n }\n\n fabric.util.animate = animate;\n fabric.util.requestAnimFrame = requestAnimFrame;\n fabric.util.cancelAnimFrame = cancelAnimFrame;\n})();\n\n\n(function() {\n // Calculate an in-between color. Returns a \"rgba()\" string.\n // Credit: Edwin Martin \n // http://www.bitstorm.org/jquery/color-animation/jquery.animate-colors.js\n function calculateColor(begin, end, pos) {\n var color = 'rgba('\n + parseInt((begin[0] + pos * (end[0] - begin[0])), 10) + ','\n + parseInt((begin[1] + pos * (end[1] - begin[1])), 10) + ','\n + parseInt((begin[2] + pos * (end[2] - begin[2])), 10);\n\n color += ',' + (begin && end ? parseFloat(begin[3] + pos * (end[3] - begin[3])) : 1);\n color += ')';\n return color;\n }\n\n /**\n * Changes the color from one to another within certain period of time, invoking callbacks as value is being changed.\n * @memberOf fabric.util\n * @param {String} fromColor The starting color in hex or rgb(a) format.\n * @param {String} toColor The starting color in hex or rgb(a) format.\n * @param {Number} [duration] Duration of change (in ms).\n * @param {Object} [options] Animation options\n * @param {Function} [options.onChange] Callback; invoked on every value change\n * @param {Function} [options.onComplete] Callback; invoked when value change is completed\n * @param {Function} [options.colorEasing] Easing function. Note that this function only take two arguments (currentTime, duration). Thus the regular animation easing functions cannot be used.\n * @param {Function} [options.abort] Additional function with logic. If returns true, onComplete is called.\n */\n function animateColor(fromColor, toColor, duration, options) {\n var startColor = new fabric.Color(fromColor).getSource(),\n endColor = new fabric.Color(toColor).getSource();\n\n options = options || {};\n\n fabric.util.animate(fabric.util.object.extend(options, {\n duration: duration || 500,\n startValue: startColor,\n endValue: endColor,\n byValue: endColor,\n easing: function (currentTime, startValue, byValue, duration) {\n var posValue = options.colorEasing\n ? options.colorEasing(currentTime, duration)\n : 1 - Math.cos(currentTime / duration * (Math.PI / 2));\n return calculateColor(startValue, byValue, posValue);\n }\n }));\n }\n\n fabric.util.animateColor = animateColor;\n\n})();\n\n\n(function() {\n\n function normalize(a, c, p, s) {\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n }\n else {\n //handle the 0/0 case:\n if (c === 0 && a === 0) {\n s = p / (2 * Math.PI) * Math.asin(1);\n }\n else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n }\n return { a: a, c: c, p: p, s: s };\n }\n\n function elastic(opts, t, d) {\n return opts.a *\n Math.pow(2, 10 * (t -= 1)) *\n Math.sin( (t * d - opts.s) * (2 * Math.PI) / opts.p );\n }\n\n /**\n * Cubic easing out\n * @memberOf fabric.util.ease\n */\n function easeOutCubic(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n }\n\n /**\n * Cubic easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutCubic(t, b, c, d) {\n t /= d / 2;\n if (t < 1) {\n return c / 2 * t * t * t + b;\n }\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n }\n\n /**\n * Quartic easing in\n * @memberOf fabric.util.ease\n */\n function easeInQuart(t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n }\n\n /**\n * Quartic easing out\n * @memberOf fabric.util.ease\n */\n function easeOutQuart(t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n }\n\n /**\n * Quartic easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutQuart(t, b, c, d) {\n t /= d / 2;\n if (t < 1) {\n return c / 2 * t * t * t * t + b;\n }\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n }\n\n /**\n * Quintic easing in\n * @memberOf fabric.util.ease\n */\n function easeInQuint(t, b, c, d) {\n return c * (t /= d) * t * t * t * t + b;\n }\n\n /**\n * Quintic easing out\n * @memberOf fabric.util.ease\n */\n function easeOutQuint(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n }\n\n /**\n * Quintic easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutQuint(t, b, c, d) {\n t /= d / 2;\n if (t < 1) {\n return c / 2 * t * t * t * t * t + b;\n }\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n }\n\n /**\n * Sinusoidal easing in\n * @memberOf fabric.util.ease\n */\n function easeInSine(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n }\n\n /**\n * Sinusoidal easing out\n * @memberOf fabric.util.ease\n */\n function easeOutSine(t, b, c, d) {\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n }\n\n /**\n * Sinusoidal easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutSine(t, b, c, d) {\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n }\n\n /**\n * Exponential easing in\n * @memberOf fabric.util.ease\n */\n function easeInExpo(t, b, c, d) {\n return (t === 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;\n }\n\n /**\n * Exponential easing out\n * @memberOf fabric.util.ease\n */\n function easeOutExpo(t, b, c, d) {\n return (t === d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n }\n\n /**\n * Exponential easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutExpo(t, b, c, d) {\n if (t === 0) {\n return b;\n }\n if (t === d) {\n return b + c;\n }\n t /= d / 2;\n if (t < 1) {\n return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n }\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n }\n\n /**\n * Circular easing in\n * @memberOf fabric.util.ease\n */\n function easeInCirc(t, b, c, d) {\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n }\n\n /**\n * Circular easing out\n * @memberOf fabric.util.ease\n */\n function easeOutCirc(t, b, c, d) {\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n }\n\n /**\n * Circular easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutCirc(t, b, c, d) {\n t /= d / 2;\n if (t < 1) {\n return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n }\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n }\n\n /**\n * Elastic easing in\n * @memberOf fabric.util.ease\n */\n function easeInElastic(t, b, c, d) {\n var s = 1.70158, p = 0, a = c;\n if (t === 0) {\n return b;\n }\n t /= d;\n if (t === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n var opts = normalize(a, c, p, s);\n return -elastic(opts, t, d) + b;\n }\n\n /**\n * Elastic easing out\n * @memberOf fabric.util.ease\n */\n function easeOutElastic(t, b, c, d) {\n var s = 1.70158, p = 0, a = c;\n if (t === 0) {\n return b;\n }\n t /= d;\n if (t === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n var opts = normalize(a, c, p, s);\n return opts.a * Math.pow(2, -10 * t) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) + opts.c + b;\n }\n\n /**\n * Elastic easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutElastic(t, b, c, d) {\n var s = 1.70158, p = 0, a = c;\n if (t === 0) {\n return b;\n }\n t /= d / 2;\n if (t === 2) {\n return b + c;\n }\n if (!p) {\n p = d * (0.3 * 1.5);\n }\n var opts = normalize(a, c, p, s);\n if (t < 1) {\n return -0.5 * elastic(opts, t, d) + b;\n }\n return opts.a * Math.pow(2, -10 * (t -= 1)) *\n Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) * 0.5 + opts.c + b;\n }\n\n /**\n * Backwards easing in\n * @memberOf fabric.util.ease\n */\n function easeInBack(t, b, c, d, s) {\n if (s === undefined) {\n s = 1.70158;\n }\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n }\n\n /**\n * Backwards easing out\n * @memberOf fabric.util.ease\n */\n function easeOutBack(t, b, c, d, s) {\n if (s === undefined) {\n s = 1.70158;\n }\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n\n /**\n * Backwards easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutBack(t, b, c, d, s) {\n if (s === undefined) {\n s = 1.70158;\n }\n t /= d / 2;\n if (t < 1) {\n return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;\n }\n return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;\n }\n\n /**\n * Bouncing easing in\n * @memberOf fabric.util.ease\n */\n function easeInBounce(t, b, c, d) {\n return c - easeOutBounce (d - t, 0, c, d) + b;\n }\n\n /**\n * Bouncing easing out\n * @memberOf fabric.util.ease\n */\n function easeOutBounce(t, b, c, d) {\n if ((t /= d) < (1 / 2.75)) {\n return c * (7.5625 * t * t) + b;\n }\n else if (t < (2 / 2.75)) {\n return c * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75) + b;\n }\n else if (t < (2.5 / 2.75)) {\n return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b;\n }\n else {\n return c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b;\n }\n }\n\n /**\n * Bouncing easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutBounce(t, b, c, d) {\n if (t < d / 2) {\n return easeInBounce (t * 2, 0, c, d) * 0.5 + b;\n }\n return easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n }\n\n /**\n * Easing functions\n * See Easing Equations by Robert Penner\n * @namespace fabric.util.ease\n */\n fabric.util.ease = {\n\n /**\n * Quadratic easing in\n * @memberOf fabric.util.ease\n */\n easeInQuad: function(t, b, c, d) {\n return c * (t /= d) * t + b;\n },\n\n /**\n * Quadratic easing out\n * @memberOf fabric.util.ease\n */\n easeOutQuad: function(t, b, c, d) {\n return -c * (t /= d) * (t - 2) + b;\n },\n\n /**\n * Quadratic easing in and out\n * @memberOf fabric.util.ease\n */\n easeInOutQuad: function(t, b, c, d) {\n t /= (d / 2);\n if (t < 1) {\n return c / 2 * t * t + b;\n }\n return -c / 2 * ((--t) * (t - 2) - 1) + b;\n },\n\n /**\n * Cubic easing in\n * @memberOf fabric.util.ease\n */\n easeInCubic: function(t, b, c, d) {\n return c * (t /= d) * t * t + b;\n },\n\n easeOutCubic: easeOutCubic,\n easeInOutCubic: easeInOutCubic,\n easeInQuart: easeInQuart,\n easeOutQuart: easeOutQuart,\n easeInOutQuart: easeInOutQuart,\n easeInQuint: easeInQuint,\n easeOutQuint: easeOutQuint,\n easeInOutQuint: easeInOutQuint,\n easeInSine: easeInSine,\n easeOutSine: easeOutSine,\n easeInOutSine: easeInOutSine,\n easeInExpo: easeInExpo,\n easeOutExpo: easeOutExpo,\n easeInOutExpo: easeInOutExpo,\n easeInCirc: easeInCirc,\n easeOutCirc: easeOutCirc,\n easeInOutCirc: easeInOutCirc,\n easeInElastic: easeInElastic,\n easeOutElastic: easeOutElastic,\n easeInOutElastic: easeInOutElastic,\n easeInBack: easeInBack,\n easeOutBack: easeOutBack,\n easeInOutBack: easeInOutBack,\n easeInBounce: easeInBounce,\n easeOutBounce: easeOutBounce,\n easeInOutBounce: easeInOutBounce\n };\n\n})();\n\n\n(function(global) {\n\n 'use strict';\n\n /**\n * @name fabric\n * @namespace\n */\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n clone = fabric.util.object.clone,\n toFixed = fabric.util.toFixed,\n parseUnit = fabric.util.parseUnit,\n multiplyTransformMatrices = fabric.util.multiplyTransformMatrices,\n\n svgValidTagNames = ['path', 'circle', 'polygon', 'polyline', 'ellipse', 'rect', 'line',\n 'image', 'text'],\n svgViewBoxElements = ['symbol', 'image', 'marker', 'pattern', 'view', 'svg'],\n svgInvalidAncestors = ['pattern', 'defs', 'symbol', 'metadata', 'clipPath', 'mask', 'desc'],\n svgValidParents = ['symbol', 'g', 'a', 'svg', 'clipPath', 'defs'],\n\n attributesMap = {\n cx: 'left',\n x: 'left',\n r: 'radius',\n cy: 'top',\n y: 'top',\n display: 'visible',\n visibility: 'visible',\n transform: 'transformMatrix',\n 'fill-opacity': 'fillOpacity',\n 'fill-rule': 'fillRule',\n 'font-family': 'fontFamily',\n 'font-size': 'fontSize',\n 'font-style': 'fontStyle',\n 'font-weight': 'fontWeight',\n 'letter-spacing': 'charSpacing',\n 'paint-order': 'paintFirst',\n 'stroke-dasharray': 'strokeDashArray',\n 'stroke-dashoffset': 'strokeDashOffset',\n 'stroke-linecap': 'strokeLineCap',\n 'stroke-linejoin': 'strokeLineJoin',\n 'stroke-miterlimit': 'strokeMiterLimit',\n 'stroke-opacity': 'strokeOpacity',\n 'stroke-width': 'strokeWidth',\n 'text-decoration': 'textDecoration',\n 'text-anchor': 'textAnchor',\n opacity: 'opacity',\n 'clip-path': 'clipPath',\n 'clip-rule': 'clipRule',\n 'vector-effect': 'strokeUniform'\n },\n\n colorAttributes = {\n stroke: 'strokeOpacity',\n fill: 'fillOpacity'\n },\n\n fSize = 'font-size', cPath = 'clip-path';\n\n fabric.svgValidTagNamesRegEx = getSvgRegex(svgValidTagNames);\n fabric.svgViewBoxElementsRegEx = getSvgRegex(svgViewBoxElements);\n fabric.svgInvalidAncestorsRegEx = getSvgRegex(svgInvalidAncestors);\n fabric.svgValidParentsRegEx = getSvgRegex(svgValidParents);\n\n fabric.cssRules = { };\n fabric.gradientDefs = { };\n fabric.clipPaths = { };\n\n function normalizeAttr(attr) {\n // transform attribute names\n if (attr in attributesMap) {\n return attributesMap[attr];\n }\n return attr;\n }\n\n function normalizeValue(attr, value, parentAttributes, fontSize) {\n var isArray = Object.prototype.toString.call(value) === '[object Array]',\n parsed;\n\n if ((attr === 'fill' || attr === 'stroke') && value === 'none') {\n value = '';\n }\n else if (attr === 'vector-effect') {\n value = value === 'non-scaling-stroke';\n }\n else if (attr === 'strokeDashArray') {\n if (value === 'none') {\n value = null;\n }\n else {\n value = value.replace(/,/g, ' ').split(/\\s+/).map(parseFloat);\n }\n }\n else if (attr === 'transformMatrix') {\n if (parentAttributes && parentAttributes.transformMatrix) {\n value = multiplyTransformMatrices(\n parentAttributes.transformMatrix, fabric.parseTransformAttribute(value));\n }\n else {\n value = fabric.parseTransformAttribute(value);\n }\n }\n else if (attr === 'visible') {\n value = value !== 'none' && value !== 'hidden';\n // display=none on parent element always takes precedence over child element\n if (parentAttributes && parentAttributes.visible === false) {\n value = false;\n }\n }\n else if (attr === 'opacity') {\n value = parseFloat(value);\n if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') {\n value *= parentAttributes.opacity;\n }\n }\n else if (attr === 'textAnchor' /* text-anchor */) {\n value = value === 'start' ? 'left' : value === 'end' ? 'right' : 'center';\n }\n else if (attr === 'charSpacing') {\n // parseUnit returns px and we convert it to em\n parsed = parseUnit(value, fontSize) / fontSize * 1000;\n }\n else if (attr === 'paintFirst') {\n var fillIndex = value.indexOf('fill');\n var strokeIndex = value.indexOf('stroke');\n var value = 'fill';\n if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {\n value = 'stroke';\n }\n else if (fillIndex === -1 && strokeIndex > -1) {\n value = 'stroke';\n }\n }\n else if (attr === 'href' || attr === 'xlink:href') {\n return value;\n }\n else {\n parsed = isArray ? value.map(parseUnit) : parseUnit(value, fontSize);\n }\n\n return (!isArray && isNaN(parsed) ? value : parsed);\n }\n\n /**\n * @private\n */\n function getSvgRegex(arr) {\n return new RegExp('^(' + arr.join('|') + ')\\\\b', 'i');\n }\n\n /**\n * @private\n * @param {Object} attributes Array of attributes to parse\n */\n function _setStrokeFillOpacity(attributes) {\n for (var attr in colorAttributes) {\n\n if (typeof attributes[colorAttributes[attr]] === 'undefined' || attributes[attr] === '') {\n continue;\n }\n\n if (typeof attributes[attr] === 'undefined') {\n if (!fabric.Object.prototype[attr]) {\n continue;\n }\n attributes[attr] = fabric.Object.prototype[attr];\n }\n\n if (attributes[attr].indexOf('url(') === 0) {\n continue;\n }\n\n var color = new fabric.Color(attributes[attr]);\n attributes[attr] = color.setAlpha(toFixed(color.getAlpha() * attributes[colorAttributes[attr]], 2)).toRgba();\n }\n return attributes;\n }\n\n /**\n * @private\n */\n function _getMultipleNodes(doc, nodeNames) {\n var nodeName, nodeArray = [], nodeList, i, len;\n for (i = 0, len = nodeNames.length; i < len; i++) {\n nodeName = nodeNames[i];\n nodeList = doc.getElementsByTagName(nodeName);\n nodeArray = nodeArray.concat(Array.prototype.slice.call(nodeList));\n }\n return nodeArray;\n }\n\n /**\n * Parses \"transform\" attribute, returning an array of values\n * @static\n * @function\n * @memberOf fabric\n * @param {String} attributeValue String containing attribute value\n * @return {Array} Array of 6 elements representing transformation matrix\n */\n fabric.parseTransformAttribute = (function() {\n function rotateMatrix(matrix, args) {\n var cos = fabric.util.cos(args[0]), sin = fabric.util.sin(args[0]),\n x = 0, y = 0;\n if (args.length === 3) {\n x = args[1];\n y = args[2];\n }\n\n matrix[0] = cos;\n matrix[1] = sin;\n matrix[2] = -sin;\n matrix[3] = cos;\n matrix[4] = x - (cos * x - sin * y);\n matrix[5] = y - (sin * x + cos * y);\n }\n\n function scaleMatrix(matrix, args) {\n var multiplierX = args[0],\n multiplierY = (args.length === 2) ? args[1] : args[0];\n\n matrix[0] = multiplierX;\n matrix[3] = multiplierY;\n }\n\n function skewMatrix(matrix, args, pos) {\n matrix[pos] = Math.tan(fabric.util.degreesToRadians(args[0]));\n }\n\n function translateMatrix(matrix, args) {\n matrix[4] = args[0];\n if (args.length === 2) {\n matrix[5] = args[1];\n }\n }\n\n // identity matrix\n var iMatrix = fabric.iMatrix,\n\n // == begin transform regexp\n number = fabric.reNum,\n\n commaWsp = '(?:\\\\s+,?\\\\s*|,\\\\s*)',\n\n skewX = '(?:(skewX)\\\\s*\\\\(\\\\s*(' + number + ')\\\\s*\\\\))',\n\n skewY = '(?:(skewY)\\\\s*\\\\(\\\\s*(' + number + ')\\\\s*\\\\))',\n\n rotate = '(?:(rotate)\\\\s*\\\\(\\\\s*(' + number + ')(?:' +\n commaWsp + '(' + number + ')' +\n commaWsp + '(' + number + '))?\\\\s*\\\\))',\n\n scale = '(?:(scale)\\\\s*\\\\(\\\\s*(' + number + ')(?:' +\n commaWsp + '(' + number + '))?\\\\s*\\\\))',\n\n translate = '(?:(translate)\\\\s*\\\\(\\\\s*(' + number + ')(?:' +\n commaWsp + '(' + number + '))?\\\\s*\\\\))',\n\n matrix = '(?:(matrix)\\\\s*\\\\(\\\\s*' +\n '(' + number + ')' + commaWsp +\n '(' + number + ')' + commaWsp +\n '(' + number + ')' + commaWsp +\n '(' + number + ')' + commaWsp +\n '(' + number + ')' + commaWsp +\n '(' + number + ')' +\n '\\\\s*\\\\))',\n\n transform = '(?:' +\n matrix + '|' +\n translate + '|' +\n scale + '|' +\n rotate + '|' +\n skewX + '|' +\n skewY +\n ')',\n\n transforms = '(?:' + transform + '(?:' + commaWsp + '*' + transform + ')*' + ')',\n\n transformList = '^\\\\s*(?:' + transforms + '?)\\\\s*$',\n\n // http://www.w3.org/TR/SVG/coords.html#TransformAttribute\n reTransformList = new RegExp(transformList),\n // == end transform regexp\n\n reTransform = new RegExp(transform, 'g');\n\n return function(attributeValue) {\n\n // start with identity matrix\n var matrix = iMatrix.concat(),\n matrices = [];\n\n // return if no argument was given or\n // an argument does not match transform attribute regexp\n if (!attributeValue || (attributeValue && !reTransformList.test(attributeValue))) {\n return matrix;\n }\n\n attributeValue.replace(reTransform, function(match) {\n\n var m = new RegExp(transform).exec(match).filter(function (match) {\n // match !== '' && match != null\n return (!!match);\n }),\n operation = m[1],\n args = m.slice(2).map(parseFloat);\n\n switch (operation) {\n case 'translate':\n translateMatrix(matrix, args);\n break;\n case 'rotate':\n args[0] = fabric.util.degreesToRadians(args[0]);\n rotateMatrix(matrix, args);\n break;\n case 'scale':\n scaleMatrix(matrix, args);\n break;\n case 'skewX':\n skewMatrix(matrix, args, 2);\n break;\n case 'skewY':\n skewMatrix(matrix, args, 1);\n break;\n case 'matrix':\n matrix = args;\n break;\n }\n\n // snapshot current matrix into matrices array\n matrices.push(matrix.concat());\n // reset\n matrix = iMatrix.concat();\n });\n\n var combinedMatrix = matrices[0];\n while (matrices.length > 1) {\n matrices.shift();\n combinedMatrix = fabric.util.multiplyTransformMatrices(combinedMatrix, matrices[0]);\n }\n return combinedMatrix;\n };\n })();\n\n /**\n * @private\n */\n function parseStyleString(style, oStyle) {\n var attr, value;\n style.replace(/;\\s*$/, '').split(';').forEach(function (chunk) {\n var pair = chunk.split(':');\n\n attr = pair[0].trim().toLowerCase();\n value = pair[1].trim();\n\n oStyle[attr] = value;\n });\n }\n\n /**\n * @private\n */\n function parseStyleObject(style, oStyle) {\n var attr, value;\n for (var prop in style) {\n if (typeof style[prop] === 'undefined') {\n continue;\n }\n\n attr = prop.toLowerCase();\n value = style[prop];\n\n oStyle[attr] = value;\n }\n }\n\n /**\n * @private\n */\n function getGlobalStylesForElement(element, svgUid) {\n var styles = { };\n for (var rule in fabric.cssRules[svgUid]) {\n if (elementMatchesRule(element, rule.split(' '))) {\n for (var property in fabric.cssRules[svgUid][rule]) {\n styles[property] = fabric.cssRules[svgUid][rule][property];\n }\n }\n }\n return styles;\n }\n\n /**\n * @private\n */\n function elementMatchesRule(element, selectors) {\n var firstMatching, parentMatching = true;\n //start from rightmost selector.\n firstMatching = selectorMatches(element, selectors.pop());\n if (firstMatching && selectors.length) {\n parentMatching = doesSomeParentMatch(element, selectors);\n }\n return firstMatching && parentMatching && (selectors.length === 0);\n }\n\n function doesSomeParentMatch(element, selectors) {\n var selector, parentMatching = true;\n while (element.parentNode && element.parentNode.nodeType === 1 && selectors.length) {\n if (parentMatching) {\n selector = selectors.pop();\n }\n element = element.parentNode;\n parentMatching = selectorMatches(element, selector);\n }\n return selectors.length === 0;\n }\n\n /**\n * @private\n */\n function selectorMatches(element, selector) {\n var nodeName = element.nodeName,\n classNames = element.getAttribute('class'),\n id = element.getAttribute('id'), matcher, i;\n // i check if a selector matches slicing away part from it.\n // if i get empty string i should match\n matcher = new RegExp('^' + nodeName, 'i');\n selector = selector.replace(matcher, '');\n if (id && selector.length) {\n matcher = new RegExp('#' + id + '(?![a-zA-Z\\\\-]+)', 'i');\n selector = selector.replace(matcher, '');\n }\n if (classNames && selector.length) {\n classNames = classNames.split(' ');\n for (i = classNames.length; i--;) {\n matcher = new RegExp('\\\\.' + classNames[i] + '(?![a-zA-Z\\\\-]+)', 'i');\n selector = selector.replace(matcher, '');\n }\n }\n return selector.length === 0;\n }\n\n /**\n * @private\n * to support IE8 missing getElementById on SVGdocument and on node xmlDOM\n */\n function elementById(doc, id) {\n var el;\n doc.getElementById && (el = doc.getElementById(id));\n if (el) {\n return el;\n }\n var node, i, len, nodelist = doc.getElementsByTagName('*');\n for (i = 0, len = nodelist.length; i < len; i++) {\n node = nodelist[i];\n if (id === node.getAttribute('id')) {\n return node;\n }\n }\n }\n\n /**\n * @private\n */\n function parseUseDirectives(doc) {\n var nodelist = _getMultipleNodes(doc, ['use', 'svg:use']), i = 0;\n while (nodelist.length && i < nodelist.length) {\n var el = nodelist[i],\n xlink = (el.getAttribute('xlink:href') || el.getAttribute('href')).substr(1),\n x = el.getAttribute('x') || 0,\n y = el.getAttribute('y') || 0,\n el2 = elementById(doc, xlink).cloneNode(true),\n currentTrans = (el2.getAttribute('transform') || '') + ' translate(' + x + ', ' + y + ')',\n parentNode, oldLength = nodelist.length, attr, j, attrs, len, namespace = fabric.svgNS;\n\n applyViewboxTransform(el2);\n if (/^svg$/i.test(el2.nodeName)) {\n var el3 = el2.ownerDocument.createElementNS(namespace, 'g');\n for (j = 0, attrs = el2.attributes, len = attrs.length; j < len; j++) {\n attr = attrs.item(j);\n el3.setAttributeNS(namespace, attr.nodeName, attr.nodeValue);\n }\n // el2.firstChild != null\n while (el2.firstChild) {\n el3.appendChild(el2.firstChild);\n }\n el2 = el3;\n }\n\n for (j = 0, attrs = el.attributes, len = attrs.length; j < len; j++) {\n attr = attrs.item(j);\n if (attr.nodeName === 'x' || attr.nodeName === 'y' ||\n attr.nodeName === 'xlink:href' || attr.nodeName === 'href') {\n continue;\n }\n\n if (attr.nodeName === 'transform') {\n currentTrans = attr.nodeValue + ' ' + currentTrans;\n }\n else {\n el2.setAttribute(attr.nodeName, attr.nodeValue);\n }\n }\n\n el2.setAttribute('transform', currentTrans);\n el2.setAttribute('instantiated_by_use', '1');\n el2.removeAttribute('id');\n parentNode = el.parentNode;\n parentNode.replaceChild(el2, el);\n // some browsers do not shorten nodelist after replaceChild (IE8)\n if (nodelist.length === oldLength) {\n i++;\n }\n }\n }\n\n // http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute\n // matches, e.g.: +14.56e-12, etc.\n var reViewBoxAttrValue = new RegExp(\n '^' +\n '\\\\s*(' + fabric.reNum + '+)\\\\s*,?' +\n '\\\\s*(' + fabric.reNum + '+)\\\\s*,?' +\n '\\\\s*(' + fabric.reNum + '+)\\\\s*,?' +\n '\\\\s*(' + fabric.reNum + '+)\\\\s*' +\n '$'\n );\n\n /**\n * Add a element that envelop all child elements and makes the viewbox transformMatrix descend on all elements\n */\n function applyViewboxTransform(element) {\n\n var viewBoxAttr = element.getAttribute('viewBox'),\n scaleX = 1,\n scaleY = 1,\n minX = 0,\n minY = 0,\n viewBoxWidth, viewBoxHeight, matrix, el,\n widthAttr = element.getAttribute('width'),\n heightAttr = element.getAttribute('height'),\n x = element.getAttribute('x') || 0,\n y = element.getAttribute('y') || 0,\n preserveAspectRatio = element.getAttribute('preserveAspectRatio') || '',\n missingViewBox = (!viewBoxAttr || !fabric.svgViewBoxElementsRegEx.test(element.nodeName)\n || !(viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue))),\n missingDimAttr = (!widthAttr || !heightAttr || widthAttr === '100%' || heightAttr === '100%'),\n toBeParsed = missingViewBox && missingDimAttr,\n parsedDim = { }, translateMatrix = '', widthDiff = 0, heightDiff = 0;\n\n parsedDim.width = 0;\n parsedDim.height = 0;\n parsedDim.toBeParsed = toBeParsed;\n\n if (toBeParsed) {\n return parsedDim;\n }\n\n if (missingViewBox) {\n parsedDim.width = parseUnit(widthAttr);\n parsedDim.height = parseUnit(heightAttr);\n return parsedDim;\n }\n minX = -parseFloat(viewBoxAttr[1]);\n minY = -parseFloat(viewBoxAttr[2]);\n viewBoxWidth = parseFloat(viewBoxAttr[3]);\n viewBoxHeight = parseFloat(viewBoxAttr[4]);\n parsedDim.minX = minX;\n parsedDim.minY = minY;\n parsedDim.viewBoxWidth = viewBoxWidth;\n parsedDim.viewBoxHeight = viewBoxHeight;\n if (!missingDimAttr) {\n parsedDim.width = parseUnit(widthAttr);\n parsedDim.height = parseUnit(heightAttr);\n scaleX = parsedDim.width / viewBoxWidth;\n scaleY = parsedDim.height / viewBoxHeight;\n }\n else {\n parsedDim.width = viewBoxWidth;\n parsedDim.height = viewBoxHeight;\n }\n\n // default is to preserve aspect ratio\n preserveAspectRatio = fabric.util.parsePreserveAspectRatioAttribute(preserveAspectRatio);\n if (preserveAspectRatio.alignX !== 'none') {\n //translate all container for the effect of Mid, Min, Max\n if (preserveAspectRatio.meetOrSlice === 'meet') {\n scaleY = scaleX = (scaleX > scaleY ? scaleY : scaleX);\n // calculate additional translation to move the viewbox\n }\n if (preserveAspectRatio.meetOrSlice === 'slice') {\n scaleY = scaleX = (scaleX > scaleY ? scaleX : scaleY);\n // calculate additional translation to move the viewbox\n }\n widthDiff = parsedDim.width - viewBoxWidth * scaleX;\n heightDiff = parsedDim.height - viewBoxHeight * scaleX;\n if (preserveAspectRatio.alignX === 'Mid') {\n widthDiff /= 2;\n }\n if (preserveAspectRatio.alignY === 'Mid') {\n heightDiff /= 2;\n }\n if (preserveAspectRatio.alignX === 'Min') {\n widthDiff = 0;\n }\n if (preserveAspectRatio.alignY === 'Min') {\n heightDiff = 0;\n }\n }\n\n if (scaleX === 1 && scaleY === 1 && minX === 0 && minY === 0 && x === 0 && y === 0) {\n return parsedDim;\n }\n\n if (x || y) {\n translateMatrix = ' translate(' + parseUnit(x) + ' ' + parseUnit(y) + ') ';\n }\n\n matrix = translateMatrix + ' matrix(' + scaleX +\n ' 0' +\n ' 0 ' +\n scaleY + ' ' +\n (minX * scaleX + widthDiff) + ' ' +\n (minY * scaleY + heightDiff) + ') ';\n parsedDim.viewboxTransform = fabric.parseTransformAttribute(matrix);\n if (element.nodeName === 'svg') {\n el = element.ownerDocument.createElementNS(fabric.svgNS, 'g');\n // element.firstChild != null\n while (element.firstChild) {\n el.appendChild(element.firstChild);\n }\n element.appendChild(el);\n }\n else {\n el = element;\n matrix = el.getAttribute('transform') + matrix;\n }\n el.setAttribute('transform', matrix);\n return parsedDim;\n }\n\n function hasAncestorWithNodeName(element, nodeName) {\n while (element && (element = element.parentNode)) {\n if (element.nodeName && nodeName.test(element.nodeName.replace('svg:', ''))\n && !element.getAttribute('instantiated_by_use')) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Parses an SVG document, converts it to an array of corresponding fabric.* instances and passes them to a callback\n * @static\n * @function\n * @memberOf fabric\n * @param {SVGDocument} doc SVG document to parse\n * @param {Function} callback Callback to call when parsing is finished;\n * It's being passed an array of elements (parsed from a document).\n * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n * @param {Object} [parsingOptions] options for parsing document\n * @param {String} [parsingOptions.crossOrigin] crossOrigin settings\n */\n fabric.parseSVGDocument = function(doc, callback, reviver, parsingOptions) {\n if (!doc) {\n return;\n }\n\n parseUseDirectives(doc);\n\n var svgUid = fabric.Object.__uid++, i, len,\n options = applyViewboxTransform(doc),\n descendants = fabric.util.toArray(doc.getElementsByTagName('*'));\n options.crossOrigin = parsingOptions && parsingOptions.crossOrigin;\n options.svgUid = svgUid;\n\n if (descendants.length === 0 && fabric.isLikelyNode) {\n // we're likely in node, where \"o3-xml\" library fails to gEBTN(\"*\")\n // https://github.com/ajaxorg/node-o3-xml/issues/21\n descendants = doc.selectNodes('//*[name(.)!=\"svg\"]');\n var arr = [];\n for (i = 0, len = descendants.length; i < len; i++) {\n arr[i] = descendants[i];\n }\n descendants = arr;\n }\n\n var elements = descendants.filter(function(el) {\n applyViewboxTransform(el);\n return fabric.svgValidTagNamesRegEx.test(el.nodeName.replace('svg:', '')) &&\n !hasAncestorWithNodeName(el, fabric.svgInvalidAncestorsRegEx); // http://www.w3.org/TR/SVG/struct.html#DefsElement\n });\n\n if (!elements || (elements && !elements.length)) {\n callback && callback([], {});\n return;\n }\n var clipPaths = { };\n descendants.filter(function(el) {\n return el.nodeName.replace('svg:', '') === 'clipPath';\n }).forEach(function(el) {\n var id = el.getAttribute('id');\n clipPaths[id] = fabric.util.toArray(el.getElementsByTagName('*')).filter(function(el) {\n return fabric.svgValidTagNamesRegEx.test(el.nodeName.replace('svg:', ''));\n });\n });\n fabric.gradientDefs[svgUid] = fabric.getGradientDefs(doc);\n fabric.cssRules[svgUid] = fabric.getCSSRules(doc);\n fabric.clipPaths[svgUid] = clipPaths;\n // Precedence of rules: style > class > attribute\n fabric.parseElements(elements, function(instances, elements) {\n if (callback) {\n callback(instances, options, elements, descendants);\n delete fabric.gradientDefs[svgUid];\n delete fabric.cssRules[svgUid];\n delete fabric.clipPaths[svgUid];\n }\n }, clone(options), reviver, parsingOptions);\n };\n\n function recursivelyParseGradientsXlink(doc, gradient) {\n var gradientsAttrs = ['gradientTransform', 'x1', 'x2', 'y1', 'y2', 'gradientUnits', 'cx', 'cy', 'r', 'fx', 'fy'],\n xlinkAttr = 'xlink:href',\n xLink = gradient.getAttribute(xlinkAttr).substr(1),\n referencedGradient = elementById(doc, xLink);\n if (referencedGradient && referencedGradient.getAttribute(xlinkAttr)) {\n recursivelyParseGradientsXlink(doc, referencedGradient);\n }\n gradientsAttrs.forEach(function(attr) {\n if (referencedGradient && !gradient.hasAttribute(attr) && referencedGradient.hasAttribute(attr)) {\n gradient.setAttribute(attr, referencedGradient.getAttribute(attr));\n }\n });\n if (!gradient.children.length) {\n var referenceClone = referencedGradient.cloneNode(true);\n while (referenceClone.firstChild) {\n gradient.appendChild(referenceClone.firstChild);\n }\n }\n gradient.removeAttribute(xlinkAttr);\n }\n\n var reFontDeclaration = new RegExp(\n '(normal|italic)?\\\\s*(normal|small-caps)?\\\\s*' +\n '(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\\\s*(' +\n fabric.reNum +\n '(?:px|cm|mm|em|pt|pc|in)*)(?:\\\\/(normal|' + fabric.reNum + '))?\\\\s+(.*)');\n\n extend(fabric, {\n /**\n * Parses a short font declaration, building adding its properties to a style object\n * @static\n * @function\n * @memberOf fabric\n * @param {String} value font declaration\n * @param {Object} oStyle definition\n */\n parseFontDeclaration: function(value, oStyle) {\n var match = value.match(reFontDeclaration);\n\n if (!match) {\n return;\n }\n var fontStyle = match[1],\n // font variant is not used\n // fontVariant = match[2],\n fontWeight = match[3],\n fontSize = match[4],\n lineHeight = match[5],\n fontFamily = match[6];\n\n if (fontStyle) {\n oStyle.fontStyle = fontStyle;\n }\n if (fontWeight) {\n oStyle.fontWeight = isNaN(parseFloat(fontWeight)) ? fontWeight : parseFloat(fontWeight);\n }\n if (fontSize) {\n oStyle.fontSize = parseUnit(fontSize);\n }\n if (fontFamily) {\n oStyle.fontFamily = fontFamily;\n }\n if (lineHeight) {\n oStyle.lineHeight = lineHeight === 'normal' ? 1 : lineHeight;\n }\n },\n\n /**\n * Parses an SVG document, returning all of the gradient declarations found in it\n * @static\n * @function\n * @memberOf fabric\n * @param {SVGDocument} doc SVG document to parse\n * @return {Object} Gradient definitions; key corresponds to element id, value -- to gradient definition element\n */\n getGradientDefs: function(doc) {\n var tagArray = [\n 'linearGradient',\n 'radialGradient',\n 'svg:linearGradient',\n 'svg:radialGradient'],\n elList = _getMultipleNodes(doc, tagArray),\n el, j = 0, gradientDefs = { };\n j = elList.length;\n while (j--) {\n el = elList[j];\n if (el.getAttribute('xlink:href')) {\n recursivelyParseGradientsXlink(doc, el);\n }\n gradientDefs[el.getAttribute('id')] = el;\n }\n return gradientDefs;\n },\n\n /**\n * Returns an object of attributes' name/value, given element and an array of attribute names;\n * Parses parent \"g\" nodes recursively upwards.\n * @static\n * @memberOf fabric\n * @param {DOMElement} element Element to parse\n * @param {Array} attributes Array of attributes to parse\n * @return {Object} object containing parsed attributes' names/values\n */\n parseAttributes: function(element, attributes, svgUid) {\n\n if (!element) {\n return;\n }\n\n var value,\n parentAttributes = { },\n fontSize, parentFontSize;\n\n if (typeof svgUid === 'undefined') {\n svgUid = element.getAttribute('svgUid');\n }\n // if there's a parent container (`g` or `a` or `symbol` node), parse its attributes recursively upwards\n if (element.parentNode && fabric.svgValidParentsRegEx.test(element.parentNode.nodeName)) {\n parentAttributes = fabric.parseAttributes(element.parentNode, attributes, svgUid);\n }\n\n var ownAttributes = attributes.reduce(function(memo, attr) {\n value = element.getAttribute(attr);\n if (value) { // eslint-disable-line\n memo[attr] = value;\n }\n return memo;\n }, { });\n // add values parsed from style, which take precedence over attributes\n // (see: http://www.w3.org/TR/SVG/styling.html#UsingPresentationAttributes)\n var cssAttrs = extend(\n getGlobalStylesForElement(element, svgUid),\n fabric.parseStyleAttribute(element)\n );\n ownAttributes = extend(\n ownAttributes,\n cssAttrs\n );\n if (cssAttrs[cPath]) {\n element.setAttribute(cPath, cssAttrs[cPath]);\n }\n fontSize = parentFontSize = parentAttributes.fontSize || fabric.Text.DEFAULT_SVG_FONT_SIZE;\n if (ownAttributes[fSize]) {\n // looks like the minimum should be 9px when dealing with ems. this is what looks like in browsers.\n ownAttributes[fSize] = fontSize = parseUnit(ownAttributes[fSize], parentFontSize);\n }\n\n var normalizedAttr, normalizedValue, normalizedStyle = {};\n for (var attr in ownAttributes) {\n normalizedAttr = normalizeAttr(attr);\n normalizedValue = normalizeValue(normalizedAttr, ownAttributes[attr], parentAttributes, fontSize);\n normalizedStyle[normalizedAttr] = normalizedValue;\n }\n if (normalizedStyle && normalizedStyle.font) {\n fabric.parseFontDeclaration(normalizedStyle.font, normalizedStyle);\n }\n var mergedAttrs = extend(parentAttributes, normalizedStyle);\n return fabric.svgValidParentsRegEx.test(element.nodeName) ? mergedAttrs : _setStrokeFillOpacity(mergedAttrs);\n },\n\n /**\n * Transforms an array of svg elements to corresponding fabric.* instances\n * @static\n * @memberOf fabric\n * @param {Array} elements Array of elements to parse\n * @param {Function} callback Being passed an array of fabric instances (transformed from SVG elements)\n * @param {Object} [options] Options object\n * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n */\n parseElements: function(elements, callback, options, reviver, parsingOptions) {\n new fabric.ElementsParser(elements, callback, options, reviver, parsingOptions).parse();\n },\n\n /**\n * Parses \"style\" attribute, retuning an object with values\n * @static\n * @memberOf fabric\n * @param {SVGElement} element Element to parse\n * @return {Object} Objects with values parsed from style attribute of an element\n */\n parseStyleAttribute: function(element) {\n var oStyle = { },\n style = element.getAttribute('style');\n\n if (!style) {\n return oStyle;\n }\n\n if (typeof style === 'string') {\n parseStyleString(style, oStyle);\n }\n else {\n parseStyleObject(style, oStyle);\n }\n\n return oStyle;\n },\n\n /**\n * Parses \"points\" attribute, returning an array of values\n * @static\n * @memberOf fabric\n * @param {String} points points attribute string\n * @return {Array} array of points\n */\n parsePointsAttribute: function(points) {\n\n // points attribute is required and must not be empty\n if (!points) {\n return null;\n }\n\n // replace commas with whitespace and remove bookending whitespace\n points = points.replace(/,/g, ' ').trim();\n\n points = points.split(/\\s+/);\n var parsedPoints = [], i, len;\n\n for (i = 0, len = points.length; i < len; i += 2) {\n parsedPoints.push({\n x: parseFloat(points[i]),\n y: parseFloat(points[i + 1])\n });\n }\n\n // odd number of points is an error\n // if (parsedPoints.length % 2 !== 0) {\n // return null;\n // }\n\n return parsedPoints;\n },\n\n /**\n * Returns CSS rules for a given SVG document\n * @static\n * @function\n * @memberOf fabric\n * @param {SVGDocument} doc SVG document to parse\n * @return {Object} CSS rules of this document\n */\n getCSSRules: function(doc) {\n var styles = doc.getElementsByTagName('style'), i, len,\n allRules = { }, rules;\n\n // very crude parsing of style contents\n for (i = 0, len = styles.length; i < len; i++) {\n // \\n'\n ].join('');\n }\n\n return markup;\n },\n\n /**\n * @private\n */\n _setSVGObjects: function(markup, reviver) {\n var instance, i, len, objects = this._objects;\n for (i = 0, len = objects.length; i < len; i++) {\n instance = objects[i];\n if (instance.excludeFromExport) {\n continue;\n }\n this._setSVGObject(markup, instance, reviver);\n }\n },\n\n /**\n * @private\n */\n _setSVGObject: function(markup, instance, reviver) {\n markup.push(instance.toSVG(reviver));\n },\n\n /**\n * @private\n */\n _setSVGBgOverlayImage: function(markup, property, reviver) {\n if (this[property] && !this[property].excludeFromExport && this[property].toSVG) {\n markup.push(this[property].toSVG(reviver));\n }\n },\n\n /**\n * @private\n */\n _setSVGBgOverlayColor: function(markup, property) {\n var filler = this[property + 'Color'], vpt = this.viewportTransform, finalWidth = this.width,\n finalHeight = this.height;\n if (!filler) {\n return;\n }\n if (filler.toLive) {\n var repeat = filler.repeat, iVpt = fabric.util.invertTransform(vpt), shouldInvert = this[property + 'Vpt'],\n additionalTransform = shouldInvert ? fabric.util.matrixToSVG(iVpt) : '';\n markup.push(\n '\\n'\n );\n }\n else {\n markup.push(\n '\\n'\n );\n }\n },\n /* _TO_SVG_END_ */\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the bottom of the stack of drawn objects\n * @param {fabric.Object} object Object to send to back\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n sendToBack: function (object) {\n if (!object) {\n return this;\n }\n var activeSelection = this._activeObject,\n i, obj, objs;\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n for (i = objs.length; i--;) {\n obj = objs[i];\n removeFromArray(this._objects, obj);\n this._objects.unshift(obj);\n }\n }\n else {\n removeFromArray(this._objects, object);\n this._objects.unshift(object);\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the top of the stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n bringToFront: function (object) {\n if (!object) {\n return this;\n }\n var activeSelection = this._activeObject,\n i, obj, objs;\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n for (i = 0; i < objs.length; i++) {\n obj = objs[i];\n removeFromArray(this._objects, obj);\n this._objects.push(obj);\n }\n }\n else {\n removeFromArray(this._objects, object);\n this._objects.push(object);\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Moves an object or a selection down in stack of drawn objects\n * An optional paramter, intersecting allowes to move the object in behind\n * the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {Boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n sendBackwards: function (object, intersecting) {\n if (!object) {\n return this;\n }\n var activeSelection = this._activeObject,\n i, obj, idx, newIdx, objs, objsMoved = 0;\n\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n for (i = 0; i < objs.length; i++) {\n obj = objs[i];\n idx = this._objects.indexOf(obj);\n if (idx > 0 + objsMoved) {\n newIdx = idx - 1;\n removeFromArray(this._objects, obj);\n this._objects.splice(newIdx, 0, obj);\n }\n objsMoved++;\n }\n }\n else {\n idx = this._objects.indexOf(object);\n if (idx !== 0) {\n // if object is not on the bottom of stack\n newIdx = this._findNewLowerIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n }\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * @private\n */\n _findNewLowerIndex: function(object, idx, intersecting) {\n var newIdx, i;\n\n if (intersecting) {\n newIdx = idx;\n\n // traverse down the stack looking for the nearest intersecting object\n for (i = idx - 1; i >= 0; --i) {\n\n var isIntersecting = object.intersectsWithObject(this._objects[i]) ||\n object.isContainedWithinObject(this._objects[i]) ||\n this._objects[i].isContainedWithinObject(object);\n\n if (isIntersecting) {\n newIdx = i;\n break;\n }\n }\n }\n else {\n newIdx = idx - 1;\n }\n\n return newIdx;\n },\n\n /**\n * Moves an object or a selection up in stack of drawn objects\n * An optional paramter, intersecting allowes to move the object in front\n * of the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {Boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n bringForward: function (object, intersecting) {\n if (!object) {\n return this;\n }\n var activeSelection = this._activeObject,\n i, obj, idx, newIdx, objs, objsMoved = 0;\n\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n for (i = objs.length; i--;) {\n obj = objs[i];\n idx = this._objects.indexOf(obj);\n if (idx < this._objects.length - 1 - objsMoved) {\n newIdx = idx + 1;\n removeFromArray(this._objects, obj);\n this._objects.splice(newIdx, 0, obj);\n }\n objsMoved++;\n }\n }\n else {\n idx = this._objects.indexOf(object);\n if (idx !== this._objects.length - 1) {\n // if object is not on top of stack (last item in an array)\n newIdx = this._findNewUpperIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n }\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * @private\n */\n _findNewUpperIndex: function(object, idx, intersecting) {\n var newIdx, i, len;\n\n if (intersecting) {\n newIdx = idx;\n\n // traverse up the stack looking for the nearest intersecting object\n for (i = idx + 1, len = this._objects.length; i < len; ++i) {\n\n var isIntersecting = object.intersectsWithObject(this._objects[i]) ||\n object.isContainedWithinObject(this._objects[i]) ||\n this._objects[i].isContainedWithinObject(object);\n\n if (isIntersecting) {\n newIdx = i;\n break;\n }\n }\n }\n else {\n newIdx = idx + 1;\n }\n\n return newIdx;\n },\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @param {Number} index Position to move to\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n moveTo: function (object, index) {\n removeFromArray(this._objects, object);\n this._objects.splice(index, 0, object);\n return this.renderOnAddRemove && this.requestRenderAll();\n },\n\n /**\n * Clears a canvas element and dispose objects\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n dispose: function () {\n // cancel eventually ongoing renders\n if (this.isRendering) {\n fabric.util.cancelAnimFrame(this.isRendering);\n this.isRendering = 0;\n }\n this.forEachObject(function(object) {\n object.dispose && object.dispose();\n });\n this._objects = [];\n if (this.backgroundImage && this.backgroundImage.dispose) {\n this.backgroundImage.dispose();\n }\n this.backgroundImage = null;\n if (this.overlayImage && this.overlayImage.dispose) {\n this.overlayImage.dispose();\n }\n this.overlayImage = null;\n this._iTextInstances = null;\n this.contextContainer = null;\n fabric.util.cleanUpJsdomNode(this.lowerCanvasEl);\n this.lowerCanvasEl = undefined;\n return this;\n },\n\n /**\n * Returns a string representation of an instance\n * @return {String} string representation of an instance\n */\n toString: function () {\n return '#';\n }\n });\n\n extend(fabric.StaticCanvas.prototype, fabric.Observable);\n extend(fabric.StaticCanvas.prototype, fabric.Collection);\n extend(fabric.StaticCanvas.prototype, fabric.DataURLExporter);\n\n extend(fabric.StaticCanvas, /** @lends fabric.StaticCanvas */ {\n\n /**\n * @static\n * @type String\n * @default\n */\n EMPTY_JSON: '{\"objects\": [], \"background\": \"white\"}',\n\n /**\n * Provides a way to check support of some of the canvas methods\n * (either those of HTMLCanvasElement itself, or rendering context)\n *\n * @param {String} methodName Method to check support for;\n * Could be one of \"setLineDash\"\n * @return {Boolean | null} `true` if method is supported (or at least exists),\n * `null` if canvas element or context can not be initialized\n */\n supports: function (methodName) {\n var el = createCanvasElement();\n\n if (!el || !el.getContext) {\n return null;\n }\n\n var ctx = el.getContext('2d');\n if (!ctx) {\n return null;\n }\n\n switch (methodName) {\n\n case 'setLineDash':\n return typeof ctx.setLineDash !== 'undefined';\n\n default:\n return null;\n }\n }\n });\n\n /**\n * Returns JSON representation of canvas\n * @function\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {String} JSON string\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n * @see {@link http://jsfiddle.net/fabricjs/pec86/|jsFiddle demo}\n * @example JSON without additional properties\n * var json = canvas.toJSON();\n * @example JSON with additional properties included\n * var json = canvas.toJSON(['lockMovementX', 'lockMovementY', 'lockRotation', 'lockScalingX', 'lockScalingY', 'lockUniScaling']);\n * @example JSON without default values\n * canvas.includeDefaultValues = false;\n * var json = canvas.toJSON();\n */\n fabric.StaticCanvas.prototype.toJSON = fabric.StaticCanvas.prototype.toObject;\n\n if (fabric.isLikelyNode) {\n fabric.StaticCanvas.prototype.createPNGStream = function() {\n var impl = getNodeCanvas(this.lowerCanvasEl);\n return impl && impl.createPNGStream();\n };\n fabric.StaticCanvas.prototype.createJPEGStream = function(opts) {\n var impl = getNodeCanvas(this.lowerCanvasEl);\n return impl && impl.createJPEGStream(opts);\n };\n }\n})();\n\n\n/**\n * BaseBrush class\n * @class fabric.BaseBrush\n * @see {@link http://fabricjs.com/freedrawing|Freedrawing demo}\n */\nfabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype */ {\n\n /**\n * Color of a brush\n * @type String\n * @default\n */\n color: 'rgb(0, 0, 0)',\n\n /**\n * Width of a brush, has to be a Number, no string literals\n * @type Number\n * @default\n */\n width: 1,\n\n /**\n * Shadow object representing shadow of this shape.\n * Backwards incompatibility note: This property replaces \"shadowColor\" (String), \"shadowOffsetX\" (Number),\n * \"shadowOffsetY\" (Number) and \"shadowBlur\" (Number) since v1.2.12\n * @type fabric.Shadow\n * @default\n */\n shadow: null,\n\n /**\n * Line endings style of a brush (one of \"butt\", \"round\", \"square\")\n * @type String\n * @default\n */\n strokeLineCap: 'round',\n\n /**\n * Corner style of a brush (one of \"bevel\", \"round\", \"miter\")\n * @type String\n * @default\n */\n strokeLineJoin: 'round',\n\n /**\n * Maximum miter length (used for strokeLineJoin = \"miter\") of a brush's\n * @type Number\n * @default\n */\n strokeMiterLimit: 10,\n\n /**\n * Stroke Dash Array.\n * @type Array\n * @default\n */\n strokeDashArray: null,\n\n /**\n * Sets shadow of an object\n * @param {Object|String} [options] Options object or string (e.g. \"2px 2px 10px rgba(0,0,0,0.2)\")\n * @return {fabric.Object} thisArg\n * @chainable\n */\n setShadow: function(options) {\n this.shadow = new fabric.Shadow(options);\n return this;\n },\n\n /**\n * Sets brush styles\n * @private\n */\n _setBrushStyles: function() {\n var ctx = this.canvas.contextTop;\n ctx.strokeStyle = this.color;\n ctx.lineWidth = this.width;\n ctx.lineCap = this.strokeLineCap;\n ctx.miterLimit = this.strokeMiterLimit;\n ctx.lineJoin = this.strokeLineJoin;\n if (fabric.StaticCanvas.supports('setLineDash')) {\n ctx.setLineDash(this.strokeDashArray || []);\n }\n },\n\n /**\n * Sets the transformation on given context\n * @param {RenderingContext2d} ctx context to render on\n * @private\n */\n _saveAndTransform: function(ctx) {\n var v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n },\n\n /**\n * Sets brush shadow styles\n * @private\n */\n _setShadow: function() {\n if (!this.shadow) {\n return;\n }\n\n var canvas = this.canvas,\n shadow = this.shadow,\n ctx = canvas.contextTop,\n zoom = canvas.getZoom();\n if (canvas && canvas._isRetinaScaling()) {\n zoom *= fabric.devicePixelRatio;\n }\n\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur = shadow.blur * zoom;\n ctx.shadowOffsetX = shadow.offsetX * zoom;\n ctx.shadowOffsetY = shadow.offsetY * zoom;\n },\n\n needsFullRender: function() {\n var color = new fabric.Color(this.color);\n return color.getAlpha() < 1 || !!this.shadow;\n },\n\n /**\n * Removes brush shadow styles\n * @private\n */\n _resetShadow: function() {\n var ctx = this.canvas.contextTop;\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n }\n});\n\n\n(function() {\n /**\n * PencilBrush class\n * @class fabric.PencilBrush\n * @extends fabric.BaseBrush\n */\n fabric.PencilBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric.PencilBrush.prototype */ {\n\n /**\n * Discard points that are less than `decimate` pixel distant from each other\n * @type Number\n * @default 0.4\n */\n decimate: 0.4,\n\n /**\n * Constructor\n * @param {fabric.Canvas} canvas\n * @return {fabric.PencilBrush} Instance of a pencil brush\n */\n initialize: function(canvas) {\n this.canvas = canvas;\n this._points = [];\n },\n\n /**\n * Invoked inside on mouse down and mouse move\n * @param {Object} pointer\n */\n _drawSegment: function (ctx, p1, p2) {\n var midPoint = p1.midPointFrom(p2);\n ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\n return midPoint;\n },\n\n /**\n * Inovoked on mouse down\n * @param {Object} pointer\n */\n onMouseDown: function(pointer, options) {\n if (!this.canvas._isMainEvent(options.e)) {\n return;\n }\n this._prepareForDrawing(pointer);\n // capture coordinates immediately\n // this allows to draw dots (when movement never occurs)\n this._captureDrawingPath(pointer);\n this._render();\n },\n\n /**\n * Inovoked on mouse move\n * @param {Object} pointer\n */\n onMouseMove: function(pointer, options) {\n if (!this.canvas._isMainEvent(options.e)) {\n return;\n }\n if (this._captureDrawingPath(pointer) && this._points.length > 1) {\n if (this.needsFullRender()) {\n // redraw curve\n // clear top canvas\n this.canvas.clearContext(this.canvas.contextTop);\n this._render();\n }\n else {\n var points = this._points, length = points.length, ctx = this.canvas.contextTop;\n // draw the curve update\n this._saveAndTransform(ctx);\n if (this.oldEnd) {\n ctx.beginPath();\n ctx.moveTo(this.oldEnd.x, this.oldEnd.y);\n }\n this.oldEnd = this._drawSegment(ctx, points[length - 2], points[length - 1], true);\n ctx.stroke();\n ctx.restore();\n }\n }\n },\n\n /**\n * Invoked on mouse up\n */\n onMouseUp: function(options) {\n if (!this.canvas._isMainEvent(options.e)) {\n return true;\n }\n this.oldEnd = undefined;\n this._finalizeAndAddPath();\n return false;\n },\n\n /**\n * @private\n * @param {Object} pointer Actual mouse position related to the canvas.\n */\n _prepareForDrawing: function(pointer) {\n\n var p = new fabric.Point(pointer.x, pointer.y);\n\n this._reset();\n this._addPoint(p);\n this.canvas.contextTop.moveTo(p.x, p.y);\n },\n\n /**\n * @private\n * @param {fabric.Point} point Point to be added to points array\n */\n _addPoint: function(point) {\n if (this._points.length > 1 && point.eq(this._points[this._points.length - 1])) {\n return false;\n }\n this._points.push(point);\n return true;\n },\n\n /**\n * Clear points array and set contextTop canvas style.\n * @private\n */\n _reset: function() {\n this._points = [];\n this._setBrushStyles();\n this._setShadow();\n },\n\n /**\n * @private\n * @param {Object} pointer Actual mouse position related to the canvas.\n */\n _captureDrawingPath: function(pointer) {\n var pointerPoint = new fabric.Point(pointer.x, pointer.y);\n return this._addPoint(pointerPoint);\n },\n\n /**\n * Draw a smooth path on the topCanvas using quadraticCurveTo\n * @private\n */\n _render: function() {\n var ctx = this.canvas.contextTop, i, len,\n p1 = this._points[0],\n p2 = this._points[1];\n\n this._saveAndTransform(ctx);\n ctx.beginPath();\n //if we only have 2 points in the path and they are the same\n //it means that the user only clicked the canvas without moving the mouse\n //then we should be drawing a dot. A path isn't drawn between two identical dots\n //that's why we set them apart a bit\n if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) {\n var width = this.width / 1000;\n p1 = new fabric.Point(p1.x, p1.y);\n p2 = new fabric.Point(p2.x, p2.y);\n p1.x -= width;\n p2.x += width;\n }\n ctx.moveTo(p1.x, p1.y);\n\n for (i = 1, len = this._points.length; i < len; i++) {\n // we pick the point between pi + 1 & pi + 2 as the\n // end point and p1 as our control point.\n this._drawSegment(ctx, p1, p2);\n p1 = this._points[i];\n p2 = this._points[i + 1];\n }\n // Draw last line as a straight line while\n // we wait for the next point to be able to calculate\n // the bezier control point\n ctx.lineTo(p1.x, p1.y);\n ctx.stroke();\n ctx.restore();\n },\n\n /**\n * Converts points to SVG path\n * @param {Array} points Array of points\n * @return {String} SVG path\n */\n convertPointsToSVGPath: function(points) {\n var path = [], i, width = this.width / 1000,\n p1 = new fabric.Point(points[0].x, points[0].y),\n p2 = new fabric.Point(points[1].x, points[1].y),\n len = points.length, multSignX = 1, multSignY = 0, manyPoints = len > 2;\n\n if (manyPoints) {\n multSignX = points[2].x < p2.x ? -1 : points[2].x === p2.x ? 0 : 1;\n multSignY = points[2].y < p2.y ? -1 : points[2].y === p2.y ? 0 : 1;\n }\n path.push('M ', p1.x - multSignX * width, ' ', p1.y - multSignY * width, ' ');\n for (i = 1; i < len; i++) {\n if (!p1.eq(p2)) {\n var midPoint = p1.midPointFrom(p2);\n // p1 is our bezier control point\n // midpoint is our endpoint\n // start point is p(i-1) value.\n path.push('Q ', p1.x, ' ', p1.y, ' ', midPoint.x, ' ', midPoint.y, ' ');\n }\n p1 = points[i];\n if ((i + 1) < points.length) {\n p2 = points[i + 1];\n }\n }\n if (manyPoints) {\n multSignX = p1.x > points[i - 2].x ? 1 : p1.x === points[i - 2].x ? 0 : -1;\n multSignY = p1.y > points[i - 2].y ? 1 : p1.y === points[i - 2].y ? 0 : -1;\n }\n path.push('L ', p1.x + multSignX * width, ' ', p1.y + multSignY * width);\n return path;\n },\n\n /**\n * Creates fabric.Path object to add on canvas\n * @param {String} pathData Path data\n * @return {fabric.Path} Path to add on canvas\n */\n createPath: function(pathData) {\n var path = new fabric.Path(pathData, {\n fill: null,\n stroke: this.color,\n strokeWidth: this.width,\n strokeLineCap: this.strokeLineCap,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeLineJoin: this.strokeLineJoin,\n strokeDashArray: this.strokeDashArray,\n });\n if (this.shadow) {\n this.shadow.affectStroke = true;\n path.setShadow(this.shadow);\n }\n\n return path;\n },\n\n /**\n * Decimate poins array with the decimate value\n */\n decimatePoints: function(points, distance) {\n if (points.length <= 2) {\n return points;\n }\n var zoom = this.canvas.getZoom(), adjustedDistance = Math.pow(distance / zoom, 2),\n i, l = points.length - 1, lastPoint = points[0], newPoints = [lastPoint],\n cDistance;\n for (i = 1; i < l; i++) {\n cDistance = Math.pow(lastPoint.x - points[i].x, 2) + Math.pow(lastPoint.y - points[i].y, 2);\n if (cDistance >= adjustedDistance) {\n lastPoint = points[i];\n newPoints.push(lastPoint);\n }\n }\n if (newPoints.length === 1) {\n newPoints.push(new fabric.Point(newPoints[0].x, newPoints[0].y));\n }\n return newPoints;\n },\n\n /**\n * On mouseup after drawing the path on contextTop canvas\n * we use the points captured to create an new fabric path object\n * and add it to the fabric canvas.\n */\n _finalizeAndAddPath: function() {\n var ctx = this.canvas.contextTop;\n ctx.closePath();\n if (this.decimate) {\n this._points = this.decimatePoints(this._points, this.decimate);\n }\n var pathData = this.convertPointsToSVGPath(this._points).join('');\n if (pathData === 'M 0 0 Q 0 0 0 0 L 0 0') {\n // do not create 0 width/height paths, as they are\n // rendered inconsistently across browsers\n // Firefox 4, for example, renders a dot,\n // whereas Chrome 10 renders nothing\n this.canvas.requestRenderAll();\n return;\n }\n\n var path = this.createPath(pathData);\n this.canvas.clearContext(this.canvas.contextTop);\n this.canvas.add(path);\n this.canvas.requestRenderAll();\n path.setCoords();\n this._resetShadow();\n\n\n // fire event 'path' created\n this.canvas.fire('path:created', { path: path });\n }\n });\n})();\n\n\n/**\n * CircleBrush class\n * @class fabric.CircleBrush\n */\nfabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric.CircleBrush.prototype */ {\n\n /**\n * Width of a brush\n * @type Number\n * @default\n */\n width: 10,\n\n /**\n * Constructor\n * @param {fabric.Canvas} canvas\n * @return {fabric.CircleBrush} Instance of a circle brush\n */\n initialize: function(canvas) {\n this.canvas = canvas;\n this.points = [];\n },\n\n /**\n * Invoked inside on mouse down and mouse move\n * @param {Object} pointer\n */\n drawDot: function(pointer) {\n var point = this.addPoint(pointer),\n ctx = this.canvas.contextTop;\n this._saveAndTransform(ctx);\n this.dot(ctx, point);\n ctx.restore();\n },\n\n dot: function(ctx, point) {\n ctx.fillStyle = point.fill;\n ctx.beginPath();\n ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n },\n\n /**\n * Invoked on mouse down\n */\n onMouseDown: function(pointer) {\n this.points.length = 0;\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n this.drawDot(pointer);\n },\n\n /**\n * Render the full state of the brush\n * @private\n */\n _render: function() {\n var ctx = this.canvas.contextTop, i, len,\n points = this.points;\n this._saveAndTransform(ctx);\n for (i = 0, len = points.length; i < len; i++) {\n this.dot(ctx, points[i]);\n }\n ctx.restore();\n },\n\n /**\n * Invoked on mouse move\n * @param {Object} pointer\n */\n onMouseMove: function(pointer) {\n if (this.needsFullRender()) {\n this.canvas.clearContext(this.canvas.contextTop);\n this.addPoint(pointer);\n this._render();\n }\n else {\n this.drawDot(pointer);\n }\n },\n\n /**\n * Invoked on mouse up\n */\n onMouseUp: function() {\n var originalRenderOnAddRemove = this.canvas.renderOnAddRemove, i, len;\n this.canvas.renderOnAddRemove = false;\n\n var circles = [];\n\n for (i = 0, len = this.points.length; i < len; i++) {\n var point = this.points[i],\n circle = new fabric.Circle({\n radius: point.radius,\n left: point.x,\n top: point.y,\n originX: 'center',\n originY: 'center',\n fill: point.fill\n });\n\n this.shadow && circle.setShadow(this.shadow);\n\n circles.push(circle);\n }\n var group = new fabric.Group(circles);\n group.canvas = this.canvas;\n\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n },\n\n /**\n * @param {Object} pointer\n * @return {fabric.Point} Just added pointer point\n */\n addPoint: function(pointer) {\n var pointerPoint = new fabric.Point(pointer.x, pointer.y),\n\n circleRadius = fabric.util.getRandomInt(\n Math.max(0, this.width - 20), this.width + 20) / 2,\n\n circleColor = new fabric.Color(this.color)\n .setAlpha(fabric.util.getRandomInt(0, 100) / 100)\n .toRgba();\n\n pointerPoint.radius = circleRadius;\n pointerPoint.fill = circleColor;\n\n this.points.push(pointerPoint);\n\n return pointerPoint;\n }\n});\n\n\n/**\n * SprayBrush class\n * @class fabric.SprayBrush\n */\nfabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric.SprayBrush.prototype */ {\n\n /**\n * Width of a spray\n * @type Number\n * @default\n */\n width: 10,\n\n /**\n * Density of a spray (number of dots per chunk)\n * @type Number\n * @default\n */\n density: 20,\n\n /**\n * Width of spray dots\n * @type Number\n * @default\n */\n dotWidth: 1,\n\n /**\n * Width variance of spray dots\n * @type Number\n * @default\n */\n dotWidthVariance: 1,\n\n /**\n * Whether opacity of a dot should be random\n * @type Boolean\n * @default\n */\n randomOpacity: false,\n\n /**\n * Whether overlapping dots (rectangles) should be removed (for performance reasons)\n * @type Boolean\n * @default\n */\n optimizeOverlapping: true,\n\n /**\n * Constructor\n * @param {fabric.Canvas} canvas\n * @return {fabric.SprayBrush} Instance of a spray brush\n */\n initialize: function(canvas) {\n this.canvas = canvas;\n this.sprayChunks = [];\n },\n\n /**\n * Invoked on mouse down\n * @param {Object} pointer\n */\n onMouseDown: function(pointer) {\n this.sprayChunks.length = 0;\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n\n this.addSprayChunk(pointer);\n this.render(this.sprayChunkPoints);\n },\n\n /**\n * Invoked on mouse move\n * @param {Object} pointer\n */\n onMouseMove: function(pointer) {\n this.addSprayChunk(pointer);\n this.render(this.sprayChunkPoints);\n },\n\n /**\n * Invoked on mouse up\n */\n onMouseUp: function() {\n var originalRenderOnAddRemove = this.canvas.renderOnAddRemove;\n this.canvas.renderOnAddRemove = false;\n\n var rects = [];\n\n for (var i = 0, ilen = this.sprayChunks.length; i < ilen; i++) {\n var sprayChunk = this.sprayChunks[i];\n\n for (var j = 0, jlen = sprayChunk.length; j < jlen; j++) {\n\n var rect = new fabric.Rect({\n width: sprayChunk[j].width,\n height: sprayChunk[j].width,\n left: sprayChunk[j].x + 1,\n top: sprayChunk[j].y + 1,\n originX: 'center',\n originY: 'center',\n fill: this.color\n });\n rects.push(rect);\n }\n }\n\n if (this.optimizeOverlapping) {\n rects = this._getOptimizedRects(rects);\n }\n\n var group = new fabric.Group(rects);\n this.shadow && group.setShadow(this.shadow);\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n },\n\n /**\n * @private\n * @param {Array} rects\n */\n _getOptimizedRects: function(rects) {\n\n // avoid creating duplicate rects at the same coordinates\n var uniqueRects = { }, key, i, len;\n\n for (i = 0, len = rects.length; i < len; i++) {\n key = rects[i].left + '' + rects[i].top;\n if (!uniqueRects[key]) {\n uniqueRects[key] = rects[i];\n }\n }\n var uniqueRectsArray = [];\n for (key in uniqueRects) {\n uniqueRectsArray.push(uniqueRects[key]);\n }\n\n return uniqueRectsArray;\n },\n\n /**\n * Render new chunk of spray brush\n */\n render: function(sprayChunk) {\n var ctx = this.canvas.contextTop, i, len;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (i = 0, len = sprayChunk.length; i < len; i++) {\n var point = sprayChunk[i];\n if (typeof point.opacity !== 'undefined') {\n ctx.globalAlpha = point.opacity;\n }\n ctx.fillRect(point.x, point.y, point.width, point.width);\n }\n ctx.restore();\n },\n\n /**\n * Render all spray chunks\n */\n _render: function() {\n var ctx = this.canvas.contextTop, i, ilen;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (i = 0, ilen = this.sprayChunks.length; i < ilen; i++) {\n this.render(this.sprayChunks[i]);\n }\n ctx.restore();\n },\n\n /**\n * @param {Object} pointer\n */\n addSprayChunk: function(pointer) {\n this.sprayChunkPoints = [];\n\n var x, y, width, radius = this.width / 2, i;\n\n for (i = 0; i < this.density; i++) {\n\n x = fabric.util.getRandomInt(pointer.x - radius, pointer.x + radius);\n y = fabric.util.getRandomInt(pointer.y - radius, pointer.y + radius);\n\n if (this.dotWidthVariance) {\n width = fabric.util.getRandomInt(\n // bottom clamp width to 1\n Math.max(1, this.dotWidth - this.dotWidthVariance),\n this.dotWidth + this.dotWidthVariance);\n }\n else {\n width = this.dotWidth;\n }\n\n var point = new fabric.Point(x, y);\n point.width = width;\n\n if (this.randomOpacity) {\n point.opacity = fabric.util.getRandomInt(0, 100) / 100;\n }\n\n this.sprayChunkPoints.push(point);\n }\n\n this.sprayChunks.push(this.sprayChunkPoints);\n }\n});\n\n\n/**\n * PatternBrush class\n * @class fabric.PatternBrush\n * @extends fabric.BaseBrush\n */\nfabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fabric.PatternBrush.prototype */ {\n\n getPatternSrc: function() {\n\n var dotWidth = 20,\n dotDistance = 5,\n patternCanvas = fabric.util.createCanvasElement(),\n patternCtx = patternCanvas.getContext('2d');\n\n patternCanvas.width = patternCanvas.height = dotWidth + dotDistance;\n\n patternCtx.fillStyle = this.color;\n patternCtx.beginPath();\n patternCtx.arc(dotWidth / 2, dotWidth / 2, dotWidth / 2, 0, Math.PI * 2, false);\n patternCtx.closePath();\n patternCtx.fill();\n\n return patternCanvas;\n },\n\n getPatternSrcFunction: function() {\n return String(this.getPatternSrc).replace('this.color', '\"' + this.color + '\"');\n },\n\n /**\n * Creates \"pattern\" instance property\n */\n getPattern: function() {\n return this.canvas.contextTop.createPattern(this.source || this.getPatternSrc(), 'repeat');\n },\n\n /**\n * Sets brush styles\n */\n _setBrushStyles: function() {\n this.callSuper('_setBrushStyles');\n this.canvas.contextTop.strokeStyle = this.getPattern();\n },\n\n /**\n * Creates path\n */\n createPath: function(pathData) {\n var path = this.callSuper('createPath', pathData),\n topLeft = path._getLeftTopCoords().scalarAdd(path.strokeWidth / 2);\n\n path.stroke = new fabric.Pattern({\n source: this.source || this.getPatternSrcFunction(),\n offsetX: -topLeft.x,\n offsetY: -topLeft.y\n });\n return path;\n }\n});\n\n\n(function() {\n\n var getPointer = fabric.util.getPointer,\n degreesToRadians = fabric.util.degreesToRadians,\n radiansToDegrees = fabric.util.radiansToDegrees,\n atan2 = Math.atan2,\n abs = Math.abs,\n supportLineDash = fabric.StaticCanvas.supports('setLineDash'),\n\n STROKE_OFFSET = 0.5;\n\n /**\n * Canvas class\n * @class fabric.Canvas\n * @extends fabric.StaticCanvas\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#canvas}\n * @see {@link fabric.Canvas#initialize} for constructor definition\n *\n * @fires object:modified at the end of a transform or any change when statefull is true\n * @fires object:rotated at the end of a rotation transform\n * @fires object:scaled at the end of a scale transform\n * @fires object:moved at the end of translation transform\n * @fires object:skewed at the end of a skew transform\n * @fires object:rotating while an object is being rotated from the control\n * @fires object:scaling while an object is being scaled by controls\n * @fires object:moving while an object is being dragged\n * @fires object:skewing while an object is being skewed from the controls\n * @fires object:selected this event is deprecated. use selection:created\n *\n * @fires before:transform before a transform is is started\n * @fires before:selection:cleared\n * @fires selection:cleared\n * @fires selection:updated\n * @fires selection:created\n *\n * @fires path:created after a drawing operation ends and the path is added\n * @fires mouse:down\n * @fires mouse:move\n * @fires mouse:up\n * @fires mouse:down:before on mouse down, before the inner fabric logic runs\n * @fires mouse:move:before on mouse move, before the inner fabric logic runs\n * @fires mouse:up:before on mouse up, before the inner fabric logic runs\n * @fires mouse:over\n * @fires mouse:out\n * @fires mouse:dblclick whenever a native dbl click event fires on the canvas.\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop\n * @fires after:render at the end of the render process, receives the context in the callback\n * @fires before:render at start the render process, receives the context in the callback\n *\n */\n fabric.Canvas = fabric.util.createClass(fabric.StaticCanvas, /** @lends fabric.Canvas.prototype */ {\n\n /**\n * Constructor\n * @param {HTMLElement | String} el <canvas> element to initialize instance on\n * @param {Object} [options] Options object\n * @return {Object} thisArg\n */\n initialize: function(el, options) {\n options || (options = { });\n this.renderAndResetBound = this.renderAndReset.bind(this);\n this.requestRenderAllBound = this.requestRenderAll.bind(this);\n this._initStatic(el, options);\n this._initInteractive();\n this._createCacheCanvas();\n },\n\n /**\n * When true, objects can be transformed by one side (unproportionally)\n * @type Boolean\n * @default\n */\n uniScaleTransform: false,\n\n /**\n * Indicates which key enable unproportional scaling\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type String\n * @default\n */\n uniScaleKey: 'shiftKey',\n\n /**\n * When true, objects use center point as the origin of scale transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredScaling: false,\n\n /**\n * When true, objects use center point as the origin of rotate transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredRotation: false,\n\n /**\n * Indicates which key enable centered Transform\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type String\n * @default\n */\n centeredKey: 'altKey',\n\n /**\n * Indicates which key enable alternate action on corner\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type String\n * @default\n */\n altActionKey: 'shiftKey',\n\n /**\n * Indicates that canvas is interactive. This property should not be changed.\n * @type Boolean\n * @default\n */\n interactive: true,\n\n /**\n * Indicates whether group selection should be enabled\n * @type Boolean\n * @default\n */\n selection: true,\n\n /**\n * Indicates which key or keys enable multiple click selection\n * Pass value as a string or array of strings\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or empty or containing any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.2\n * @type String|Array\n * @default\n */\n selectionKey: 'shiftKey',\n\n /**\n * Indicates which key enable alternative selection\n * in case of target overlapping with active object\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * For a series of reason that come from the general expectations on how\n * things should work, this feature works only for preserveObjectStacking true.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.5\n * @type null|String\n * @default\n */\n altSelectionKey: null,\n\n /**\n * Color of selection\n * @type String\n * @default\n */\n selectionColor: 'rgba(100, 100, 255, 0.3)', // blue\n\n /**\n * Default dash array pattern\n * If not empty the selection border is dashed\n * @type Array\n */\n selectionDashArray: [],\n\n /**\n * Color of the border of selection (usually slightly darker than color of selection itself)\n * @type String\n * @default\n */\n selectionBorderColor: 'rgba(255, 255, 255, 0.3)',\n\n /**\n * Width of a line used in object/group selection\n * @type Number\n * @default\n */\n selectionLineWidth: 1,\n\n /**\n * Select only shapes that are fully contained in the dragged selection rectangle.\n * @type Boolean\n * @default\n */\n selectionFullyContained: false,\n\n /**\n * Default cursor value used when hovering over an object on canvas\n * @type String\n * @default\n */\n hoverCursor: 'move',\n\n /**\n * Default cursor value used when moving an object on canvas\n * @type String\n * @default\n */\n moveCursor: 'move',\n\n /**\n * Default cursor value used for the entire canvas\n * @type String\n * @default\n */\n defaultCursor: 'default',\n\n /**\n * Cursor value used during free drawing\n * @type String\n * @default\n */\n freeDrawingCursor: 'crosshair',\n\n /**\n * Cursor value used for rotation point\n * @type String\n * @default\n */\n rotationCursor: 'crosshair',\n\n /**\n * Cursor value used for disabled elements ( corners with disabled action )\n * @type String\n * @since 2.0.0\n * @default\n */\n notAllowedCursor: 'not-allowed',\n\n /**\n * Default element class that's given to wrapper (div) element of canvas\n * @type String\n * @default\n */\n containerClass: 'canvas-container',\n\n /**\n * When true, object detection happens on per-pixel basis rather than on per-bounding-box\n * @type Boolean\n * @default\n */\n perPixelTargetFind: false,\n\n /**\n * Number of pixels around target pixel to tolerate (consider active) during object detection\n * @type Number\n * @default\n */\n targetFindTolerance: 0,\n\n /**\n * When true, target detection is skipped when hovering over canvas. This can be used to improve performance.\n * @type Boolean\n * @default\n */\n skipTargetFind: false,\n\n /**\n * When true, mouse events on canvas (mousedown/mousemove/mouseup) result in free drawing.\n * After mousedown, mousemove creates a shape,\n * and then mouseup finalizes it and adds an instance of `fabric.Path` onto canvas.\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-4#free_drawing}\n * @type Boolean\n * @default\n */\n isDrawingMode: false,\n\n /**\n * Indicates whether objects should remain in current stack position when selected.\n * When false objects are brought to top and rendered as part of the selection group\n * @type Boolean\n * @default\n */\n preserveObjectStacking: false,\n\n /**\n * Indicates the angle that an object will lock to while rotating.\n * @type Number\n * @since 1.6.7\n * @default\n */\n snapAngle: 0,\n\n /**\n * Indicates the distance from the snapAngle the rotation will lock to the snapAngle.\n * When `null`, the snapThreshold will default to the snapAngle.\n * @type null|Number\n * @since 1.6.7\n * @default\n */\n snapThreshold: null,\n\n /**\n * Indicates if the right click on canvas can output the context menu or not\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n stopContextMenu: false,\n\n /**\n * Indicates if the canvas can fire right click events\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n fireRightClick: false,\n\n /**\n * Indicates if the canvas can fire middle click events\n * @type Boolean\n * @since 1.7.8\n * @default\n */\n fireMiddleClick: false,\n\n /**\n * Keep track of the subTargets for Mouse Events\n * @type fabric.Object[]\n */\n targets: [],\n\n /**\n * Keep track of the hovered target\n * @type fabric.Object\n * @private\n */\n _hoveredTarget: null,\n\n /**\n * hold the list of nested targets hovered\n * @type fabric.Object[]\n * @private\n */\n _hoveredTargets: [],\n\n /**\n * @private\n */\n _initInteractive: function() {\n this._currentTransform = null;\n this._groupSelector = null;\n this._initWrapperElement();\n this._createUpperCanvas();\n this._initEventListeners();\n\n this._initRetinaScaling();\n\n this.freeDrawingBrush = fabric.PencilBrush && new fabric.PencilBrush(this);\n\n this.calcOffset();\n },\n\n /**\n * Divides objects in two groups, one to render immediately\n * and one to render as activeGroup.\n * @return {Array} objects to render immediately and pushes the other in the activeGroup.\n */\n _chooseObjectsToRender: function() {\n var activeObjects = this.getActiveObjects(),\n object, objsToRender, activeGroupObjects;\n\n if (activeObjects.length > 0 && !this.preserveObjectStacking) {\n objsToRender = [];\n activeGroupObjects = [];\n for (var i = 0, length = this._objects.length; i < length; i++) {\n object = this._objects[i];\n if (activeObjects.indexOf(object) === -1 ) {\n objsToRender.push(object);\n }\n else {\n activeGroupObjects.push(object);\n }\n }\n if (activeObjects.length > 1) {\n this._activeObject._objects = activeGroupObjects;\n }\n objsToRender.push.apply(objsToRender, activeGroupObjects);\n }\n else {\n objsToRender = this._objects;\n }\n return objsToRender;\n },\n\n /**\n * Renders both the top canvas and the secondary container canvas.\n * @return {fabric.Canvas} instance\n * @chainable\n */\n renderAll: function () {\n if (this.contextTopDirty && !this._groupSelector && !this.isDrawingMode) {\n this.clearContext(this.contextTop);\n this.contextTopDirty = false;\n }\n if (this.hasLostContext) {\n this.renderTopLayer(this.contextTop);\n }\n var canvasToDrawOn = this.contextContainer;\n this.renderCanvas(canvasToDrawOn, this._chooseObjectsToRender());\n return this;\n },\n\n renderTopLayer: function(ctx) {\n ctx.save();\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this.freeDrawingBrush && this.freeDrawingBrush._render();\n this.contextTopDirty = true;\n }\n // we render the top context - last object\n if (this.selection && this._groupSelector) {\n this._drawSelection(ctx);\n this.contextTopDirty = true;\n }\n ctx.restore();\n },\n\n /**\n * Method to render only the top canvas.\n * Also used to render the group selection box.\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n renderTop: function () {\n var ctx = this.contextTop;\n this.clearContext(ctx);\n this.renderTopLayer(ctx);\n this.fire('after:render');\n return this;\n },\n\n /**\n * Resets the current transform to its original values and chooses the type of resizing based on the event\n * @private\n */\n _resetCurrentTransform: function() {\n var t = this._currentTransform;\n\n t.target.set({\n scaleX: t.original.scaleX,\n scaleY: t.original.scaleY,\n skewX: t.original.skewX,\n skewY: t.original.skewY,\n left: t.original.left,\n top: t.original.top\n });\n\n if (this._shouldCenterTransform(t.target)) {\n if (t.originX !== 'center') {\n if (t.originX === 'right') {\n t.mouseXSign = -1;\n }\n else {\n t.mouseXSign = 1;\n }\n }\n if (t.originY !== 'center') {\n if (t.originY === 'bottom') {\n t.mouseYSign = -1;\n }\n else {\n t.mouseYSign = 1;\n }\n }\n\n t.originX = 'center';\n t.originY = 'center';\n }\n else {\n t.originX = t.original.originX;\n t.originY = t.original.originY;\n }\n },\n\n /**\n * Checks if point is contained within an area of given object\n * @param {Event} e Event object\n * @param {fabric.Object} target Object to test against\n * @param {Object} [point] x,y object of point coordinates we want to check.\n * @return {Boolean} true if point is contained within an area of given object\n */\n containsPoint: function (e, target, point) {\n var ignoreZoom = true,\n pointer = point || this.getPointer(e, ignoreZoom),\n xy;\n\n if (target.group && target.group === this._activeObject && target.group.type === 'activeSelection') {\n xy = this._normalizePointer(target.group, pointer);\n }\n else {\n xy = { x: pointer.x, y: pointer.y };\n }\n // http://www.geog.ubc.ca/courses/klink/gis.notes/ncgia/u32.html\n // http://idav.ucdavis.edu/~okreylos/TAship/Spring2000/PointInPolygon.html\n return (target.containsPoint(xy) || target._findTargetCorner(pointer));\n },\n\n /**\n * @private\n */\n _normalizePointer: function (object, pointer) {\n var m = object.calcTransformMatrix(),\n invertedM = fabric.util.invertTransform(m),\n vptPointer = this.restorePointerVpt(pointer);\n return fabric.util.transformPoint(vptPointer, invertedM);\n },\n\n /**\n * Returns true if object is transparent at a certain location\n * @param {fabric.Object} target Object to check\n * @param {Number} x Left coordinate\n * @param {Number} y Top coordinate\n * @return {Boolean}\n */\n isTargetTransparent: function (target, x, y) {\n // in case the target is the activeObject, we cannot execute this optimization\n // because we need to draw controls too.\n if (target.shouldCache() && target._cacheCanvas && target !== this._activeObject) {\n var normalizedPointer = this._normalizePointer(target, {x: x, y: y}),\n targetRelativeX = Math.max(target.cacheTranslationX + (normalizedPointer.x * target.zoomX), 0),\n targetRelativeY = Math.max(target.cacheTranslationY + (normalizedPointer.y * target.zoomY), 0);\n\n var isTransparent = fabric.util.isTransparent(\n target._cacheContext, Math.round(targetRelativeX), Math.round(targetRelativeY), this.targetFindTolerance);\n\n return isTransparent;\n }\n\n var ctx = this.contextCache,\n originalColor = target.selectionBackgroundColor, v = this.viewportTransform;\n\n target.selectionBackgroundColor = '';\n\n this.clearContext(ctx);\n\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n target.render(ctx);\n ctx.restore();\n\n target === this._activeObject && target._renderControls(ctx, {\n hasBorders: false,\n transparentCorners: false\n }, {\n hasBorders: false,\n });\n\n target.selectionBackgroundColor = originalColor;\n\n var isTransparent = fabric.util.isTransparent(\n ctx, x, y, this.targetFindTolerance);\n\n return isTransparent;\n },\n\n /**\n * takes an event and determins if selection key has been pressed\n * @private\n * @param {Event} e Event object\n */\n _isSelectionKeyPressed: function(e) {\n var selectionKeyPressed = false;\n\n if (Object.prototype.toString.call(this.selectionKey) === '[object Array]') {\n selectionKeyPressed = !!this.selectionKey.find(function(key) { return e[key] === true; });\n }\n else {\n selectionKeyPressed = e[this.selectionKey];\n }\n\n return selectionKeyPressed;\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n */\n _shouldClearSelection: function (e, target) {\n var activeObjects = this.getActiveObjects(),\n activeObject = this._activeObject;\n\n return (\n !target\n ||\n (target &&\n activeObject &&\n activeObjects.length > 1 &&\n activeObjects.indexOf(target) === -1 &&\n activeObject !== target &&\n !this._isSelectionKeyPressed(e))\n ||\n (target && !target.evented)\n ||\n (target &&\n !target.selectable &&\n activeObject &&\n activeObject !== target)\n );\n },\n\n /**\n * centeredScaling from object can't override centeredScaling from canvas.\n * this should be fixed, since object setting should take precedence over canvas.\n * @private\n * @param {fabric.Object} target\n */\n _shouldCenterTransform: function (target) {\n if (!target) {\n return;\n }\n\n var t = this._currentTransform,\n centerTransform;\n\n if (t.action === 'scale' || t.action === 'scaleX' || t.action === 'scaleY') {\n centerTransform = this.centeredScaling || target.centeredScaling;\n }\n else if (t.action === 'rotate') {\n centerTransform = this.centeredRotation || target.centeredRotation;\n }\n\n return centerTransform ? !t.altKey : t.altKey;\n },\n\n /**\n * @private\n */\n _getOriginFromCorner: function(target, corner) {\n var origin = {\n x: target.originX,\n y: target.originY\n };\n\n if (corner === 'ml' || corner === 'tl' || corner === 'bl') {\n origin.x = 'right';\n }\n else if (corner === 'mr' || corner === 'tr' || corner === 'br') {\n origin.x = 'left';\n }\n\n if (corner === 'tl' || corner === 'mt' || corner === 'tr') {\n origin.y = 'bottom';\n }\n else if (corner === 'bl' || corner === 'mb' || corner === 'br') {\n origin.y = 'top';\n }\n\n return origin;\n },\n\n /**\n * @private\n * @param {Boolean} alreadySelected true if target is already selected\n * @param {String} corner a string representing the corner ml, mr, tl ...\n * @param {Event} e Event object\n * @param {fabric.Object} [target] inserted back to help overriding. Unused\n */\n _getActionFromCorner: function(alreadySelected, corner, e /* target */) {\n if (!corner || !alreadySelected) {\n return 'drag';\n }\n\n switch (corner) {\n case 'mtr':\n return 'rotate';\n case 'ml':\n case 'mr':\n return e[this.altActionKey] ? 'skewY' : 'scaleX';\n case 'mt':\n case 'mb':\n return e[this.altActionKey] ? 'skewX' : 'scaleY';\n default:\n return 'scale';\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n */\n _setupCurrentTransform: function (e, target, alreadySelected) {\n if (!target) {\n return;\n }\n\n var pointer = this.getPointer(e),\n corner = target._findTargetCorner(this.getPointer(e, true)),\n action = this._getActionFromCorner(alreadySelected, corner, e, target),\n origin = this._getOriginFromCorner(target, corner);\n\n this._currentTransform = {\n target: target,\n action: action,\n corner: corner,\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n // used by transation\n offsetX: pointer.x - target.left,\n offsetY: pointer.y - target.top,\n originX: origin.x,\n originY: origin.y,\n ex: pointer.x,\n ey: pointer.y,\n lastX: pointer.x,\n lastY: pointer.y,\n // unsure they are usefull anymore.\n // left: target.left,\n // top: target.top,\n theta: degreesToRadians(target.angle),\n // end of unsure\n width: target.width * target.scaleX,\n mouseXSign: 1,\n mouseYSign: 1,\n shiftKey: e.shiftKey,\n altKey: e[this.centeredKey],\n original: fabric.util.saveObjectTransform(target),\n };\n\n this._currentTransform.original.originX = origin.x;\n this._currentTransform.original.originY = origin.y;\n\n this._resetCurrentTransform();\n this._beforeTransform(e);\n },\n\n /**\n * Translates object by \"setting\" its left/top\n * @private\n * @param {Number} x pointer's x coordinate\n * @param {Number} y pointer's y coordinate\n * @return {Boolean} true if the translation occurred\n */\n _translateObject: function (x, y) {\n var transform = this._currentTransform,\n target = transform.target,\n newLeft = x - transform.offsetX,\n newTop = y - transform.offsetY,\n moveX = !target.get('lockMovementX') && target.left !== newLeft,\n moveY = !target.get('lockMovementY') && target.top !== newTop;\n\n moveX && target.set('left', newLeft);\n moveY && target.set('top', newTop);\n return moveX || moveY;\n },\n\n /**\n * Check if we are increasing a positive skew or lower it,\n * checking mouse direction and pressed corner.\n * @private\n */\n _changeSkewTransformOrigin: function(mouseMove, t, by) {\n var property = 'originX', origins = { 0: 'center' },\n skew = t.target.skewX, originA = 'left', originB = 'right',\n corner = t.corner === 'mt' || t.corner === 'ml' ? 1 : -1,\n flipSign = 1;\n\n mouseMove = mouseMove > 0 ? 1 : -1;\n if (by === 'y') {\n skew = t.target.skewY;\n originA = 'top';\n originB = 'bottom';\n property = 'originY';\n }\n origins[-1] = originA;\n origins[1] = originB;\n\n t.target.flipX && (flipSign *= -1);\n t.target.flipY && (flipSign *= -1);\n\n if (skew === 0) {\n t.skewSign = -corner * mouseMove * flipSign;\n t[property] = origins[-mouseMove];\n }\n else {\n skew = skew > 0 ? 1 : -1;\n t.skewSign = skew;\n t[property] = origins[skew * corner * flipSign];\n }\n },\n\n /**\n * Skew object by mouse events\n * @private\n * @param {Number} x pointer's x coordinate\n * @param {Number} y pointer's y coordinate\n * @param {String} by Either 'x' or 'y'\n * @return {Boolean} true if the skewing occurred\n */\n _skewObject: function (x, y, by) {\n var t = this._currentTransform,\n target = t.target, skewed = false,\n lockSkewingX = target.get('lockSkewingX'),\n lockSkewingY = target.get('lockSkewingY');\n\n if ((lockSkewingX && by === 'x') || (lockSkewingY && by === 'y')) {\n return false;\n }\n\n // Get the constraint point\n var center = target.getCenterPoint(),\n actualMouseByCenter = target.toLocalPoint(new fabric.Point(x, y), 'center', 'center')[by],\n lastMouseByCenter = target.toLocalPoint(new fabric.Point(t.lastX, t.lastY), 'center', 'center')[by],\n actualMouseByOrigin, constraintPosition, dim = target._getTransformedDimensions();\n\n this._changeSkewTransformOrigin(actualMouseByCenter - lastMouseByCenter, t, by);\n actualMouseByOrigin = target.toLocalPoint(new fabric.Point(x, y), t.originX, t.originY)[by];\n constraintPosition = target.translateToOriginPoint(center, t.originX, t.originY);\n // Actually skew the object\n skewed = this._setObjectSkew(actualMouseByOrigin, t, by, dim);\n t.lastX = x;\n t.lastY = y;\n // Make sure the constraints apply\n target.setPositionByOrigin(constraintPosition, t.originX, t.originY);\n return skewed;\n },\n\n /**\n * Set object skew\n * @private\n * @return {Boolean} true if the skewing occurred\n */\n _setObjectSkew: function(localMouse, transform, by, _dim) {\n var target = transform.target, newValue, skewed = false,\n skewSign = transform.skewSign, newDim, dimNoSkew,\n otherBy, _otherBy, _by, newDimMouse, skewX, skewY;\n\n if (by === 'x') {\n otherBy = 'y';\n _otherBy = 'Y';\n _by = 'X';\n skewX = 0;\n skewY = target.skewY;\n }\n else {\n otherBy = 'x';\n _otherBy = 'X';\n _by = 'Y';\n skewX = target.skewX;\n skewY = 0;\n }\n\n dimNoSkew = target._getTransformedDimensions(skewX, skewY);\n newDimMouse = 2 * Math.abs(localMouse) - dimNoSkew[by];\n if (newDimMouse <= 2) {\n newValue = 0;\n }\n else {\n newValue = skewSign * Math.atan((newDimMouse / target['scale' + _by]) /\n (dimNoSkew[otherBy] / target['scale' + _otherBy]));\n newValue = fabric.util.radiansToDegrees(newValue);\n }\n skewed = target['skew' + _by] !== newValue;\n target.set('skew' + _by, newValue);\n if (target['skew' + _otherBy] !== 0) {\n newDim = target._getTransformedDimensions();\n newValue = (_dim[otherBy] / newDim[otherBy]) * target['scale' + _otherBy];\n target.set('scale' + _otherBy, newValue);\n }\n return skewed;\n },\n\n /**\n * Scales object by invoking its scaleX/scaleY methods\n * @private\n * @param {Number} x pointer's x coordinate\n * @param {Number} y pointer's y coordinate\n * @param {String} by Either 'x' or 'y' - specifies dimension constraint by which to scale an object.\n * When not provided, an object is scaled by both dimensions equally\n * @return {Boolean} true if the scaling occurred\n */\n _scaleObject: function (x, y, by) {\n var t = this._currentTransform,\n target = t.target,\n lockScalingX = target.lockScalingX,\n lockScalingY = target.lockScalingY,\n lockScalingFlip = target.lockScalingFlip;\n\n if (lockScalingX && lockScalingY) {\n return false;\n }\n\n // Get the constraint point\n var constraintPosition = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY),\n localMouse = target.toLocalPoint(new fabric.Point(x, y), t.originX, t.originY),\n dim = target._getTransformedDimensions(), scaled = false;\n\n this._setLocalMouse(localMouse, t);\n\n // Actually scale the object\n scaled = this._setObjectScale(localMouse, t, lockScalingX, lockScalingY, by, lockScalingFlip, dim);\n\n // Make sure the constraints apply\n target.setPositionByOrigin(constraintPosition, t.originX, t.originY);\n return scaled;\n },\n\n /**\n * @private\n * @return {Boolean} true if the scaling occurred\n */\n _setObjectScale: function(localMouse, transform, lockScalingX, lockScalingY, by, lockScalingFlip, _dim) {\n var target = transform.target, forbidScalingX = false, forbidScalingY = false, scaled = false,\n scaleX = localMouse.x * target.scaleX / _dim.x,\n scaleY = localMouse.y * target.scaleY / _dim.y,\n changeX = target.scaleX !== scaleX,\n changeY = target.scaleY !== scaleY;\n\n transform.newScaleX = scaleX;\n transform.newScaleY = scaleY;\n if (fabric.Textbox && by === 'x' && target instanceof fabric.Textbox) {\n var w = target.width * (localMouse.x / _dim.x);\n if (w >= target.getMinWidth()) {\n scaled = w !== target.width;\n target.set('width', w);\n return scaled;\n }\n return false;\n }\n\n if (lockScalingFlip && scaleX <= 0 && scaleX < target.scaleX) {\n forbidScalingX = true;\n localMouse.x = 0;\n }\n\n if (lockScalingFlip && scaleY <= 0 && scaleY < target.scaleY) {\n forbidScalingY = true;\n localMouse.y = 0;\n }\n\n if (by === 'equally' && !lockScalingX && !lockScalingY) {\n scaled = this._scaleObjectEqually(localMouse, target, transform, _dim);\n }\n else if (!by) {\n forbidScalingX || lockScalingX || (target.set('scaleX', scaleX) && (scaled = scaled || changeX));\n forbidScalingY || lockScalingY || (target.set('scaleY', scaleY) && (scaled = scaled || changeY));\n }\n else if (by === 'x' && !target.get('lockUniScaling')) {\n forbidScalingX || lockScalingX || (target.set('scaleX', scaleX) && (scaled = changeX));\n }\n else if (by === 'y' && !target.get('lockUniScaling')) {\n forbidScalingY || lockScalingY || (target.set('scaleY', scaleY) && (scaled = changeY));\n }\n forbidScalingX || forbidScalingY || this._flipObject(transform, by);\n return scaled;\n },\n\n /**\n * @private\n * @return {Boolean} true if the scaling occurred\n */\n _scaleObjectEqually: function(localMouse, target, transform, _dim) {\n\n var dist = localMouse.y + localMouse.x,\n lastDist = _dim.y * transform.original.scaleY / target.scaleY +\n _dim.x * transform.original.scaleX / target.scaleX,\n scaled, signX = localMouse.x < 0 ? -1 : 1,\n signY = localMouse.y < 0 ? -1 : 1, newScaleX, newScaleY;\n\n // We use transform.scaleX/Y instead of target.scaleX/Y\n // because the object may have a min scale and we'll loose the proportions\n newScaleX = signX * Math.abs(transform.original.scaleX * dist / lastDist);\n newScaleY = signY * Math.abs(transform.original.scaleY * dist / lastDist);\n scaled = newScaleX !== target.scaleX || newScaleY !== target.scaleY;\n target.set('scaleX', newScaleX);\n target.set('scaleY', newScaleY);\n return scaled;\n },\n\n /**\n * @private\n */\n _flipObject: function(transform, by) {\n if (transform.newScaleX < 0 && by !== 'y') {\n if (transform.originX === 'left') {\n transform.originX = 'right';\n }\n else if (transform.originX === 'right') {\n transform.originX = 'left';\n }\n }\n\n if (transform.newScaleY < 0 && by !== 'x') {\n if (transform.originY === 'top') {\n transform.originY = 'bottom';\n }\n else if (transform.originY === 'bottom') {\n transform.originY = 'top';\n }\n }\n },\n\n /**\n * @private\n */\n _setLocalMouse: function(localMouse, t) {\n var target = t.target, zoom = this.getZoom(),\n padding = target.padding / zoom;\n\n if (t.originX === 'right') {\n localMouse.x *= -1;\n }\n else if (t.originX === 'center') {\n localMouse.x *= t.mouseXSign * 2;\n if (localMouse.x < 0) {\n t.mouseXSign = -t.mouseXSign;\n }\n }\n\n if (t.originY === 'bottom') {\n localMouse.y *= -1;\n }\n else if (t.originY === 'center') {\n localMouse.y *= t.mouseYSign * 2;\n if (localMouse.y < 0) {\n t.mouseYSign = -t.mouseYSign;\n }\n }\n\n // adjust the mouse coordinates when dealing with padding\n if (abs(localMouse.x) > padding) {\n if (localMouse.x < 0) {\n localMouse.x += padding;\n }\n else {\n localMouse.x -= padding;\n }\n }\n else { // mouse is within the padding, set to 0\n localMouse.x = 0;\n }\n\n if (abs(localMouse.y) > padding) {\n if (localMouse.y < 0) {\n localMouse.y += padding;\n }\n else {\n localMouse.y -= padding;\n }\n }\n else {\n localMouse.y = 0;\n }\n },\n\n /**\n * Rotates object by invoking its rotate method\n * @private\n * @param {Number} x pointer's x coordinate\n * @param {Number} y pointer's y coordinate\n * @return {Boolean} true if the rotation occurred\n */\n _rotateObject: function (x, y) {\n\n var t = this._currentTransform,\n target = t.target, constraintPosition,\n constraintPosition = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY);\n\n if (target.lockRotation) {\n return false;\n }\n\n var lastAngle = atan2(t.ey - constraintPosition.y, t.ex - constraintPosition.x),\n curAngle = atan2(y - constraintPosition.y, x - constraintPosition.x),\n angle = radiansToDegrees(curAngle - lastAngle + t.theta),\n hasRotated = true;\n\n if (target.snapAngle > 0) {\n var snapAngle = target.snapAngle,\n snapThreshold = target.snapThreshold || snapAngle,\n rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle,\n leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle;\n\n if (Math.abs(angle - leftAngleLocked) < snapThreshold) {\n angle = leftAngleLocked;\n }\n else if (Math.abs(angle - rightAngleLocked) < snapThreshold) {\n angle = rightAngleLocked;\n }\n }\n\n // normalize angle to positive value\n if (angle < 0) {\n angle = 360 + angle;\n }\n angle %= 360;\n\n if (target.angle === angle) {\n hasRotated = false;\n }\n else {\n // rotation only happen here\n target.angle = angle;\n // Make sure the constraints apply\n target.setPositionByOrigin(constraintPosition, t.originX, t.originY);\n }\n\n return hasRotated;\n },\n\n /**\n * Set the cursor type of the canvas element\n * @param {String} value Cursor type of the canvas element.\n * @see http://www.w3.org/TR/css3-ui/#cursor\n */\n setCursor: function (value) {\n this.upperCanvasEl.style.cursor = value;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx to draw the selection on\n */\n _drawSelection: function (ctx) {\n var groupSelector = this._groupSelector,\n left = groupSelector.left,\n top = groupSelector.top,\n aleft = abs(left),\n atop = abs(top);\n\n if (this.selectionColor) {\n ctx.fillStyle = this.selectionColor;\n\n ctx.fillRect(\n groupSelector.ex - ((left > 0) ? 0 : -left),\n groupSelector.ey - ((top > 0) ? 0 : -top),\n aleft,\n atop\n );\n }\n\n if (!this.selectionLineWidth || !this.selectionBorderColor) {\n return;\n }\n ctx.lineWidth = this.selectionLineWidth;\n ctx.strokeStyle = this.selectionBorderColor;\n\n // selection border\n if (this.selectionDashArray.length > 1 && !supportLineDash) {\n\n var px = groupSelector.ex + STROKE_OFFSET - ((left > 0) ? 0 : aleft),\n py = groupSelector.ey + STROKE_OFFSET - ((top > 0) ? 0 : atop);\n\n ctx.beginPath();\n\n fabric.util.drawDashedLine(ctx, px, py, px + aleft, py, this.selectionDashArray);\n fabric.util.drawDashedLine(ctx, px, py + atop - 1, px + aleft, py + atop - 1, this.selectionDashArray);\n fabric.util.drawDashedLine(ctx, px, py, px, py + atop, this.selectionDashArray);\n fabric.util.drawDashedLine(ctx, px + aleft - 1, py, px + aleft - 1, py + atop, this.selectionDashArray);\n\n ctx.closePath();\n ctx.stroke();\n }\n else {\n fabric.Object.prototype._setLineDash.call(this, ctx, this.selectionDashArray);\n ctx.strokeRect(\n groupSelector.ex + STROKE_OFFSET - ((left > 0) ? 0 : aleft),\n groupSelector.ey + STROKE_OFFSET - ((top > 0) ? 0 : atop),\n aleft,\n atop\n );\n }\n },\n\n /**\n * Method that determines what object we are clicking on\n * the skipGroup parameter is for internal use, is needed for shift+click action\n * 11/09/2018 TODO: would be cool if findTarget could discern between being a full target\n * or the outside part of the corner.\n * @param {Event} e mouse event\n * @param {Boolean} skipGroup when true, activeGroup is skipped and only objects are traversed through\n * @return {fabric.Object} the target found\n */\n findTarget: function (e, skipGroup) {\n if (this.skipTargetFind) {\n return;\n }\n\n var ignoreZoom = true,\n pointer = this.getPointer(e, ignoreZoom),\n activeObject = this._activeObject,\n aObjects = this.getActiveObjects(),\n activeTarget, activeTargetSubs;\n\n // first check current group (if one exists)\n // active group does not check sub targets like normal groups.\n // if active group just exits.\n this.targets = [];\n\n if (aObjects.length > 1 && !skipGroup && activeObject === this._searchPossibleTargets([activeObject], pointer)) {\n return activeObject;\n }\n // if we hit the corner of an activeObject, let's return that.\n if (aObjects.length === 1 && activeObject._findTargetCorner(pointer)) {\n return activeObject;\n }\n if (aObjects.length === 1 &&\n activeObject === this._searchPossibleTargets([activeObject], pointer)) {\n if (!this.preserveObjectStacking) {\n return activeObject;\n }\n else {\n activeTarget = activeObject;\n activeTargetSubs = this.targets;\n this.targets = [];\n }\n }\n var target = this._searchPossibleTargets(this._objects, pointer);\n if (e[this.altSelectionKey] && target && activeTarget && target !== activeTarget) {\n target = activeTarget;\n this.targets = activeTargetSubs;\n }\n return target;\n },\n\n /**\n * Checks point is inside the object.\n * @param {Object} [pointer] x,y object of point coordinates we want to check.\n * @param {fabric.Object} obj Object to test against\n * @param {Object} [globalPointer] x,y object of point coordinates relative to canvas used to search per pixel target.\n * @return {Boolean} true if point is contained within an area of given object\n * @private\n */\n _checkTarget: function(pointer, obj, globalPointer) {\n if (obj &&\n obj.visible &&\n obj.evented &&\n this.containsPoint(null, obj, pointer)){\n if ((this.perPixelTargetFind || obj.perPixelTargetFind) && !obj.isEditing) {\n var isTransparent = this.isTargetTransparent(obj, globalPointer.x, globalPointer.y);\n if (!isTransparent) {\n return true;\n }\n }\n else {\n return true;\n }\n }\n },\n\n /**\n * Function used to search inside objects an object that contains pointer in bounding box or that contains pointerOnCanvas when painted\n * @param {Array} [objects] objects array to look into\n * @param {Object} [pointer] x,y object of point coordinates we want to check.\n * @return {fabric.Object} object that contains pointer\n * @private\n */\n _searchPossibleTargets: function(objects, pointer) {\n // Cache all targets where their bounding box contains point.\n var target, i = objects.length, subTarget;\n // Do not check for currently grouped objects, since we check the parent group itself.\n // until we call this function specifically to search inside the activeGroup\n while (i--) {\n var objToCheck = objects[i];\n var pointerToUse = objToCheck.group && objToCheck.group.type !== 'activeSelection' ?\n this._normalizePointer(objToCheck.group, pointer) : pointer;\n if (this._checkTarget(pointerToUse, objToCheck, pointer)) {\n target = objects[i];\n if (target.subTargetCheck && target instanceof fabric.Group) {\n subTarget = this._searchPossibleTargets(target._objects, pointer);\n subTarget && this.targets.push(subTarget);\n }\n break;\n }\n }\n return target;\n },\n\n /**\n * Returns pointer coordinates without the effect of the viewport\n * @param {Object} pointer with \"x\" and \"y\" number values\n * @return {Object} object with \"x\" and \"y\" number values\n */\n restorePointerVpt: function(pointer) {\n return fabric.util.transformPoint(\n pointer,\n fabric.util.invertTransform(this.viewportTransform)\n );\n },\n\n /**\n * Returns pointer coordinates relative to canvas.\n * Can return coordinates with or without viewportTransform.\n * ignoreZoom false gives back coordinates that represent\n * the point clicked on canvas element.\n * ignoreZoom true gives back coordinates after being processed\n * by the viewportTransform ( sort of coordinates of what is displayed\n * on the canvas where you are clicking.\n * ignoreZoom true = HTMLElement coordinates relative to top,left\n * ignoreZoom false, default = fabric space coordinates, the same used for shape position\n * To interact with your shapes top and left you want to use ignoreZoom true\n * most of the time, while ignoreZoom false will give you coordinates\n * compatible with the object.oCoords system.\n * of the time.\n * @param {Event} e\n * @param {Boolean} ignoreZoom\n * @return {Object} object with \"x\" and \"y\" number values\n */\n getPointer: function (e, ignoreZoom) {\n // return cached values if we are in the event processing chain\n if (this._absolutePointer && !ignoreZoom) {\n return this._absolutePointer;\n }\n if (this._pointer && ignoreZoom) {\n return this._pointer;\n }\n\n var pointer = getPointer(e),\n upperCanvasEl = this.upperCanvasEl,\n bounds = upperCanvasEl.getBoundingClientRect(),\n boundsWidth = bounds.width || 0,\n boundsHeight = bounds.height || 0,\n cssScale;\n\n if (!boundsWidth || !boundsHeight ) {\n if ('top' in bounds && 'bottom' in bounds) {\n boundsHeight = Math.abs( bounds.top - bounds.bottom );\n }\n if ('right' in bounds && 'left' in bounds) {\n boundsWidth = Math.abs( bounds.right - bounds.left );\n }\n }\n\n this.calcOffset();\n pointer.x = pointer.x - this._offset.left;\n pointer.y = pointer.y - this._offset.top;\n if (!ignoreZoom) {\n pointer = this.restorePointerVpt(pointer);\n }\n\n var retinaScaling = this.getRetinaScaling();\n if (retinaScaling !== 1) {\n pointer.x /= retinaScaling;\n pointer.y /= retinaScaling;\n }\n\n if (boundsWidth === 0 || boundsHeight === 0) {\n // If bounds are not available (i.e. not visible), do not apply scale.\n cssScale = { width: 1, height: 1 };\n }\n else {\n cssScale = {\n width: upperCanvasEl.width / boundsWidth,\n height: upperCanvasEl.height / boundsHeight\n };\n }\n\n return {\n x: pointer.x * cssScale.width,\n y: pointer.y * cssScale.height\n };\n },\n\n /**\n * @private\n * @throws {CANVAS_INIT_ERROR} If canvas can not be initialized\n */\n _createUpperCanvas: function () {\n var lowerCanvasClass = this.lowerCanvasEl.className.replace(/\\s*lower-canvas\\s*/, ''),\n lowerCanvasEl = this.lowerCanvasEl, upperCanvasEl = this.upperCanvasEl;\n\n // there is no need to create a new upperCanvas element if we have already one.\n if (upperCanvasEl) {\n upperCanvasEl.className = '';\n }\n else {\n upperCanvasEl = this._createCanvasElement();\n this.upperCanvasEl = upperCanvasEl;\n }\n fabric.util.addClass(upperCanvasEl, 'upper-canvas ' + lowerCanvasClass);\n\n this.wrapperEl.appendChild(upperCanvasEl);\n\n this._copyCanvasStyle(lowerCanvasEl, upperCanvasEl);\n this._applyCanvasStyle(upperCanvasEl);\n this.contextTop = upperCanvasEl.getContext('2d');\n },\n\n /**\n * @private\n */\n _createCacheCanvas: function () {\n this.cacheCanvasEl = this._createCanvasElement();\n this.cacheCanvasEl.setAttribute('width', this.width);\n this.cacheCanvasEl.setAttribute('height', this.height);\n this.contextCache = this.cacheCanvasEl.getContext('2d');\n },\n\n /**\n * @private\n */\n _initWrapperElement: function () {\n this.wrapperEl = fabric.util.wrapElement(this.lowerCanvasEl, 'div', {\n 'class': this.containerClass\n });\n fabric.util.setStyle(this.wrapperEl, {\n width: this.width + 'px',\n height: this.height + 'px',\n position: 'relative'\n });\n fabric.util.makeElementUnselectable(this.wrapperEl);\n },\n\n /**\n * @private\n * @param {HTMLElement} element canvas element to apply styles on\n */\n _applyCanvasStyle: function (element) {\n var width = this.width || element.width,\n height = this.height || element.height;\n\n fabric.util.setStyle(element, {\n position: 'absolute',\n width: width + 'px',\n height: height + 'px',\n left: 0,\n top: 0,\n 'touch-action': this.allowTouchScrolling ? 'manipulation' : 'none',\n '-ms-touch-action': this.allowTouchScrolling ? 'manipulation' : 'none'\n });\n element.width = width;\n element.height = height;\n fabric.util.makeElementUnselectable(element);\n },\n\n /**\n * Copy the entire inline style from one element (fromEl) to another (toEl)\n * @private\n * @param {Element} fromEl Element style is copied from\n * @param {Element} toEl Element copied style is applied to\n */\n _copyCanvasStyle: function (fromEl, toEl) {\n toEl.style.cssText = fromEl.style.cssText;\n },\n\n /**\n * Returns context of canvas where object selection is drawn\n * @return {CanvasRenderingContext2D}\n */\n getSelectionContext: function() {\n return this.contextTop;\n },\n\n /**\n * Returns <canvas> element on which object selection is drawn\n * @return {HTMLCanvasElement}\n */\n getSelectionElement: function () {\n return this.upperCanvasEl;\n },\n\n /**\n * Returns currently active object\n * @return {fabric.Object} active object\n */\n getActiveObject: function () {\n return this._activeObject;\n },\n\n /**\n * Returns an array with the current selected objects\n * @return {fabric.Object} active object\n */\n getActiveObjects: function () {\n var active = this._activeObject;\n if (active) {\n if (active.type === 'activeSelection' && active._objects) {\n return active._objects.slice(0);\n }\n else {\n return [active];\n }\n }\n return [];\n },\n\n /**\n * @private\n * @param {fabric.Object} obj Object that was removed\n */\n _onObjectRemoved: function(obj) {\n // removing active object should fire \"selection:cleared\" events\n if (obj === this._activeObject) {\n this.fire('before:selection:cleared', { target: obj });\n this._discardActiveObject();\n this.fire('selection:cleared', { target: obj });\n obj.fire('deselected');\n }\n if (obj === this._hoveredTarget){\n this._hoveredTarget = null;\n this._hoveredTargets = [];\n }\n this.callSuper('_onObjectRemoved', obj);\n },\n\n /**\n * @private\n * Compares the old activeObject with the current one and fires correct events\n * @param {fabric.Object} obj old activeObject\n */\n _fireSelectionEvents: function(oldObjects, e) {\n var somethingChanged = false, objects = this.getActiveObjects(),\n added = [], removed = [], opt = { e: e };\n oldObjects.forEach(function(oldObject) {\n if (objects.indexOf(oldObject) === -1) {\n somethingChanged = true;\n oldObject.fire('deselected', opt);\n removed.push(oldObject);\n }\n });\n objects.forEach(function(object) {\n if (oldObjects.indexOf(object) === -1) {\n somethingChanged = true;\n object.fire('selected', opt);\n added.push(object);\n }\n });\n if (oldObjects.length > 0 && objects.length > 0) {\n opt.selected = added;\n opt.deselected = removed;\n // added for backward compatibility\n opt.updated = added[0] || removed[0];\n opt.target = this._activeObject;\n somethingChanged && this.fire('selection:updated', opt);\n }\n else if (objects.length > 0) {\n // deprecated event\n if (objects.length === 1) {\n opt.target = added[0];\n this.fire('object:selected', opt);\n }\n opt.selected = added;\n // added for backward compatibility\n opt.target = this._activeObject;\n this.fire('selection:created', opt);\n }\n else if (oldObjects.length > 0) {\n opt.deselected = removed;\n this.fire('selection:cleared', opt);\n }\n },\n\n /**\n * Sets given object as the only active object on canvas\n * @param {fabric.Object} object Object to set as an active one\n * @param {Event} [e] Event (passed along when firing \"object:selected\")\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n setActiveObject: function (object, e) {\n var currentActives = this.getActiveObjects();\n this._setActiveObject(object, e);\n this._fireSelectionEvents(currentActives, e);\n return this;\n },\n\n /**\n * @private\n * @param {Object} object to set as active\n * @param {Event} [e] Event (passed along when firing \"object:selected\")\n * @return {Boolean} true if the selection happened\n */\n _setActiveObject: function(object, e) {\n if (this._activeObject === object) {\n return false;\n }\n if (!this._discardActiveObject(e, object)) {\n return false;\n }\n if (object.onSelect({ e: e })) {\n return false;\n }\n this._activeObject = object;\n return true;\n },\n\n /**\n * @private\n */\n _discardActiveObject: function(e, object) {\n var obj = this._activeObject;\n if (obj) {\n // onDeselect return TRUE to cancel selection;\n if (obj.onDeselect({ e: e, object: object })) {\n return false;\n }\n this._activeObject = null;\n }\n return true;\n },\n\n /**\n * Discards currently active object and fire events. If the function is called by fabric\n * as a consequence of a mouse event, the event is passed as a parameter and\n * sent to the fire function for the custom events. When used as a method the\n * e param does not have any application.\n * @param {event} e\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n discardActiveObject: function (e) {\n var currentActives = this.getActiveObjects(), activeObject = this.getActiveObject();\n if (currentActives.length) {\n this.fire('before:selection:cleared', { target: activeObject, e: e });\n }\n this._discardActiveObject(e);\n this._fireSelectionEvents(currentActives, e);\n return this;\n },\n\n /**\n * Clears a canvas element and removes all event listeners\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n dispose: function () {\n var wrapper = this.wrapperEl;\n this.removeListeners();\n wrapper.removeChild(this.upperCanvasEl);\n wrapper.removeChild(this.lowerCanvasEl);\n this.contextCache = null;\n this.contextTop = null;\n ['upperCanvasEl', 'cacheCanvasEl'].forEach((function(element) {\n fabric.util.cleanUpJsdomNode(this[element]);\n this[element] = undefined;\n }).bind(this));\n if (wrapper.parentNode) {\n wrapper.parentNode.replaceChild(this.lowerCanvasEl, this.wrapperEl);\n }\n delete this.wrapperEl;\n fabric.StaticCanvas.prototype.dispose.call(this);\n return this;\n },\n\n /**\n * Clears all contexts (background, main, top) of an instance\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n clear: function () {\n // this.discardActiveGroup();\n this.discardActiveObject();\n this.clearContext(this.contextTop);\n return this.callSuper('clear');\n },\n\n /**\n * Draws objects' controls (borders/controls)\n * @param {CanvasRenderingContext2D} ctx Context to render controls on\n */\n drawControls: function(ctx) {\n var activeObject = this._activeObject;\n\n if (activeObject) {\n activeObject._renderControls(ctx);\n }\n },\n\n /**\n * @private\n */\n _toObject: function(instance, methodName, propertiesToInclude) {\n //If the object is part of the current selection group, it should\n //be transformed appropriately\n //i.e. it should be serialised as it would appear if the selection group\n //were to be destroyed.\n var originalProperties = this._realizeGroupTransformOnObject(instance),\n object = this.callSuper('_toObject', instance, methodName, propertiesToInclude);\n //Undo the damage we did by changing all of its properties\n this._unwindGroupTransformOnObject(instance, originalProperties);\n return object;\n },\n\n /**\n * Realises an object's group transformation on it\n * @private\n * @param {fabric.Object} [instance] the object to transform (gets mutated)\n * @returns the original values of instance which were changed\n */\n _realizeGroupTransformOnObject: function(instance) {\n if (instance.group && instance.group.type === 'activeSelection' && this._activeObject === instance.group) {\n var layoutProps = ['angle', 'flipX', 'flipY', 'left', 'scaleX', 'scaleY', 'skewX', 'skewY', 'top'];\n //Copy all the positionally relevant properties across now\n var originalValues = {};\n layoutProps.forEach(function(prop) {\n originalValues[prop] = instance[prop];\n });\n this._activeObject.realizeTransform(instance);\n return originalValues;\n }\n else {\n return null;\n }\n },\n\n /**\n * Restores the changed properties of instance\n * @private\n * @param {fabric.Object} [instance] the object to un-transform (gets mutated)\n * @param {Object} [originalValues] the original values of instance, as returned by _realizeGroupTransformOnObject\n */\n _unwindGroupTransformOnObject: function(instance, originalValues) {\n if (originalValues) {\n instance.set(originalValues);\n }\n },\n\n /**\n * @private\n */\n _setSVGObject: function(markup, instance, reviver) {\n //If the object is in a selection group, simulate what would happen to that\n //object when the group is deselected\n var originalProperties = this._realizeGroupTransformOnObject(instance);\n this.callSuper('_setSVGObject', markup, instance, reviver);\n this._unwindGroupTransformOnObject(instance, originalProperties);\n },\n\n setViewportTransform: function (vpt) {\n if (this.renderOnAddRemove && this._activeObject && this._activeObject.isEditing) {\n this._activeObject.clearContextTop();\n }\n fabric.StaticCanvas.prototype.setViewportTransform.call(this, vpt);\n }\n });\n\n // copying static properties manually to work around Opera's bug,\n // where \"prototype\" property is enumerable and overrides existing prototype\n for (var prop in fabric.StaticCanvas) {\n if (prop !== 'prototype') {\n fabric.Canvas[prop] = fabric.StaticCanvas[prop];\n }\n }\n})();\n\n\n(function() {\n\n var cursorOffset = {\n mt: 0, // n\n tr: 1, // ne\n mr: 2, // e\n br: 3, // se\n mb: 4, // s\n bl: 5, // sw\n ml: 6, // w\n tl: 7 // nw\n },\n addListener = fabric.util.addListener,\n removeListener = fabric.util.removeListener,\n RIGHT_CLICK = 3, MIDDLE_CLICK = 2, LEFT_CLICK = 1,\n addEventOptions = { passive: false };\n\n function checkClick(e, value) {\n return e.button && (e.button === value - 1);\n }\n\n fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ {\n\n /**\n * Map of cursor style values for each of the object controls\n * @private\n */\n cursorMap: [\n 'n-resize',\n 'ne-resize',\n 'e-resize',\n 'se-resize',\n 's-resize',\n 'sw-resize',\n 'w-resize',\n 'nw-resize'\n ],\n\n /**\n * Contains the id of the touch event that owns the fabric transform\n * @type Number\n * @private\n */\n mainTouchId: null,\n\n /**\n * Adds mouse listeners to canvas\n * @private\n */\n _initEventListeners: function () {\n // in case we initialized the class twice. This should not happen normally\n // but in some kind of applications where the canvas element may be changed\n // this is a workaround to having double listeners.\n this.removeListeners();\n this._bindEvents();\n this.addOrRemove(addListener, 'add');\n },\n\n /**\n * return an event prefix pointer or mouse.\n * @private\n */\n _getEventPrefix: function () {\n return this.enablePointerEvents ? 'pointer' : 'mouse';\n },\n\n addOrRemove: function(functor, eventjsFunctor) {\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n functor(fabric.window, 'resize', this._onResize);\n functor(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n functor(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n functor(canvasElement, eventTypePrefix + 'out', this._onMouseOut);\n functor(canvasElement, eventTypePrefix + 'enter', this._onMouseEnter);\n functor(canvasElement, 'wheel', this._onMouseWheel);\n functor(canvasElement, 'contextmenu', this._onContextMenu);\n functor(canvasElement, 'dblclick', this._onDoubleClick);\n functor(canvasElement, 'dragover', this._onDragOver);\n functor(canvasElement, 'dragenter', this._onDragEnter);\n functor(canvasElement, 'dragleave', this._onDragLeave);\n functor(canvasElement, 'drop', this._onDrop);\n if (!this.enablePointerEvents) {\n functor(canvasElement, 'touchstart', this._onTouchStart, addEventOptions);\n }\n if (typeof eventjs !== 'undefined' && eventjsFunctor in eventjs) {\n eventjs[eventjsFunctor](canvasElement, 'gesture', this._onGesture);\n eventjs[eventjsFunctor](canvasElement, 'drag', this._onDrag);\n eventjs[eventjsFunctor](canvasElement, 'orientation', this._onOrientationChange);\n eventjs[eventjsFunctor](canvasElement, 'shake', this._onShake);\n eventjs[eventjsFunctor](canvasElement, 'longpress', this._onLongPress);\n }\n },\n\n /**\n * Removes all event listeners\n */\n removeListeners: function() {\n this.addOrRemove(removeListener, 'remove');\n // if you dispose on a mouseDown, before mouse up, you need to clean document to...\n var eventTypePrefix = this._getEventPrefix();\n removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n },\n\n /**\n * @private\n */\n _bindEvents: function() {\n if (this.eventsBound) {\n // for any reason we pass here twice we do not want to bind events twice.\n return;\n }\n this._onMouseDown = this._onMouseDown.bind(this);\n this._onTouchStart = this._onTouchStart.bind(this);\n this._onMouseMove = this._onMouseMove.bind(this);\n this._onMouseUp = this._onMouseUp.bind(this);\n this._onTouchEnd = this._onTouchEnd.bind(this);\n this._onResize = this._onResize.bind(this);\n this._onGesture = this._onGesture.bind(this);\n this._onDrag = this._onDrag.bind(this);\n this._onShake = this._onShake.bind(this);\n this._onLongPress = this._onLongPress.bind(this);\n this._onOrientationChange = this._onOrientationChange.bind(this);\n this._onMouseWheel = this._onMouseWheel.bind(this);\n this._onMouseOut = this._onMouseOut.bind(this);\n this._onMouseEnter = this._onMouseEnter.bind(this);\n this._onContextMenu = this._onContextMenu.bind(this);\n this._onDoubleClick = this._onDoubleClick.bind(this);\n this._onDragOver = this._onDragOver.bind(this);\n this._onDragEnter = this._simpleEventHandler.bind(this, 'dragenter');\n this._onDragLeave = this._simpleEventHandler.bind(this, 'dragleave');\n this._onDrop = this._simpleEventHandler.bind(this, 'drop');\n this.eventsBound = true;\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js gesture\n * @param {Event} [self] Inner Event object\n */\n _onGesture: function(e, self) {\n this.__onTransformGesture && this.__onTransformGesture(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js drag\n * @param {Event} [self] Inner Event object\n */\n _onDrag: function(e, self) {\n this.__onDrag && this.__onDrag(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on wheel event\n */\n _onMouseWheel: function(e) {\n this.__onMouseWheel(e);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseOut: function(e) {\n var target = this._hoveredTarget;\n this.fire('mouse:out', { target: target, e: e });\n this._hoveredTarget = null;\n target && target.fire('mouseout', { e: e });\n\n var _this = this;\n this._hoveredTargets.forEach(function(_target){\n _this.fire('mouse:out', { target: target, e: e });\n _target && target.fire('mouseout', { e: e });\n });\n this._hoveredTargets = [];\n\n if (this._iTextInstances) {\n this._iTextInstances.forEach(function(obj) {\n if (obj.isEditing) {\n obj.hiddenTextarea.focus();\n }\n });\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseenter\n */\n _onMouseEnter: function(e) {\n // This find target and consequent 'mouse:over' is used to\n // clear old instances on hovered target.\n // calling findTarget has the side effect of killing target.__corner.\n // as a short term fix we are not firing this if we are currently transforming.\n // as a long term fix we need to separate the action of finding a target with the\n // side effects we added to it.\n if (!this.currentTransform && !this.findTarget(e)) {\n this.fire('mouse:over', { target: null, e: e });\n this._hoveredTarget = null;\n this._hoveredTargets = [];\n }\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js orientation change\n * @param {Event} [self] Inner Event object\n */\n _onOrientationChange: function(e, self) {\n this.__onOrientationChange && this.__onOrientationChange(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n * @param {Event} [self] Inner Event object\n */\n _onShake: function(e, self) {\n this.__onShake && this.__onShake(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n * @param {Event} [self] Inner Event object\n */\n _onLongPress: function(e, self) {\n this.__onLongPress && this.__onLongPress(e, self);\n },\n\n /**\n * prevent default to allow drop event to be fired\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n */\n _onDragOver: function(e) {\n e.preventDefault();\n var target = this._simpleEventHandler('dragover', e);\n this._fireEnterLeaveEvents(target, e);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onContextMenu: function (e) {\n if (this.stopContextMenu) {\n e.stopPropagation();\n e.preventDefault();\n }\n return false;\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onDoubleClick: function (e) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'dblclick');\n this._resetTransformEventData(e);\n },\n\n /**\n * Return a the id of an event.\n * returns either the pointerId or the identifier or 0 for the mouse event\n * @private\n * @param {Event} evt Event object\n */\n getPointerId: function(evt) {\n var changedTouches = evt.changedTouches;\n\n if (changedTouches) {\n return changedTouches[0] && changedTouches[0].identifier;\n }\n\n if (this.enablePointerEvents) {\n return evt.pointerId;\n }\n\n return -1;\n },\n\n /**\n * Determines if an event has the id of the event that is considered main\n * @private\n * @param {evt} event Event object\n */\n _isMainEvent: function(evt) {\n if (evt.isPrimary === true) {\n return true;\n }\n if (evt.isPrimary === false) {\n return false;\n }\n if (evt.type === 'touchend' && evt.touches.length === 0) {\n return true;\n }\n if (evt.changedTouches) {\n return evt.changedTouches[0].identifier === this.mainTouchId;\n }\n return true;\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchStart: function(e) {\n e.preventDefault();\n if (this.mainTouchId === null) {\n this.mainTouchId = this.getPointerId(e);\n }\n this.__onMouseDown(e);\n this._resetTransformEventData();\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n addListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n addListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n // Unbind mousedown to prevent double triggers from touch devices\n removeListener(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDown: function (e) {\n this.__onMouseDown(e);\n this._resetTransformEventData();\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n removeListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n addListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n addListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchEnd: function(e) {\n if (e.touches.length > 0) {\n // if there are still touches stop here\n return;\n }\n this.__onMouseUp(e);\n this._resetTransformEventData();\n this.mainTouchId = null;\n var eventTypePrefix = this._getEventPrefix();\n removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n var _this = this;\n if (this._willAddMouseDown) {\n clearTimeout(this._willAddMouseDown);\n }\n this._willAddMouseDown = setTimeout(function() {\n // Wait 400ms before rebinding mousedown to prevent double triggers\n // from touch devices\n addListener(_this.upperCanvasEl, eventTypePrefix + 'down', _this._onMouseDown);\n _this._willAddMouseDown = 0;\n }, 400);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUp: function (e) {\n this.__onMouseUp(e);\n this._resetTransformEventData();\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n if (this._isMainEvent(e)) {\n removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n addListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMove: function (e) {\n !this.allowTouchScrolling && e.preventDefault && e.preventDefault();\n this.__onMouseMove(e);\n },\n\n /**\n * @private\n */\n _onResize: function () {\n this.calcOffset();\n },\n\n /**\n * Decides whether the canvas should be redrawn in mouseup and mousedown events.\n * @private\n * @param {Object} target\n */\n _shouldRender: function(target) {\n var activeObject = this._activeObject;\n\n if (\n !!activeObject !== !!target ||\n (activeObject && target && (activeObject !== target))\n ) {\n // this covers: switch of target, from target to no target, selection of target\n // multiSelection with key and mouse\n return true;\n }\n else if (activeObject && activeObject.isEditing) {\n // if we mouse up/down over a editing textbox a cursor change,\n // there is no need to re render\n return false;\n }\n return false;\n },\n\n /**\n * Method that defines the actions when mouse is released on canvas.\n * The method resets the currentTransform parameters, store the image corner\n * position in the image object and render the canvas on top.\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseUp: function (e) {\n var target, transform = this._currentTransform,\n groupSelector = this._groupSelector, shouldRender = false,\n isClick = (!groupSelector || (groupSelector.left === 0 && groupSelector.top === 0));\n this._cacheTransformEventData(e);\n target = this._target;\n this._handleEvent(e, 'up:before');\n // if right/middle click just fire events and return\n // target undefined will make the _handleEvent search the target\n if (checkClick(e, RIGHT_CLICK)) {\n if (this.fireRightClick) {\n this._handleEvent(e, 'up', RIGHT_CLICK, isClick);\n }\n return;\n }\n\n if (checkClick(e, MIDDLE_CLICK)) {\n if (this.fireMiddleClick) {\n this._handleEvent(e, 'up', MIDDLE_CLICK, isClick);\n }\n this._resetTransformEventData();\n return;\n }\n\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this._onMouseUpInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n if (transform) {\n this._finalizeCurrentTransform(e);\n shouldRender = transform.actionPerformed;\n }\n\n if (!isClick) {\n this._maybeGroupObjects(e);\n shouldRender || (shouldRender = this._shouldRender(target));\n }\n if (target) {\n target.isMoving = false;\n }\n this._setCursorFromEvent(e, target);\n this._handleEvent(e, 'up', LEFT_CLICK, isClick);\n this._groupSelector = null;\n this._currentTransform = null;\n // reset the target information about which corner is selected\n target && (target.__corner = 0);\n if (shouldRender) {\n this.requestRenderAll();\n }\n else if (!isClick) {\n this.renderTop();\n }\n },\n\n /**\n * @private\n * Handle event firing for target and subtargets\n * @param {Event} e event from mouse\n * @param {String} eventType event to fire (up, down or move)\n * @return {Fabric.Object} target return the the target found, for internal reasons.\n */\n _simpleEventHandler: function(eventType, e) {\n var target = this.findTarget(e),\n targets = this.targets,\n options = {\n e: e,\n target: target,\n subTargets: targets,\n };\n this.fire(eventType, options);\n target && target.fire(eventType, options);\n if (!targets) {\n return target;\n }\n for (var i = 0; i < targets.length; i++) {\n targets[i].fire(eventType, options);\n }\n return target;\n },\n\n /**\n * @private\n * Handle event firing for target and subtargets\n * @param {Event} e event from mouse\n * @param {String} eventType event to fire (up, down or move)\n * @param {fabric.Object} targetObj receiving event\n * @param {Number} [button] button used in the event 1 = left, 2 = middle, 3 = right\n * @param {Boolean} isClick for left button only, indicates that the mouse up happened without move.\n */\n _handleEvent: function(e, eventType, button, isClick) {\n var target = this._target,\n targets = this.targets || [],\n options = {\n e: e,\n target: target,\n subTargets: targets,\n button: button || LEFT_CLICK,\n isClick: isClick || false,\n pointer: this._pointer,\n absolutePointer: this._absolutePointer,\n transform: this._currentTransform\n };\n this.fire('mouse:' + eventType, options);\n target && target.fire('mouse' + eventType, options);\n for (var i = 0; i < targets.length; i++) {\n targets[i].fire('mouse' + eventType, options);\n }\n },\n\n /**\n * @private\n * @param {Event} e send the mouse event that generate the finalize down, so it can be used in the event\n */\n _finalizeCurrentTransform: function(e) {\n\n var transform = this._currentTransform,\n target = transform.target,\n eventName,\n options = {\n e: e,\n target: target,\n transform: transform,\n };\n\n if (target._scaling) {\n target._scaling = false;\n }\n\n target.setCoords();\n\n if (transform.actionPerformed || (this.stateful && target.hasStateChanged())) {\n if (transform.actionPerformed) {\n eventName = this._addEventOptions(options, transform);\n this._fire(eventName, options);\n }\n this._fire('modified', options);\n }\n },\n\n /**\n * Mutate option object in order to add by property and give back the event name.\n * @private\n * @param {Object} options to mutate\n * @param {Object} transform to inspect action from\n */\n _addEventOptions: function(options, transform) {\n // we can probably add more details at low cost\n // scale change, rotation changes, translation changes\n var eventName, by;\n switch (transform.action) {\n case 'scaleX':\n eventName = 'scaled';\n by = 'x';\n break;\n case 'scaleY':\n eventName = 'scaled';\n by = 'y';\n break;\n case 'skewX':\n eventName = 'skewed';\n by = 'x';\n break;\n case 'skewY':\n eventName = 'skewed';\n by = 'y';\n break;\n case 'scale':\n eventName = 'scaled';\n by = 'equally';\n break;\n case 'rotate':\n eventName = 'rotated';\n break;\n case 'drag':\n eventName = 'moved';\n break;\n }\n options.by = by;\n return eventName;\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDownInDrawingMode: function(e) {\n this._isCurrentlyDrawing = true;\n if (this.getActiveObject()) {\n this.discardActiveObject(e).requestRenderAll();\n }\n if (this.clipTo) {\n fabric.util.clipContext(this, this.contextTop);\n }\n var pointer = this.getPointer(e);\n this.freeDrawingBrush.onMouseDown(pointer, { e: e, pointer: pointer });\n this._handleEvent(e, 'down');\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMoveInDrawingMode: function(e) {\n if (this._isCurrentlyDrawing) {\n var pointer = this.getPointer(e);\n this.freeDrawingBrush.onMouseMove(pointer, { e: e, pointer: pointer });\n }\n this.setCursor(this.freeDrawingCursor);\n this._handleEvent(e, 'move');\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUpInDrawingMode: function(e) {\n if (this.clipTo) {\n this.contextTop.restore();\n }\n var pointer = this.getPointer(e);\n this._isCurrentlyDrawing = this.freeDrawingBrush.onMouseUp({ e: e, pointer: pointer });\n this._handleEvent(e, 'up');\n },\n\n /**\n * Method that defines the actions when mouse is clicked on canvas.\n * The method inits the currentTransform parameters and renders all the\n * canvas so the current image can be placed on the top canvas and the rest\n * in on the container one.\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n __onMouseDown: function (e) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'down:before');\n var target = this._target;\n // if right click just fire events\n if (checkClick(e, RIGHT_CLICK)) {\n if (this.fireRightClick) {\n this._handleEvent(e, 'down', RIGHT_CLICK);\n }\n return;\n }\n\n if (checkClick(e, MIDDLE_CLICK)) {\n if (this.fireMiddleClick) {\n this._handleEvent(e, 'down', MIDDLE_CLICK);\n }\n return;\n }\n\n if (this.isDrawingMode) {\n this._onMouseDownInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n // ignore if some object is being transformed at this moment\n if (this._currentTransform) {\n return;\n }\n\n var pointer = this._pointer;\n // save pointer for check in __onMouseUp event\n this._previousPointer = pointer;\n var shouldRender = this._shouldRender(target),\n shouldGroup = this._shouldGroup(e, target);\n if (this._shouldClearSelection(e, target)) {\n this.discardActiveObject(e);\n }\n else if (shouldGroup) {\n this._handleGrouping(e, target);\n target = this._activeObject;\n }\n\n if (this.selection && (!target ||\n (!target.selectable && !target.isEditing && target !== this._activeObject))) {\n this._groupSelector = {\n ex: pointer.x,\n ey: pointer.y,\n top: 0,\n left: 0\n };\n }\n\n if (target) {\n var alreadySelected = target === this._activeObject;\n if (target.selectable) {\n this.setActiveObject(target, e);\n }\n if (target === this._activeObject && (target.__corner || !shouldGroup)) {\n this._setupCurrentTransform(e, target, alreadySelected);\n }\n }\n this._handleEvent(e, 'down');\n // we must renderAll so that we update the visuals\n (shouldRender || shouldGroup) && this.requestRenderAll();\n },\n\n /**\n * reset cache form common information needed during event processing\n * @private\n */\n _resetTransformEventData: function() {\n this._target = null;\n this._pointer = null;\n this._absolutePointer = null;\n },\n\n /**\n * Cache common information needed during event processing\n * @private\n * @param {Event} e Event object fired on event\n */\n _cacheTransformEventData: function(e) {\n // reset in order to avoid stale caching\n this._resetTransformEventData();\n this._pointer = this.getPointer(e, true);\n this._absolutePointer = this.restorePointerVpt(this._pointer);\n this._target = this._currentTransform ? this._currentTransform.target : this.findTarget(e) || null;\n },\n\n /**\n * @private\n */\n _beforeTransform: function(e) {\n var t = this._currentTransform;\n this.stateful && t.target.saveState();\n this.fire('before:transform', {\n e: e,\n transform: t,\n });\n // determine if it's a drag or rotate case\n if (t.corner) {\n this.onBeforeScaleRotate(t.target);\n }\n },\n\n /**\n * Method that defines the actions when mouse is hovering the canvas.\n * The currentTransform parameter will define whether the user is rotating/scaling/translating\n * an image or neither of them (only hovering). A group selection is also possible and would cancel\n * all any other type of action.\n * In case of an image transformation only the top canvas will be rendered.\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n __onMouseMove: function (e) {\n this._handleEvent(e, 'move:before');\n this._cacheTransformEventData(e);\n var target, pointer;\n\n if (this.isDrawingMode) {\n this._onMouseMoveInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n var groupSelector = this._groupSelector;\n\n // We initially clicked in an empty area, so we draw a box for multiple selection\n if (groupSelector) {\n pointer = this._pointer;\n\n groupSelector.left = pointer.x - groupSelector.ex;\n groupSelector.top = pointer.y - groupSelector.ey;\n\n this.renderTop();\n }\n else if (!this._currentTransform) {\n target = this.findTarget(e) || null;\n this._setCursorFromEvent(e, target);\n this._fireOverOutEvents(target, e);\n }\n else {\n this._transformObject(e);\n }\n this._handleEvent(e, 'move');\n this._resetTransformEventData();\n },\n\n /**\n * Manage the mouseout, mouseover events for the fabric object on the canvas\n * @param {Fabric.Object} target the target where the target from the mousemove event\n * @param {Event} e Event object fired on mousemove\n * @private\n */\n _fireOverOutEvents: function(target, e) {\n var _hoveredTarget = this._hoveredTarget,\n _hoveredTargets = this._hoveredTargets, targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents(target, e, {\n oldTarget: _hoveredTarget,\n evtOut: 'mouseout',\n canvasEvtOut: 'mouse:out',\n evtIn: 'mouseover',\n canvasEvtIn: 'mouse:over',\n });\n for (var i = 0; i < length; i++){\n this.fireSyntheticInOutEvents(targets[i], e, {\n oldTarget: _hoveredTargets[i],\n evtOut: 'mouseout',\n evtIn: 'mouseover',\n });\n }\n this._hoveredTarget = target;\n this._hoveredTargets = this.targets.concat();\n },\n\n /**\n * Manage the dragEnter, dragLeave events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the onDrag event\n * @param {Event} e Event object fired on ondrag\n * @private\n */\n _fireEnterLeaveEvents: function(target, e) {\n var _draggedoverTarget = this._draggedoverTarget,\n _hoveredTargets = this._hoveredTargets, targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents(target, e, {\n oldTarget: _draggedoverTarget,\n evtOut: 'dragleave',\n evtIn: 'dragenter',\n });\n for (var i = 0; i < length; i++) {\n this.fireSyntheticInOutEvents(targets[i], e, {\n oldTarget: _hoveredTargets[i],\n evtOut: 'dragleave',\n evtIn: 'dragenter',\n });\n }\n this._draggedoverTarget = target;\n },\n\n /**\n * Manage the synthetic in/out events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the supported events\n * @param {Event} e Event object fired\n * @param {Object} config configuration for the function to work\n * @param {String} config.targetName property on the canvas where the old target is stored\n * @param {String} [config.canvasEvtOut] name of the event to fire at canvas level for out\n * @param {String} config.evtOut name of the event to fire for out\n * @param {String} [config.canvasEvtIn] name of the event to fire at canvas level for in\n * @param {String} config.evtIn name of the event to fire for in\n * @private\n */\n fireSyntheticInOutEvents: function(target, e, config) {\n var inOpt, outOpt, oldTarget = config.oldTarget, outFires, inFires,\n targetChanged = oldTarget !== target, canvasEvtIn = config.canvasEvtIn, canvasEvtOut = config.canvasEvtOut;\n if (targetChanged) {\n inOpt = { e: e, target: target, previousTarget: oldTarget };\n outOpt = { e: e, target: oldTarget, nextTarget: target };\n }\n inFires = target && targetChanged;\n outFires = oldTarget && targetChanged;\n if (outFires) {\n canvasEvtOut && this.fire(canvasEvtOut, outOpt);\n oldTarget.fire(config.evtOut, outOpt);\n }\n if (inFires) {\n canvasEvtIn && this.fire(canvasEvtIn, inOpt);\n target.fire(config.evtIn, inOpt);\n }\n },\n\n /**\n * Method that defines actions when an Event Mouse Wheel\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseWheel: function(e) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'wheel');\n this._resetTransformEventData();\n },\n\n /**\n * @private\n * @param {Event} e Event fired on mousemove\n */\n _transformObject: function(e) {\n var pointer = this.getPointer(e),\n transform = this._currentTransform;\n\n transform.reset = false;\n transform.target.isMoving = true;\n transform.shiftKey = e.shiftKey;\n transform.altKey = e[this.centeredKey];\n\n this._beforeScaleTransform(e, transform);\n this._performTransformAction(e, transform, pointer);\n\n transform.actionPerformed && this.requestRenderAll();\n },\n\n /**\n * @private\n */\n _performTransformAction: function(e, transform, pointer) {\n var x = pointer.x,\n y = pointer.y,\n action = transform.action,\n actionPerformed = false,\n options = {\n target: transform.target,\n e: e,\n transform: transform,\n pointer: pointer\n };\n\n if (action === 'rotate') {\n (actionPerformed = this._rotateObject(x, y)) && this._fire('rotating', options);\n }\n else if (action === 'scale') {\n (actionPerformed = this._onScale(e, transform, x, y)) && this._fire('scaling', options);\n }\n else if (action === 'scaleX') {\n (actionPerformed = this._scaleObject(x, y, 'x')) && this._fire('scaling', options);\n }\n else if (action === 'scaleY') {\n (actionPerformed = this._scaleObject(x, y, 'y')) && this._fire('scaling', options);\n }\n else if (action === 'skewX') {\n (actionPerformed = this._skewObject(x, y, 'x')) && this._fire('skewing', options);\n }\n else if (action === 'skewY') {\n (actionPerformed = this._skewObject(x, y, 'y')) && this._fire('skewing', options);\n }\n else {\n actionPerformed = this._translateObject(x, y);\n if (actionPerformed) {\n this._fire('moving', options);\n this.setCursor(options.target.moveCursor || this.moveCursor);\n }\n }\n transform.actionPerformed = transform.actionPerformed || actionPerformed;\n },\n\n /**\n * @private\n */\n _fire: function(eventName, options) {\n this.fire('object:' + eventName, options);\n options.target.fire(eventName, options);\n },\n\n /**\n * @private\n */\n _beforeScaleTransform: function(e, transform) {\n if (transform.action === 'scale' || transform.action === 'scaleX' || transform.action === 'scaleY') {\n var centerTransform = this._shouldCenterTransform(transform.target);\n\n // Switch from a normal resize to center-based\n if ((centerTransform && (transform.originX !== 'center' || transform.originY !== 'center')) ||\n // Switch from center-based resize to normal one\n (!centerTransform && transform.originX === 'center' && transform.originY === 'center')\n ) {\n this._resetCurrentTransform();\n transform.reset = true;\n }\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {Object} transform current transform\n * @param {Number} x mouse position x from origin\n * @param {Number} y mouse position y from origin\n * @return {Boolean} true if the scaling occurred\n */\n _onScale: function(e, transform, x, y) {\n if (this._isUniscalePossible(e, transform.target)) {\n transform.currentAction = 'scale';\n return this._scaleObject(x, y);\n }\n else {\n // Switch from a normal resize to proportional\n if (!transform.reset && transform.currentAction === 'scale') {\n this._resetCurrentTransform();\n }\n\n transform.currentAction = 'scaleEqually';\n return this._scaleObject(x, y, 'equally');\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target current target\n * @return {Boolean} true if unproportional scaling is possible\n */\n _isUniscalePossible: function(e, target) {\n return (e[this.uniScaleKey] || this.uniScaleTransform) && !target.get('lockUniScaling');\n },\n\n /**\n * Sets the cursor depending on where the canvas is being hovered.\n * Note: very buggy in Opera\n * @param {Event} e Event object\n * @param {Object} target Object that the mouse is hovering, if so.\n */\n _setCursorFromEvent: function (e, target) {\n if (!target) {\n this.setCursor(this.defaultCursor);\n return false;\n }\n var hoverCursor = target.hoverCursor || this.hoverCursor,\n activeSelection = this._activeObject && this._activeObject.type === 'activeSelection' ?\n this._activeObject : null,\n // only show proper corner when group selection is not active\n corner = (!activeSelection || !activeSelection.contains(target))\n && target._findTargetCorner(this.getPointer(e, true));\n\n if (!corner) {\n if (target.subTargetCheck){\n // hoverCursor should come from top-most subTarget,\n // so we walk the array backwards\n this.targets.concat().reverse().map(function(_target){\n hoverCursor = _target.hoverCursor || hoverCursor;\n });\n }\n this.setCursor(hoverCursor);\n }\n else {\n this.setCursor(this.getCornerCursor(corner, target, e));\n }\n },\n\n /**\n * @private\n */\n getCornerCursor: function(corner, target, e) {\n if (this.actionIsDisabled(corner, target, e)) {\n return this.notAllowedCursor;\n }\n else if (corner in cursorOffset) {\n return this._getRotatedCornerCursor(corner, target, e);\n }\n else if (corner === 'mtr' && target.hasRotatingPoint) {\n return this.rotationCursor;\n }\n else {\n return this.defaultCursor;\n }\n },\n\n actionIsDisabled: function(corner, target, e) {\n if (corner === 'mt' || corner === 'mb') {\n return e[this.altActionKey] ? target.lockSkewingX : target.lockScalingY;\n }\n else if (corner === 'ml' || corner === 'mr') {\n return e[this.altActionKey] ? target.lockSkewingY : target.lockScalingX;\n }\n else if (corner === 'mtr') {\n return target.lockRotation;\n }\n else {\n return this._isUniscalePossible(e, target) ?\n target.lockScalingX && target.lockScalingY : target.lockScalingX || target.lockScalingY;\n }\n },\n\n /**\n * @private\n */\n _getRotatedCornerCursor: function(corner, target, e) {\n var n = Math.round((target.angle % 360) / 45);\n\n if (n < 0) {\n n += 8; // full circle ahead\n }\n n += cursorOffset[corner];\n if (e[this.altActionKey] && cursorOffset[corner] % 2 === 0) {\n //if we are holding shift and we are on a mx corner...\n n += 2;\n }\n // normalize n to be from 0 to 7\n n %= 8;\n\n return this.cursorMap[n];\n }\n });\n})();\n\n\n(function() {\n\n var min = Math.min,\n max = Math.max;\n\n fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ {\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n * @return {Boolean}\n */\n _shouldGroup: function(e, target) {\n var activeObject = this._activeObject;\n return activeObject && this._isSelectionKeyPressed(e) && target && target.selectable && this.selection &&\n (activeObject !== target || activeObject.type === 'activeSelection') && !target.onSelect({ e: e });\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n */\n _handleGrouping: function (e, target) {\n var activeObject = this._activeObject;\n // avoid multi select when shift click on a corner\n if (activeObject.__corner) {\n return;\n }\n if (target === activeObject) {\n // if it's a group, find target again, using activeGroup objects\n target = this.findTarget(e, true);\n // if even object is not found or we are on activeObjectCorner, bail out\n if (!target || !target.selectable) {\n return;\n }\n }\n if (activeObject && activeObject.type === 'activeSelection') {\n this._updateActiveSelection(target, e);\n }\n else {\n this._createActiveSelection(target, e);\n }\n },\n\n /**\n * @private\n */\n _updateActiveSelection: function(target, e) {\n var activeSelection = this._activeObject,\n currentActiveObjects = activeSelection._objects.slice(0);\n if (activeSelection.contains(target)) {\n activeSelection.removeWithUpdate(target);\n this._hoveredTarget = target;\n this._hoveredTargets = this.targets.concat();\n if (activeSelection.size() === 1) {\n // activate last remaining object\n this._setActiveObject(activeSelection.item(0), e);\n }\n }\n else {\n activeSelection.addWithUpdate(target);\n this._hoveredTarget = activeSelection;\n this._hoveredTargets = this.targets.concat();\n }\n this._fireSelectionEvents(currentActiveObjects, e);\n },\n\n /**\n * @private\n */\n _createActiveSelection: function(target, e) {\n var currentActives = this.getActiveObjects(), group = this._createGroup(target);\n this._hoveredTarget = group;\n // ISSUE 4115: should we consider subTargets here?\n // this._hoveredTargets = [];\n // this._hoveredTargets = this.targets.concat();\n this._setActiveObject(group, e);\n this._fireSelectionEvents(currentActives, e);\n },\n\n /**\n * @private\n * @param {Object} target\n */\n _createGroup: function(target) {\n var objects = this._objects,\n isActiveLower = objects.indexOf(this._activeObject) < objects.indexOf(target),\n groupObjects = isActiveLower\n ? [this._activeObject, target]\n : [target, this._activeObject];\n this._activeObject.isEditing && this._activeObject.exitEditing();\n return new fabric.ActiveSelection(groupObjects, {\n canvas: this\n });\n },\n\n /**\n * @private\n * @param {Event} e mouse event\n */\n _groupSelectedObjects: function (e) {\n\n var group = this._collectObjects(e),\n aGroup;\n\n // do not create group for 1 element only\n if (group.length === 1) {\n this.setActiveObject(group[0], e);\n }\n else if (group.length > 1) {\n aGroup = new fabric.ActiveSelection(group.reverse(), {\n canvas: this\n });\n this.setActiveObject(aGroup, e);\n }\n },\n\n /**\n * @private\n */\n _collectObjects: function(e) {\n var group = [],\n currentObject,\n x1 = this._groupSelector.ex,\n y1 = this._groupSelector.ey,\n x2 = x1 + this._groupSelector.left,\n y2 = y1 + this._groupSelector.top,\n selectionX1Y1 = new fabric.Point(min(x1, x2), min(y1, y2)),\n selectionX2Y2 = new fabric.Point(max(x1, x2), max(y1, y2)),\n allowIntersect = !this.selectionFullyContained,\n isClick = x1 === x2 && y1 === y2;\n // we iterate reverse order to collect top first in case of click.\n for (var i = this._objects.length; i--; ) {\n currentObject = this._objects[i];\n\n if (!currentObject || !currentObject.selectable || !currentObject.visible) {\n continue;\n }\n\n if ((allowIntersect && currentObject.intersectsWithRect(selectionX1Y1, selectionX2Y2)) ||\n currentObject.isContainedWithinRect(selectionX1Y1, selectionX2Y2) ||\n (allowIntersect && currentObject.containsPoint(selectionX1Y1)) ||\n (allowIntersect && currentObject.containsPoint(selectionX2Y2))\n ) {\n group.push(currentObject);\n // only add one object if it's a click\n if (isClick) {\n break;\n }\n }\n }\n\n if (group.length > 1) {\n group = group.filter(function(object) {\n return !object.onSelect({ e: e });\n });\n }\n\n return group;\n },\n\n /**\n * @private\n */\n _maybeGroupObjects: function(e) {\n if (this.selection && this._groupSelector) {\n this._groupSelectedObjects(e);\n }\n this.setCursor(this.defaultCursor);\n // clear selection and current transformation\n this._groupSelector = null;\n }\n });\n\n})();\n\n\n(function () {\n fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n\n /**\n * Exports canvas element to a dataurl image. Note that when multiplier is used, cropping is scaled appropriately\n * @param {Object} [options] Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by, to have consistent\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 2.0.0\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n * @see {@link http://jsfiddle.net/fabricjs/NfZVb/|jsFiddle demo}\n * @example Generate jpeg dataURL with lower quality\n * var dataURL = canvas.toDataURL({\n * format: 'jpeg',\n * quality: 0.8\n * });\n * @example Generate cropped png dataURL (clipping of canvas)\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * left: 100,\n * top: 100,\n * width: 200,\n * height: 200\n * });\n * @example Generate double scaled png dataURL\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * multiplier: 2\n * });\n */\n toDataURL: function (options) {\n options || (options = { });\n\n var format = options.format || 'png',\n quality = options.quality || 1,\n multiplier = (options.multiplier || 1) * (options.enableRetinaScaling ? this.getRetinaScaling() : 1),\n canvasEl = this.toCanvasElement(multiplier, options);\n return fabric.util.toDataURL(canvasEl, format, quality);\n },\n\n /**\n * Create a new HTMLCanvas element painted with the current canvas content.\n * No need to resize the actual one or repaint it.\n * Will transfer object ownership to a new canvas, paint it, and set everything back.\n * This is an intermediary step used to get to a dataUrl but also it is useful to\n * create quick image copies of a canvas without passing for the dataUrl string\n * @param {Number} [multiplier] a zoom factor.\n * @param {Object} [cropping] Cropping informations\n * @param {Number} [cropping.left] Cropping left offset.\n * @param {Number} [cropping.top] Cropping top offset.\n * @param {Number} [cropping.width] Cropping width.\n * @param {Number} [cropping.height] Cropping height.\n */\n toCanvasElement: function(multiplier, cropping) {\n multiplier = multiplier || 1;\n cropping = cropping || { };\n var scaledWidth = (cropping.width || this.width) * multiplier,\n scaledHeight = (cropping.height || this.height) * multiplier,\n zoom = this.getZoom(),\n originalWidth = this.width,\n originalHeight = this.height,\n newZoom = zoom * multiplier,\n vp = this.viewportTransform,\n translateX = (vp[4] - (cropping.left || 0)) * multiplier,\n translateY = (vp[5] - (cropping.top || 0)) * multiplier,\n originalInteractive = this.interactive,\n newVp = [newZoom, 0, 0, newZoom, translateX, translateY],\n originalRetina = this.enableRetinaScaling,\n canvasEl = fabric.util.createCanvasElement(),\n originalContextTop = this.contextTop;\n canvasEl.width = scaledWidth;\n canvasEl.height = scaledHeight;\n this.contextTop = null;\n this.enableRetinaScaling = false;\n this.interactive = false;\n this.viewportTransform = newVp;\n this.width = scaledWidth;\n this.height = scaledHeight;\n this.calcViewportBoundaries();\n this.renderCanvas(canvasEl.getContext('2d'), this._objects);\n this.viewportTransform = vp;\n this.width = originalWidth;\n this.height = originalHeight;\n this.calcViewportBoundaries();\n this.interactive = originalInteractive;\n this.enableRetinaScaling = originalRetina;\n this.contextTop = originalContextTop;\n return canvasEl;\n },\n });\n\n})();\n\n\nfabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n\n /**\n * Populates canvas with data from the specified dataless JSON.\n * JSON format must conform to the one of {@link fabric.Canvas#toDatalessJSON}\n * @deprecated since 1.2.2\n * @param {String|Object} json JSON string or object\n * @param {Function} callback Callback, invoked when json is parsed\n * and corresponding objects (e.g: {@link fabric.Image})\n * are initialized\n * @param {Function} [reviver] Method for further parsing of JSON elements, called after each fabric object created.\n * @return {fabric.Canvas} instance\n * @chainable\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#deserialization}\n */\n loadFromDatalessJSON: function (json, callback, reviver) {\n return this.loadFromJSON(json, callback, reviver);\n },\n\n /**\n * Populates canvas with data from the specified JSON.\n * JSON format must conform to the one of {@link fabric.Canvas#toJSON}\n * @param {String|Object} json JSON string or object\n * @param {Function} callback Callback, invoked when json is parsed\n * and corresponding objects (e.g: {@link fabric.Image})\n * are initialized\n * @param {Function} [reviver] Method for further parsing of JSON elements, called after each fabric object created.\n * @return {fabric.Canvas} instance\n * @chainable\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#deserialization}\n * @see {@link http://jsfiddle.net/fabricjs/fmgXt/|jsFiddle demo}\n * @example loadFromJSON\n * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas));\n * @example loadFromJSON with reviver\n * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas), function(o, object) {\n * // `o` = json object\n * // `object` = fabric.Object instance\n * // ... do some stuff ...\n * });\n */\n loadFromJSON: function (json, callback, reviver) {\n if (!json) {\n return;\n }\n\n // serialize if it wasn't already\n var serialized = (typeof json === 'string')\n ? JSON.parse(json)\n : fabric.util.object.clone(json);\n\n var _this = this,\n clipPath = serialized.clipPath,\n renderOnAddRemove = this.renderOnAddRemove;\n\n this.renderOnAddRemove = false;\n\n delete serialized.clipPath;\n\n this._enlivenObjects(serialized.objects, function (enlivenedObjects) {\n _this.clear();\n _this._setBgOverlay(serialized, function () {\n if (clipPath) {\n _this._enlivenObjects([clipPath], function (enlivenedCanvasClip) {\n _this.clipPath = enlivenedCanvasClip[0];\n _this.__setupCanvas.call(_this, serialized, enlivenedObjects, renderOnAddRemove, callback);\n });\n }\n else {\n _this.__setupCanvas.call(_this, serialized, enlivenedObjects, renderOnAddRemove, callback);\n }\n });\n }, reviver);\n return this;\n },\n\n /**\n * @private\n * @param {Object} serialized Object with background and overlay information\n * @param {Array} restored canvas objects\n * @param {Function} cached renderOnAddRemove callback\n * @param {Function} callback Invoked after all background and overlay images/patterns loaded\n */\n __setupCanvas: function(serialized, enlivenedObjects, renderOnAddRemove, callback) {\n var _this = this;\n enlivenedObjects.forEach(function(obj, index) {\n // we splice the array just in case some custom classes restored from JSON\n // will add more object to canvas at canvas init.\n _this.insertAt(obj, index);\n });\n this.renderOnAddRemove = renderOnAddRemove;\n // remove parts i cannot set as options\n delete serialized.objects;\n delete serialized.backgroundImage;\n delete serialized.overlayImage;\n delete serialized.background;\n delete serialized.overlay;\n // this._initOptions does too many things to just\n // call it. Normally loading an Object from JSON\n // create the Object instance. Here the Canvas is\n // already an instance and we are just loading things over it\n this._setOptions(serialized);\n this.renderAll();\n callback && callback();\n },\n\n /**\n * @private\n * @param {Object} serialized Object with background and overlay information\n * @param {Function} callback Invoked after all background and overlay images/patterns loaded\n */\n _setBgOverlay: function(serialized, callback) {\n var loaded = {\n backgroundColor: false,\n overlayColor: false,\n backgroundImage: false,\n overlayImage: false\n };\n\n if (!serialized.backgroundImage && !serialized.overlayImage && !serialized.background && !serialized.overlay) {\n callback && callback();\n return;\n }\n\n var cbIfLoaded = function () {\n if (loaded.backgroundImage && loaded.overlayImage && loaded.backgroundColor && loaded.overlayColor) {\n callback && callback();\n }\n };\n\n this.__setBgOverlay('backgroundImage', serialized.backgroundImage, loaded, cbIfLoaded);\n this.__setBgOverlay('overlayImage', serialized.overlayImage, loaded, cbIfLoaded);\n this.__setBgOverlay('backgroundColor', serialized.background, loaded, cbIfLoaded);\n this.__setBgOverlay('overlayColor', serialized.overlay, loaded, cbIfLoaded);\n },\n\n /**\n * @private\n * @param {String} property Property to set (backgroundImage, overlayImage, backgroundColor, overlayColor)\n * @param {(Object|String)} value Value to set\n * @param {Object} loaded Set loaded property to true if property is set\n * @param {Object} callback Callback function to invoke after property is set\n */\n __setBgOverlay: function(property, value, loaded, callback) {\n var _this = this;\n\n if (!value) {\n loaded[property] = true;\n callback && callback();\n return;\n }\n\n if (property === 'backgroundImage' || property === 'overlayImage') {\n fabric.util.enlivenObjects([value], function(enlivedObject){\n _this[property] = enlivedObject[0];\n loaded[property] = true;\n callback && callback();\n });\n }\n else {\n this['set' + fabric.util.string.capitalize(property, true)](value, function() {\n loaded[property] = true;\n callback && callback();\n });\n }\n },\n\n /**\n * @private\n * @param {Array} objects\n * @param {Function} callback\n * @param {Function} [reviver]\n */\n _enlivenObjects: function (objects, callback, reviver) {\n if (!objects || objects.length === 0) {\n callback && callback([]);\n return;\n }\n\n fabric.util.enlivenObjects(objects, function(enlivenedObjects) {\n callback && callback(enlivenedObjects);\n }, null, reviver);\n },\n\n /**\n * @private\n * @param {String} format\n * @param {Function} callback\n */\n _toDataURL: function (format, callback) {\n this.clone(function (clone) {\n callback(clone.toDataURL(format));\n });\n },\n\n /**\n * @private\n * @param {String} format\n * @param {Number} multiplier\n * @param {Function} callback\n */\n _toDataURLWithMultiplier: function (format, multiplier, callback) {\n this.clone(function (clone) {\n callback(clone.toDataURLWithMultiplier(format, multiplier));\n });\n },\n\n /**\n * Clones canvas instance\n * @param {Object} [callback] Receives cloned instance as a first argument\n * @param {Array} [properties] Array of properties to include in the cloned canvas and children\n */\n clone: function (callback, properties) {\n var data = JSON.stringify(this.toJSON(properties));\n this.cloneWithoutData(function(clone) {\n clone.loadFromJSON(data, function() {\n callback && callback(clone);\n });\n });\n },\n\n /**\n * Clones canvas instance without cloning existing data.\n * This essentially copies canvas dimensions, clipping properties, etc.\n * but leaves data empty (so that you can populate it with your own)\n * @param {Object} [callback] Receives cloned instance as a first argument\n */\n cloneWithoutData: function(callback) {\n var el = fabric.util.createCanvasElement();\n\n el.width = this.width;\n el.height = this.height;\n\n var clone = new fabric.Canvas(el);\n clone.clipTo = this.clipTo;\n if (this.backgroundImage) {\n clone.setBackgroundImage(this.backgroundImage.src, function() {\n clone.renderAll();\n callback && callback(clone);\n });\n clone.backgroundImageOpacity = this.backgroundImageOpacity;\n clone.backgroundImageStretch = this.backgroundImageStretch;\n }\n else {\n callback && callback(clone);\n }\n }\n});\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n clone = fabric.util.object.clone,\n toFixed = fabric.util.toFixed,\n capitalize = fabric.util.string.capitalize,\n degreesToRadians = fabric.util.degreesToRadians,\n supportsLineDash = fabric.StaticCanvas.supports('setLineDash'),\n objectCaching = !fabric.isLikelyNode,\n ALIASING_LIMIT = 2;\n\n if (fabric.Object) {\n return;\n }\n\n /**\n * Root object class from which all 2d shape classes inherit from\n * @class fabric.Object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#objects}\n * @see {@link fabric.Object#initialize} for constructor definition\n *\n * @fires added\n * @fires removed\n *\n * @fires selected\n * @fires deselected\n * @fires modified\n * @fires modified\n * @fires moved\n * @fires scaled\n * @fires rotated\n * @fires skewed\n *\n * @fires rotating\n * @fires scaling\n * @fires moving\n * @fires skewing\n *\n * @fires mousedown\n * @fires mouseup\n * @fires mouseover\n * @fires mouseout\n * @fires mousewheel\n * @fires mousedblclick\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop\n */\n fabric.Object = fabric.util.createClass(fabric.CommonMethods, /** @lends fabric.Object.prototype */ {\n\n /**\n * Type of an object (rect, circle, path, etc.).\n * Note that this property is meant to be read-only and not meant to be modified.\n * If you modify, certain parts of Fabric (such as JSON loading) won't work correctly.\n * @type String\n * @default\n */\n type: 'object',\n\n /**\n * Horizontal origin of transformation of an object (one of \"left\", \"right\", \"center\")\n * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n * @type String\n * @default\n */\n originX: 'left',\n\n /**\n * Vertical origin of transformation of an object (one of \"top\", \"bottom\", \"center\")\n * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n * @type String\n * @default\n */\n originY: 'top',\n\n /**\n * Top position of an object. Note that by default it's relative to object top. You can change this by setting originY={top/center/bottom}\n * @type Number\n * @default\n */\n top: 0,\n\n /**\n * Left position of an object. Note that by default it's relative to object left. You can change this by setting originX={left/center/right}\n * @type Number\n * @default\n */\n left: 0,\n\n /**\n * Object width\n * @type Number\n * @default\n */\n width: 0,\n\n /**\n * Object height\n * @type Number\n * @default\n */\n height: 0,\n\n /**\n * Object scale factor (horizontal)\n * @type Number\n * @default\n */\n scaleX: 1,\n\n /**\n * Object scale factor (vertical)\n * @type Number\n * @default\n */\n scaleY: 1,\n\n /**\n * When true, an object is rendered as flipped horizontally\n * @type Boolean\n * @default\n */\n flipX: false,\n\n /**\n * When true, an object is rendered as flipped vertically\n * @type Boolean\n * @default\n */\n flipY: false,\n\n /**\n * Opacity of an object\n * @type Number\n * @default\n */\n opacity: 1,\n\n /**\n * Angle of rotation of an object (in degrees)\n * @type Number\n * @default\n */\n angle: 0,\n\n /**\n * Angle of skew on x axes of an object (in degrees)\n * @type Number\n * @default\n */\n skewX: 0,\n\n /**\n * Angle of skew on y axes of an object (in degrees)\n * @type Number\n * @default\n */\n skewY: 0,\n\n /**\n * Size of object's controlling corners (in pixels)\n * @type Number\n * @default\n */\n cornerSize: 13,\n\n /**\n * When true, object's controlling corners are rendered as transparent inside (i.e. stroke instead of fill)\n * @type Boolean\n * @default\n */\n transparentCorners: true,\n\n /**\n * Default cursor value used when hovering over this object on canvas\n * @type String\n * @default\n */\n hoverCursor: null,\n\n /**\n * Default cursor value used when moving this object on canvas\n * @type String\n * @default\n */\n moveCursor: null,\n\n /**\n * Padding between object and its controlling borders (in pixels)\n * @type Number\n * @default\n */\n padding: 0,\n\n /**\n * Color of controlling borders of an object (when it's active)\n * @type String\n * @default\n */\n borderColor: 'rgba(102,153,255,0.75)',\n\n /**\n * Array specifying dash pattern of an object's borders (hasBorder must be true)\n * @since 1.6.2\n * @type Array\n */\n borderDashArray: null,\n\n /**\n * Color of controlling corners of an object (when it's active)\n * @type String\n * @default\n */\n cornerColor: 'rgba(102,153,255,0.5)',\n\n /**\n * Color of controlling corners of an object (when it's active and transparentCorners false)\n * @since 1.6.2\n * @type String\n * @default\n */\n cornerStrokeColor: null,\n\n /**\n * Specify style of control, 'rect' or 'circle'\n * @since 1.6.2\n * @type String\n */\n cornerStyle: 'rect',\n\n /**\n * Array specifying dash pattern of an object's control (hasBorder must be true)\n * @since 1.6.2\n * @type Array\n */\n cornerDashArray: null,\n\n /**\n * When true, this object will use center point as the origin of transformation\n * when being scaled via the controls.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredScaling: false,\n\n /**\n * When true, this object will use center point as the origin of transformation\n * when being rotated via the controls.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredRotation: true,\n\n /**\n * Color of object's fill\n * takes css colors https://www.w3.org/TR/css-color-3/\n * @type String\n * @default\n */\n fill: 'rgb(0,0,0)',\n\n /**\n * Fill rule used to fill an object\n * accepted values are nonzero, evenodd\n * Backwards incompatibility note: This property was used for setting globalCompositeOperation until v1.4.12 (use `fabric.Object#globalCompositeOperation` instead)\n * @type String\n * @default\n */\n fillRule: 'nonzero',\n\n /**\n * Composite rule used for canvas globalCompositeOperation\n * @type String\n * @default\n */\n globalCompositeOperation: 'source-over',\n\n /**\n * Background color of an object.\n * takes css colors https://www.w3.org/TR/css-color-3/\n * @type String\n * @default\n */\n backgroundColor: '',\n\n /**\n * Selection Background color of an object. colored layer behind the object when it is active.\n * does not mix good with globalCompositeOperation methods.\n * @type String\n * @default\n */\n selectionBackgroundColor: '',\n\n /**\n * When defined, an object is rendered via stroke and this property specifies its color\n * takes css colors https://www.w3.org/TR/css-color-3/\n * @type String\n * @default\n */\n stroke: null,\n\n /**\n * Width of a stroke used to render this object\n * @type Number\n * @default\n */\n strokeWidth: 1,\n\n /**\n * Array specifying dash pattern of an object's stroke (stroke must be defined)\n * @type Array\n */\n strokeDashArray: null,\n\n /**\n * Line offset of an object's stroke\n * @type Number\n * @default\n */\n strokeDashOffset: 0,\n\n /**\n * Line endings style of an object's stroke (one of \"butt\", \"round\", \"square\")\n * @type String\n * @default\n */\n strokeLineCap: 'butt',\n\n /**\n * Corner style of an object's stroke (one of \"bevil\", \"round\", \"miter\")\n * @type String\n * @default\n */\n strokeLineJoin: 'miter',\n\n /**\n * Maximum miter length (used for strokeLineJoin = \"miter\") of an object's stroke\n * @type Number\n * @default\n */\n strokeMiterLimit: 4,\n\n /**\n * Shadow object representing shadow of this shape\n * @type fabric.Shadow\n * @default\n */\n shadow: null,\n\n /**\n * Opacity of object's controlling borders when object is active and moving\n * @type Number\n * @default\n */\n borderOpacityWhenMoving: 0.4,\n\n /**\n * Scale factor of object's controlling borders\n * bigger number will make a thicker border\n * border is 1, so this is basically a border tickness\n * since there is no way to change the border itself.\n * @type Number\n * @default\n */\n borderScaleFactor: 1,\n\n /**\n * Transform matrix (similar to SVG's transform matrix)\n * This property has been depreacted. Since caching and and qrDecompose this\n * property can be handled with the standard top,left,scaleX,scaleY,angle and skewX.\n * A documentation example on how to parse and merge a transformMatrix will be provided before\n * completely removing it in fabric 4.0\n * If you are starting a project now, DO NOT use it.\n * @deprecated since 3.2.0\n * @type Array\n */\n transformMatrix: null,\n\n /**\n * Minimum allowed scale value of an object\n * @type Number\n * @default\n */\n minScaleLimit: 0,\n\n /**\n * When set to `false`, an object can not be selected for modification (using either point-click-based or group-based selection).\n * But events still fire on it.\n * @type Boolean\n * @default\n */\n selectable: true,\n\n /**\n * When set to `false`, an object can not be a target of events. All events propagate through it. Introduced in v1.3.4\n * @type Boolean\n * @default\n */\n evented: true,\n\n /**\n * When set to `false`, an object is not rendered on canvas\n * @type Boolean\n * @default\n */\n visible: true,\n\n /**\n * When set to `false`, object's controls are not displayed and can not be used to manipulate object\n * @type Boolean\n * @default\n */\n hasControls: true,\n\n /**\n * When set to `false`, object's controlling borders are not rendered\n * @type Boolean\n * @default\n */\n hasBorders: true,\n\n /**\n * When set to `false`, object's controlling rotating point will not be visible or selectable\n * @type Boolean\n * @default\n */\n hasRotatingPoint: true,\n\n /**\n * Offset for object's controlling rotating point (when enabled via `hasRotatingPoint`)\n * @type Number\n * @default\n */\n rotatingPointOffset: 40,\n\n /**\n * When set to `true`, objects are \"found\" on canvas on per-pixel basis rather than according to bounding box\n * @type Boolean\n * @default\n */\n perPixelTargetFind: false,\n\n /**\n * When `false`, default object's values are not included in its serialization\n * @type Boolean\n * @default\n */\n includeDefaultValues: true,\n\n /**\n * Function that determines clipping of an object (context is passed as a first argument).\n * If you are using code minification, ctx argument can be minified/manglied you should use\n * as a workaround `var ctx = arguments[0];` in the function;\n * Note that context origin is at the object's center point (not left/top corner)\n * @deprecated since 2.0.0\n * @type Function\n */\n clipTo: null,\n\n /**\n * When `true`, object horizontal movement is locked\n * @type Boolean\n * @default\n */\n lockMovementX: false,\n\n /**\n * When `true`, object vertical movement is locked\n * @type Boolean\n * @default\n */\n lockMovementY: false,\n\n /**\n * When `true`, object rotation is locked\n * @type Boolean\n * @default\n */\n lockRotation: false,\n\n /**\n * When `true`, object horizontal scaling is locked\n * @type Boolean\n * @default\n */\n lockScalingX: false,\n\n /**\n * When `true`, object vertical scaling is locked\n * @type Boolean\n * @default\n */\n lockScalingY: false,\n\n /**\n * When `true`, object non-uniform scaling is locked\n * @type Boolean\n * @default\n */\n lockUniScaling: false,\n\n /**\n * When `true`, object horizontal skewing is locked\n * @type Boolean\n * @default\n */\n lockSkewingX: false,\n\n /**\n * When `true`, object vertical skewing is locked\n * @type Boolean\n * @default\n */\n lockSkewingY: false,\n\n /**\n * When `true`, object cannot be flipped by scaling into negative values\n * @type Boolean\n * @default\n */\n lockScalingFlip: false,\n\n /**\n * When `true`, object is not exported in OBJECT/JSON\n * @since 1.6.3\n * @type Boolean\n * @default\n */\n excludeFromExport: false,\n\n /**\n * When `true`, object is cached on an additional canvas.\n * When `false`, object is not cached unless necessary ( clipPath )\n * default to true\n * @since 1.7.0\n * @type Boolean\n * @default true\n */\n objectCaching: objectCaching,\n\n /**\n * When `true`, object properties are checked for cache invalidation. In some particular\n * situation you may want this to be disabled ( spray brush, very big, groups)\n * or if your application does not allow you to modify properties for groups child you want\n * to disable it for groups.\n * default to false\n * since 1.7.0\n * @type Boolean\n * @default false\n */\n statefullCache: false,\n\n /**\n * When `true`, cache does not get updated during scaling. The picture will get blocky if scaled\n * too much and will be redrawn with correct details at the end of scaling.\n * this setting is performance and application dependant.\n * default to true\n * since 1.7.0\n * @type Boolean\n * @default true\n */\n noScaleCache: true,\n\n /**\n * When `false`, the stoke width will scale with the object.\n * When `true`, the stroke will always match the exact pixel size entered for stroke width.\n * default to false\n * @since 2.6.0\n * @type Boolean\n * @default false\n * @type Boolean\n * @default false\n */\n strokeUniform: false,\n\n /**\n * When set to `true`, object's cache will be rerendered next render call.\n * since 1.7.0\n * @type Boolean\n * @default true\n */\n dirty: true,\n\n /**\n * keeps the value of the last hovered corner during mouse move.\n * 0 is no corner, or 'mt', 'ml', 'mtr' etc..\n * It should be private, but there is no harm in using it as\n * a read-only property.\n * @type number|string|any\n * @default 0\n */\n __corner: 0,\n\n /**\n * Determines if the fill or the stroke is drawn first (one of \"fill\" or \"stroke\")\n * @type String\n * @default\n */\n paintFirst: 'fill',\n\n /**\n * List of properties to consider when checking if state\n * of an object is changed (fabric.Object#hasStateChanged)\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: (\n 'top left width height scaleX scaleY flipX flipY originX originY transformMatrix ' +\n 'stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit ' +\n 'angle opacity fill globalCompositeOperation shadow clipTo visible backgroundColor ' +\n 'skewX skewY fillRule paintFirst clipPath strokeUniform'\n ).split(' '),\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * Those properties are checked by statefullCache ON ( or lazy mode if we want ) or from single\n * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\n * and refreshed at the next render\n * @type Array\n */\n cacheProperties: (\n 'fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform' +\n ' strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath'\n ).split(' '),\n\n /**\n * a fabricObject that, without stroke define a clipping area with their shape. filled in black\n * the clipPath object gets used when the object has rendered, and the context is placed in the center\n * of the object cacheCanvas.\n * If you want 0,0 of a clipPath to align with an object center, use clipPath.originX/Y to 'center'\n * @type fabric.Object\n */\n clipPath: undefined,\n\n /**\n * Meaningful ONLY when the object is used as clipPath.\n * if true, the clipPath will make the object clip to the outside of the clipPath\n * since 2.4.0\n * @type boolean\n * @default false\n */\n inverted: false,\n\n /**\n * Meaningful ONLY when the object is used as clipPath.\n * if true, the clipPath will have its top and left relative to canvas, and will\n * not be influenced by the object transform. This will make the clipPath relative\n * to the canvas, but clipping just a particular object.\n * WARNING this is beta, this feature may change or be renamed.\n * since 2.4.0\n * @type boolean\n * @default false\n */\n absolutePositioned: false,\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function(options) {\n if (options) {\n this.setOptions(options);\n }\n },\n\n /**\n * Create a the canvas used to keep the cached copy of the object\n * @private\n */\n _createCacheCanvas: function() {\n this._cacheProperties = {};\n this._cacheCanvas = fabric.util.createCanvasElement();\n this._cacheContext = this._cacheCanvas.getContext('2d');\n this._updateCacheCanvas();\n // if canvas gets created, is empty, so dirty.\n this.dirty = true;\n },\n\n /**\n * Limit the cache dimensions so that X * Y do not cross fabric.perfLimitSizeTotal\n * and each side do not cross fabric.cacheSideLimit\n * those numbers are configurable so that you can get as much detail as you want\n * making bargain with performances.\n * @param {Object} dims\n * @param {Object} dims.width width of canvas\n * @param {Object} dims.height height of canvas\n * @param {Object} dims.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @param {Object} dims.zoomY zoomY zoom value to unscale the canvas before drawing cache\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _limitCacheSize: function(dims) {\n var perfLimitSizeTotal = fabric.perfLimitSizeTotal,\n width = dims.width, height = dims.height,\n max = fabric.maxCacheSideLimit, min = fabric.minCacheSideLimit;\n if (width <= max && height <= max && width * height <= perfLimitSizeTotal) {\n if (width < min) {\n dims.width = min;\n }\n if (height < min) {\n dims.height = min;\n }\n return dims;\n }\n var ar = width / height, limitedDims = fabric.util.limitDimsByArea(ar, perfLimitSizeTotal),\n capValue = fabric.util.capValue,\n x = capValue(min, limitedDims.x, max),\n y = capValue(min, limitedDims.y, max);\n if (width > x) {\n dims.zoomX /= width / x;\n dims.width = x;\n dims.capped = true;\n }\n if (height > y) {\n dims.zoomY /= height / y;\n dims.height = y;\n dims.capped = true;\n }\n return dims;\n },\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @return {Object}.x width of object to be cached\n * @return {Object}.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions: function() {\n var objectScale = this.getTotalObjectScaling(),\n // caculate dimensions without skewing\n dim = this._getTransformedDimensions(0, 0),\n neededX = dim.x * objectScale.scaleX / this.scaleX,\n neededY = dim.y * objectScale.scaleY / this.scaleY;\n return {\n // for sure this ALIASING_LIMIT is slightly creating problem\n // in situation in which the cache canvas gets an upper limit\n // also objectScale contains already scaleX and scaleY\n width: neededX + ALIASING_LIMIT,\n height: neededY + ALIASING_LIMIT,\n zoomX: objectScale.scaleX,\n zoomY: objectScale.scaleY,\n x: neededX,\n y: neededY\n };\n },\n\n /**\n * Update width and height of the canvas for cache\n * returns true or false if canvas needed resize.\n * @private\n * @return {Boolean} true if the canvas has been resized\n */\n _updateCacheCanvas: function() {\n var targetCanvas = this.canvas;\n if (this.noScaleCache && targetCanvas && targetCanvas._currentTransform) {\n var target = targetCanvas._currentTransform.target,\n action = targetCanvas._currentTransform.action;\n if (this === target && action.slice && action.slice(0, 5) === 'scale') {\n return false;\n }\n }\n var canvas = this._cacheCanvas,\n dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n minCacheSize = fabric.minCacheSideLimit,\n width = dims.width, height = dims.height, drawingWidth, drawingHeight,\n zoomX = dims.zoomX, zoomY = dims.zoomY,\n dimensionsChanged = width !== this.cacheWidth || height !== this.cacheHeight,\n zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY,\n shouldRedraw = dimensionsChanged || zoomChanged,\n additionalWidth = 0, additionalHeight = 0, shouldResizeCanvas = false;\n if (dimensionsChanged) {\n var canvasWidth = this._cacheCanvas.width,\n canvasHeight = this._cacheCanvas.height,\n sizeGrowing = width > canvasWidth || height > canvasHeight,\n sizeShrinking = (width < canvasWidth * 0.9 || height < canvasHeight * 0.9) &&\n canvasWidth > minCacheSize && canvasHeight > minCacheSize;\n shouldResizeCanvas = sizeGrowing || sizeShrinking;\n if (sizeGrowing && !dims.capped && (width > minCacheSize || height > minCacheSize)) {\n additionalWidth = width * 0.1;\n additionalHeight = height * 0.1;\n }\n }\n if (shouldRedraw) {\n if (shouldResizeCanvas) {\n canvas.width = Math.ceil(width + additionalWidth);\n canvas.height = Math.ceil(height + additionalHeight);\n }\n else {\n this._cacheContext.setTransform(1, 0, 0, 1, 0, 0);\n this._cacheContext.clearRect(0, 0, canvas.width, canvas.height);\n }\n drawingWidth = dims.x / 2;\n drawingHeight = dims.y / 2;\n this.cacheTranslationX = Math.round(canvas.width / 2 - drawingWidth) + drawingWidth;\n this.cacheTranslationY = Math.round(canvas.height / 2 - drawingHeight) + drawingHeight;\n this.cacheWidth = width;\n this.cacheHeight = height;\n this._cacheContext.translate(this.cacheTranslationX, this.cacheTranslationY);\n this._cacheContext.scale(zoomX, zoomY);\n this.zoomX = zoomX;\n this.zoomY = zoomY;\n return true;\n }\n return false;\n },\n\n /**\n * Sets object's properties from options\n * @param {Object} [options] Options object\n */\n setOptions: function(options) {\n this._setOptions(options);\n this._initGradient(options.fill, 'fill');\n this._initGradient(options.stroke, 'stroke');\n this._initClipping(options);\n this._initPattern(options.fill, 'fill');\n this._initPattern(options.stroke, 'stroke');\n },\n\n /**\n * Transforms context when rendering an object\n * @param {CanvasRenderingContext2D} ctx Context\n */\n transform: function(ctx) {\n var m;\n if (this.group && !this.group._transformDone) {\n m = this.calcTransformMatrix();\n }\n else {\n m = this.calcOwnMatrix();\n }\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n },\n\n /**\n * Returns an object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS,\n\n object = {\n type: this.type,\n version: fabric.version,\n originX: this.originX,\n originY: this.originY,\n left: toFixed(this.left, NUM_FRACTION_DIGITS),\n top: toFixed(this.top, NUM_FRACTION_DIGITS),\n width: toFixed(this.width, NUM_FRACTION_DIGITS),\n height: toFixed(this.height, NUM_FRACTION_DIGITS),\n fill: (this.fill && this.fill.toObject) ? this.fill.toObject() : this.fill,\n stroke: (this.stroke && this.stroke.toObject) ? this.stroke.toObject() : this.stroke,\n strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS),\n strokeDashArray: this.strokeDashArray ? this.strokeDashArray.concat() : this.strokeDashArray,\n strokeLineCap: this.strokeLineCap,\n strokeDashOffset: this.strokeDashOffset,\n strokeLineJoin: this.strokeLineJoin,\n // TODO: add this before release\n // strokeUniform: this.strokeUniform,\n strokeMiterLimit: toFixed(this.strokeMiterLimit, NUM_FRACTION_DIGITS),\n scaleX: toFixed(this.scaleX, NUM_FRACTION_DIGITS),\n scaleY: toFixed(this.scaleY, NUM_FRACTION_DIGITS),\n angle: toFixed(this.angle, NUM_FRACTION_DIGITS),\n flipX: this.flipX,\n flipY: this.flipY,\n opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS),\n shadow: (this.shadow && this.shadow.toObject) ? this.shadow.toObject() : this.shadow,\n visible: this.visible,\n clipTo: this.clipTo && String(this.clipTo),\n backgroundColor: this.backgroundColor,\n fillRule: this.fillRule,\n paintFirst: this.paintFirst,\n globalCompositeOperation: this.globalCompositeOperation,\n transformMatrix: this.transformMatrix ? this.transformMatrix.concat() : null,\n skewX: toFixed(this.skewX, NUM_FRACTION_DIGITS),\n skewY: toFixed(this.skewY, NUM_FRACTION_DIGITS),\n };\n\n if (this.clipPath) {\n object.clipPath = this.clipPath.toObject(propertiesToInclude);\n object.clipPath.inverted = this.clipPath.inverted;\n object.clipPath.absolutePositioned = this.clipPath.absolutePositioned;\n }\n\n fabric.util.populateWithProperties(this, object, propertiesToInclude);\n if (!this.includeDefaultValues) {\n object = this._removeDefaultValues(object);\n }\n\n return object;\n },\n\n /**\n * Returns (dataless) object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toDatalessObject: function(propertiesToInclude) {\n // will be overwritten by subclasses\n return this.toObject(propertiesToInclude);\n },\n\n /**\n * @private\n * @param {Object} object\n */\n _removeDefaultValues: function(object) {\n var prototype = fabric.util.getKlass(object.type).prototype,\n stateProperties = prototype.stateProperties;\n stateProperties.forEach(function(prop) {\n if (prop === 'left' || prop === 'top') {\n return;\n }\n if (object[prop] === prototype[prop]) {\n delete object[prop];\n }\n var isArray = Object.prototype.toString.call(object[prop]) === '[object Array]' &&\n Object.prototype.toString.call(prototype[prop]) === '[object Array]';\n\n // basically a check for [] === []\n if (isArray && object[prop].length === 0 && prototype[prop].length === 0) {\n delete object[prop];\n }\n });\n\n return object;\n },\n\n /**\n * Returns a string representation of an instance\n * @return {String}\n */\n toString: function() {\n return '#';\n },\n\n /**\n * Return the object scale factor counting also the group scaling\n * @return {Object} object with scaleX and scaleY properties\n */\n getObjectScaling: function() {\n var options = fabric.util.qrDecompose(this.calcTransformMatrix());\n return { scaleX: Math.abs(options.scaleX), scaleY: Math.abs(options.scaleY) };\n },\n\n /**\n * Return the object scale factor counting also the group scaling, zoom and retina\n * @return {Object} object with scaleX and scaleY properties\n */\n getTotalObjectScaling: function() {\n var scale = this.getObjectScaling(), scaleX = scale.scaleX, scaleY = scale.scaleY;\n if (this.canvas) {\n var zoom = this.canvas.getZoom();\n var retina = this.canvas.getRetinaScaling();\n scaleX *= zoom * retina;\n scaleY *= zoom * retina;\n }\n return { scaleX: scaleX, scaleY: scaleY };\n },\n\n /**\n * Return the object opacity counting also the group property\n * @return {Number}\n */\n getObjectOpacity: function() {\n var opacity = this.opacity;\n if (this.group) {\n opacity *= this.group.getObjectOpacity();\n }\n return opacity;\n },\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {fabric.Object} thisArg\n */\n _set: function(key, value) {\n var shouldConstrainValue = (key === 'scaleX' || key === 'scaleY'),\n isChanged = this[key] !== value, groupNeedsUpdate = false;\n\n if (shouldConstrainValue) {\n value = this._constrainScale(value);\n }\n if (key === 'scaleX' && value < 0) {\n this.flipX = !this.flipX;\n value *= -1;\n }\n else if (key === 'scaleY' && value < 0) {\n this.flipY = !this.flipY;\n value *= -1;\n }\n else if (key === 'shadow' && value && !(value instanceof fabric.Shadow)) {\n value = new fabric.Shadow(value);\n }\n else if (key === 'dirty' && this.group) {\n this.group.set('dirty', value);\n }\n\n this[key] = value;\n\n if (isChanged) {\n groupNeedsUpdate = this.group && this.group.isOnACache();\n if (this.cacheProperties.indexOf(key) > -1) {\n this.dirty = true;\n groupNeedsUpdate && this.group.set('dirty', true);\n }\n else if (groupNeedsUpdate && this.stateProperties.indexOf(key) > -1) {\n this.group.set('dirty', true);\n }\n }\n\n return this;\n },\n\n /**\n * This callback function is called by the parent group of an object every\n * time a non-delegated property changes on the group. It is passed the key\n * and value as parameters. Not adding in this function's signature to avoid\n * Travis build error about unused variables.\n */\n setOnGroup: function() {\n // implemented by sub-classes, as needed.\n },\n\n /**\n * Retrieves viewportTransform from Object's canvas if possible\n * @method getViewportTransform\n * @memberOf fabric.Object.prototype\n * @return {Array}\n */\n getViewportTransform: function() {\n if (this.canvas && this.canvas.viewportTransform) {\n return this.canvas.viewportTransform;\n }\n return fabric.iMatrix.concat();\n },\n\n /*\n * @private\n * return if the object would be visible in rendering\n * @memberOf fabric.Object.prototype\n * @return {Boolean}\n */\n isNotVisible: function() {\n return this.opacity === 0 ||\n (this.width === 0 && this.height === 0 && this.strokeWidth === 0) ||\n !this.visible;\n },\n\n /**\n * Renders an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render: function(ctx) {\n // do not render if width/height are zeros or object is not visible\n if (this.isNotVisible()) {\n return;\n }\n if (this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen()) {\n return;\n }\n ctx.save();\n this._setupCompositeOperation(ctx);\n this.drawSelectionBackground(ctx);\n this.transform(ctx);\n this._setOpacity(ctx);\n this._setShadow(ctx, this);\n if (this.transformMatrix) {\n ctx.transform.apply(ctx, this.transformMatrix);\n }\n this.clipTo && fabric.util.clipContext(this, ctx);\n if (this.shouldCache()) {\n this.renderCache();\n this.drawCacheOnCanvas(ctx);\n }\n else {\n this._removeCacheCanvas();\n this.dirty = false;\n this.drawObject(ctx);\n if (this.objectCaching && this.statefullCache) {\n this.saveState({ propertySet: 'cacheProperties' });\n }\n }\n this.clipTo && ctx.restore();\n ctx.restore();\n },\n\n renderCache: function(options) {\n options = options || {};\n if (!this._cacheCanvas) {\n this._createCacheCanvas();\n }\n if (this.isCacheDirty()) {\n this.statefullCache && this.saveState({ propertySet: 'cacheProperties' });\n this.drawObject(this._cacheContext, options.forClipping);\n this.dirty = false;\n }\n },\n\n /**\n * Remove cacheCanvas and its dimensions from the objects\n */\n _removeCacheCanvas: function() {\n this._cacheCanvas = null;\n this.cacheWidth = 0;\n this.cacheHeight = 0;\n },\n\n /**\n * return true if the object will draw a stroke\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an aproximation and be fast.\n * wrote to avoid extra caching, it has to return true when stroke happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the stroke is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasStroke: function() {\n return this.stroke && this.stroke !== 'transparent' && this.strokeWidth !== 0;\n },\n\n /**\n * return true if the object will draw a fill\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an aproximation and be fast.\n * wrote to avoid extra caching, it has to return true when fill happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the fill is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasFill: function() {\n return this.fill && this.fill !== 'transparent';\n },\n\n /**\n * When set to `true`, force the object to have its own cache, even if it is inside a group\n * it may be needed when your object behave in a particular way on the cache and always needs\n * its own isolated canvas to render correctly.\n * Created to be overridden\n * since 1.7.12\n * @returns Boolean\n */\n needsItsOwnCache: function() {\n if (this.paintFirst === 'stroke' &&\n this.hasFill() && this.hasStroke() && typeof this.shadow === 'object') {\n return true;\n }\n if (this.clipPath) {\n return true;\n }\n return false;\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * Read as: cache if is needed, or if the feature is enabled but we are not already caching.\n * @return {Boolean}\n */\n shouldCache: function() {\n this.ownCaching = this.needsItsOwnCache() || (\n this.objectCaching &&\n (!this.group || !this.group.isOnACache())\n );\n return this.ownCaching;\n },\n\n /**\n * Check if this object or a child object will cast a shadow\n * used by Group.shouldCache to know if child has a shadow recursively\n * @return {Boolean}\n */\n willDrawShadow: function() {\n return !!this.shadow && (this.shadow.offsetX !== 0 || this.shadow.offsetY !== 0);\n },\n\n /**\n * Execute the drawing operation for an object clipPath\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawClipPathOnCache: function(ctx) {\n var path = this.clipPath;\n ctx.save();\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4\n if (path.inverted) {\n ctx.globalCompositeOperation = 'destination-out';\n }\n else {\n ctx.globalCompositeOperation = 'destination-in';\n }\n //ctx.scale(1 / 2, 1 / 2);\n if (path.absolutePositioned) {\n var m = fabric.util.invertTransform(this.calcTransformMatrix());\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n path.transform(ctx);\n ctx.scale(1 / path.zoomX, 1 / path.zoomY);\n ctx.drawImage(path._cacheCanvas, -path.cacheTranslationX, -path.cacheTranslationY);\n ctx.restore();\n },\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawObject: function(ctx, forClipping) {\n var originalFill = this.fill, originalStroke = this.stroke;\n if (forClipping) {\n this.fill = 'black';\n this.stroke = '';\n this._setClippingProperties(ctx);\n }\n else {\n this._renderBackground(ctx);\n this._setStrokeStyles(ctx, this);\n this._setFillStyles(ctx, this);\n }\n this._render(ctx);\n this._drawClipPath(ctx);\n this.fill = originalFill;\n this.stroke = originalStroke;\n },\n\n _drawClipPath: function(ctx) {\n var path = this.clipPath;\n if (!path) { return; }\n // needed to setup a couple of variables\n // path canvas gets overridden with this one.\n // TODO find a better solution?\n path.canvas = this.canvas;\n path.shouldCache();\n path._transformDone = true;\n path.renderCache({ forClipping: true });\n this.drawClipPathOnCache(ctx);\n },\n\n /**\n * Paint the cached copy of the object on the target context.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas: function(ctx) {\n ctx.scale(1 / this.zoomX, 1 / this.zoomY);\n ctx.drawImage(this._cacheCanvas, -this.cacheTranslationX, -this.cacheTranslationY);\n },\n\n /**\n * Check if cache is dirty\n * @param {Boolean} skipCanvas skip canvas checks because this object is painted\n * on parent canvas.\n */\n isCacheDirty: function(skipCanvas) {\n if (this.isNotVisible()) {\n return false;\n }\n if (this._cacheCanvas && !skipCanvas && this._updateCacheCanvas()) {\n // in this case the context is already cleared.\n return true;\n }\n else {\n if (this.dirty ||\n (this.clipPath && this.clipPath.absolutePositioned) ||\n (this.statefullCache && this.hasStateChanged('cacheProperties'))\n ) {\n if (this._cacheCanvas && !skipCanvas) {\n var width = this.cacheWidth / this.zoomX;\n var height = this.cacheHeight / this.zoomY;\n this._cacheContext.clearRect(-width / 2, -height / 2, width, height);\n }\n return true;\n }\n }\n return false;\n },\n\n /**\n * Draws a background for the object big as its untransformed dimensions\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground: function(ctx) {\n if (!this.backgroundColor) {\n return;\n }\n var dim = this._getNonTransformedDimensions();\n ctx.fillStyle = this.backgroundColor;\n\n ctx.fillRect(\n -dim.x / 2,\n -dim.y / 2,\n dim.x,\n dim.y\n );\n // if there is background color no other shadows\n // should be casted\n this._removeShadow(ctx);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setOpacity: function(ctx) {\n if (this.group && !this.group._transformDone) {\n ctx.globalAlpha = this.getObjectOpacity();\n }\n else {\n ctx.globalAlpha *= this.opacity;\n }\n },\n\n _setStrokeStyles: function(ctx, decl) {\n if (decl.stroke) {\n ctx.lineWidth = decl.strokeWidth;\n ctx.lineCap = decl.strokeLineCap;\n ctx.lineDashOffset = decl.strokeDashOffset;\n ctx.lineJoin = decl.strokeLineJoin;\n ctx.miterLimit = decl.strokeMiterLimit;\n ctx.strokeStyle = decl.stroke.toLive\n ? decl.stroke.toLive(ctx, this)\n : decl.stroke;\n }\n },\n\n _setFillStyles: function(ctx, decl) {\n if (decl.fill) {\n ctx.fillStyle = decl.fill.toLive\n ? decl.fill.toLive(ctx, this)\n : decl.fill;\n }\n },\n\n _setClippingProperties: function(ctx) {\n ctx.globalAlpha = 1;\n ctx.strokeStyle = 'transparent';\n ctx.fillStyle = '#000000';\n },\n\n /**\n * @private\n * Sets line dash\n * @param {CanvasRenderingContext2D} ctx Context to set the dash line on\n * @param {Array} dashArray array representing dashes\n * @param {Function} alternative function to call if browser does not support lineDash\n */\n _setLineDash: function(ctx, dashArray, alternative) {\n if (!dashArray || dashArray.length === 0) {\n return;\n }\n // Spec requires the concatenation of two copies the dash list when the number of elements is odd\n if (1 & dashArray.length) {\n dashArray.push.apply(dashArray, dashArray);\n }\n if (supportsLineDash) {\n ctx.setLineDash(dashArray);\n }\n else {\n alternative && alternative(ctx);\n }\n },\n\n /**\n * Renders controls and borders for the object\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [styleOverride] properties to override the object style\n */\n _renderControls: function(ctx, styleOverride) {\n var vpt = this.getViewportTransform(),\n matrix = this.calcTransformMatrix(),\n options, drawBorders, drawControls;\n styleOverride = styleOverride || { };\n drawBorders = typeof styleOverride.hasBorders !== 'undefined' ? styleOverride.hasBorders : this.hasBorders;\n drawControls = typeof styleOverride.hasControls !== 'undefined' ? styleOverride.hasControls : this.hasControls;\n matrix = fabric.util.multiplyTransformMatrices(vpt, matrix);\n options = fabric.util.qrDecompose(matrix);\n ctx.save();\n ctx.translate(options.translateX, options.translateY);\n ctx.lineWidth = 1 * this.borderScaleFactor;\n if (!this.group) {\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n }\n if (styleOverride.forActiveSelection) {\n ctx.rotate(degreesToRadians(options.angle));\n drawBorders && this.drawBordersInGroup(ctx, options, styleOverride);\n }\n else {\n ctx.rotate(degreesToRadians(this.angle));\n drawBorders && this.drawBorders(ctx, styleOverride);\n }\n drawControls && this.drawControls(ctx, styleOverride);\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setShadow: function(ctx) {\n if (!this.shadow) {\n return;\n }\n\n var shadow = this.shadow, canvas = this.canvas, scaling,\n multX = (canvas && canvas.viewportTransform[0]) || 1,\n multY = (canvas && canvas.viewportTransform[3]) || 1;\n if (shadow.nonScaling) {\n scaling = { scaleX: 1, scaleY: 1 };\n }\n else {\n scaling = this.getObjectScaling();\n }\n if (canvas && canvas._isRetinaScaling()) {\n multX *= fabric.devicePixelRatio;\n multY *= fabric.devicePixelRatio;\n }\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur = shadow.blur * fabric.browserShadowBlurConstant *\n (multX + multY) * (scaling.scaleX + scaling.scaleY) / 4;\n ctx.shadowOffsetX = shadow.offsetX * multX * scaling.scaleX;\n ctx.shadowOffsetY = shadow.offsetY * multY * scaling.scaleY;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _removeShadow: function(ctx) {\n if (!this.shadow) {\n return;\n }\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} filler fabric.Pattern or fabric.Gradient\n * @return {Object} offset.offsetX offset for text rendering\n * @return {Object} offset.offsetY offset for text rendering\n */\n _applyPatternGradientTransform: function(ctx, filler) {\n if (!filler || !filler.toLive) {\n return { offsetX: 0, offsetY: 0 };\n }\n var t = filler.gradientTransform || filler.patternTransform;\n var offsetX = -this.width / 2 + filler.offsetX || 0,\n offsetY = -this.height / 2 + filler.offsetY || 0;\n\n if (filler.gradientUnits === 'percentage') {\n ctx.transform(this.width, 0, 0, this.height, offsetX, offsetY);\n }\n else {\n ctx.transform(1, 0, 0, 1, offsetX, offsetY);\n }\n if (t) {\n ctx.transform(t[0], t[1], t[2], t[3], t[4], t[5]);\n }\n return { offsetX: offsetX, offsetY: offsetY };\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderPaintInOrder: function(ctx) {\n if (this.paintFirst === 'stroke') {\n this._renderStroke(ctx);\n this._renderFill(ctx);\n }\n else {\n this._renderFill(ctx);\n this._renderStroke(ctx);\n }\n },\n\n /**\n * @private\n * function that actually render something on the context.\n * empty here to allow Obects to work on tests to benchmark fabric functionalites\n * not related to rendering\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(/* ctx */) {\n\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderFill: function(ctx) {\n if (!this.fill) {\n return;\n }\n\n ctx.save();\n this._applyPatternGradientTransform(ctx, this.fill);\n if (this.fillRule === 'evenodd') {\n ctx.fill('evenodd');\n }\n else {\n ctx.fill();\n }\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderStroke: function(ctx) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n if (this.strokeUniform && this.group) {\n var scaling = this.getObjectScaling();\n ctx.scale(1 / scaling.scaleX, 1 / scaling.scaleY);\n }\n else if (this.strokeUniform) {\n ctx.scale(1 / this.scaleX, 1 / this.scaleY);\n }\n this._setLineDash(ctx, this.strokeDashArray, this._renderDashedStroke);\n if (this.stroke.toLive && this.stroke.gradientUnits === 'percentage') {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n this._applyPatternForTransformedGradient(ctx, this.stroke);\n }\n else {\n this._applyPatternGradientTransform(ctx, this.stroke);\n }\n ctx.stroke();\n ctx.restore();\n },\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drwabacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {fabric.Gradient} filler a fabric gradient instance\n */\n _applyPatternForTransformedGradient: function(ctx, filler) {\n var dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n pCanvas = fabric.util.createCanvasElement(), pCtx, retinaScaling = this.canvas.getRetinaScaling(),\n width = dims.x / this.scaleX / retinaScaling, height = dims.y / this.scaleY / retinaScaling;\n pCanvas.width = width;\n pCanvas.height = height;\n pCtx = pCanvas.getContext('2d');\n pCtx.beginPath(); pCtx.moveTo(0, 0); pCtx.lineTo(width, 0); pCtx.lineTo(width, height);\n pCtx.lineTo(0, height); pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.scale(\n dims.zoomX / this.scaleX / retinaScaling,\n dims.zoomY / this.scaleY / retinaScaling\n );\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fillStyle = filler.toLive(ctx);\n pCtx.fill();\n ctx.translate(-this.width / 2 - this.strokeWidth / 2, -this.height / 2 - this.strokeWidth / 2);\n ctx.scale(\n retinaScaling * this.scaleX / dims.zoomX,\n retinaScaling * this.scaleY / dims.zoomY\n );\n ctx.strokeStyle = pCtx.createPattern(pCanvas, 'no-repeat');\n },\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Object} center point from element coordinates\n */\n _findCenterFromElement: function() {\n return { x: this.left + this.width / 2, y: this.top + this.height / 2 };\n },\n\n /**\n * This function is an helper for svg import. it decompose the transformMatrix\n * and assign properties to object.\n * untransformed coordinates\n * @private\n * @chainable\n */\n _assignTransformMatrixProps: function() {\n if (this.transformMatrix) {\n var options = fabric.util.qrDecompose(this.transformMatrix);\n this.flipX = false;\n this.flipY = false;\n this.set('scaleX', options.scaleX);\n this.set('scaleY', options.scaleY);\n this.angle = options.angle;\n this.skewX = options.skewX;\n this.skewY = 0;\n }\n },\n\n /**\n * This function is an helper for svg import. it removes the transform matrix\n * and set to object properties that fabricjs can handle\n * @private\n * @param {Object} preserveAspectRatioOptions\n * @return {thisArg}\n */\n _removeTransformMatrix: function(preserveAspectRatioOptions) {\n var center = this._findCenterFromElement();\n if (this.transformMatrix) {\n this._assignTransformMatrixProps();\n center = fabric.util.transformPoint(center, this.transformMatrix);\n }\n this.transformMatrix = null;\n if (preserveAspectRatioOptions) {\n this.scaleX *= preserveAspectRatioOptions.scaleX;\n this.scaleY *= preserveAspectRatioOptions.scaleY;\n this.cropX = preserveAspectRatioOptions.cropX;\n this.cropY = preserveAspectRatioOptions.cropY;\n center.x += preserveAspectRatioOptions.offsetLeft;\n center.y += preserveAspectRatioOptions.offsetTop;\n this.width = preserveAspectRatioOptions.width;\n this.height = preserveAspectRatioOptions.height;\n }\n this.setPositionByOrigin(center, 'center', 'center');\n },\n\n /**\n * Clones an instance, using a callback method will work for every object.\n * @param {Function} callback Callback is invoked with a clone as a first argument\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n */\n clone: function(callback, propertiesToInclude) {\n var objectForm = this.toObject(propertiesToInclude);\n if (this.constructor.fromObject) {\n this.constructor.fromObject(objectForm, callback);\n }\n else {\n fabric.Object._fromObject('Object', objectForm, callback);\n }\n },\n\n /**\n * Creates an instance of fabric.Image out of an object\n * could make use of both toDataUrl or toCanvasElement.\n * @param {Function} callback callback, invoked with an instance as a first argument\n * @param {Object} [options] for clone as image, passed to toDataURL\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {fabric.Object} thisArg\n */\n cloneAsImage: function(callback, options) {\n var canvasEl = this.toCanvasElement(options);\n if (callback) {\n callback(new fabric.Image(canvasEl));\n }\n return this;\n },\n\n /**\n * Converts an object into a HTMLCanvas element\n * @param {Object} options Options object\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {HTMLCanvasElement} Returns DOM element with the fabric.Object\n */\n toCanvasElement: function(options) {\n options || (options = { });\n\n var utils = fabric.util, origParams = utils.saveObjectTransform(this),\n originalGroup = this.group,\n originalShadow = this.shadow, abs = Math.abs,\n multiplier = (options.multiplier || 1) * (options.enableRetinaScaling ? fabric.devicePixelRatio : 1);\n delete this.group;\n if (options.withoutTransform) {\n utils.resetObjectTransform(this);\n }\n if (options.withoutShadow) {\n this.shadow = null;\n }\n\n var el = fabric.util.createCanvasElement(),\n // skip canvas zoom and calculate with setCoords now.\n boundingRect = this.getBoundingRect(true, true),\n shadow = this.shadow, scaling,\n shadowOffset = { x: 0, y: 0 }, shadowBlur,\n width, height;\n\n if (shadow) {\n shadowBlur = shadow.blur;\n if (shadow.nonScaling) {\n scaling = { scaleX: 1, scaleY: 1 };\n }\n else {\n scaling = this.getObjectScaling();\n }\n // consider non scaling shadow.\n shadowOffset.x = 2 * Math.round(abs(shadow.offsetX) + shadowBlur) * (abs(scaling.scaleX));\n shadowOffset.y = 2 * Math.round(abs(shadow.offsetY) + shadowBlur) * (abs(scaling.scaleY));\n }\n width = boundingRect.width + shadowOffset.x;\n height = boundingRect.height + shadowOffset.y;\n // if the current width/height is not an integer\n // we need to make it so.\n el.width = Math.ceil(width);\n el.height = Math.ceil(height);\n var canvas = new fabric.StaticCanvas(el, {\n enableRetinaScaling: false,\n renderOnAddRemove: false,\n skipOffscreen: false,\n });\n if (options.format === 'jpeg') {\n canvas.backgroundColor = '#fff';\n }\n this.setPositionByOrigin(new fabric.Point(canvas.width / 2, canvas.height / 2), 'center', 'center');\n\n var originalCanvas = this.canvas;\n canvas.add(this);\n var canvasEl = canvas.toCanvasElement(multiplier || 1, options);\n this.shadow = originalShadow;\n this.set('canvas', originalCanvas);\n if (originalGroup) {\n this.group = originalGroup;\n }\n this.set(origParams).setCoords();\n // canvas.dispose will call image.dispose that will nullify the elements\n // since this canvas is a simple element for the process, we remove references\n // to objects in this way in order to avoid object trashing.\n canvas._objects = [];\n canvas.dispose();\n canvas = null;\n\n return canvasEl;\n },\n\n /**\n * Converts an object into a data-url-like string\n * @param {Object} options Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n */\n toDataURL: function(options) {\n options || (options = { });\n return fabric.util.toDataURL(this.toCanvasElement(options), options.format || 'png', options.quality || 1);\n },\n\n /**\n * Returns true if specified type is identical to the type of an instance\n * @param {String} type Type to check against\n * @return {Boolean}\n */\n isType: function(type) {\n return this.type === type;\n },\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance (is 1 unless subclassed)\n */\n complexity: function() {\n return 1;\n },\n\n /**\n * Returns a JSON representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} JSON\n */\n toJSON: function(propertiesToInclude) {\n // delegate, not alias\n return this.toObject(propertiesToInclude);\n },\n\n /**\n * Sets gradient (fill or stroke) of an object\n * percentages for x1,x2,y1,y2,r1,r2 together with gradientUnits 'pixels', are not supported.\n * Backwards incompatibility note: This method was named \"setGradientFill\" until v1.1.0\n * @param {String} property Property name 'stroke' or 'fill'\n * @param {Object} [options] Options object\n * @param {String} [options.type] Type of gradient 'radial' or 'linear'\n * @param {Number} [options.x1=0] x-coordinate of start point\n * @param {Number} [options.y1=0] y-coordinate of start point\n * @param {Number} [options.x2=0] x-coordinate of end point\n * @param {Number} [options.y2=0] y-coordinate of end point\n * @param {Number} [options.r1=0] Radius of start point (only for radial gradients)\n * @param {Number} [options.r2=0] Radius of end point (only for radial gradients)\n * @param {Object} [options.colorStops] Color stops object eg. {0: 'ff0000', 1: '000000'}\n * @param {Object} [options.gradientTransform] transformMatrix for gradient\n * @return {fabric.Object} thisArg\n * @chainable\n * @deprecated since 3.4.0\n * @see {@link http://jsfiddle.net/fabricjs/58y8b/|jsFiddle demo}\n * @example Set linear gradient\n * object.setGradient('fill', {\n * type: 'linear',\n * x1: -object.width / 2,\n * y1: 0,\n * x2: object.width / 2,\n * y2: 0,\n * colorStops: {\n * 0: 'red',\n * 0.5: '#005555',\n * 1: 'rgba(0,0,255,0.5)'\n * }\n * });\n * canvas.renderAll();\n * @example Set radial gradient\n * object.setGradient('fill', {\n * type: 'radial',\n * x1: 0,\n * y1: 0,\n * x2: 0,\n * y2: 0,\n * r1: object.width / 2,\n * r2: 10,\n * colorStops: {\n * 0: 'red',\n * 0.5: '#005555',\n * 1: 'rgba(0,0,255,0.5)'\n * }\n * });\n * canvas.renderAll();\n */\n setGradient: function(property, options) {\n options || (options = { });\n\n var gradient = { colorStops: [] };\n\n gradient.type = options.type || (options.r1 || options.r2 ? 'radial' : 'linear');\n gradient.coords = {\n x1: options.x1,\n y1: options.y1,\n x2: options.x2,\n y2: options.y2\n };\n gradient.gradientUnits = options.gradientUnits || 'pixels';\n if (options.r1 || options.r2) {\n gradient.coords.r1 = options.r1;\n gradient.coords.r2 = options.r2;\n }\n\n gradient.gradientTransform = options.gradientTransform;\n fabric.Gradient.prototype.addColorStop.call(gradient, options.colorStops);\n\n return this.set(property, fabric.Gradient.forObject(this, gradient));\n },\n\n /**\n * Sets pattern fill of an object\n * @param {Object} options Options object\n * @param {(String|HTMLImageElement)} options.source Pattern source\n * @param {String} [options.repeat=repeat] Repeat property of a pattern (one of repeat, repeat-x, repeat-y or no-repeat)\n * @param {Number} [options.offsetX=0] Pattern horizontal offset from object's left/top corner\n * @param {Number} [options.offsetY=0] Pattern vertical offset from object's left/top corner\n * @param {Function} [callback] Callback to invoke when image set as a pattern\n * @return {fabric.Object} thisArg\n * @chainable\n * @deprecated since 3.5.0\n * @see {@link http://jsfiddle.net/fabricjs/QT3pa/|jsFiddle demo}\n * @example Set pattern\n * object.setPatternFill({\n * source: 'http://fabricjs.com/assets/escheresque_ste.png',\n * repeat: 'repeat'\n * },canvas.renderAll.bind(canvas));\n */\n setPatternFill: function(options, callback) {\n return this.set('fill', new fabric.Pattern(options, callback));\n },\n\n /**\n * Sets {@link fabric.Object#shadow|shadow} of an object\n * @param {Object|String} [options] Options object or string (e.g. \"2px 2px 10px rgba(0,0,0,0.2)\")\n * @param {String} [options.color=rgb(0,0,0)] Shadow color\n * @param {Number} [options.blur=0] Shadow blur\n * @param {Number} [options.offsetX=0] Shadow horizontal offset\n * @param {Number} [options.offsetY=0] Shadow vertical offset\n * @return {fabric.Object} thisArg\n * @chainable\n * @deprecated since 3.5.0\n * @see {@link http://jsfiddle.net/fabricjs/7gvJG/|jsFiddle demo}\n * @example Set shadow with string notation\n * object.setShadow('2px 2px 10px rgba(0,0,0,0.2)');\n * canvas.renderAll();\n * @example Set shadow with object notation\n * object.setShadow({\n * color: 'red',\n * blur: 10,\n * offsetX: 20,\n * offsetY: 20\n * });\n * canvas.renderAll();\n */\n setShadow: function(options) {\n return this.set('shadow', options ? new fabric.Shadow(options) : null);\n },\n\n /**\n * Sets \"color\" of an instance (alias of `set('fill', …)`)\n * @param {String} color Color value\n * @return {fabric.Object} thisArg\n * @deprecated since 3.5.0\n * @chainable\n */\n setColor: function(color) {\n this.set('fill', color);\n return this;\n },\n\n /**\n * Sets \"angle\" of an instance with centered rotation\n * @param {Number} angle Angle value (in degrees)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n rotate: function(angle) {\n var shouldCenterOrigin = (this.originX !== 'center' || this.originY !== 'center') && this.centeredRotation;\n\n if (shouldCenterOrigin) {\n this._setOriginToCenter();\n }\n\n this.set('angle', angle);\n\n if (shouldCenterOrigin) {\n this._resetOrigin();\n }\n\n return this;\n },\n\n /**\n * Centers object horizontally on canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n centerH: function () {\n this.canvas && this.canvas.centerObjectH(this);\n return this;\n },\n\n /**\n * Centers object horizontally on current viewport of canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n viewportCenterH: function () {\n this.canvas && this.canvas.viewportCenterObjectH(this);\n return this;\n },\n\n /**\n * Centers object vertically on canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n centerV: function () {\n this.canvas && this.canvas.centerObjectV(this);\n return this;\n },\n\n /**\n * Centers object vertically on current viewport of canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n viewportCenterV: function () {\n this.canvas && this.canvas.viewportCenterObjectV(this);\n return this;\n },\n\n /**\n * Centers object vertically and horizontally on canvas to which is was added last\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n center: function () {\n this.canvas && this.canvas.centerObject(this);\n return this;\n },\n\n /**\n * Centers object on current viewport of canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n viewportCenter: function () {\n this.canvas && this.canvas.viewportCenterObject(this);\n return this;\n },\n\n /**\n * Returns coordinates of a pointer relative to an object\n * @param {Event} e Event to operate upon\n * @param {Object} [pointer] Pointer to operate upon (instead of event)\n * @return {Object} Coordinates of a pointer (x, y)\n */\n getLocalPointer: function(e, pointer) {\n pointer = pointer || this.canvas.getPointer(e);\n var pClicked = new fabric.Point(pointer.x, pointer.y),\n objectLeftTop = this._getLeftTopCoords();\n if (this.angle) {\n pClicked = fabric.util.rotatePoint(\n pClicked, objectLeftTop, degreesToRadians(-this.angle));\n }\n return {\n x: pClicked.x - objectLeftTop.x,\n y: pClicked.y - objectLeftTop.y\n };\n },\n\n /**\n * Sets canvas globalCompositeOperation for specific object\n * custom composition operation for the particular object can be specified using globalCompositeOperation property\n * @param {CanvasRenderingContext2D} ctx Rendering canvas context\n */\n _setupCompositeOperation: function (ctx) {\n if (this.globalCompositeOperation) {\n ctx.globalCompositeOperation = this.globalCompositeOperation;\n }\n }\n });\n\n fabric.util.createAccessors && fabric.util.createAccessors(fabric.Object);\n\n extend(fabric.Object.prototype, fabric.Observable);\n\n /**\n * Defines the number of fraction digits to use when serializing object values.\n * You can use it to increase/decrease precision of such values like left, top, scaleX, scaleY, etc.\n * @static\n * @memberOf fabric.Object\n * @constant\n * @type Number\n */\n fabric.Object.NUM_FRACTION_DIGITS = 2;\n\n fabric.Object._fromObject = function(className, object, callback, extraParam) {\n var klass = fabric[className];\n object = clone(object, true);\n fabric.util.enlivenPatterns([object.fill, object.stroke], function(patterns) {\n if (typeof patterns[0] !== 'undefined') {\n object.fill = patterns[0];\n }\n if (typeof patterns[1] !== 'undefined') {\n object.stroke = patterns[1];\n }\n fabric.util.enlivenObjects([object.clipPath], function(enlivedProps) {\n object.clipPath = enlivedProps[0];\n var instance = extraParam ? new klass(object[extraParam], object) : new klass(object);\n callback && callback(instance);\n });\n });\n };\n\n /**\n * Unique id used internally when creating SVG elements\n * @static\n * @memberOf fabric.Object\n * @type Number\n */\n fabric.Object.__uid = 0;\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n\n var degreesToRadians = fabric.util.degreesToRadians,\n originXOffset = {\n left: -0.5,\n center: 0,\n right: 0.5\n },\n originYOffset = {\n top: -0.5,\n center: 0,\n bottom: 0.5\n };\n\n fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n /**\n * Translates the coordinates from a set of origin to another (based on the object's dimensions)\n * @param {fabric.Point} point The point which corresponds to the originX and originY params\n * @param {String} fromOriginX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} fromOriginY Vertical origin: 'top', 'center' or 'bottom'\n * @param {String} toOriginX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} toOriginY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n translateToGivenOrigin: function(point, fromOriginX, fromOriginY, toOriginX, toOriginY) {\n var x = point.x,\n y = point.y,\n offsetX, offsetY, dim;\n\n if (typeof fromOriginX === 'string') {\n fromOriginX = originXOffset[fromOriginX];\n }\n else {\n fromOriginX -= 0.5;\n }\n\n if (typeof toOriginX === 'string') {\n toOriginX = originXOffset[toOriginX];\n }\n else {\n toOriginX -= 0.5;\n }\n\n offsetX = toOriginX - fromOriginX;\n\n if (typeof fromOriginY === 'string') {\n fromOriginY = originYOffset[fromOriginY];\n }\n else {\n fromOriginY -= 0.5;\n }\n\n if (typeof toOriginY === 'string') {\n toOriginY = originYOffset[toOriginY];\n }\n else {\n toOriginY -= 0.5;\n }\n\n offsetY = toOriginY - fromOriginY;\n\n if (offsetX || offsetY) {\n dim = this._getTransformedDimensions();\n x = point.x + offsetX * dim.x;\n y = point.y + offsetY * dim.y;\n }\n\n return new fabric.Point(x, y);\n },\n\n /**\n * Translates the coordinates from origin to center coordinates (based on the object's dimensions)\n * @param {fabric.Point} point The point which corresponds to the originX and originY params\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n translateToCenterPoint: function(point, originX, originY) {\n var p = this.translateToGivenOrigin(point, originX, originY, 'center', 'center');\n if (this.angle) {\n return fabric.util.rotatePoint(p, point, degreesToRadians(this.angle));\n }\n return p;\n },\n\n /**\n * Translates the coordinates from center to origin coordinates (based on the object's dimensions)\n * @param {fabric.Point} center The point which corresponds to center of the object\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n translateToOriginPoint: function(center, originX, originY) {\n var p = this.translateToGivenOrigin(center, 'center', 'center', originX, originY);\n if (this.angle) {\n return fabric.util.rotatePoint(p, center, degreesToRadians(this.angle));\n }\n return p;\n },\n\n /**\n * Returns the real center coordinates of the object\n * @return {fabric.Point}\n */\n getCenterPoint: function() {\n var leftTop = new fabric.Point(this.left, this.top);\n return this.translateToCenterPoint(leftTop, this.originX, this.originY);\n },\n\n /**\n * Returns the coordinates of the object based on center coordinates\n * @param {fabric.Point} point The point which corresponds to the originX and originY params\n * @return {fabric.Point}\n */\n // getOriginPoint: function(center) {\n // return this.translateToOriginPoint(center, this.originX, this.originY);\n // },\n\n /**\n * Returns the coordinates of the object as if it has a different origin\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n getPointByOrigin: function(originX, originY) {\n var center = this.getCenterPoint();\n return this.translateToOriginPoint(center, originX, originY);\n },\n\n /**\n * Returns the point in local coordinates\n * @param {fabric.Point} point The point relative to the global coordinate system\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n toLocalPoint: function(point, originX, originY) {\n var center = this.getCenterPoint(),\n p, p2;\n\n if (typeof originX !== 'undefined' && typeof originY !== 'undefined' ) {\n p = this.translateToGivenOrigin(center, 'center', 'center', originX, originY);\n }\n else {\n p = new fabric.Point(this.left, this.top);\n }\n\n p2 = new fabric.Point(point.x, point.y);\n if (this.angle) {\n p2 = fabric.util.rotatePoint(p2, center, -degreesToRadians(this.angle));\n }\n return p2.subtractEquals(p);\n },\n\n /**\n * Returns the point in global coordinates\n * @param {fabric.Point} The point relative to the local coordinate system\n * @return {fabric.Point}\n */\n // toGlobalPoint: function(point) {\n // return fabric.util.rotatePoint(point, this.getCenterPoint(), degreesToRadians(this.angle)).addEquals(new fabric.Point(this.left, this.top));\n // },\n\n /**\n * Sets the position of the object taking into consideration the object's origin\n * @param {fabric.Point} pos The new position of the object\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {void}\n */\n setPositionByOrigin: function(pos, originX, originY) {\n var center = this.translateToCenterPoint(pos, originX, originY),\n position = this.translateToOriginPoint(center, this.originX, this.originY);\n this.set('left', position.x);\n this.set('top', position.y);\n },\n\n /**\n * @param {String} to One of 'left', 'center', 'right'\n */\n adjustPosition: function(to) {\n var angle = degreesToRadians(this.angle),\n hypotFull = this.getScaledWidth(),\n xFull = fabric.util.cos(angle) * hypotFull,\n yFull = fabric.util.sin(angle) * hypotFull,\n offsetFrom, offsetTo;\n\n //TODO: this function does not consider mixed situation like top, center.\n if (typeof this.originX === 'string') {\n offsetFrom = originXOffset[this.originX];\n }\n else {\n offsetFrom = this.originX - 0.5;\n }\n if (typeof to === 'string') {\n offsetTo = originXOffset[to];\n }\n else {\n offsetTo = to - 0.5;\n }\n this.left += xFull * (offsetTo - offsetFrom);\n this.top += yFull * (offsetTo - offsetFrom);\n this.setCoords();\n this.originX = to;\n },\n\n /**\n * Sets the origin/position of the object to it's center point\n * @private\n * @return {void}\n */\n _setOriginToCenter: function() {\n this._originalOriginX = this.originX;\n this._originalOriginY = this.originY;\n\n var center = this.getCenterPoint();\n\n this.originX = 'center';\n this.originY = 'center';\n\n this.left = center.x;\n this.top = center.y;\n },\n\n /**\n * Resets the origin/position of the object to it's original origin\n * @private\n * @return {void}\n */\n _resetOrigin: function() {\n var originPoint = this.translateToOriginPoint(\n this.getCenterPoint(),\n this._originalOriginX,\n this._originalOriginY);\n\n this.originX = this._originalOriginX;\n this.originY = this._originalOriginY;\n\n this.left = originPoint.x;\n this.top = originPoint.y;\n\n this._originalOriginX = null;\n this._originalOriginY = null;\n },\n\n /**\n * @private\n */\n _getLeftTopCoords: function() {\n return this.translateToOriginPoint(this.getCenterPoint(), 'left', 'top');\n },\n });\n\n})();\n\n\n(function() {\n\n function getCoords(coords) {\n return [\n new fabric.Point(coords.tl.x, coords.tl.y),\n new fabric.Point(coords.tr.x, coords.tr.y),\n new fabric.Point(coords.br.x, coords.br.y),\n new fabric.Point(coords.bl.x, coords.bl.y)\n ];\n }\n\n var degreesToRadians = fabric.util.degreesToRadians,\n multiplyMatrices = fabric.util.multiplyTransformMatrices,\n transformPoint = fabric.util.transformPoint;\n\n fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n /**\n * Describe object's corner position in canvas element coordinates.\n * properties are tl,mt,tr,ml,mr,bl,mb,br,mtr for the main controls.\n * each property is an object with x, y and corner.\n * The `corner` property contains in a similar manner the 4 points of the\n * interactive area of the corner.\n * The coordinates depends from this properties: width, height, scaleX, scaleY\n * skewX, skewY, angle, strokeWidth, viewportTransform, top, left, padding.\n * The coordinates get updated with @method setCoords.\n * You can calculate them without updating with @method calcCoords;\n * @memberOf fabric.Object.prototype\n */\n oCoords: null,\n\n /**\n * Describe object's corner position in canvas object absolute coordinates\n * properties are tl,tr,bl,br and describe the four main corner.\n * each property is an object with x, y, instance of Fabric.Point.\n * The coordinates depends from this properties: width, height, scaleX, scaleY\n * skewX, skewY, angle, strokeWidth, top, left.\n * Those coordinates are useful to understand where an object is. They get updated\n * with oCoords but they do not need to be updated when zoom or panning change.\n * The coordinates get updated with @method setCoords.\n * You can calculate them without updating with @method calcCoords(true);\n * @memberOf fabric.Object.prototype\n */\n aCoords: null,\n\n /**\n * storage for object transform matrix\n */\n ownMatrixCache: null,\n\n /**\n * storage for object full transform matrix\n */\n matrixCache: null,\n\n /**\n * return correct set of coordinates for intersection\n */\n getCoords: function(absolute, calculate) {\n if (!this.oCoords) {\n this.setCoords();\n }\n var coords = absolute ? this.aCoords : this.oCoords;\n return getCoords(calculate ? this.calcCoords(absolute) : coords);\n },\n\n /**\n * Checks if object intersects with an area formed by 2 points\n * @param {Object} pointTL top-left point of area\n * @param {Object} pointBR bottom-right point of area\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object intersects with an area formed by 2 points\n */\n intersectsWithRect: function(pointTL, pointBR, absolute, calculate) {\n var coords = this.getCoords(absolute, calculate),\n intersection = fabric.Intersection.intersectPolygonRectangle(\n coords,\n pointTL,\n pointBR\n );\n return intersection.status === 'Intersection';\n },\n\n /**\n * Checks if object intersects with another object\n * @param {Object} other Object to test\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object intersects with another object\n */\n intersectsWithObject: function(other, absolute, calculate) {\n var intersection = fabric.Intersection.intersectPolygonPolygon(\n this.getCoords(absolute, calculate),\n other.getCoords(absolute, calculate)\n );\n\n return intersection.status === 'Intersection'\n || other.isContainedWithinObject(this, absolute, calculate)\n || this.isContainedWithinObject(other, absolute, calculate);\n },\n\n /**\n * Checks if object is fully contained within area of another object\n * @param {Object} other Object to test\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object is fully contained within area of another object\n */\n isContainedWithinObject: function(other, absolute, calculate) {\n var points = this.getCoords(absolute, calculate),\n i = 0, lines = other._getImageLines(\n calculate ? other.calcCoords(absolute) : absolute ? other.aCoords : other.oCoords\n );\n for (; i < 4; i++) {\n if (!other.containsPoint(points[i], lines)) {\n return false;\n }\n }\n return true;\n },\n\n /**\n * Checks if object is fully contained within area formed by 2 points\n * @param {Object} pointTL top-left point of area\n * @param {Object} pointBR bottom-right point of area\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object is fully contained within area formed by 2 points\n */\n isContainedWithinRect: function(pointTL, pointBR, absolute, calculate) {\n var boundingRect = this.getBoundingRect(absolute, calculate);\n\n return (\n boundingRect.left >= pointTL.x &&\n boundingRect.left + boundingRect.width <= pointBR.x &&\n boundingRect.top >= pointTL.y &&\n boundingRect.top + boundingRect.height <= pointBR.y\n );\n },\n\n /**\n * Checks if point is inside the object\n * @param {fabric.Point} point Point to check against\n * @param {Object} [lines] object returned from @method _getImageLines\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if point is inside the object\n */\n containsPoint: function(point, lines, absolute, calculate) {\n var lines = lines || this._getImageLines(\n calculate ? this.calcCoords(absolute) : absolute ? this.aCoords : this.oCoords\n ),\n xPoints = this._findCrossPoints(point, lines);\n\n // if xPoints is odd then point is inside the object\n return (xPoints !== 0 && xPoints % 2 === 1);\n },\n\n /**\n * Checks if object is contained within the canvas with current viewportTransform\n * the check is done stopping at first point that appears on screen\n * @param {Boolean} [calculate] use coordinates of current position instead of .aCoords\n * @return {Boolean} true if object is fully or partially contained within canvas\n */\n isOnScreen: function(calculate) {\n if (!this.canvas) {\n return false;\n }\n var pointTL = this.canvas.vptCoords.tl, pointBR = this.canvas.vptCoords.br;\n var points = this.getCoords(true, calculate), point;\n for (var i = 0; i < 4; i++) {\n point = points[i];\n if (point.x <= pointBR.x && point.x >= pointTL.x && point.y <= pointBR.y && point.y >= pointTL.y) {\n return true;\n }\n }\n // no points on screen, check intersection with absolute coordinates\n if (this.intersectsWithRect(pointTL, pointBR, true, calculate)) {\n return true;\n }\n return this._containsCenterOfCanvas(pointTL, pointBR, calculate);\n },\n\n /**\n * Checks if the object contains the midpoint between canvas extremities\n * Does not make sense outside the context of isOnScreen and isPartiallyOnScreen\n * @private\n * @param {Fabric.Point} pointTL Top Left point\n * @param {Fabric.Point} pointBR Top Right point\n * @param {Boolean} calculate use coordinates of current position instead of .oCoords\n * @return {Boolean} true if the object contains the point\n */\n _containsCenterOfCanvas: function(pointTL, pointBR, calculate) {\n // worst case scenario the object is so big that contains the screen\n var centerPoint = { x: (pointTL.x + pointBR.x) / 2, y: (pointTL.y + pointBR.y) / 2 };\n if (this.containsPoint(centerPoint, null, true, calculate)) {\n return true;\n }\n return false;\n },\n\n /**\n * Checks if object is partially contained within the canvas with current viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object is partially contained within canvas\n */\n isPartiallyOnScreen: function(calculate) {\n if (!this.canvas) {\n return false;\n }\n var pointTL = this.canvas.vptCoords.tl, pointBR = this.canvas.vptCoords.br;\n if (this.intersectsWithRect(pointTL, pointBR, true, calculate)) {\n return true;\n }\n return this._containsCenterOfCanvas(pointTL, pointBR, calculate);\n },\n\n /**\n * Method that returns an object with the object edges in it, given the coordinates of the corners\n * @private\n * @param {Object} oCoords Coordinates of the object corners\n */\n _getImageLines: function(oCoords) {\n return {\n topline: {\n o: oCoords.tl,\n d: oCoords.tr\n },\n rightline: {\n o: oCoords.tr,\n d: oCoords.br\n },\n bottomline: {\n o: oCoords.br,\n d: oCoords.bl\n },\n leftline: {\n o: oCoords.bl,\n d: oCoords.tl\n }\n };\n },\n\n /**\n * Helper method to determine how many cross points are between the 4 object edges\n * and the horizontal line determined by a point on canvas\n * @private\n * @param {fabric.Point} point Point to check\n * @param {Object} lines Coordinates of the object being evaluated\n */\n // remove yi, not used but left code here just in case.\n _findCrossPoints: function(point, lines) {\n var b1, b2, a1, a2, xi, // yi,\n xcount = 0,\n iLine;\n\n for (var lineKey in lines) {\n iLine = lines[lineKey];\n // optimisation 1: line below point. no cross\n if ((iLine.o.y < point.y) && (iLine.d.y < point.y)) {\n continue;\n }\n // optimisation 2: line above point. no cross\n if ((iLine.o.y >= point.y) && (iLine.d.y >= point.y)) {\n continue;\n }\n // optimisation 3: vertical line case\n if ((iLine.o.x === iLine.d.x) && (iLine.o.x >= point.x)) {\n xi = iLine.o.x;\n // yi = point.y;\n }\n // calculate the intersection point\n else {\n b1 = 0;\n b2 = (iLine.d.y - iLine.o.y) / (iLine.d.x - iLine.o.x);\n a1 = point.y - b1 * point.x;\n a2 = iLine.o.y - b2 * iLine.o.x;\n\n xi = -(a1 - a2) / (b1 - b2);\n // yi = a1 + b1 * xi;\n }\n // dont count xi < point.x cases\n if (xi >= point.x) {\n xcount += 1;\n }\n // optimisation 4: specific for square images\n if (xcount === 2) {\n break;\n }\n }\n return xcount;\n },\n\n /**\n * Returns coordinates of object's bounding rectangle (left, top, width, height)\n * the box is intended as aligned to axis of canvas.\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords / .aCoords\n * @return {Object} Object with left, top, width, height properties\n */\n getBoundingRect: function(absolute, calculate) {\n var coords = this.getCoords(absolute, calculate);\n return fabric.util.makeBoundingBoxFromPoints(coords);\n },\n\n /**\n * Returns width of an object's bounding box counting transformations\n * before 2.0 it was named getWidth();\n * @return {Number} width value\n */\n getScaledWidth: function() {\n return this._getTransformedDimensions().x;\n },\n\n /**\n * Returns height of an object bounding box counting transformations\n * before 2.0 it was named getHeight();\n * @return {Number} height value\n */\n getScaledHeight: function() {\n return this._getTransformedDimensions().y;\n },\n\n /**\n * Makes sure the scale is valid and modifies it if necessary\n * @private\n * @param {Number} value\n * @return {Number}\n */\n _constrainScale: function(value) {\n if (Math.abs(value) < this.minScaleLimit) {\n if (value < 0) {\n return -this.minScaleLimit;\n }\n else {\n return this.minScaleLimit;\n }\n }\n else if (value === 0) {\n return 0.0001;\n }\n return value;\n },\n\n /**\n * Scales an object (equally by x and y)\n * @param {Number} value Scale factor\n * @return {fabric.Object} thisArg\n * @chainable\n */\n scale: function(value) {\n this._set('scaleX', value);\n this._set('scaleY', value);\n return this.setCoords();\n },\n\n /**\n * Scales an object to a given width, with respect to bounding box (scaling by x/y equally)\n * @param {Number} value New width value\n * @param {Boolean} absolute ignore viewport\n * @return {fabric.Object} thisArg\n * @chainable\n */\n scaleToWidth: function(value, absolute) {\n // adjust to bounding rect factor so that rotated shapes would fit as well\n var boundingRectFactor = this.getBoundingRect(absolute).width / this.getScaledWidth();\n return this.scale(value / this.width / boundingRectFactor);\n },\n\n /**\n * Scales an object to a given height, with respect to bounding box (scaling by x/y equally)\n * @param {Number} value New height value\n * @param {Boolean} absolute ignore viewport\n * @return {fabric.Object} thisArg\n * @chainable\n */\n scaleToHeight: function(value, absolute) {\n // adjust to bounding rect factor so that rotated shapes would fit as well\n var boundingRectFactor = this.getBoundingRect(absolute).height / this.getScaledHeight();\n return this.scale(value / this.height / boundingRectFactor);\n },\n\n /**\n * Calculates and returns the .coords of an object.\n * @return {Object} Object with tl, tr, br, bl ....\n * @chainable\n */\n calcCoords: function(absolute) {\n var rotateMatrix = this._calcRotateMatrix(),\n translateMatrix = this._calcTranslateMatrix(),\n startMatrix = multiplyMatrices(translateMatrix, rotateMatrix),\n vpt = this.getViewportTransform(),\n finalMatrix = absolute ? startMatrix : multiplyMatrices(vpt, startMatrix),\n dim = this._getTransformedDimensions(),\n w = dim.x / 2, h = dim.y / 2,\n tl = transformPoint({ x: -w, y: -h }, finalMatrix),\n tr = transformPoint({ x: w, y: -h }, finalMatrix),\n bl = transformPoint({ x: -w, y: h }, finalMatrix),\n br = transformPoint({ x: w, y: h }, finalMatrix);\n if (!absolute) {\n var padding = this.padding, angle = degreesToRadians(this.angle),\n cos = fabric.util.cos(angle), sin = fabric.util.sin(angle),\n cosP = cos * padding, sinP = sin * padding, cosPSinP = cosP + sinP,\n cosPMinusSinP = cosP - sinP;\n if (padding) {\n tl.x -= cosPMinusSinP;\n tl.y -= cosPSinP;\n tr.x += cosPSinP;\n tr.y -= cosPMinusSinP;\n bl.x -= cosPSinP;\n bl.y += cosPMinusSinP;\n br.x += cosPMinusSinP;\n br.y += cosPSinP;\n }\n var ml = new fabric.Point((tl.x + bl.x) / 2, (tl.y + bl.y) / 2),\n mt = new fabric.Point((tr.x + tl.x) / 2, (tr.y + tl.y) / 2),\n mr = new fabric.Point((br.x + tr.x) / 2, (br.y + tr.y) / 2),\n mb = new fabric.Point((br.x + bl.x) / 2, (br.y + bl.y) / 2),\n mtr = new fabric.Point(mt.x + sin * this.rotatingPointOffset, mt.y - cos * this.rotatingPointOffset);\n }\n\n // if (!absolute) {\n // var canvas = this.canvas;\n // setTimeout(function() {\n // canvas.contextTop.clearRect(0, 0, 700, 700);\n // canvas.contextTop.fillStyle = 'green';\n // canvas.contextTop.fillRect(mb.x, mb.y, 3, 3);\n // canvas.contextTop.fillRect(bl.x, bl.y, 3, 3);\n // canvas.contextTop.fillRect(br.x, br.y, 3, 3);\n // canvas.contextTop.fillRect(tl.x, tl.y, 3, 3);\n // canvas.contextTop.fillRect(tr.x, tr.y, 3, 3);\n // canvas.contextTop.fillRect(ml.x, ml.y, 3, 3);\n // canvas.contextTop.fillRect(mr.x, mr.y, 3, 3);\n // canvas.contextTop.fillRect(mt.x, mt.y, 3, 3);\n // canvas.contextTop.fillRect(mtr.x, mtr.y, 3, 3);\n // }, 50);\n // }\n\n var coords = {\n // corners\n tl: tl, tr: tr, br: br, bl: bl,\n };\n if (!absolute) {\n // middle\n coords.ml = ml;\n coords.mt = mt;\n coords.mr = mr;\n coords.mb = mb;\n // rotating point\n coords.mtr = mtr;\n }\n return coords;\n },\n\n /**\n * Sets corner position coordinates based on current angle, width and height.\n * See {@link https://github.com/kangax/fabric.js/wiki/When-to-call-setCoords|When-to-call-setCoords}\n * @param {Boolean} [ignoreZoom] set oCoords with or without the viewport transform.\n * @param {Boolean} [skipAbsolute] skip calculation of aCoords, useful in setViewportTransform\n * @return {fabric.Object} thisArg\n * @chainable\n */\n setCoords: function(ignoreZoom, skipAbsolute) {\n this.oCoords = this.calcCoords(ignoreZoom);\n if (!skipAbsolute) {\n this.aCoords = this.calcCoords(true);\n }\n\n // set coordinates of the draggable boxes in the corners used to scale/rotate the image\n ignoreZoom || (this._setCornerCoords && this._setCornerCoords());\n\n return this;\n },\n\n /**\n * calculate rotation matrix of an object\n * @return {Array} rotation matrix for the object\n */\n _calcRotateMatrix: function() {\n return fabric.util.calcRotateMatrix(this);\n },\n\n /**\n * calculate the translation matrix for an object transform\n * @return {Array} rotation matrix for the object\n */\n _calcTranslateMatrix: function() {\n var center = this.getCenterPoint();\n return [1, 0, 0, 1, center.x, center.y];\n },\n\n transformMatrixKey: function(skipGroup) {\n var sep = '_', prefix = '';\n if (!skipGroup && this.group) {\n prefix = this.group.transformMatrixKey(skipGroup) + sep;\n };\n return prefix + this.top + sep + this.left + sep + this.scaleX + sep + this.scaleY +\n sep + this.skewX + sep + this.skewY + sep + this.angle + sep + this.originX + sep + this.originY +\n sep + this.width + sep + this.height + sep + this.strokeWidth + this.flipX + this.flipY;\n },\n\n /**\n * calculate transform matrix that represents the current transformations from the\n * object's properties.\n * @param {Boolean} [skipGroup] return transform matrix for object not counting parent transformations\n * @return {Array} transform matrix for the object\n */\n calcTransformMatrix: function(skipGroup) {\n if (skipGroup) {\n return this.calcOwnMatrix();\n }\n var key = this.transformMatrixKey(), cache = this.matrixCache || (this.matrixCache = {});\n if (cache.key === key) {\n return cache.value;\n }\n var matrix = this.calcOwnMatrix();\n if (this.group) {\n matrix = multiplyMatrices(this.group.calcTransformMatrix(), matrix);\n }\n cache.key = key;\n cache.value = matrix;\n return matrix;\n },\n\n /**\n * calculate transform matrix that represents the current transformations from the\n * object's properties, this matrix does not include the group transformation\n * @return {Array} transform matrix for the object\n */\n calcOwnMatrix: function() {\n var key = this.transformMatrixKey(true), cache = this.ownMatrixCache || (this.ownMatrixCache = {});\n if (cache.key === key) {\n return cache.value;\n }\n var tMatrix = this._calcTranslateMatrix();\n this.translateX = tMatrix[4];\n this.translateY = tMatrix[5];\n cache.key = key;\n cache.value = fabric.util.composeMatrix(this);\n return cache.value;\n },\n\n /*\n * Calculate object dimensions from its properties\n * @private\n * @deprecated since 3.4.0, please use fabric.util._calcDimensionsTransformMatrix\n * not including or including flipX, flipY to emulate the flipping boolean\n * @return {Object} .x width dimension\n * @return {Object} .y height dimension\n */\n _calcDimensionsTransformMatrix: function(skewX, skewY, flipping) {\n return fabric.util.calcDimensionsMatrix({\n skewX: skewX,\n skewY: skewY,\n scaleX: this.scaleX * (flipping && this.flipX ? -1 : 1),\n scaleY: this.scaleY * (flipping && this.flipY ? -1 : 1)\n });\n },\n\n /*\n * Calculate object dimensions from its properties\n * @private\n * @return {Object} .x width dimension\n * @return {Object} .y height dimension\n */\n _getNonTransformedDimensions: function() {\n var strokeWidth = this.strokeWidth,\n w = this.width + strokeWidth,\n h = this.height + strokeWidth;\n return { x: w, y: h };\n },\n\n /*\n * Calculate object bounding box dimensions from its properties scale, skew.\n * The skewX and skewY parameters are used in the skewing logic path and\n * do not provide something useful to common use cases.\n * @param {Number} [skewX], a value to override current skewX\n * @param {Number} [skewY], a value to override current skewY\n * @private\n * @return {Object} .x width dimension\n * @return {Object} .y height dimension\n */\n _getTransformedDimensions: function(skewX, skewY) {\n if (typeof skewX === 'undefined') {\n skewX = this.skewX;\n }\n if (typeof skewY === 'undefined') {\n skewY = this.skewY;\n }\n var dimensions = this._getNonTransformedDimensions(), dimX, dimY,\n noSkew = skewX === 0 && skewY === 0;\n\n if (this.strokeUniform) {\n dimX = this.width;\n dimY = this.height;\n }\n else {\n dimX = dimensions.x;\n dimY = dimensions.y;\n }\n if (noSkew) {\n return this._finalizeDimensions(dimX * this.scaleX, dimY * this.scaleY);\n }\n else {\n dimX /= 2;\n dimY /= 2;\n }\n var points = [\n {\n x: -dimX,\n y: -dimY\n },\n {\n x: dimX,\n y: -dimY\n },\n {\n x: -dimX,\n y: dimY\n },\n {\n x: dimX,\n y: dimY\n }],\n transformMatrix = fabric.util.calcDimensionsMatrix({\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: skewX,\n skewY: skewY,\n }),\n bbox = fabric.util.makeBoundingBoxFromPoints(points, transformMatrix);\n return this._finalizeDimensions(bbox.width, bbox.height);\n },\n\n /*\n * Calculate object bounding box dimensions from its properties scale, skew.\n * @param Number width width of the bbox\n * @param Number height height of the bbox\n * @private\n * @return {Object} .x finalized width dimension\n * @return {Object} .y finalized height dimension\n */\n _finalizeDimensions: function(width, height) {\n return this.strokeUniform ?\n { x: width + this.strokeWidth, y: height + this.strokeWidth }\n :\n { x: width, y: height };\n },\n /*\n * Calculate object dimensions for controls, including padding and canvas zoom.\n * private\n */\n _calculateCurrentDimensions: function() {\n var vpt = this.getViewportTransform(),\n dim = this._getTransformedDimensions(),\n p = fabric.util.transformPoint(dim, vpt, true);\n\n return p.scalarAdd(2 * this.padding);\n },\n });\n})();\n\n\nfabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n /**\n * Moves an object to the bottom of the stack of drawn objects\n * @return {fabric.Object} thisArg\n * @chainable\n */\n sendToBack: function() {\n if (this.group) {\n fabric.StaticCanvas.prototype.sendToBack.call(this.group, this);\n }\n else if (this.canvas) {\n this.canvas.sendToBack(this);\n }\n return this;\n },\n\n /**\n * Moves an object to the top of the stack of drawn objects\n * @return {fabric.Object} thisArg\n * @chainable\n */\n bringToFront: function() {\n if (this.group) {\n fabric.StaticCanvas.prototype.bringToFront.call(this.group, this);\n }\n else if (this.canvas) {\n this.canvas.bringToFront(this);\n }\n return this;\n },\n\n /**\n * Moves an object down in stack of drawn objects\n * @param {Boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @return {fabric.Object} thisArg\n * @chainable\n */\n sendBackwards: function(intersecting) {\n if (this.group) {\n fabric.StaticCanvas.prototype.sendBackwards.call(this.group, this, intersecting);\n }\n else if (this.canvas) {\n this.canvas.sendBackwards(this, intersecting);\n }\n return this;\n },\n\n /**\n * Moves an object up in stack of drawn objects\n * @param {Boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @return {fabric.Object} thisArg\n * @chainable\n */\n bringForward: function(intersecting) {\n if (this.group) {\n fabric.StaticCanvas.prototype.bringForward.call(this.group, this, intersecting);\n }\n else if (this.canvas) {\n this.canvas.bringForward(this, intersecting);\n }\n return this;\n },\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {Number} index New position of object\n * @return {fabric.Object} thisArg\n * @chainable\n */\n moveTo: function(index) {\n if (this.group && this.group.type !== 'activeSelection') {\n fabric.StaticCanvas.prototype.moveTo.call(this.group, this, index);\n }\n else if (this.canvas) {\n this.canvas.moveTo(this, index);\n }\n return this;\n }\n});\n\n\n/* _TO_SVG_START_ */\n(function() {\n function getSvgColorString(prop, value) {\n if (!value) {\n return prop + ': none; ';\n }\n else if (value.toLive) {\n return prop + ': url(#SVGID_' + value.id + '); ';\n }\n else {\n var color = new fabric.Color(value),\n str = prop + ': ' + color.toRgb() + '; ',\n opacity = color.getAlpha();\n if (opacity !== 1) {\n //change the color in rgb + opacity\n str += prop + '-opacity: ' + opacity.toString() + '; ';\n }\n return str;\n }\n }\n\n var toFixed = fabric.util.toFixed;\n\n fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n /**\n * Returns styles-string for svg-export\n * @param {Boolean} skipShadow a boolean to skip shadow filter output\n * @return {String}\n */\n getSvgStyles: function(skipShadow) {\n\n var fillRule = this.fillRule ? this.fillRule : 'nonzero',\n strokeWidth = this.strokeWidth ? this.strokeWidth : '0',\n strokeDashArray = this.strokeDashArray ? this.strokeDashArray.join(' ') : 'none',\n strokeDashOffset = this.strokeDashOffset ? this.strokeDashOffset : '0',\n strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt',\n strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter',\n strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4',\n opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1',\n visibility = this.visible ? '' : ' visibility: hidden;',\n filter = skipShadow ? '' : this.getSvgFilter(),\n fill = getSvgColorString('fill', this.fill),\n stroke = getSvgColorString('stroke', this.stroke);\n\n return [\n stroke,\n 'stroke-width: ', strokeWidth, '; ',\n 'stroke-dasharray: ', strokeDashArray, '; ',\n 'stroke-linecap: ', strokeLineCap, '; ',\n 'stroke-dashoffset: ', strokeDashOffset, '; ',\n 'stroke-linejoin: ', strokeLineJoin, '; ',\n 'stroke-miterlimit: ', strokeMiterLimit, '; ',\n fill,\n 'fill-rule: ', fillRule, '; ',\n 'opacity: ', opacity, ';',\n filter,\n visibility\n ].join('');\n },\n\n /**\n * Returns styles-string for svg-export\n * @param {Object} style the object from which to retrieve style properties\n * @param {Boolean} useWhiteSpace a boolean to include an additional attribute in the style.\n * @return {String}\n */\n getSvgSpanStyles: function(style, useWhiteSpace) {\n var term = '; ';\n var fontFamily = style.fontFamily ?\n 'font-family: ' + (((style.fontFamily.indexOf('\\'') === -1 && style.fontFamily.indexOf('\"') === -1) ?\n '\\'' + style.fontFamily + '\\'' : style.fontFamily)) + term : '';\n var strokeWidth = style.strokeWidth ? 'stroke-width: ' + style.strokeWidth + term : '',\n fontFamily = fontFamily,\n fontSize = style.fontSize ? 'font-size: ' + style.fontSize + 'px' + term : '',\n fontStyle = style.fontStyle ? 'font-style: ' + style.fontStyle + term : '',\n fontWeight = style.fontWeight ? 'font-weight: ' + style.fontWeight + term : '',\n fill = style.fill ? getSvgColorString('fill', style.fill) : '',\n stroke = style.stroke ? getSvgColorString('stroke', style.stroke) : '',\n textDecoration = this.getSvgTextDecoration(style),\n deltaY = style.deltaY ? 'baseline-shift: ' + (-style.deltaY) + '; ' : '';\n if (textDecoration) {\n textDecoration = 'text-decoration: ' + textDecoration + term;\n }\n\n return [\n stroke,\n strokeWidth,\n fontFamily,\n fontSize,\n fontStyle,\n fontWeight,\n textDecoration,\n fill,\n deltaY,\n useWhiteSpace ? 'white-space: pre; ' : ''\n ].join('');\n },\n\n /**\n * Returns text-decoration property for svg-export\n * @param {Object} style the object from which to retrieve style properties\n * @return {String}\n */\n getSvgTextDecoration: function(style) {\n return ['overline', 'underline', 'line-through'].filter(function(decoration) {\n return style[decoration.replace('-', '')];\n }).join(' ');\n },\n\n /**\n * Returns filter for svg shadow\n * @return {String}\n */\n getSvgFilter: function() {\n return this.shadow ? 'filter: url(#SVGID_' + this.shadow.id + ');' : '';\n },\n\n /**\n * Returns id attribute for svg output\n * @return {String}\n */\n getSvgCommons: function() {\n return [\n this.id ? 'id=\"' + this.id + '\" ' : '',\n this.clipPath ? 'clip-path=\"url(#' + this.clipPath.clipPathId + ')\" ' : '',\n ].join('');\n },\n\n /**\n * Returns transform-string for svg-export\n * @param {Boolean} use the full transform or the single object one.\n * @return {String}\n */\n getSvgTransform: function(full, additionalTransform) {\n var transform = full ? this.calcTransformMatrix() : this.calcOwnMatrix(),\n svgTransform = 'transform=\"' + fabric.util.matrixToSVG(transform);\n return svgTransform +\n (additionalTransform || '') + this.getSvgTransformMatrix() + '\" ';\n },\n\n /**\n * Returns transform-string for svg-export from the transform matrix of single elements\n * @return {String}\n */\n getSvgTransformMatrix: function() {\n return this.transformMatrix ? ' ' + fabric.util.matrixToSVG(this.transformMatrix) : '';\n },\n\n _setSVGBg: function(textBgRects) {\n if (this.backgroundColor) {\n var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n textBgRects.push(\n '\\t\\t\\n');\n }\n },\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toSVG: function(reviver) {\n return this._createBaseSVGMarkup(this._toSVG(reviver), { reviver: reviver });\n },\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG: function(reviver) {\n return '\\t' + this._createBaseClipPathSVGMarkup(this._toSVG(reviver), { reviver: reviver });\n },\n\n /**\n * @private\n */\n _createBaseClipPathSVGMarkup: function(objectMarkup, options) {\n options = options || {};\n var reviver = options.reviver,\n additionalTransform = options.additionalTransform || '',\n commonPieces = [\n this.getSvgTransform(true, additionalTransform),\n this.getSvgCommons(),\n ].join(''),\n // insert commons in the markup, style and svgCommons\n index = objectMarkup.indexOf('COMMON_PARTS');\n objectMarkup[index] = commonPieces;\n return reviver ? reviver(objectMarkup.join('')) : objectMarkup.join('');\n },\n\n /**\n * @private\n */\n _createBaseSVGMarkup: function(objectMarkup, options) {\n options = options || {};\n var noStyle = options.noStyle,\n reviver = options.reviver,\n styleInfo = noStyle ? '' : 'style=\"' + this.getSvgStyles() + '\" ',\n shadowInfo = options.withShadow ? 'style=\"' + this.getSvgFilter() + '\" ' : '',\n clipPath = this.clipPath,\n vectorEffect = this.strokeUniform ? 'vector-effect=\"non-scaling-stroke\" ' : '',\n absoluteClipPath = clipPath && clipPath.absolutePositioned,\n stroke = this.stroke, fill = this.fill, shadow = this.shadow,\n commonPieces, markup = [], clipPathMarkup,\n // insert commons in the markup, style and svgCommons\n index = objectMarkup.indexOf('COMMON_PARTS'),\n additionalTransform = options.additionalTransform;\n if (clipPath) {\n clipPath.clipPathId = 'CLIPPATH_' + fabric.Object.__uid++;\n clipPathMarkup = '\\n' +\n clipPath.toClipPathSVG(reviver) +\n '\\n';\n }\n if (absoluteClipPath) {\n markup.push(\n '\\n'\n );\n }\n markup.push(\n '\\n'\n );\n commonPieces = [\n styleInfo,\n vectorEffect,\n noStyle ? '' : this.addPaintOrder(), ' ',\n additionalTransform ? 'transform=\"' + additionalTransform + '\" ' : '',\n ].join('');\n objectMarkup[index] = commonPieces;\n if (fill && fill.toLive) {\n markup.push(fill.toSVG(this));\n }\n if (stroke && stroke.toLive) {\n markup.push(stroke.toSVG(this));\n }\n if (shadow) {\n markup.push(shadow.toSVG(this));\n }\n if (clipPath) {\n markup.push(clipPathMarkup);\n }\n markup.push(objectMarkup.join(''));\n markup.push('\\n');\n absoluteClipPath && markup.push('\\n');\n return reviver ? reviver(markup.join('')) : markup.join('');\n },\n\n addPaintOrder: function() {\n return this.paintFirst !== 'fill' ? ' paint-order=\"' + this.paintFirst + '\" ' : '';\n }\n });\n})();\n/* _TO_SVG_END_ */\n\n\n(function() {\n\n var extend = fabric.util.object.extend,\n originalSet = 'stateProperties';\n\n /*\n Depends on `stateProperties`\n */\n function saveProps(origin, destination, props) {\n var tmpObj = { }, deep = true;\n props.forEach(function(prop) {\n tmpObj[prop] = origin[prop];\n });\n extend(origin[destination], tmpObj, deep);\n }\n\n function _isEqual(origValue, currentValue, firstPass) {\n if (origValue === currentValue) {\n // if the objects are identical, return\n return true;\n }\n else if (Array.isArray(origValue)) {\n if (!Array.isArray(currentValue) || origValue.length !== currentValue.length) {\n return false;\n }\n for (var i = 0, len = origValue.length; i < len; i++) {\n if (!_isEqual(origValue[i], currentValue[i])) {\n return false;\n }\n }\n return true;\n }\n else if (origValue && typeof origValue === 'object') {\n var keys = Object.keys(origValue), key;\n if (!currentValue ||\n typeof currentValue !== 'object' ||\n (!firstPass && keys.length !== Object.keys(currentValue).length)\n ) {\n return false;\n }\n for (var i = 0, len = keys.length; i < len; i++) {\n key = keys[i];\n // since clipPath is in the statefull cache list and the clipPath objects\n // would be iterated as an object, this would lead to possible infinite recursion\n if (key === 'canvas') {\n continue;\n }\n if (!_isEqual(origValue[key], currentValue[key])) {\n return false;\n }\n }\n return true;\n }\n }\n\n\n fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n /**\n * Returns true if object state (one of its state properties) was changed\n * @param {String} [propertySet] optional name for the set of property we want to save\n * @return {Boolean} true if instance' state has changed since `{@link fabric.Object#saveState}` was called\n */\n hasStateChanged: function(propertySet) {\n propertySet = propertySet || originalSet;\n var dashedPropertySet = '_' + propertySet;\n if (Object.keys(this[dashedPropertySet]).length < this[propertySet].length) {\n return true;\n }\n return !_isEqual(this[dashedPropertySet], this, true);\n },\n\n /**\n * Saves state of an object\n * @param {Object} [options] Object with additional `stateProperties` array to include when saving state\n * @return {fabric.Object} thisArg\n */\n saveState: function(options) {\n var propertySet = options && options.propertySet || originalSet,\n destination = '_' + propertySet;\n if (!this[destination]) {\n return this.setupState(options);\n }\n saveProps(this, destination, this[propertySet]);\n if (options && options.stateProperties) {\n saveProps(this, destination, options.stateProperties);\n }\n return this;\n },\n\n /**\n * Setups state of an object\n * @param {Object} [options] Object with additional `stateProperties` array to include when saving state\n * @return {fabric.Object} thisArg\n */\n setupState: function(options) {\n options = options || { };\n var propertySet = options.propertySet || originalSet;\n options.propertySet = propertySet;\n this['_' + propertySet] = { };\n this.saveState(options);\n return this;\n }\n });\n})();\n\n\n(function() {\n\n var degreesToRadians = fabric.util.degreesToRadians;\n\n fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n /**\n * The object interactivity controls.\n * @private\n */\n _controlsVisibility: null,\n\n /**\n * Determines which corner has been clicked\n * @private\n * @param {Object} pointer The pointer indicating the mouse position\n * @return {String|Boolean} corner code (tl, tr, bl, br, etc.), or false if nothing is found\n */\n _findTargetCorner: function(pointer) {\n // objects in group, anykind, are not self modificable,\n // must not return an hovered corner.\n if (!this.hasControls || this.group || (!this.canvas || this.canvas._activeObject !== this)) {\n return false;\n }\n\n var ex = pointer.x,\n ey = pointer.y,\n xPoints,\n lines;\n this.__corner = 0;\n for (var i in this.oCoords) {\n\n if (!this.isControlVisible(i)) {\n continue;\n }\n\n if (i === 'mtr' && !this.hasRotatingPoint) {\n continue;\n }\n\n if (this.get('lockUniScaling') &&\n (i === 'mt' || i === 'mr' || i === 'mb' || i === 'ml')) {\n continue;\n }\n\n lines = this._getImageLines(this.oCoords[i].corner);\n\n // debugging\n\n // canvas.contextTop.fillRect(lines.bottomline.d.x, lines.bottomline.d.y, 2, 2);\n // canvas.contextTop.fillRect(lines.bottomline.o.x, lines.bottomline.o.y, 2, 2);\n\n // canvas.contextTop.fillRect(lines.leftline.d.x, lines.leftline.d.y, 2, 2);\n // canvas.contextTop.fillRect(lines.leftline.o.x, lines.leftline.o.y, 2, 2);\n\n // canvas.contextTop.fillRect(lines.topline.d.x, lines.topline.d.y, 2, 2);\n // canvas.contextTop.fillRect(lines.topline.o.x, lines.topline.o.y, 2, 2);\n\n // canvas.contextTop.fillRect(lines.rightline.d.x, lines.rightline.d.y, 2, 2);\n // canvas.contextTop.fillRect(lines.rightline.o.x, lines.rightline.o.y, 2, 2);\n\n xPoints = this._findCrossPoints({ x: ex, y: ey }, lines);\n if (xPoints !== 0 && xPoints % 2 === 1) {\n this.__corner = i;\n return i;\n }\n }\n return false;\n },\n\n /**\n * Sets the coordinates of the draggable boxes in the corners of\n * the image used to scale/rotate it.\n * @private\n */\n _setCornerCoords: function() {\n var coords = this.oCoords,\n newTheta = degreesToRadians(45 - this.angle),\n /* Math.sqrt(2 * Math.pow(this.cornerSize, 2)) / 2, */\n /* 0.707106 stands for sqrt(2)/2 */\n cornerHypotenuse = this.cornerSize * 0.707106,\n cosHalfOffset = cornerHypotenuse * fabric.util.cos(newTheta),\n sinHalfOffset = cornerHypotenuse * fabric.util.sin(newTheta),\n x, y;\n\n for (var point in coords) {\n x = coords[point].x;\n y = coords[point].y;\n coords[point].corner = {\n tl: {\n x: x - sinHalfOffset,\n y: y - cosHalfOffset\n },\n tr: {\n x: x + cosHalfOffset,\n y: y - sinHalfOffset\n },\n bl: {\n x: x - cosHalfOffset,\n y: y + sinHalfOffset\n },\n br: {\n x: x + sinHalfOffset,\n y: y + cosHalfOffset\n }\n };\n }\n },\n\n /**\n * Draws a colored layer behind the object, inside its selection borders.\n * Requires public options: padding, selectionBackgroundColor\n * this function is called when the context is transformed\n * has checks to be skipped when the object is on a staticCanvas\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @return {fabric.Object} thisArg\n * @chainable\n */\n drawSelectionBackground: function(ctx) {\n if (!this.selectionBackgroundColor ||\n (this.canvas && !this.canvas.interactive) ||\n (this.canvas && this.canvas._activeObject !== this)\n ) {\n return this;\n }\n ctx.save();\n var center = this.getCenterPoint(), wh = this._calculateCurrentDimensions(),\n vpt = this.canvas.viewportTransform;\n ctx.translate(center.x, center.y);\n ctx.scale(1 / vpt[0], 1 / vpt[3]);\n ctx.rotate(degreesToRadians(this.angle));\n ctx.fillStyle = this.selectionBackgroundColor;\n ctx.fillRect(-wh.x / 2, -wh.y / 2, wh.x, wh.y);\n ctx.restore();\n return this;\n },\n\n /**\n * Draws borders of an object's bounding box.\n * Requires public properties: width, height\n * Requires public options: padding, borderColor\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {Object} styleOverride object to override the object style\n * @return {fabric.Object} thisArg\n * @chainable\n */\n drawBorders: function(ctx, styleOverride) {\n styleOverride = styleOverride || {};\n var wh = this._calculateCurrentDimensions(),\n strokeWidth = this.borderScaleFactor,\n width = wh.x + strokeWidth,\n height = wh.y + strokeWidth,\n drawRotatingPoint = typeof styleOverride.hasRotatingPoint !== 'undefined' ?\n styleOverride.hasRotatingPoint : this.hasRotatingPoint,\n hasControls = typeof styleOverride.hasControls !== 'undefined' ?\n styleOverride.hasControls : this.hasControls,\n rotatingPointOffset = typeof styleOverride.rotatingPointOffset !== 'undefined' ?\n styleOverride.rotatingPointOffset : this.rotatingPointOffset;\n\n ctx.save();\n ctx.strokeStyle = styleOverride.borderColor || this.borderColor;\n this._setLineDash(ctx, styleOverride.borderDashArray || this.borderDashArray, null);\n\n ctx.strokeRect(\n -width / 2,\n -height / 2,\n width,\n height\n );\n\n if (drawRotatingPoint && this.isControlVisible('mtr') && hasControls) {\n\n var rotateHeight = -height / 2;\n\n ctx.beginPath();\n ctx.moveTo(0, rotateHeight);\n ctx.lineTo(0, rotateHeight - rotatingPointOffset);\n ctx.stroke();\n }\n\n ctx.restore();\n return this;\n },\n\n /**\n * Draws borders of an object's bounding box when it is inside a group.\n * Requires public properties: width, height\n * Requires public options: padding, borderColor\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {object} options object representing current object parameters\n * @param {Object} styleOverride object to override the object style\n * @return {fabric.Object} thisArg\n * @chainable\n */\n drawBordersInGroup: function(ctx, options, styleOverride) {\n styleOverride = styleOverride || {};\n var p = { x: this.width, y: this.height },\n matrix = fabric.util.composeMatrix({\n scaleX: options.scaleX,\n scaleY: options.scaleY,\n skewX: options.skewX\n }),\n wh = fabric.util.transformPoint(p, matrix),\n strokeWidth = this.strokeWidth,\n borderScaleFactor = this.borderScaleFactor,\n width =\n wh.x + strokeWidth * (this.strokeUniform ? this.canvas.getZoom() : options.scaleX) + borderScaleFactor,\n height =\n wh.y + strokeWidth * (this.strokeUniform ? this.canvas.getZoom() : options.scaleY) + borderScaleFactor;\n ctx.save();\n this._setLineDash(ctx, styleOverride.borderDashArray || this.borderDashArray, null);\n ctx.strokeStyle = styleOverride.borderColor || this.borderColor;\n\n ctx.strokeRect(\n -width / 2,\n -height / 2,\n width,\n height\n );\n\n ctx.restore();\n return this;\n },\n\n /**\n * Draws corners of an object's bounding box.\n * Requires public properties: width, height\n * Requires public options: cornerSize, padding\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {Object} styleOverride object to override the object style\n * @return {fabric.Object} thisArg\n * @chainable\n */\n drawControls: function(ctx, styleOverride) {\n styleOverride = styleOverride || {};\n var wh = this._calculateCurrentDimensions(),\n width = wh.x,\n height = wh.y,\n scaleOffset = styleOverride.cornerSize || this.cornerSize,\n left = -(width + scaleOffset) / 2,\n top = -(height + scaleOffset) / 2,\n transparentCorners = typeof styleOverride.transparentCorners !== 'undefined' ?\n styleOverride.transparentCorners : this.transparentCorners,\n hasRotatingPoint = typeof styleOverride.hasRotatingPoint !== 'undefined' ?\n styleOverride.hasRotatingPoint : this.hasRotatingPoint,\n methodName = transparentCorners ? 'stroke' : 'fill';\n\n ctx.save();\n ctx.strokeStyle = ctx.fillStyle = styleOverride.cornerColor || this.cornerColor;\n if (!this.transparentCorners) {\n ctx.strokeStyle = styleOverride.cornerStrokeColor || this.cornerStrokeColor;\n }\n this._setLineDash(ctx, styleOverride.cornerDashArray || this.cornerDashArray, null);\n\n // top-left\n this._drawControl('tl', ctx, methodName,\n left,\n top, styleOverride);\n\n // top-right\n this._drawControl('tr', ctx, methodName,\n left + width,\n top, styleOverride);\n\n // bottom-left\n this._drawControl('bl', ctx, methodName,\n left,\n top + height, styleOverride);\n\n // bottom-right\n this._drawControl('br', ctx, methodName,\n left + width,\n top + height, styleOverride);\n\n if (!this.get('lockUniScaling')) {\n\n // middle-top\n this._drawControl('mt', ctx, methodName,\n left + width / 2,\n top, styleOverride);\n\n // middle-bottom\n this._drawControl('mb', ctx, methodName,\n left + width / 2,\n top + height, styleOverride);\n\n // middle-right\n this._drawControl('mr', ctx, methodName,\n left + width,\n top + height / 2, styleOverride);\n\n // middle-left\n this._drawControl('ml', ctx, methodName,\n left,\n top + height / 2, styleOverride);\n }\n\n // middle-top-rotate\n if (hasRotatingPoint) {\n this._drawControl('mtr', ctx, methodName,\n left + width / 2,\n top - this.rotatingPointOffset, styleOverride);\n }\n\n ctx.restore();\n\n return this;\n },\n\n /**\n * @private\n */\n _drawControl: function(control, ctx, methodName, left, top, styleOverride) {\n styleOverride = styleOverride || {};\n if (!this.isControlVisible(control)) {\n return;\n }\n var size = this.cornerSize, stroke = !this.transparentCorners && this.cornerStrokeColor;\n switch (styleOverride.cornerStyle || this.cornerStyle) {\n case 'circle':\n ctx.beginPath();\n ctx.arc(left + size / 2, top + size / 2, size / 2, 0, 2 * Math.PI, false);\n ctx[methodName]();\n if (stroke) {\n ctx.stroke();\n }\n break;\n default:\n this.transparentCorners || ctx.clearRect(left, top, size, size);\n ctx[methodName + 'Rect'](left, top, size, size);\n if (stroke) {\n ctx.strokeRect(left, top, size, size);\n }\n }\n },\n\n /**\n * Returns true if the specified control is visible, false otherwise.\n * @param {String} controlName The name of the control. Possible values are 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr'.\n * @returns {Boolean} true if the specified control is visible, false otherwise\n */\n isControlVisible: function(controlName) {\n return this._getControlsVisibility()[controlName];\n },\n\n /**\n * Sets the visibility of the specified control.\n * @param {String} controlName The name of the control. Possible values are 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr'.\n * @param {Boolean} visible true to set the specified control visible, false otherwise\n * @return {fabric.Object} thisArg\n * @chainable\n */\n setControlVisible: function(controlName, visible) {\n this._getControlsVisibility()[controlName] = visible;\n return this;\n },\n\n /**\n * Sets the visibility state of object controls.\n * @param {Object} [options] Options object\n * @param {Boolean} [options.bl] true to enable the bottom-left control, false to disable it\n * @param {Boolean} [options.br] true to enable the bottom-right control, false to disable it\n * @param {Boolean} [options.mb] true to enable the middle-bottom control, false to disable it\n * @param {Boolean} [options.ml] true to enable the middle-left control, false to disable it\n * @param {Boolean} [options.mr] true to enable the middle-right control, false to disable it\n * @param {Boolean} [options.mt] true to enable the middle-top control, false to disable it\n * @param {Boolean} [options.tl] true to enable the top-left control, false to disable it\n * @param {Boolean} [options.tr] true to enable the top-right control, false to disable it\n * @param {Boolean} [options.mtr] true to enable the middle-top-rotate control, false to disable it\n * @return {fabric.Object} thisArg\n * @chainable\n */\n setControlsVisibility: function(options) {\n options || (options = { });\n\n for (var p in options) {\n this.setControlVisible(p, options[p]);\n }\n return this;\n },\n\n /**\n * Returns the instance of the control visibility set for this object.\n * @private\n * @returns {Object}\n */\n _getControlsVisibility: function() {\n if (!this._controlsVisibility) {\n this._controlsVisibility = {\n tl: true,\n tr: true,\n br: true,\n bl: true,\n ml: true,\n mt: true,\n mr: true,\n mb: true,\n mtr: true\n };\n }\n return this._controlsVisibility;\n },\n\n /**\n * This callback function is called every time _discardActiveObject or _setActiveObject\n * try to to deselect this object. If the function returns true, the process is cancelled\n * @param {Object} [options] options sent from the upper functions\n * @param {Event} [options.e] event if the process is generated by an event\n */\n onDeselect: function() {\n // implemented by sub-classes, as needed.\n },\n\n\n /**\n * This callback function is called every time _discardActiveObject or _setActiveObject\n * try to to select this object. If the function returns true, the process is cancelled\n * @param {Object} [options] options sent from the upper functions\n * @param {Event} [options.e] event if the process is generated by an event\n */\n onSelect: function() {\n // implemented by sub-classes, as needed.\n }\n });\n})();\n\n\nfabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n\n /**\n * Animation duration (in ms) for fx* methods\n * @type Number\n * @default\n */\n FX_DURATION: 500,\n\n /**\n * Centers object horizontally with animation.\n * @param {fabric.Object} object Object to center\n * @param {Object} [callbacks] Callbacks object with optional \"onComplete\" and/or \"onChange\" properties\n * @param {Function} [callbacks.onComplete] Invoked on completion\n * @param {Function} [callbacks.onChange] Invoked on every step of animation\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n fxCenterObjectH: function (object, callbacks) {\n callbacks = callbacks || { };\n\n var empty = function() { },\n onComplete = callbacks.onComplete || empty,\n onChange = callbacks.onChange || empty,\n _this = this;\n\n fabric.util.animate({\n startValue: object.left,\n endValue: this.getCenter().left,\n duration: this.FX_DURATION,\n onChange: function(value) {\n object.set('left', value);\n _this.requestRenderAll();\n onChange();\n },\n onComplete: function() {\n object.setCoords();\n onComplete();\n }\n });\n\n return this;\n },\n\n /**\n * Centers object vertically with animation.\n * @param {fabric.Object} object Object to center\n * @param {Object} [callbacks] Callbacks object with optional \"onComplete\" and/or \"onChange\" properties\n * @param {Function} [callbacks.onComplete] Invoked on completion\n * @param {Function} [callbacks.onChange] Invoked on every step of animation\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n fxCenterObjectV: function (object, callbacks) {\n callbacks = callbacks || { };\n\n var empty = function() { },\n onComplete = callbacks.onComplete || empty,\n onChange = callbacks.onChange || empty,\n _this = this;\n\n fabric.util.animate({\n startValue: object.top,\n endValue: this.getCenter().top,\n duration: this.FX_DURATION,\n onChange: function(value) {\n object.set('top', value);\n _this.requestRenderAll();\n onChange();\n },\n onComplete: function() {\n object.setCoords();\n onComplete();\n }\n });\n\n return this;\n },\n\n /**\n * Same as `fabric.Canvas#remove` but animated\n * @param {fabric.Object} object Object to remove\n * @param {Object} [callbacks] Callbacks object with optional \"onComplete\" and/or \"onChange\" properties\n * @param {Function} [callbacks.onComplete] Invoked on completion\n * @param {Function} [callbacks.onChange] Invoked on every step of animation\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n fxRemove: function (object, callbacks) {\n callbacks = callbacks || { };\n\n var empty = function() { },\n onComplete = callbacks.onComplete || empty,\n onChange = callbacks.onChange || empty,\n _this = this;\n\n fabric.util.animate({\n startValue: object.opacity,\n endValue: 0,\n duration: this.FX_DURATION,\n onChange: function(value) {\n object.set('opacity', value);\n _this.requestRenderAll();\n onChange();\n },\n onComplete: function () {\n _this.remove(object);\n onComplete();\n }\n });\n\n return this;\n }\n});\n\nfabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n /**\n * Animates object's properties\n * @param {String|Object} property Property to animate (if string) or properties to animate (if object)\n * @param {Number|Object} value Value to animate property to (if string was given first) or options object\n * @return {fabric.Object} thisArg\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#animation}\n * @chainable\n *\n * As object — multiple properties\n *\n * object.animate({ left: ..., top: ... });\n * object.animate({ left: ..., top: ... }, { duration: ... });\n *\n * As string — one property\n *\n * object.animate('left', ...);\n * object.animate('left', { duration: ... });\n *\n */\n animate: function() {\n if (arguments[0] && typeof arguments[0] === 'object') {\n var propsToAnimate = [], prop, skipCallbacks;\n for (prop in arguments[0]) {\n propsToAnimate.push(prop);\n }\n for (var i = 0, len = propsToAnimate.length; i < len; i++) {\n prop = propsToAnimate[i];\n skipCallbacks = i !== len - 1;\n this._animate(prop, arguments[0][prop], arguments[1], skipCallbacks);\n }\n }\n else {\n this._animate.apply(this, arguments);\n }\n return this;\n },\n\n /**\n * @private\n * @param {String} property Property to animate\n * @param {String} to Value to animate to\n * @param {Object} [options] Options object\n * @param {Boolean} [skipCallbacks] When true, callbacks like onchange and oncomplete are not invoked\n */\n _animate: function(property, to, options, skipCallbacks) {\n var _this = this, propPair;\n\n to = to.toString();\n\n if (!options) {\n options = { };\n }\n else {\n options = fabric.util.object.clone(options);\n }\n\n if (~property.indexOf('.')) {\n propPair = property.split('.');\n }\n\n var currentValue = propPair\n ? this.get(propPair[0])[propPair[1]]\n : this.get(property);\n\n if (!('from' in options)) {\n options.from = currentValue;\n }\n\n if (~to.indexOf('=')) {\n to = currentValue + parseFloat(to.replace('=', ''));\n }\n else {\n to = parseFloat(to);\n }\n\n fabric.util.animate({\n startValue: options.from,\n endValue: to,\n byValue: options.by,\n easing: options.easing,\n duration: options.duration,\n abort: options.abort && function() {\n return options.abort.call(_this);\n },\n onChange: function(value, valueProgress, timeProgress) {\n if (propPair) {\n _this[propPair[0]][propPair[1]] = value;\n }\n else {\n _this.set(property, value);\n }\n if (skipCallbacks) {\n return;\n }\n options.onChange && options.onChange(value, valueProgress, timeProgress);\n },\n onComplete: function(value, valueProgress, timeProgress) {\n if (skipCallbacks) {\n return;\n }\n\n _this.setCoords();\n options.onComplete && options.onComplete(value, valueProgress, timeProgress);\n }\n });\n }\n});\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n clone = fabric.util.object.clone,\n coordProps = { x1: 1, x2: 1, y1: 1, y2: 1 },\n supportsLineDash = fabric.StaticCanvas.supports('setLineDash');\n\n if (fabric.Line) {\n fabric.warn('fabric.Line is already defined');\n return;\n }\n\n /**\n * Line class\n * @class fabric.Line\n * @extends fabric.Object\n * @see {@link fabric.Line#initialize} for constructor definition\n */\n fabric.Line = fabric.util.createClass(fabric.Object, /** @lends fabric.Line.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'line',\n\n /**\n * x value or first line edge\n * @type Number\n * @default\n */\n x1: 0,\n\n /**\n * y value or first line edge\n * @type Number\n * @default\n */\n y1: 0,\n\n /**\n * x value or second line edge\n * @type Number\n * @default\n */\n x2: 0,\n\n /**\n * y value or second line edge\n * @type Number\n * @default\n */\n y2: 0,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('x1', 'x2', 'y1', 'y2'),\n\n /**\n * Constructor\n * @param {Array} [points] Array of points\n * @param {Object} [options] Options object\n * @return {fabric.Line} thisArg\n */\n initialize: function(points, options) {\n if (!points) {\n points = [0, 0, 0, 0];\n }\n\n this.callSuper('initialize', options);\n\n this.set('x1', points[0]);\n this.set('y1', points[1]);\n this.set('x2', points[2]);\n this.set('y2', points[3]);\n\n this._setWidthHeight(options);\n },\n\n /**\n * @private\n * @param {Object} [options] Options\n */\n _setWidthHeight: function(options) {\n options || (options = { });\n\n this.width = Math.abs(this.x2 - this.x1);\n this.height = Math.abs(this.y2 - this.y1);\n\n this.left = 'left' in options\n ? options.left\n : this._getLeftToOriginX();\n\n this.top = 'top' in options\n ? options.top\n : this._getTopToOriginY();\n },\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set: function(key, value) {\n this.callSuper('_set', key, value);\n if (typeof coordProps[key] !== 'undefined') {\n this._setWidthHeight();\n }\n return this;\n },\n\n /**\n * @private\n * @return {Number} leftToOriginX Distance from left edge of canvas to originX of Line.\n */\n _getLeftToOriginX: makeEdgeToOriginGetter(\n { // property names\n origin: 'originX',\n axis1: 'x1',\n axis2: 'x2',\n dimension: 'width'\n },\n { // possible values of origin\n nearest: 'left',\n center: 'center',\n farthest: 'right'\n }\n ),\n\n /**\n * @private\n * @return {Number} topToOriginY Distance from top edge of canvas to originY of Line.\n */\n _getTopToOriginY: makeEdgeToOriginGetter(\n { // property names\n origin: 'originY',\n axis1: 'y1',\n axis2: 'y2',\n dimension: 'height'\n },\n { // possible values of origin\n nearest: 'top',\n center: 'center',\n farthest: 'bottom'\n }\n ),\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n ctx.beginPath();\n\n if (!this.strokeDashArray || this.strokeDashArray && supportsLineDash) {\n // move from center (of virtual box) to its left/top corner\n // we can't assume x1, y1 is top left and x2, y2 is bottom right\n var p = this.calcLinePoints();\n ctx.moveTo(p.x1, p.y1);\n ctx.lineTo(p.x2, p.y2);\n }\n\n ctx.lineWidth = this.strokeWidth;\n\n // TODO: test this\n // make sure setting \"fill\" changes color of a line\n // (by copying fillStyle to strokeStyle, since line is stroked, not filled)\n var origStrokeStyle = ctx.strokeStyle;\n ctx.strokeStyle = this.stroke || ctx.fillStyle;\n this.stroke && this._renderStroke(ctx);\n ctx.strokeStyle = origStrokeStyle;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderDashedStroke: function(ctx) {\n var p = this.calcLinePoints();\n\n ctx.beginPath();\n fabric.util.drawDashedLine(ctx, p.x1, p.y1, p.x2, p.y2, this.strokeDashArray);\n ctx.closePath();\n },\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Object} center point from element coordinates\n */\n _findCenterFromElement: function() {\n return {\n x: (this.x1 + this.x2) / 2,\n y: (this.y1 + this.y2) / 2,\n };\n },\n\n /**\n * Returns object representation of an instance\n * @methd toObject\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return extend(this.callSuper('toObject', propertiesToInclude), this.calcLinePoints());\n },\n\n /*\n * Calculate object dimensions from its properties\n * @private\n */\n _getNonTransformedDimensions: function() {\n var dim = this.callSuper('_getNonTransformedDimensions');\n if (this.strokeLineCap === 'butt') {\n if (this.width === 0) {\n dim.y -= this.strokeWidth;\n }\n if (this.height === 0) {\n dim.x -= this.strokeWidth;\n }\n }\n return dim;\n },\n\n /**\n * Recalculates line points given width and height\n * @private\n */\n calcLinePoints: function() {\n var xMult = this.x1 <= this.x2 ? -1 : 1,\n yMult = this.y1 <= this.y2 ? -1 : 1,\n x1 = (xMult * this.width * 0.5),\n y1 = (yMult * this.height * 0.5),\n x2 = (xMult * this.width * -0.5),\n y2 = (yMult * this.height * -0.5);\n\n return {\n x1: x1,\n x2: x2,\n y1: y1,\n y2: y2\n };\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var p = this.calcLinePoints();\n return [\n '\\n'\n ];\n },\n /* _TO_SVG_END_ */\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Line.fromElement})\n * @static\n * @memberOf fabric.Line\n * @see http://www.w3.org/TR/SVG/shapes.html#LineElement\n */\n fabric.Line.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x1 y1 x2 y2'.split(' '));\n\n /**\n * Returns fabric.Line instance from an SVG element\n * @static\n * @memberOf fabric.Line\n * @param {SVGElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {Function} [callback] callback function invoked after parsing\n */\n fabric.Line.fromElement = function(element, callback, options) {\n options = options || { };\n var parsedAttributes = fabric.parseAttributes(element, fabric.Line.ATTRIBUTE_NAMES),\n points = [\n parsedAttributes.x1 || 0,\n parsedAttributes.y1 || 0,\n parsedAttributes.x2 || 0,\n parsedAttributes.y2 || 0\n ];\n callback(new fabric.Line(points, extend(parsedAttributes, options)));\n };\n /* _FROM_SVG_END_ */\n\n /**\n * Returns fabric.Line instance from an object representation\n * @static\n * @memberOf fabric.Line\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as first argument\n */\n fabric.Line.fromObject = function(object, callback) {\n function _callback(instance) {\n delete instance.points;\n callback && callback(instance);\n };\n var options = clone(object, true);\n options.points = [object.x1, object.y1, object.x2, object.y2];\n fabric.Object._fromObject('Line', options, _callback, 'points');\n };\n\n /**\n * Produces a function that calculates distance from canvas edge to Line origin.\n */\n function makeEdgeToOriginGetter(propertyNames, originValues) {\n var origin = propertyNames.origin,\n axis1 = propertyNames.axis1,\n axis2 = propertyNames.axis2,\n dimension = propertyNames.dimension,\n nearest = originValues.nearest,\n center = originValues.center,\n farthest = originValues.farthest;\n\n return function() {\n switch (this.get(origin)) {\n case nearest:\n return Math.min(this.get(axis1), this.get(axis2));\n case center:\n return Math.min(this.get(axis1), this.get(axis2)) + (0.5 * this.get(dimension));\n case farthest:\n return Math.max(this.get(axis1), this.get(axis2));\n }\n };\n\n }\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n pi = Math.PI;\n\n if (fabric.Circle) {\n fabric.warn('fabric.Circle is already defined.');\n return;\n }\n\n /**\n * Circle class\n * @class fabric.Circle\n * @extends fabric.Object\n * @see {@link fabric.Circle#initialize} for constructor definition\n */\n fabric.Circle = fabric.util.createClass(fabric.Object, /** @lends fabric.Circle.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'circle',\n\n /**\n * Radius of this circle\n * @type Number\n * @default\n */\n radius: 0,\n\n /**\n * Start angle of the circle, moving clockwise\n * deprectated type, this should be in degree, this was an oversight.\n * probably will change to degrees in next major version\n * @type Number\n * @default 0\n */\n startAngle: 0,\n\n /**\n * End angle of the circle\n * deprectated type, this should be in degree, this was an oversight.\n * probably will change to degrees in next major version\n * @type Number\n * @default 2Pi\n */\n endAngle: pi * 2,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('radius', 'startAngle', 'endAngle'),\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {fabric.Circle} thisArg\n */\n _set: function(key, value) {\n this.callSuper('_set', key, value);\n\n if (key === 'radius') {\n this.setRadius(value);\n }\n\n return this;\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return this.callSuper('toObject', ['radius', 'startAngle', 'endAngle'].concat(propertiesToInclude));\n },\n\n /* _TO_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var svgString, x = 0, y = 0,\n angle = (this.endAngle - this.startAngle) % ( 2 * pi);\n\n if (angle === 0) {\n svgString = [\n '\\n'\n ];\n }\n else {\n var startX = fabric.util.cos(this.startAngle) * this.radius,\n startY = fabric.util.sin(this.startAngle) * this.radius,\n endX = fabric.util.cos(this.endAngle) * this.radius,\n endY = fabric.util.sin(this.endAngle) * this.radius,\n largeFlag = angle > pi ? '1' : '0';\n svgString = [\n '\\n'\n ];\n }\n return svgString;\n },\n /* _TO_SVG_END_ */\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render: function(ctx) {\n ctx.beginPath();\n ctx.arc(\n 0,\n 0,\n this.radius,\n this.startAngle,\n this.endAngle, false);\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusX: function() {\n return this.get('radius') * this.get('scaleX');\n },\n\n /**\n * Returns vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusY: function() {\n return this.get('radius') * this.get('scaleY');\n },\n\n /**\n * Sets radius of an object (and updates width accordingly)\n * @return {fabric.Circle} thisArg\n */\n setRadius: function(value) {\n this.radius = value;\n return this.set('width', value * 2).set('height', value * 2);\n },\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Circle.fromElement})\n * @static\n * @memberOf fabric.Circle\n * @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement\n */\n fabric.Circle.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('cx cy r'.split(' '));\n\n /**\n * Returns {@link fabric.Circle} instance from an SVG element\n * @static\n * @memberOf fabric.Circle\n * @param {SVGElement} element Element to parse\n * @param {Function} [callback] Options callback invoked after parsing is finished\n * @param {Object} [options] Options object\n * @throws {Error} If value of `r` attribute is missing or invalid\n */\n fabric.Circle.fromElement = function(element, callback) {\n var parsedAttributes = fabric.parseAttributes(element, fabric.Circle.ATTRIBUTE_NAMES);\n\n if (!isValidRadius(parsedAttributes)) {\n throw new Error('value of `r` attribute is required and can not be negative');\n }\n\n parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.radius;\n parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.radius;\n callback(new fabric.Circle(parsedAttributes));\n };\n\n /**\n * @private\n */\n function isValidRadius(attributes) {\n return (('radius' in attributes) && (attributes.radius >= 0));\n }\n /* _FROM_SVG_END_ */\n\n /**\n * Returns {@link fabric.Circle} instance from an object representation\n * @static\n * @memberOf fabric.Circle\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as first argument\n * @return {Object} Instance of fabric.Circle\n */\n fabric.Circle.fromObject = function(object, callback) {\n return fabric.Object._fromObject('Circle', object, callback);\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.Triangle) {\n fabric.warn('fabric.Triangle is already defined');\n return;\n }\n\n /**\n * Triangle class\n * @class fabric.Triangle\n * @extends fabric.Object\n * @return {fabric.Triangle} thisArg\n * @see {@link fabric.Triangle#initialize} for constructor definition\n */\n fabric.Triangle = fabric.util.createClass(fabric.Object, /** @lends fabric.Triangle.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'triangle',\n\n /**\n * Width is set to 100 to compensate the old initialize code that was setting it to 100\n * @type Number\n * @default\n */\n width: 100,\n\n /**\n * Height is set to 100 to compensate the old initialize code that was setting it to 100\n * @type Number\n * @default\n */\n height: 100,\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n var widthBy2 = this.width / 2,\n heightBy2 = this.height / 2;\n\n ctx.beginPath();\n ctx.moveTo(-widthBy2, heightBy2);\n ctx.lineTo(0, -heightBy2);\n ctx.lineTo(widthBy2, heightBy2);\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderDashedStroke: function(ctx) {\n var widthBy2 = this.width / 2,\n heightBy2 = this.height / 2;\n\n ctx.beginPath();\n fabric.util.drawDashedLine(ctx, -widthBy2, heightBy2, 0, -heightBy2, this.strokeDashArray);\n fabric.util.drawDashedLine(ctx, 0, -heightBy2, widthBy2, heightBy2, this.strokeDashArray);\n fabric.util.drawDashedLine(ctx, widthBy2, heightBy2, -widthBy2, heightBy2, this.strokeDashArray);\n ctx.closePath();\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var widthBy2 = this.width / 2,\n heightBy2 = this.height / 2,\n points = [\n -widthBy2 + ' ' + heightBy2,\n '0 ' + -heightBy2,\n widthBy2 + ' ' + heightBy2\n ].join(',');\n return [\n ''\n ];\n },\n /* _TO_SVG_END_ */\n });\n\n /**\n * Returns {@link fabric.Triangle} instance from an object representation\n * @static\n * @memberOf fabric.Triangle\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as first argument\n */\n fabric.Triangle.fromObject = function(object, callback) {\n return fabric.Object._fromObject('Triangle', object, callback);\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n piBy2 = Math.PI * 2;\n\n if (fabric.Ellipse) {\n fabric.warn('fabric.Ellipse is already defined.');\n return;\n }\n\n /**\n * Ellipse class\n * @class fabric.Ellipse\n * @extends fabric.Object\n * @return {fabric.Ellipse} thisArg\n * @see {@link fabric.Ellipse#initialize} for constructor definition\n */\n fabric.Ellipse = fabric.util.createClass(fabric.Object, /** @lends fabric.Ellipse.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'ellipse',\n\n /**\n * Horizontal radius\n * @type Number\n * @default\n */\n rx: 0,\n\n /**\n * Vertical radius\n * @type Number\n * @default\n */\n ry: 0,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('rx', 'ry'),\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n * @return {fabric.Ellipse} thisArg\n */\n initialize: function(options) {\n this.callSuper('initialize', options);\n this.set('rx', options && options.rx || 0);\n this.set('ry', options && options.ry || 0);\n },\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {fabric.Ellipse} thisArg\n */\n _set: function(key, value) {\n this.callSuper('_set', key, value);\n switch (key) {\n\n case 'rx':\n this.rx = value;\n this.set('width', value * 2);\n break;\n\n case 'ry':\n this.ry = value;\n this.set('height', value * 2);\n break;\n\n }\n return this;\n },\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRx: function() {\n return this.get('rx') * this.get('scaleX');\n },\n\n /**\n * Returns Vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRy: function() {\n return this.get('ry') * this.get('scaleY');\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return this.callSuper('toObject', ['rx', 'ry'].concat(propertiesToInclude));\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n return [\n '\\n'\n ];\n },\n /* _TO_SVG_END_ */\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render: function(ctx) {\n ctx.beginPath();\n ctx.save();\n ctx.transform(1, 0, 0, this.ry / this.rx, 0, 0);\n ctx.arc(\n 0,\n 0,\n this.rx,\n 0,\n piBy2,\n false);\n ctx.restore();\n this._renderPaintInOrder(ctx);\n },\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Ellipse.fromElement})\n * @static\n * @memberOf fabric.Ellipse\n * @see http://www.w3.org/TR/SVG/shapes.html#EllipseElement\n */\n fabric.Ellipse.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('cx cy rx ry'.split(' '));\n\n /**\n * Returns {@link fabric.Ellipse} instance from an SVG element\n * @static\n * @memberOf fabric.Ellipse\n * @param {SVGElement} element Element to parse\n * @param {Function} [callback] Options callback invoked after parsing is finished\n * @return {fabric.Ellipse}\n */\n fabric.Ellipse.fromElement = function(element, callback) {\n\n var parsedAttributes = fabric.parseAttributes(element, fabric.Ellipse.ATTRIBUTE_NAMES);\n\n parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx;\n parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry;\n callback(new fabric.Ellipse(parsedAttributes));\n };\n /* _FROM_SVG_END_ */\n\n /**\n * Returns {@link fabric.Ellipse} instance from an object representation\n * @static\n * @memberOf fabric.Ellipse\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as first argument\n * @return {fabric.Ellipse}\n */\n fabric.Ellipse.fromObject = function(object, callback) {\n return fabric.Object._fromObject('Ellipse', object, callback);\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend;\n\n if (fabric.Rect) {\n fabric.warn('fabric.Rect is already defined');\n return;\n }\n\n /**\n * Rectangle class\n * @class fabric.Rect\n * @extends fabric.Object\n * @return {fabric.Rect} thisArg\n * @see {@link fabric.Rect#initialize} for constructor definition\n */\n fabric.Rect = fabric.util.createClass(fabric.Object, /** @lends fabric.Rect.prototype */ {\n\n /**\n * List of properties to consider when checking if state of an object is changed ({@link fabric.Object#hasStateChanged})\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: fabric.Object.prototype.stateProperties.concat('rx', 'ry'),\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'rect',\n\n /**\n * Horizontal border radius\n * @type Number\n * @default\n */\n rx: 0,\n\n /**\n * Vertical border radius\n * @type Number\n * @default\n */\n ry: 0,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('rx', 'ry'),\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n * @return {Object} thisArg\n */\n initialize: function(options) {\n this.callSuper('initialize', options);\n this._initRxRy();\n },\n\n /**\n * Initializes rx/ry attributes\n * @private\n */\n _initRxRy: function() {\n if (this.rx && !this.ry) {\n this.ry = this.rx;\n }\n else if (this.ry && !this.rx) {\n this.rx = this.ry;\n }\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n\n // 1x1 case (used in spray brush) optimization was removed because\n // with caching and higher zoom level this makes more damage than help\n\n var rx = this.rx ? Math.min(this.rx, this.width / 2) : 0,\n ry = this.ry ? Math.min(this.ry, this.height / 2) : 0,\n w = this.width,\n h = this.height,\n x = -this.width / 2,\n y = -this.height / 2,\n isRounded = rx !== 0 || ry !== 0,\n /* \"magic number\" for bezier approximations of arcs (http://itc.ktu.lt/itc354/Riskus354.pdf) */\n k = 1 - 0.5522847498;\n ctx.beginPath();\n\n ctx.moveTo(x + rx, y);\n\n ctx.lineTo(x + w - rx, y);\n isRounded && ctx.bezierCurveTo(x + w - k * rx, y, x + w, y + k * ry, x + w, y + ry);\n\n ctx.lineTo(x + w, y + h - ry);\n isRounded && ctx.bezierCurveTo(x + w, y + h - k * ry, x + w - k * rx, y + h, x + w - rx, y + h);\n\n ctx.lineTo(x + rx, y + h);\n isRounded && ctx.bezierCurveTo(x + k * rx, y + h, x, y + h - k * ry, x, y + h - ry);\n\n ctx.lineTo(x, y + ry);\n isRounded && ctx.bezierCurveTo(x, y + k * ry, x + k * rx, y, x + rx, y);\n\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderDashedStroke: function(ctx) {\n var x = -this.width / 2,\n y = -this.height / 2,\n w = this.width,\n h = this.height;\n\n ctx.beginPath();\n fabric.util.drawDashedLine(ctx, x, y, x + w, y, this.strokeDashArray);\n fabric.util.drawDashedLine(ctx, x + w, y, x + w, y + h, this.strokeDashArray);\n fabric.util.drawDashedLine(ctx, x + w, y + h, x, y + h, this.strokeDashArray);\n fabric.util.drawDashedLine(ctx, x, y + h, x, y, this.strokeDashArray);\n ctx.closePath();\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return this.callSuper('toObject', ['rx', 'ry'].concat(propertiesToInclude));\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var x = -this.width / 2, y = -this.height / 2;\n return [\n '\\n'\n ];\n },\n /* _TO_SVG_END_ */\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by `fabric.Rect.fromElement`)\n * @static\n * @memberOf fabric.Rect\n * @see: http://www.w3.org/TR/SVG/shapes.html#RectElement\n */\n fabric.Rect.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x y rx ry width height'.split(' '));\n\n /**\n * Returns {@link fabric.Rect} instance from an SVG element\n * @static\n * @memberOf fabric.Rect\n * @param {SVGElement} element Element to parse\n * @param {Function} callback callback function invoked after parsing\n * @param {Object} [options] Options object\n */\n fabric.Rect.fromElement = function(element, callback, options) {\n if (!element) {\n return callback(null);\n }\n options = options || { };\n\n var parsedAttributes = fabric.parseAttributes(element, fabric.Rect.ATTRIBUTE_NAMES);\n\n parsedAttributes.left = parsedAttributes.left || 0;\n parsedAttributes.top = parsedAttributes.top || 0;\n parsedAttributes.height = parsedAttributes.height || 0;\n parsedAttributes.width = parsedAttributes.width || 0;\n var rect = new fabric.Rect(extend((options ? fabric.util.object.clone(options) : { }), parsedAttributes));\n rect.visible = rect.visible && rect.width > 0 && rect.height > 0;\n callback(rect);\n };\n /* _FROM_SVG_END_ */\n\n /**\n * Returns {@link fabric.Rect} instance from an object representation\n * @static\n * @memberOf fabric.Rect\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Rect instance is created\n */\n fabric.Rect.fromObject = function(object, callback) {\n return fabric.Object._fromObject('Rect', object, callback);\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n min = fabric.util.array.min,\n max = fabric.util.array.max,\n toFixed = fabric.util.toFixed;\n\n if (fabric.Polyline) {\n fabric.warn('fabric.Polyline is already defined');\n return;\n }\n\n /**\n * Polyline class\n * @class fabric.Polyline\n * @extends fabric.Object\n * @see {@link fabric.Polyline#initialize} for constructor definition\n */\n fabric.Polyline = fabric.util.createClass(fabric.Object, /** @lends fabric.Polyline.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'polyline',\n\n /**\n * Points array\n * @type Array\n * @default\n */\n points: null,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('points'),\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {fabric.Polyline} thisArg\n * @example\n * var poly = new fabric.Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n initialize: function(points, options) {\n options = options || {};\n this.points = points || [];\n this.callSuper('initialize', options);\n this._setPositionDimensions(options);\n },\n\n _setPositionDimensions: function(options) {\n var calcDim = this._calcDimensions(options), correctLeftTop;\n this.width = calcDim.width;\n this.height = calcDim.height;\n if (!options.fromSVG) {\n correctLeftTop = this.translateToGivenOrigin(\n { x: calcDim.left - this.strokeWidth / 2, y: calcDim.top - this.strokeWidth / 2 },\n 'left',\n 'top',\n this.originX,\n this.originY\n );\n }\n if (typeof options.left === 'undefined') {\n this.left = options.fromSVG ? calcDim.left : correctLeftTop.x;\n }\n if (typeof options.top === 'undefined') {\n this.top = options.fromSVG ? calcDim.top : correctLeftTop.y;\n }\n this.pathOffset = {\n x: calcDim.left + this.width / 2,\n y: calcDim.top + this.height / 2\n };\n },\n\n /**\n * Calculate the polygon min and max point from points array,\n * returning an object with left, top, widht, height to measure the\n * polygon size\n * @return {Object} object.left X coordinate of the polygon leftmost point\n * @return {Object} object.top Y coordinate of the polygon topmost point\n * @return {Object} object.width distance between X coordinates of the polygon leftmost and rightmost point\n * @return {Object} object.height distance between Y coordinates of the polygon topmost and bottommost point\n * @private\n */\n _calcDimensions: function() {\n\n var points = this.points,\n minX = min(points, 'x') || 0,\n minY = min(points, 'y') || 0,\n maxX = max(points, 'x') || 0,\n maxY = max(points, 'y') || 0,\n width = (maxX - minX),\n height = (maxY - minY);\n\n return {\n left: minX,\n top: minY,\n width: width,\n height: height\n };\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return extend(this.callSuper('toObject', propertiesToInclude), {\n points: this.points.concat()\n });\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var points = [], diffX = this.pathOffset.x, diffY = this.pathOffset.y,\n NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n\n for (var i = 0, len = this.points.length; i < len; i++) {\n points.push(\n toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS), ',',\n toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS), ' '\n );\n }\n return [\n '<' + this.type + ' ', 'COMMON_PARTS',\n 'points=\"', points.join(''),\n '\" />\\n'\n ];\n },\n /* _TO_SVG_END_ */\n\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n commonRender: function(ctx) {\n var point, len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return false;\n }\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n for (var i = 0; i < len; i++) {\n point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n return true;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n if (!this.commonRender(ctx)) {\n return;\n }\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderDashedStroke: function(ctx) {\n var p1, p2;\n\n ctx.beginPath();\n for (var i = 0, len = this.points.length; i < len; i++) {\n p1 = this.points[i];\n p2 = this.points[i + 1] || p1;\n fabric.util.drawDashedLine(ctx, p1.x, p1.y, p2.x, p2.y, this.strokeDashArray);\n }\n },\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity: function() {\n return this.get('points').length;\n }\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Polyline.fromElement})\n * @static\n * @memberOf fabric.Polyline\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n fabric.Polyline.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat();\n\n /**\n * Returns fabric.Polyline instance from an SVG element\n * @static\n * @memberOf fabric.Polyline\n * @param {SVGElement} element Element to parser\n * @param {Function} callback callback function invoked after parsing\n * @param {Object} [options] Options object\n */\n fabric.Polyline.fromElementGenerator = function(_class) {\n return function(element, callback, options) {\n if (!element) {\n return callback(null);\n }\n options || (options = { });\n\n var points = fabric.parsePointsAttribute(element.getAttribute('points')),\n parsedAttributes = fabric.parseAttributes(element, fabric[_class].ATTRIBUTE_NAMES);\n parsedAttributes.fromSVG = true;\n callback(new fabric[_class](points, extend(parsedAttributes, options)));\n };\n };\n\n fabric.Polyline.fromElement = fabric.Polyline.fromElementGenerator('Polyline');\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns fabric.Polyline instance from an object representation\n * @static\n * @memberOf fabric.Polyline\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Path instance is created\n */\n fabric.Polyline.fromObject = function(object, callback) {\n return fabric.Object._fromObject('Polyline', object, callback, 'points');\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.Polygon) {\n fabric.warn('fabric.Polygon is already defined');\n return;\n }\n\n /**\n * Polygon class\n * @class fabric.Polygon\n * @extends fabric.Polyline\n * @see {@link fabric.Polygon#initialize} for constructor definition\n */\n fabric.Polygon = fabric.util.createClass(fabric.Polyline, /** @lends fabric.Polygon.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'polygon',\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n if (!this.commonRender(ctx)) {\n return;\n }\n ctx.closePath();\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderDashedStroke: function(ctx) {\n this.callSuper('_renderDashedStroke', ctx);\n ctx.closePath();\n },\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by `fabric.Polygon.fromElement`)\n * @static\n * @memberOf fabric.Polygon\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolygonElement\n */\n fabric.Polygon.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat();\n\n /**\n * Returns {@link fabric.Polygon} instance from an SVG element\n * @static\n * @memberOf fabric.Polygon\n * @param {SVGElement} element Element to parse\n * @param {Function} callback callback function invoked after parsing\n * @param {Object} [options] Options object\n */\n fabric.Polygon.fromElement = fabric.Polyline.fromElementGenerator('Polygon');\n /* _FROM_SVG_END_ */\n\n /**\n * Returns fabric.Polygon instance from an object representation\n * @static\n * @memberOf fabric.Polygon\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Path instance is created\n */\n fabric.Polygon.fromObject = function(object, callback) {\n return fabric.Object._fromObject('Polygon', object, callback, 'points');\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n min = fabric.util.array.min,\n max = fabric.util.array.max,\n extend = fabric.util.object.extend,\n _toString = Object.prototype.toString,\n drawArc = fabric.util.drawArc,\n toFixed = fabric.util.toFixed,\n commandLengths = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7\n },\n repeatedCommands = {\n m: 'l',\n M: 'L'\n };\n\n if (fabric.Path) {\n fabric.warn('fabric.Path is already defined');\n return;\n }\n\n /**\n * Path class\n * @class fabric.Path\n * @extends fabric.Object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#path_and_pathgroup}\n * @see {@link fabric.Path#initialize} for constructor definition\n */\n fabric.Path = fabric.util.createClass(fabric.Object, /** @lends fabric.Path.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'path',\n\n /**\n * Array of path points\n * @type Array\n * @default\n */\n path: null,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('path', 'fillRule'),\n\n stateProperties: fabric.Object.prototype.stateProperties.concat('path'),\n\n /**\n * Constructor\n * @param {Array|String} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {Object} [options] Options object\n * @return {fabric.Path} thisArg\n */\n initialize: function(path, options) {\n options = options || { };\n this.callSuper('initialize', options);\n\n if (!path) {\n path = [];\n }\n\n var fromArray = _toString.call(path) === '[object Array]';\n\n this.path = fromArray\n ? path\n // one of commands (m,M,l,L,q,Q,c,C,etc.) followed by non-command characters (i.e. command values)\n : path.match && path.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);\n\n if (!this.path) {\n return;\n }\n\n if (!fromArray) {\n this.path = this._parsePath();\n }\n\n fabric.Polyline.prototype._setPositionDimensions.call(this, options);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _renderPathCommands: function(ctx) {\n var current, // current instruction\n previous = null,\n subpathStartX = 0,\n subpathStartY = 0,\n x = 0, // current x\n y = 0, // current y\n controlX = 0, // current control point x\n controlY = 0, // current control point y\n tempX,\n tempY,\n l = -this.pathOffset.x,\n t = -this.pathOffset.y;\n\n ctx.beginPath();\n\n for (var i = 0, len = this.path.length; i < len; ++i) {\n\n current = this.path[i];\n\n switch (current[0]) { // first letter\n\n case 'l': // lineto, relative\n x += current[1];\n y += current[2];\n ctx.lineTo(x + l, y + t);\n break;\n\n case 'L': // lineto, absolute\n x = current[1];\n y = current[2];\n ctx.lineTo(x + l, y + t);\n break;\n\n case 'h': // horizontal lineto, relative\n x += current[1];\n ctx.lineTo(x + l, y + t);\n break;\n\n case 'H': // horizontal lineto, absolute\n x = current[1];\n ctx.lineTo(x + l, y + t);\n break;\n\n case 'v': // vertical lineto, relative\n y += current[1];\n ctx.lineTo(x + l, y + t);\n break;\n\n case 'V': // verical lineto, absolute\n y = current[1];\n ctx.lineTo(x + l, y + t);\n break;\n\n case 'm': // moveTo, relative\n x += current[1];\n y += current[2];\n subpathStartX = x;\n subpathStartY = y;\n ctx.moveTo(x + l, y + t);\n break;\n\n case 'M': // moveTo, absolute\n x = current[1];\n y = current[2];\n subpathStartX = x;\n subpathStartY = y;\n ctx.moveTo(x + l, y + t);\n break;\n\n case 'c': // bezierCurveTo, relative\n tempX = x + current[5];\n tempY = y + current[6];\n controlX = x + current[3];\n controlY = y + current[4];\n ctx.bezierCurveTo(\n x + current[1] + l, // x1\n y + current[2] + t, // y1\n controlX + l, // x2\n controlY + t, // y2\n tempX + l,\n tempY + t\n );\n x = tempX;\n y = tempY;\n break;\n\n case 'C': // bezierCurveTo, absolute\n x = current[5];\n y = current[6];\n controlX = current[3];\n controlY = current[4];\n ctx.bezierCurveTo(\n current[1] + l,\n current[2] + t,\n controlX + l,\n controlY + t,\n x + l,\n y + t\n );\n break;\n\n case 's': // shorthand cubic bezierCurveTo, relative\n\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n\n if (previous[0].match(/[CcSs]/) === null) {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n else {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n ctx.bezierCurveTo(\n controlX + l,\n controlY + t,\n x + current[1] + l,\n y + current[2] + t,\n tempX + l,\n tempY + t\n );\n // set control point to 2nd one of this command\n // \"... the first control point is assumed to be\n // the reflection of the second control point on\n // the previous command relative to the current point.\"\n controlX = x + current[1];\n controlY = y + current[2];\n\n x = tempX;\n y = tempY;\n break;\n\n case 'S': // shorthand cubic bezierCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n if (previous[0].match(/[CcSs]/) === null) {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n else {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n ctx.bezierCurveTo(\n controlX + l,\n controlY + t,\n current[1] + l,\n current[2] + t,\n tempX + l,\n tempY + t\n );\n x = tempX;\n y = tempY;\n\n // set control point to 2nd one of this command\n // \"... the first control point is assumed to be\n // the reflection of the second control point on\n // the previous command relative to the current point.\"\n controlX = current[1];\n controlY = current[2];\n\n break;\n\n case 'q': // quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n\n controlX = x + current[1];\n controlY = y + current[2];\n\n ctx.quadraticCurveTo(\n controlX + l,\n controlY + t,\n tempX + l,\n tempY + t\n );\n x = tempX;\n y = tempY;\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n\n ctx.quadraticCurveTo(\n current[1] + l,\n current[2] + t,\n tempX + l,\n tempY + t\n );\n x = tempX;\n y = tempY;\n controlX = current[1];\n controlY = current[2];\n break;\n\n case 't': // shorthand quadraticCurveTo, relative\n\n // transform to absolute x,y\n tempX = x + current[1];\n tempY = y + current[2];\n\n if (previous[0].match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n else {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n ctx.quadraticCurveTo(\n controlX + l,\n controlY + t,\n tempX + l,\n tempY + t\n );\n x = tempX;\n y = tempY;\n\n break;\n\n case 'T':\n tempX = current[1];\n tempY = current[2];\n\n if (previous[0].match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n else {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n ctx.quadraticCurveTo(\n controlX + l,\n controlY + t,\n tempX + l,\n tempY + t\n );\n x = tempX;\n y = tempY;\n break;\n\n case 'a':\n // TODO: optimize this\n drawArc(ctx, x + l, y + t, [\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6] + x + l,\n current[7] + y + t\n ]);\n x += current[6];\n y += current[7];\n break;\n\n case 'A':\n // TODO: optimize this\n drawArc(ctx, x + l, y + t, [\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6] + l,\n current[7] + t\n ]);\n x = current[6];\n y = current[7];\n break;\n\n case 'z':\n case 'Z':\n x = subpathStartX;\n y = subpathStartY;\n ctx.closePath();\n break;\n }\n previous = current;\n }\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _render: function(ctx) {\n this._renderPathCommands(ctx);\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * Returns string representation of an instance\n * @return {String} string representation of an instance\n */\n toString: function() {\n return '#';\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return extend(this.callSuper('toObject', propertiesToInclude), {\n path: this.path.map(function(item) { return item.slice(); }),\n });\n },\n\n /**\n * Returns dataless object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject: function(propertiesToInclude) {\n var o = this.toObject(['sourcePath'].concat(propertiesToInclude));\n if (o.sourcePath) {\n delete o.path;\n }\n return o;\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var path = this.path.map(function(path) {\n return path.join(' ');\n }).join(' ');\n return [\n '\\n'\n ];\n },\n\n _getOffsetTransform: function() {\n var digits = fabric.Object.NUM_FRACTION_DIGITS;\n return ' translate(' + toFixed(-this.pathOffset.x, digits) + ', ' +\n toFixed(-this.pathOffset.y, digits) + ')';\n },\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG: function(reviver) {\n var additionalTransform = this._getOffsetTransform();\n return '\\t' + this._createBaseClipPathSVGMarkup(\n this._toSVG(), { reviver: reviver, additionalTransform: additionalTransform }\n );\n },\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toSVG: function(reviver) {\n var additionalTransform = this._getOffsetTransform();\n return this._createBaseSVGMarkup(this._toSVG(), { reviver: reviver, additionalTransform: additionalTransform });\n },\n /* _TO_SVG_END_ */\n\n /**\n * Returns number representation of an instance complexity\n * @return {Number} complexity of this instance\n */\n complexity: function() {\n return this.path.length;\n },\n\n /**\n * @private\n */\n _parsePath: function() {\n var result = [],\n coords = [],\n currentPath,\n parsed,\n re = fabric.rePathCommand,\n match,\n coordsStr;\n\n for (var i = 0, coordsParsed, len = this.path.length; i < len; i++) {\n currentPath = this.path[i];\n\n coordsStr = currentPath.slice(1).trim();\n coords.length = 0;\n\n while ((match = re.exec(coordsStr))) {\n coords.push(match[0]);\n }\n\n coordsParsed = [currentPath.charAt(0)];\n\n for (var j = 0, jlen = coords.length; j < jlen; j++) {\n parsed = parseFloat(coords[j]);\n if (!isNaN(parsed)) {\n coordsParsed.push(parsed);\n }\n }\n\n var command = coordsParsed[0],\n commandLength = commandLengths[command.toLowerCase()],\n repeatedCommand = repeatedCommands[command] || command;\n\n if (coordsParsed.length - 1 > commandLength) {\n for (var k = 1, klen = coordsParsed.length; k < klen; k += commandLength) {\n result.push([command].concat(coordsParsed.slice(k, k + commandLength)));\n command = repeatedCommand;\n }\n }\n else {\n result.push(coordsParsed);\n }\n }\n\n return result;\n },\n\n /**\n * @private\n */\n _calcDimensions: function() {\n\n var aX = [],\n aY = [],\n current, // current instruction\n previous = null,\n subpathStartX = 0,\n subpathStartY = 0,\n x = 0, // current x\n y = 0, // current y\n controlX = 0, // current control point x\n controlY = 0, // current control point y\n tempX,\n tempY,\n bounds;\n\n for (var i = 0, len = this.path.length; i < len; ++i) {\n\n current = this.path[i];\n\n switch (current[0]) { // first letter\n\n case 'l': // lineto, relative\n x += current[1];\n y += current[2];\n bounds = [];\n break;\n\n case 'L': // lineto, absolute\n x = current[1];\n y = current[2];\n bounds = [];\n break;\n\n case 'h': // horizontal lineto, relative\n x += current[1];\n bounds = [];\n break;\n\n case 'H': // horizontal lineto, absolute\n x = current[1];\n bounds = [];\n break;\n\n case 'v': // vertical lineto, relative\n y += current[1];\n bounds = [];\n break;\n\n case 'V': // verical lineto, absolute\n y = current[1];\n bounds = [];\n break;\n\n case 'm': // moveTo, relative\n x += current[1];\n y += current[2];\n subpathStartX = x;\n subpathStartY = y;\n bounds = [];\n break;\n\n case 'M': // moveTo, absolute\n x = current[1];\n y = current[2];\n subpathStartX = x;\n subpathStartY = y;\n bounds = [];\n break;\n\n case 'c': // bezierCurveTo, relative\n tempX = x + current[5];\n tempY = y + current[6];\n controlX = x + current[3];\n controlY = y + current[4];\n bounds = fabric.util.getBoundsOfCurve(x, y,\n x + current[1], // x1\n y + current[2], // y1\n controlX, // x2\n controlY, // y2\n tempX,\n tempY\n );\n x = tempX;\n y = tempY;\n break;\n\n case 'C': // bezierCurveTo, absolute\n controlX = current[3];\n controlY = current[4];\n bounds = fabric.util.getBoundsOfCurve(x, y,\n current[1],\n current[2],\n controlX,\n controlY,\n current[5],\n current[6]\n );\n x = current[5];\n y = current[6];\n break;\n\n case 's': // shorthand cubic bezierCurveTo, relative\n\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n\n if (previous[0].match(/[CcSs]/) === null) {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n else {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n bounds = fabric.util.getBoundsOfCurve(x, y,\n controlX,\n controlY,\n x + current[1],\n y + current[2],\n tempX,\n tempY\n );\n // set control point to 2nd one of this command\n // \"... the first control point is assumed to be\n // the reflection of the second control point on\n // the previous command relative to the current point.\"\n controlX = x + current[1];\n controlY = y + current[2];\n x = tempX;\n y = tempY;\n break;\n\n case 'S': // shorthand cubic bezierCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n if (previous[0].match(/[CcSs]/) === null) {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n else {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n bounds = fabric.util.getBoundsOfCurve(x, y,\n controlX,\n controlY,\n current[1],\n current[2],\n tempX,\n tempY\n );\n x = tempX;\n y = tempY;\n // set control point to 2nd one of this command\n // \"... the first control point is assumed to be\n // the reflection of the second control point on\n // the previous command relative to the current point.\"\n controlX = current[1];\n controlY = current[2];\n break;\n\n case 'q': // quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n controlX = x + current[1];\n controlY = y + current[2];\n bounds = fabric.util.getBoundsOfCurve(x, y,\n controlX,\n controlY,\n controlX,\n controlY,\n tempX,\n tempY\n );\n x = tempX;\n y = tempY;\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n controlX = current[1];\n controlY = current[2];\n bounds = fabric.util.getBoundsOfCurve(x, y,\n controlX,\n controlY,\n controlX,\n controlY,\n current[3],\n current[4]\n );\n x = current[3];\n y = current[4];\n break;\n\n case 't': // shorthand quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[1];\n tempY = y + current[2];\n if (previous[0].match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n else {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n bounds = fabric.util.getBoundsOfCurve(x, y,\n controlX,\n controlY,\n controlX,\n controlY,\n tempX,\n tempY\n );\n x = tempX;\n y = tempY;\n\n break;\n\n case 'T':\n tempX = current[1];\n tempY = current[2];\n\n if (previous[0].match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n else {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n bounds = fabric.util.getBoundsOfCurve(x, y,\n controlX,\n controlY,\n controlX,\n controlY,\n tempX,\n tempY\n );\n x = tempX;\n y = tempY;\n break;\n\n case 'a':\n // TODO: optimize this\n bounds = fabric.util.getBoundsOfArc(x, y,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6] + x,\n current[7] + y\n );\n x += current[6];\n y += current[7];\n break;\n\n case 'A':\n // TODO: optimize this\n bounds = fabric.util.getBoundsOfArc(x, y,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6],\n current[7]\n );\n x = current[6];\n y = current[7];\n break;\n\n case 'z':\n case 'Z':\n x = subpathStartX;\n y = subpathStartY;\n break;\n }\n previous = current;\n bounds.forEach(function (point) {\n aX.push(point.x);\n aY.push(point.y);\n });\n aX.push(x);\n aY.push(y);\n }\n\n var minX = min(aX) || 0,\n minY = min(aY) || 0,\n maxX = max(aX) || 0,\n maxY = max(aY) || 0,\n deltaX = maxX - minX,\n deltaY = maxY - minY;\n\n return {\n left: minX,\n top: minY,\n width: deltaX,\n height: deltaY\n };\n }\n });\n\n /**\n * Creates an instance of fabric.Path from an object\n * @static\n * @memberOf fabric.Path\n * @param {Object} object\n * @param {Function} [callback] Callback to invoke when an fabric.Path instance is created\n */\n fabric.Path.fromObject = function(object, callback) {\n if (typeof object.sourcePath === 'string') {\n var pathUrl = object.sourcePath;\n fabric.loadSVGFromURL(pathUrl, function (elements) {\n var path = elements[0];\n path.setOptions(object);\n callback && callback(path);\n });\n }\n else {\n fabric.Object._fromObject('Path', object, callback, 'path');\n }\n };\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by `fabric.Path.fromElement`)\n * @static\n * @memberOf fabric.Path\n * @see http://www.w3.org/TR/SVG/paths.html#PathElement\n */\n fabric.Path.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat(['d']);\n\n /**\n * Creates an instance of fabric.Path from an SVG element\n * @static\n * @memberOf fabric.Path\n * @param {SVGElement} element to parse\n * @param {Function} callback Callback to invoke when an fabric.Path instance is created\n * @param {Object} [options] Options object\n * @param {Function} [callback] Options callback invoked after parsing is finished\n */\n fabric.Path.fromElement = function(element, callback, options) {\n var parsedAttributes = fabric.parseAttributes(element, fabric.Path.ATTRIBUTE_NAMES);\n parsedAttributes.fromSVG = true;\n callback(new fabric.Path(parsedAttributes.d, extend(parsedAttributes, options)));\n };\n /* _FROM_SVG_END_ */\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n min = fabric.util.array.min,\n max = fabric.util.array.max;\n\n if (fabric.Group) {\n return;\n }\n\n /**\n * Group class\n * @class fabric.Group\n * @extends fabric.Object\n * @mixes fabric.Collection\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#groups}\n * @see {@link fabric.Group#initialize} for constructor definition\n */\n fabric.Group = fabric.util.createClass(fabric.Object, fabric.Collection, /** @lends fabric.Group.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'group',\n\n /**\n * Width of stroke\n * @type Number\n * @default\n */\n strokeWidth: 0,\n\n /**\n * Indicates if click, mouseover, mouseout events & hoverCursor should also check for subtargets\n * @type Boolean\n * @default\n */\n subTargetCheck: false,\n\n /**\n * Groups are container, do not render anything on theyr own, ence no cache properties\n * @type Array\n * @default\n */\n cacheProperties: [],\n\n /**\n * setOnGroup is a method used for TextBox that is no more used since 2.0.0 The behavior is still\n * available setting this boolean to true.\n * @type Boolean\n * @since 2.0.0\n * @default\n */\n useSetOnGroup: false,\n\n /**\n * Constructor\n * @param {Object} objects Group objects\n * @param {Object} [options] Options object\n * @param {Boolean} [isAlreadyGrouped] if true, objects have been grouped already.\n * @return {Object} thisArg\n */\n initialize: function(objects, options, isAlreadyGrouped) {\n options = options || {};\n this._objects = [];\n // if objects enclosed in a group have been grouped already,\n // we cannot change properties of objects.\n // Thus we need to set options to group without objects,\n isAlreadyGrouped && this.callSuper('initialize', options);\n this._objects = objects || [];\n for (var i = this._objects.length; i--; ) {\n this._objects[i].group = this;\n }\n\n if (!isAlreadyGrouped) {\n var center = options && options.centerPoint;\n // we want to set origins before calculating the bounding box.\n // so that the topleft can be set with that in mind.\n // if specific top and left are passed, are overwritten later\n // with the callSuper('initialize', options)\n if (options.originX !== undefined) {\n this.originX = options.originX;\n }\n if (options.originY !== undefined) {\n this.originY = options.originY;\n }\n // if coming from svg i do not want to calc bounds.\n // i assume width and height are passed along options\n center || this._calcBounds();\n this._updateObjectsCoords(center);\n delete options.centerPoint;\n this.callSuper('initialize', options);\n }\n else {\n this._updateObjectsACoords();\n }\n\n this.setCoords();\n },\n\n /**\n * @private\n * @param {Boolean} [skipCoordsChange] if true, coordinates of objects enclosed in a group do not change\n */\n _updateObjectsACoords: function() {\n var ignoreZoom = true, skipAbsolute = true;\n for (var i = this._objects.length; i--; ){\n this._objects[i].setCoords(ignoreZoom, skipAbsolute);\n }\n },\n\n /**\n * @private\n * @param {Boolean} [skipCoordsChange] if true, coordinates of objects enclosed in a group do not change\n */\n _updateObjectsCoords: function(center) {\n var center = center || this.getCenterPoint();\n for (var i = this._objects.length; i--; ){\n this._updateObjectCoords(this._objects[i], center);\n }\n },\n\n /**\n * @private\n * @param {Object} object\n * @param {fabric.Point} center, current center of group.\n */\n _updateObjectCoords: function(object, center) {\n var objectLeft = object.left,\n objectTop = object.top,\n ignoreZoom = true, skipAbsolute = true;\n\n object.set({\n left: objectLeft - center.x,\n top: objectTop - center.y\n });\n object.group = this;\n object.setCoords(ignoreZoom, skipAbsolute);\n },\n\n /**\n * Returns string represenation of a group\n * @return {String}\n */\n toString: function() {\n return '#';\n },\n\n /**\n * Adds an object to a group; Then recalculates group's dimension, position.\n * @param {Object} object\n * @return {fabric.Group} thisArg\n * @chainable\n */\n addWithUpdate: function(object) {\n this._restoreObjectsState();\n fabric.util.resetObjectTransform(this);\n if (object) {\n this._objects.push(object);\n object.group = this;\n object._set('canvas', this.canvas);\n }\n this._calcBounds();\n this._updateObjectsCoords();\n this.setCoords();\n this.dirty = true;\n return this;\n },\n\n /**\n * Removes an object from a group; Then recalculates group's dimension, position.\n * @param {Object} object\n * @return {fabric.Group} thisArg\n * @chainable\n */\n removeWithUpdate: function(object) {\n this._restoreObjectsState();\n fabric.util.resetObjectTransform(this);\n\n this.remove(object);\n this._calcBounds();\n this._updateObjectsCoords();\n this.setCoords();\n this.dirty = true;\n return this;\n },\n\n /**\n * @private\n */\n _onObjectAdded: function(object) {\n this.dirty = true;\n object.group = this;\n object._set('canvas', this.canvas);\n },\n\n /**\n * @private\n */\n _onObjectRemoved: function(object) {\n this.dirty = true;\n delete object.group;\n },\n\n /**\n * @private\n */\n _set: function(key, value) {\n var i = this._objects.length;\n if (this.useSetOnGroup) {\n while (i--) {\n this._objects[i].setOnGroup(key, value);\n }\n }\n if (key === 'canvas') {\n while (i--) {\n this._objects[i]._set(key, value);\n }\n }\n fabric.Object.prototype._set.call(this, key, value);\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n var _includeDefaultValues = this.includeDefaultValues;\n var objsToObject = this._objects.map(function(obj) {\n var originalDefaults = obj.includeDefaultValues;\n obj.includeDefaultValues = _includeDefaultValues;\n var _obj = obj.toObject(propertiesToInclude);\n obj.includeDefaultValues = originalDefaults;\n return _obj;\n });\n var obj = fabric.Object.prototype.toObject.call(this, propertiesToInclude);\n obj.objects = objsToObject;\n return obj;\n },\n\n /**\n * Returns object representation of an instance, in dataless mode.\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject: function(propertiesToInclude) {\n var objsToObject, sourcePath = this.sourcePath;\n if (sourcePath) {\n objsToObject = sourcePath;\n }\n else {\n var _includeDefaultValues = this.includeDefaultValues;\n objsToObject = this._objects.map(function(obj) {\n var originalDefaults = obj.includeDefaultValues;\n obj.includeDefaultValues = _includeDefaultValues;\n var _obj = obj.toDatalessObject(propertiesToInclude);\n obj.includeDefaultValues = originalDefaults;\n return _obj;\n });\n }\n var obj = fabric.Object.prototype.toDatalessObject.call(this, propertiesToInclude);\n obj.objects = objsToObject;\n return obj;\n },\n\n /**\n * Renders instance on a given context\n * @param {CanvasRenderingContext2D} ctx context to render instance on\n */\n render: function(ctx) {\n this._transformDone = true;\n this.callSuper('render', ctx);\n this._transformDone = false;\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group is already cached.\n * @return {Boolean}\n */\n shouldCache: function() {\n var ownCache = fabric.Object.prototype.shouldCache.call(this);\n if (ownCache) {\n for (var i = 0, len = this._objects.length; i < len; i++) {\n if (this._objects[i].willDrawShadow()) {\n this.ownCaching = false;\n return false;\n }\n }\n }\n return ownCache;\n },\n\n /**\n * Check if this object or a child object will cast a shadow\n * @return {Boolean}\n */\n willDrawShadow: function() {\n if (fabric.Object.prototype.willDrawShadow.call(this)) {\n return true;\n }\n for (var i = 0, len = this._objects.length; i < len; i++) {\n if (this._objects[i].willDrawShadow()) {\n return true;\n }\n }\n return false;\n },\n\n /**\n * Check if this group or its parent group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache: function() {\n return this.ownCaching || (this.group && this.group.isOnACache());\n },\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawObject: function(ctx) {\n for (var i = 0, len = this._objects.length; i < len; i++) {\n this._objects[i].render(ctx);\n }\n this._drawClipPath(ctx);\n },\n\n /**\n * Check if cache is dirty\n */\n isCacheDirty: function(skipCanvas) {\n if (this.callSuper('isCacheDirty', skipCanvas)) {\n return true;\n }\n if (!this.statefullCache) {\n return false;\n }\n for (var i = 0, len = this._objects.length; i < len; i++) {\n if (this._objects[i].isCacheDirty(true)) {\n if (this._cacheCanvas) {\n // if this group has not a cache canvas there is nothing to clean\n var x = this.cacheWidth / this.zoomX, y = this.cacheHeight / this.zoomY;\n this._cacheContext.clearRect(-x / 2, -y / 2, x, y);\n }\n return true;\n }\n }\n return false;\n },\n\n /**\n * Retores original state of each of group objects (original state is that which was before group was created).\n * @private\n * @return {fabric.Group} thisArg\n * @chainable\n */\n _restoreObjectsState: function() {\n this._objects.forEach(this._restoreObjectState, this);\n return this;\n },\n\n /**\n * Realises the transform from this group onto the supplied object\n * i.e. it tells you what would happen if the supplied object was in\n * the group, and then the group was destroyed. It mutates the supplied\n * object.\n * @param {fabric.Object} object\n * @return {fabric.Object} transformedObject\n */\n realizeTransform: function(object) {\n var matrix = object.calcTransformMatrix(),\n options = fabric.util.qrDecompose(matrix),\n center = new fabric.Point(options.translateX, options.translateY);\n object.flipX = false;\n object.flipY = false;\n object.set('scaleX', options.scaleX);\n object.set('scaleY', options.scaleY);\n object.skewX = options.skewX;\n object.skewY = options.skewY;\n object.angle = options.angle;\n object.setPositionByOrigin(center, 'center', 'center');\n return object;\n },\n\n /**\n * Restores original state of a specified object in group\n * @private\n * @param {fabric.Object} object\n * @return {fabric.Group} thisArg\n */\n _restoreObjectState: function(object) {\n this.realizeTransform(object);\n object.setCoords();\n delete object.group;\n return this;\n },\n\n /**\n * Destroys a group (restoring state of its objects)\n * @return {fabric.Group} thisArg\n * @chainable\n */\n destroy: function() {\n // when group is destroyed objects needs to get a repaint to be eventually\n // displayed on canvas.\n this._objects.forEach(function(object) {\n object.set('dirty', true);\n });\n return this._restoreObjectsState();\n },\n\n /**\n * make a group an active selection, remove the group from canvas\n * the group has to be on canvas for this to work.\n * @return {fabric.ActiveSelection} thisArg\n * @chainable\n */\n toActiveSelection: function() {\n if (!this.canvas) {\n return;\n }\n var objects = this._objects, canvas = this.canvas;\n this._objects = [];\n var options = this.toObject();\n delete options.objects;\n var activeSelection = new fabric.ActiveSelection([]);\n activeSelection.set(options);\n activeSelection.type = 'activeSelection';\n canvas.remove(this);\n objects.forEach(function(object) {\n object.group = activeSelection;\n object.dirty = true;\n canvas.add(object);\n });\n activeSelection.canvas = canvas;\n activeSelection._objects = objects;\n canvas._activeObject = activeSelection;\n activeSelection.setCoords();\n return activeSelection;\n },\n\n /**\n * Destroys a group (restoring state of its objects)\n * @return {fabric.Group} thisArg\n * @chainable\n */\n ungroupOnCanvas: function() {\n return this._restoreObjectsState();\n },\n\n /**\n * Sets coordinates of all objects inside group\n * @return {fabric.Group} thisArg\n * @chainable\n */\n setObjectsCoords: function() {\n var ignoreZoom = true, skipAbsolute = true;\n this.forEachObject(function(object) {\n object.setCoords(ignoreZoom, skipAbsolute);\n });\n return this;\n },\n\n /**\n * @private\n */\n _calcBounds: function(onlyWidthHeight) {\n var aX = [],\n aY = [],\n o, prop,\n props = ['tr', 'br', 'bl', 'tl'],\n i = 0, iLen = this._objects.length,\n j, jLen = props.length,\n ignoreZoom = true;\n\n for ( ; i < iLen; ++i) {\n o = this._objects[i];\n o.setCoords(ignoreZoom);\n for (j = 0; j < jLen; j++) {\n prop = props[j];\n aX.push(o.oCoords[prop].x);\n aY.push(o.oCoords[prop].y);\n }\n }\n\n this._getBounds(aX, aY, onlyWidthHeight);\n },\n\n /**\n * @private\n */\n _getBounds: function(aX, aY, onlyWidthHeight) {\n var minXY = new fabric.Point(min(aX), min(aY)),\n maxXY = new fabric.Point(max(aX), max(aY)),\n top = minXY.y || 0, left = minXY.x || 0,\n width = (maxXY.x - minXY.x) || 0,\n height = (maxXY.y - minXY.y) || 0;\n this.width = width;\n this.height = height;\n if (!onlyWidthHeight) {\n // the bounding box always finds the topleft most corner.\n // whatever is the group origin, we set up here the left/top position.\n this.setPositionByOrigin({ x: left, y: top }, 'left', 'top');\n }\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n _toSVG: function(reviver) {\n var svgString = ['\\n'];\n\n for (var i = 0, len = this._objects.length; i < len; i++) {\n svgString.push('\\t\\t', this._objects[i].toSVG(reviver));\n }\n svgString.push('\\n');\n return svgString;\n },\n\n /**\n * Returns styles-string for svg-export, specific version for group\n * @return {String}\n */\n getSvgStyles: function() {\n var opacity = typeof this.opacity !== 'undefined' && this.opacity !== 1 ?\n 'opacity: ' + this.opacity + ';' : '',\n visibility = this.visible ? '' : ' visibility: hidden;';\n return [\n opacity,\n this.getSvgFilter(),\n visibility\n ].join('');\n },\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG: function(reviver) {\n var svgString = [];\n\n for (var i = 0, len = this._objects.length; i < len; i++) {\n svgString.push('\\t', this._objects[i].toClipPathSVG(reviver));\n }\n\n return this._createBaseClipPathSVGMarkup(svgString, { reviver: reviver });\n },\n /* _TO_SVG_END_ */\n });\n\n /**\n * Returns {@link fabric.Group} instance from an object representation\n * @static\n * @memberOf fabric.Group\n * @param {Object} object Object to create a group from\n * @param {Function} [callback] Callback to invoke when an group instance is created\n */\n fabric.Group.fromObject = function(object, callback) {\n var objects = object.objects,\n options = fabric.util.object.clone(object, true);\n delete options.objects;\n if (typeof objects === 'string') {\n // it has to be an url or something went wrong.\n fabric.loadSVGFromURL(objects, function (elements) {\n var group = fabric.util.groupSVGElements(elements, object, objects);\n group.set(options);\n callback && callback(group);\n });\n return;\n }\n fabric.util.enlivenObjects(objects, function(enlivenedObjects) {\n fabric.util.enlivenObjects([object.clipPath], function(enlivedClipPath) {\n var options = fabric.util.object.clone(object, true);\n options.clipPath = enlivedClipPath[0];\n delete options.objects;\n callback && callback(new fabric.Group(enlivenedObjects, options, true));\n });\n });\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.ActiveSelection) {\n return;\n }\n\n /**\n * Group class\n * @class fabric.ActiveSelection\n * @extends fabric.Group\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#groups}\n * @see {@link fabric.ActiveSelection#initialize} for constructor definition\n */\n fabric.ActiveSelection = fabric.util.createClass(fabric.Group, /** @lends fabric.ActiveSelection.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'activeSelection',\n\n /**\n * Constructor\n * @param {Object} objects ActiveSelection objects\n * @param {Object} [options] Options object\n * @return {Object} thisArg\n */\n initialize: function(objects, options) {\n options = options || {};\n this._objects = objects || [];\n for (var i = this._objects.length; i--; ) {\n this._objects[i].group = this;\n }\n\n if (options.originX) {\n this.originX = options.originX;\n }\n if (options.originY) {\n this.originY = options.originY;\n }\n this._calcBounds();\n this._updateObjectsCoords();\n fabric.Object.prototype.initialize.call(this, options);\n this.setCoords();\n },\n\n /**\n * Change te activeSelection to a normal group,\n * High level function that automatically adds it to canvas as\n * active object. no events fired.\n * @since 2.0.0\n * @return {fabric.Group}\n */\n toGroup: function() {\n var objects = this._objects.concat();\n this._objects = [];\n var options = fabric.Object.prototype.toObject.call(this);\n var newGroup = new fabric.Group([]);\n delete options.type;\n newGroup.set(options);\n objects.forEach(function(object) {\n object.canvas.remove(object);\n object.group = newGroup;\n });\n newGroup._objects = objects;\n if (!this.canvas) {\n return newGroup;\n }\n var canvas = this.canvas;\n canvas.add(newGroup);\n canvas._activeObject = newGroup;\n newGroup.setCoords();\n return newGroup;\n },\n\n /**\n * If returns true, deselection is cancelled.\n * @since 2.0.0\n * @return {Boolean} [cancel]\n */\n onDeselect: function() {\n this.destroy();\n return false;\n },\n\n /**\n * Returns string representation of a group\n * @return {String}\n */\n toString: function() {\n return '#';\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * @return {Boolean}\n */\n shouldCache: function() {\n return false;\n },\n\n /**\n * Check if this group or its parent group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache: function() {\n return false;\n },\n\n /**\n * Renders controls and borders for the object\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [styleOverride] properties to override the object style\n * @param {Object} [childrenOverride] properties to override the children overrides\n */\n _renderControls: function(ctx, styleOverride, childrenOverride) {\n ctx.save();\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n this.callSuper('_renderControls', ctx, styleOverride);\n childrenOverride = childrenOverride || { };\n if (typeof childrenOverride.hasControls === 'undefined') {\n childrenOverride.hasControls = false;\n }\n if (typeof childrenOverride.hasRotatingPoint === 'undefined') {\n childrenOverride.hasRotatingPoint = false;\n }\n childrenOverride.forActiveSelection = true;\n for (var i = 0, len = this._objects.length; i < len; i++) {\n this._objects[i]._renderControls(ctx, childrenOverride);\n }\n ctx.restore();\n },\n });\n\n /**\n * Returns {@link fabric.ActiveSelection} instance from an object representation\n * @static\n * @memberOf fabric.ActiveSelection\n * @param {Object} object Object to create a group from\n * @param {Function} [callback] Callback to invoke when an ActiveSelection instance is created\n */\n fabric.ActiveSelection.fromObject = function(object, callback) {\n fabric.util.enlivenObjects(object.objects, function(enlivenedObjects) {\n delete object.objects;\n callback && callback(new fabric.ActiveSelection(enlivenedObjects, object, true));\n });\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var extend = fabric.util.object.extend;\n\n if (!global.fabric) {\n global.fabric = { };\n }\n\n if (global.fabric.Image) {\n fabric.warn('fabric.Image is already defined.');\n return;\n }\n\n /**\n * Image class\n * @class fabric.Image\n * @extends fabric.Object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#images}\n * @see {@link fabric.Image#initialize} for constructor definition\n */\n fabric.Image = fabric.util.createClass(fabric.Object, /** @lends fabric.Image.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'image',\n\n /**\n * crossOrigin value (one of \"\", \"anonymous\", \"use-credentials\")\n * @see https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes\n * @type String\n * @default\n */\n crossOrigin: '',\n\n /**\n * Width of a stroke.\n * For image quality a stroke multiple of 2 gives better results.\n * @type Number\n * @default\n */\n strokeWidth: 0,\n\n /**\n * When calling {@link fabric.Image.getSrc}, return value from element src with `element.getAttribute('src')`.\n * This allows for relative urls as image src.\n * @since 2.7.0\n * @type Boolean\n * @default\n */\n srcFromAttribute: false,\n\n /**\n * private\n * contains last value of scaleX to detect\n * if the Image got resized after the last Render\n * @type Number\n */\n _lastScaleX: 1,\n\n /**\n * private\n * contains last value of scaleY to detect\n * if the Image got resized after the last Render\n * @type Number\n */\n _lastScaleY: 1,\n\n /**\n * private\n * contains last value of scaling applied by the apply filter chain\n * @type Number\n */\n _filterScalingX: 1,\n\n /**\n * private\n * contains last value of scaling applied by the apply filter chain\n * @type Number\n */\n _filterScalingY: 1,\n\n /**\n * minimum scale factor under which any resizeFilter is triggered to resize the image\n * 0 will disable the automatic resize. 1 will trigger automatically always.\n * number bigger than 1 are not implemented yet.\n * @type Number\n */\n minimumScaleTrigger: 0.5,\n\n /**\n * List of properties to consider when checking if\n * state of an object is changed ({@link fabric.Object#hasStateChanged})\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: fabric.Object.prototype.stateProperties.concat('cropX', 'cropY'),\n\n /**\n * key used to retrieve the texture representing this image\n * @since 2.0.0\n * @type String\n * @default\n */\n cacheKey: '',\n\n /**\n * Image crop in pixels from original image size.\n * @since 2.0.0\n * @type Number\n * @default\n */\n cropX: 0,\n\n /**\n * Image crop in pixels from original image size.\n * @since 2.0.0\n * @type Number\n * @default\n */\n cropY: 0,\n\n /**\n * Constructor\n * @param {HTMLImageElement | String} element Image element\n * @param {Object} [options] Options object\n * @param {function} [callback] callback function to call after eventual filters applied.\n * @return {fabric.Image} thisArg\n */\n initialize: function(element, options) {\n options || (options = { });\n this.filters = [];\n this.cacheKey = 'texture' + fabric.Object.__uid++;\n this.callSuper('initialize', options);\n this._initElement(element, options);\n },\n\n /**\n * Returns image element which this instance if based on\n * @return {HTMLImageElement} Image element\n */\n getElement: function() {\n return this._element || {};\n },\n\n /**\n * Sets image element for this instance to a specified one.\n * If filters defined they are applied to new image.\n * You might need to call `canvas.renderAll` and `object.setCoords` after replacing, to render new image and update controls area.\n * @param {HTMLImageElement} element\n * @param {Object} [options] Options object\n * @return {fabric.Image} thisArg\n * @chainable\n */\n setElement: function(element, options) {\n this.removeTexture(this.cacheKey);\n this.removeTexture(this.cacheKey + '_filtered');\n this._element = element;\n this._originalElement = element;\n this._initConfig(options);\n if (this.filters.length !== 0) {\n this.applyFilters();\n }\n // resizeFilters work on the already filtered copy.\n // we need to apply resizeFilters AFTER normal filters.\n // applyResizeFilters is run more often than normal fiters\n // and is triggered by user interactions rather than dev code\n if (this.resizeFilter) {\n this.applyResizeFilters();\n }\n return this;\n },\n\n /**\n * Delete a single texture if in webgl mode\n */\n removeTexture: function(key) {\n var backend = fabric.filterBackend;\n if (backend && backend.evictCachesForKey) {\n backend.evictCachesForKey(key);\n }\n },\n\n /**\n * Delete textures, reference to elements and eventually JSDOM cleanup\n */\n dispose: function() {\n this.removeTexture(this.cacheKey);\n this.removeTexture(this.cacheKey + '_filtered');\n this._cacheContext = undefined;\n ['_originalElement', '_element', '_filteredEl', '_cacheCanvas'].forEach((function(element) {\n fabric.util.cleanUpJsdomNode(this[element]);\n this[element] = undefined;\n }).bind(this));\n },\n\n /**\n * Sets crossOrigin value (on an instance and corresponding image element)\n * @return {fabric.Image} thisArg\n * @chainable\n */\n setCrossOrigin: function(value) {\n this.crossOrigin = value;\n this._element.crossOrigin = value;\n\n return this;\n },\n\n /**\n * Returns original size of an image\n * @return {Object} Object with \"width\" and \"height\" properties\n */\n getOriginalSize: function() {\n var element = this.getElement();\n return {\n width: element.naturalWidth || element.width,\n height: element.naturalHeight || element.height\n };\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _stroke: function(ctx) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n var w = this.width / 2, h = this.height / 2;\n ctx.beginPath();\n ctx.moveTo(-w, -h);\n ctx.lineTo(w, -h);\n ctx.lineTo(w, h);\n ctx.lineTo(-w, h);\n ctx.lineTo(-w, -h);\n ctx.closePath();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderDashedStroke: function(ctx) {\n var x = -this.width / 2,\n y = -this.height / 2,\n w = this.width,\n h = this.height;\n\n ctx.save();\n this._setStrokeStyles(ctx, this);\n\n ctx.beginPath();\n fabric.util.drawDashedLine(ctx, x, y, x + w, y, this.strokeDashArray);\n fabric.util.drawDashedLine(ctx, x + w, y, x + w, y + h, this.strokeDashArray);\n fabric.util.drawDashedLine(ctx, x + w, y + h, x, y + h, this.strokeDashArray);\n fabric.util.drawDashedLine(ctx, x, y + h, x, y, this.strokeDashArray);\n ctx.closePath();\n ctx.restore();\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n var filters = [];\n\n this.filters.forEach(function(filterObj) {\n if (filterObj) {\n filters.push(filterObj.toObject());\n }\n });\n var object = extend(\n this.callSuper(\n 'toObject',\n ['crossOrigin', 'cropX', 'cropY'].concat(propertiesToInclude)\n ), {\n src: this.getSrc(),\n filters: filters,\n });\n if (this.resizeFilter) {\n object.resizeFilter = this.resizeFilter.toObject();\n }\n return object;\n },\n\n /**\n * Returns true if an image has crop applied, inspecting values of cropX,cropY,width,hight.\n * @return {Boolean}\n */\n hasCrop: function() {\n return this.cropX || this.cropY || this.width < this._element.width || this.height < this._element.height;\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var svgString = [], imageMarkup = [], strokeSvg,\n x = -this.width / 2, y = -this.height / 2, clipPath = '';\n if (this.hasCrop()) {\n var clipPathId = fabric.Object.__uid++;\n svgString.push(\n '\\n',\n '\\t\\n',\n '\\n'\n );\n clipPath = ' clip-path=\"url(#imageCrop_' + clipPathId + ')\" ';\n }\n imageMarkup.push('\\t element with actual transformation, then offsetting object to the top/left\n // so that object's center aligns with container's left/top\n '\" width=\"', this._element.width || this._element.naturalWidth,\n '\" height=\"', this._element.height || this._element.height,\n '\"', clipPath,\n '>\\n');\n\n if (this.stroke || this.strokeDashArray) {\n var origFill = this.fill;\n this.fill = null;\n strokeSvg = [\n '\\t\\n'\n ];\n this.fill = origFill;\n }\n if (this.paintFirst !== 'fill') {\n svgString = svgString.concat(strokeSvg, imageMarkup);\n }\n else {\n svgString = svgString.concat(imageMarkup, strokeSvg);\n }\n return svgString;\n },\n /* _TO_SVG_END_ */\n\n /**\n * Returns source of an image\n * @param {Boolean} filtered indicates if the src is needed for svg\n * @return {String} Source of an image\n */\n getSrc: function(filtered) {\n var element = filtered ? this._element : this._originalElement;\n if (element) {\n if (element.toDataURL) {\n return element.toDataURL();\n }\n\n if (this.srcFromAttribute) {\n return element.getAttribute('src');\n }\n else {\n return element.src;\n }\n }\n else {\n return this.src || '';\n }\n },\n\n /**\n * Sets source of an image\n * @param {String} src Source string (URL)\n * @param {Function} [callback] Callback is invoked when image has been loaded (and all filters have been applied)\n * @param {Object} [options] Options object\n * @return {fabric.Image} thisArg\n * @chainable\n */\n setSrc: function(src, callback, options) {\n fabric.util.loadImage(src, function(img) {\n this.setElement(img, options);\n this._setWidthHeight();\n callback && callback(this);\n }, this, options && options.crossOrigin);\n return this;\n },\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of an instance\n */\n toString: function() {\n return '#';\n },\n\n applyResizeFilters: function() {\n var filter = this.resizeFilter,\n minimumScale = this.minimumScaleTrigger,\n objectScale = this.getTotalObjectScaling(),\n scaleX = objectScale.scaleX,\n scaleY = objectScale.scaleY,\n elementToFilter = this._filteredEl || this._originalElement;\n if (this.group) {\n this.set('dirty', true);\n }\n if (!filter || (scaleX > minimumScale && scaleY > minimumScale)) {\n this._element = elementToFilter;\n this._filterScalingX = 1;\n this._filterScalingY = 1;\n this._lastScaleX = scaleX;\n this._lastScaleY = scaleY;\n return;\n }\n if (!fabric.filterBackend) {\n fabric.filterBackend = fabric.initFilterBackend();\n }\n var canvasEl = fabric.util.createCanvasElement(),\n cacheKey = this._filteredEl ? (this.cacheKey + '_filtered') : this.cacheKey,\n sourceWidth = elementToFilter.width, sourceHeight = elementToFilter.height;\n canvasEl.width = sourceWidth;\n canvasEl.height = sourceHeight;\n this._element = canvasEl;\n this._lastScaleX = filter.scaleX = scaleX;\n this._lastScaleY = filter.scaleY = scaleY;\n fabric.filterBackend.applyFilters(\n [filter], elementToFilter, sourceWidth, sourceHeight, this._element, cacheKey);\n this._filterScalingX = canvasEl.width / this._originalElement.width;\n this._filterScalingY = canvasEl.height / this._originalElement.height;\n },\n\n /**\n * Applies filters assigned to this image (from \"filters\" array) or from filter param\n * @method applyFilters\n * @param {Array} filters to be applied\n * @param {Boolean} forResizing specify if the filter operation is a resize operation\n * @return {thisArg} return the fabric.Image object\n * @chainable\n */\n applyFilters: function(filters) {\n\n filters = filters || this.filters || [];\n filters = filters.filter(function(filter) { return filter && !filter.isNeutralState(); });\n this.set('dirty', true);\n\n // needs to clear out or WEBGL will not resize correctly\n this.removeTexture(this.cacheKey + '_filtered');\n\n if (filters.length === 0) {\n this._element = this._originalElement;\n this._filteredEl = null;\n this._filterScalingX = 1;\n this._filterScalingY = 1;\n return this;\n }\n\n var imgElement = this._originalElement,\n sourceWidth = imgElement.naturalWidth || imgElement.width,\n sourceHeight = imgElement.naturalHeight || imgElement.height;\n\n if (this._element === this._originalElement) {\n // if the element is the same we need to create a new element\n var canvasEl = fabric.util.createCanvasElement();\n canvasEl.width = sourceWidth;\n canvasEl.height = sourceHeight;\n this._element = canvasEl;\n this._filteredEl = canvasEl;\n }\n else {\n // clear the existing element to get new filter data\n // also dereference the eventual resized _element\n this._element = this._filteredEl;\n this._filteredEl.getContext('2d').clearRect(0, 0, sourceWidth, sourceHeight);\n // we also need to resize again at next renderAll, so remove saved _lastScaleX/Y\n this._lastScaleX = 1;\n this._lastScaleY = 1;\n }\n if (!fabric.filterBackend) {\n fabric.filterBackend = fabric.initFilterBackend();\n }\n fabric.filterBackend.applyFilters(\n filters, this._originalElement, sourceWidth, sourceHeight, this._element, this.cacheKey);\n if (this._originalElement.width !== this._element.width ||\n this._originalElement.height !== this._element.height) {\n this._filterScalingX = this._element.width / this._originalElement.width;\n this._filterScalingY = this._element.height / this._originalElement.height;\n }\n return this;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n if (this.isMoving !== true && this.resizeFilter && this._needsResize()) {\n this.applyResizeFilters();\n }\n this._stroke(ctx);\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * This is the special image version where we would like to avoid caching where possible.\n * Essentially images do not benefit from caching. They may require caching, and in that\n * case we do it. Also caching an image usually ends in a loss of details.\n * A full performance audit should be done.\n * @return {Boolean}\n */\n shouldCache: function() {\n return this.needsItsOwnCache();\n },\n\n _renderFill: function(ctx) {\n var elementToDraw = this._element;\n if (!elementToDraw) {\n return;\n }\n var scaleX = this._filterScalingX, scaleY = this._filterScalingY,\n w = this.width, h = this.height, min = Math.min, max = Math.max,\n // crop values cannot be lesser than 0.\n cropX = max(this.cropX, 0), cropY = max(this.cropY, 0),\n elWidth = elementToDraw.naturalWidth || elementToDraw.width,\n elHeight = elementToDraw.naturalHeight || elementToDraw.height,\n sX = cropX * scaleX,\n sY = cropY * scaleY,\n // the width height cannot exceed element width/height, starting from the crop offset.\n sW = min(w * scaleX, elWidth - sX),\n sH = min(h * scaleY, elHeight - sY),\n x = -w / 2, y = -h / 2,\n maxDestW = min(w, elWidth / scaleX - cropX),\n maxDestH = min(h, elHeight / scaleX - cropY);\n\n elementToDraw && ctx.drawImage(elementToDraw, sX, sY, sW, sH, x, y, maxDestW, maxDestH);\n },\n\n /**\n * needed to check if image needs resize\n * @private\n */\n _needsResize: function() {\n var scale = this.getTotalObjectScaling();\n return (scale.scaleX !== this._lastScaleX || scale.scaleY !== this._lastScaleY);\n },\n\n /**\n * @private\n */\n _resetWidthHeight: function() {\n this.set(this.getOriginalSize());\n },\n\n /**\n * The Image class's initialization method. This method is automatically\n * called by the constructor.\n * @private\n * @param {HTMLImageElement|String} element The element representing the image\n * @param {Object} [options] Options object\n */\n _initElement: function(element, options) {\n this.setElement(fabric.util.getById(element), options);\n fabric.util.addClass(this.getElement(), fabric.Image.CSS_CANVAS);\n },\n\n /**\n * @private\n * @param {Object} [options] Options object\n */\n _initConfig: function(options) {\n options || (options = { });\n this.setOptions(options);\n this._setWidthHeight(options);\n if (this._element && this.crossOrigin) {\n this._element.crossOrigin = this.crossOrigin;\n }\n },\n\n /**\n * @private\n * @param {Array} filters to be initialized\n * @param {Function} callback Callback to invoke when all fabric.Image.filters instances are created\n */\n _initFilters: function(filters, callback) {\n if (filters && filters.length) {\n fabric.util.enlivenObjects(filters, function(enlivenedObjects) {\n callback && callback(enlivenedObjects);\n }, 'fabric.Image.filters');\n }\n else {\n callback && callback();\n }\n },\n\n /**\n * @private\n * Set the width and the height of the image object, using the element or the\n * options.\n * @param {Object} [options] Object with width/height properties\n */\n _setWidthHeight: function(options) {\n options || (options = { });\n var el = this.getElement();\n this.width = options.width || el.naturalWidth || el.width || 0;\n this.height = options.height || el.naturalHeight || el.height || 0;\n },\n\n /**\n * Calculate offset for center and scale factor for the image in order to respect\n * the preserveAspectRatio attribute\n * @private\n * @return {Object}\n */\n parsePreserveAspectRatioAttribute: function() {\n var pAR = fabric.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio || ''),\n rWidth = this._element.width, rHeight = this._element.height,\n scaleX = 1, scaleY = 1, offsetLeft = 0, offsetTop = 0, cropX = 0, cropY = 0,\n offset, pWidth = this.width, pHeight = this.height, parsedAttributes = { width: pWidth, height: pHeight };\n if (pAR && (pAR.alignX !== 'none' || pAR.alignY !== 'none')) {\n if (pAR.meetOrSlice === 'meet') {\n scaleX = scaleY = fabric.util.findScaleToFit(this._element, parsedAttributes);\n offset = (pWidth - rWidth * scaleX) / 2;\n if (pAR.alignX === 'Min') {\n offsetLeft = -offset;\n }\n if (pAR.alignX === 'Max') {\n offsetLeft = offset;\n }\n offset = (pHeight - rHeight * scaleY) / 2;\n if (pAR.alignY === 'Min') {\n offsetTop = -offset;\n }\n if (pAR.alignY === 'Max') {\n offsetTop = offset;\n }\n }\n if (pAR.meetOrSlice === 'slice') {\n scaleX = scaleY = fabric.util.findScaleToCover(this._element, parsedAttributes);\n offset = rWidth - pWidth / scaleX;\n if (pAR.alignX === 'Mid') {\n cropX = offset / 2;\n }\n if (pAR.alignX === 'Max') {\n cropX = offset;\n }\n offset = rHeight - pHeight / scaleY;\n if (pAR.alignY === 'Mid') {\n cropY = offset / 2;\n }\n if (pAR.alignY === 'Max') {\n cropY = offset;\n }\n rWidth = pWidth / scaleX;\n rHeight = pHeight / scaleY;\n }\n }\n else {\n scaleX = pWidth / rWidth;\n scaleY = pHeight / rHeight;\n }\n return {\n width: rWidth,\n height: rHeight,\n scaleX: scaleX,\n scaleY: scaleY,\n offsetLeft: offsetLeft,\n offsetTop: offsetTop,\n cropX: cropX,\n cropY: cropY\n };\n }\n });\n\n /**\n * Default CSS class name for canvas\n * @static\n * @type String\n * @default\n */\n fabric.Image.CSS_CANVAS = 'canvas-img';\n\n /**\n * Alias for getSrc\n * @static\n */\n fabric.Image.prototype.getSvgSrc = fabric.Image.prototype.getSrc;\n\n /**\n * Creates an instance of fabric.Image from its object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} callback Callback to invoke when an image instance is created\n */\n fabric.Image.fromObject = function(_object, callback) {\n var object = fabric.util.object.clone(_object);\n fabric.util.loadImage(object.src, function(img, error) {\n if (error) {\n callback && callback(null, error);\n return;\n }\n fabric.Image.prototype._initFilters.call(object, object.filters, function(filters) {\n object.filters = filters || [];\n fabric.Image.prototype._initFilters.call(object, [object.resizeFilter], function(resizeFilters) {\n object.resizeFilter = resizeFilters[0];\n fabric.util.enlivenObjects([object.clipPath], function(enlivedProps) {\n object.clipPath = enlivedProps[0];\n var image = new fabric.Image(img, object);\n callback(image);\n });\n });\n });\n }, null, object.crossOrigin);\n };\n\n /**\n * Creates an instance of fabric.Image from an URL string\n * @static\n * @param {String} url URL to create an image from\n * @param {Function} [callback] Callback to invoke when image is created (newly created image is passed as a first argument)\n * @param {Object} [imgOptions] Options object\n */\n fabric.Image.fromURL = function(url, callback, imgOptions) {\n fabric.util.loadImage(url, function(img) {\n callback && callback(new fabric.Image(img, imgOptions));\n }, null, imgOptions && imgOptions.crossOrigin);\n };\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Image.fromElement})\n * @static\n * @see {@link http://www.w3.org/TR/SVG/struct.html#ImageElement}\n */\n fabric.Image.ATTRIBUTE_NAMES =\n fabric.SHARED_ATTRIBUTES.concat('x y width height preserveAspectRatio xlink:href crossOrigin'.split(' '));\n\n /**\n * Returns {@link fabric.Image} instance from an SVG element\n * @static\n * @param {SVGElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {Function} callback Callback to execute when fabric.Image object is created\n * @return {fabric.Image} Instance of fabric.Image\n */\n fabric.Image.fromElement = function(element, callback, options) {\n var parsedAttributes = fabric.parseAttributes(element, fabric.Image.ATTRIBUTE_NAMES);\n fabric.Image.fromURL(parsedAttributes['xlink:href'], callback,\n extend((options ? fabric.util.object.clone(options) : { }), parsedAttributes));\n };\n /* _FROM_SVG_END_ */\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\nfabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n /**\n * @private\n * @return {Number} angle value\n */\n _getAngleValueForStraighten: function() {\n var angle = this.angle % 360;\n if (angle > 0) {\n return Math.round((angle - 1) / 90) * 90;\n }\n return Math.round(angle / 90) * 90;\n },\n\n /**\n * Straightens an object (rotating it from current angle to one of 0, 90, 180, 270, etc. depending on which is closer)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n straighten: function() {\n this.rotate(this._getAngleValueForStraighten());\n return this;\n },\n\n /**\n * Same as {@link fabric.Object.prototype.straighten} but with animation\n * @param {Object} callbacks Object with callback functions\n * @param {Function} [callbacks.onComplete] Invoked on completion\n * @param {Function} [callbacks.onChange] Invoked on every step of animation\n * @return {fabric.Object} thisArg\n * @chainable\n */\n fxStraighten: function(callbacks) {\n callbacks = callbacks || { };\n\n var empty = function() { },\n onComplete = callbacks.onComplete || empty,\n onChange = callbacks.onChange || empty,\n _this = this;\n\n fabric.util.animate({\n startValue: this.get('angle'),\n endValue: this._getAngleValueForStraighten(),\n duration: this.FX_DURATION,\n onChange: function(value) {\n _this.rotate(value);\n onChange();\n },\n onComplete: function() {\n _this.setCoords();\n onComplete();\n },\n });\n\n return this;\n }\n});\n\nfabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n\n /**\n * Straightens object, then rerenders canvas\n * @param {fabric.Object} object Object to straighten\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n straightenObject: function (object) {\n object.straighten();\n this.requestRenderAll();\n return this;\n },\n\n /**\n * Same as {@link fabric.Canvas.prototype.straightenObject}, but animated\n * @param {fabric.Object} object Object to straighten\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n fxStraightenObject: function (object) {\n object.fxStraighten({\n onChange: this.requestRenderAllBound\n });\n return this;\n }\n});\n\n\n(function() {\n\n 'use strict';\n\n /**\n * Tests if webgl supports certain precision\n * @param {WebGL} Canvas WebGL context to test on\n * @param {String} Precision to test can be any of following: 'lowp', 'mediump', 'highp'\n * @returns {Boolean} Whether the user's browser WebGL supports given precision.\n */\n function testPrecision(gl, precision){\n var fragmentSource = 'precision ' + precision + ' float;\\nvoid main(){}';\n var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n return false;\n }\n return true;\n }\n\n /**\n * Indicate whether this filtering backend is supported by the user's browser.\n * @param {Number} tileSize check if the tileSize is supported\n * @returns {Boolean} Whether the user's browser supports WebGL.\n */\n fabric.isWebglSupported = function(tileSize) {\n if (fabric.isLikelyNode) {\n return false;\n }\n tileSize = tileSize || fabric.WebglFilterBackend.prototype.tileSize;\n var canvas = document.createElement('canvas');\n var gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n var isSupported = false;\n // eslint-disable-next-line\n if (gl) {\n fabric.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n isSupported = fabric.maxTextureSize >= tileSize;\n var precisions = ['highp', 'mediump', 'lowp'];\n for (var i = 0; i < 3; i++){\n if (testPrecision(gl, precisions[i])){\n fabric.webGlPrecision = precisions[i];\n break;\n };\n }\n }\n this.isSupported = isSupported;\n return isSupported;\n };\n\n fabric.WebglFilterBackend = WebglFilterBackend;\n\n /**\n * WebGL filter backend.\n */\n function WebglFilterBackend(options) {\n if (options && options.tileSize) {\n this.tileSize = options.tileSize;\n }\n this.setupGLContext(this.tileSize, this.tileSize);\n this.captureGPUInfo();\n };\n\n WebglFilterBackend.prototype = /** @lends fabric.WebglFilterBackend.prototype */ {\n\n tileSize: 2048,\n\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you problably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: {\n\n },\n\n /**\n * Setup a WebGL context suitable for filtering, and bind any needed event handlers.\n */\n setupGLContext: function(width, height) {\n this.dispose();\n this.createWebGLCanvas(width, height);\n // eslint-disable-next-line\n this.aPosition = new Float32Array([0, 0, 0, 1, 1, 0, 1, 1]);\n this.chooseFastestCopyGLTo2DMethod(width, height);\n },\n\n /**\n * Pick a method to copy data from GL context to 2d canvas. In some browsers using\n * putImageData is faster than drawImage for that specific operation.\n */\n chooseFastestCopyGLTo2DMethod: function(width, height) {\n var canMeasurePerf = typeof window.performance !== 'undefined', canUseImageData;\n try {\n new ImageData(1, 1);\n canUseImageData = true;\n }\n catch (e) {\n canUseImageData = false;\n }\n // eslint-disable-next-line no-undef\n var canUseArrayBuffer = typeof ArrayBuffer !== 'undefined';\n // eslint-disable-next-line no-undef\n var canUseUint8Clamped = typeof Uint8ClampedArray !== 'undefined';\n\n if (!(canMeasurePerf && canUseImageData && canUseArrayBuffer && canUseUint8Clamped)) {\n return;\n }\n\n var targetCanvas = fabric.util.createCanvasElement();\n // eslint-disable-next-line no-undef\n var imageBuffer = new ArrayBuffer(width * height * 4);\n if (fabric.forceGLPutImageData) {\n this.imageBuffer = imageBuffer;\n this.copyGLTo2D = copyGLTo2DPutImageData;\n return;\n }\n var testContext = {\n imageBuffer: imageBuffer,\n destinationWidth: width,\n destinationHeight: height,\n targetCanvas: targetCanvas\n };\n var startTime, drawImageTime, putImageDataTime;\n targetCanvas.width = width;\n targetCanvas.height = height;\n\n startTime = window.performance.now();\n copyGLTo2DDrawImage.call(testContext, this.gl, testContext);\n drawImageTime = window.performance.now() - startTime;\n\n startTime = window.performance.now();\n copyGLTo2DPutImageData.call(testContext, this.gl, testContext);\n putImageDataTime = window.performance.now() - startTime;\n\n if (drawImageTime > putImageDataTime) {\n this.imageBuffer = imageBuffer;\n this.copyGLTo2D = copyGLTo2DPutImageData;\n }\n else {\n this.copyGLTo2D = copyGLTo2DDrawImage;\n }\n },\n\n /**\n * Create a canvas element and associated WebGL context and attaches them as\n * class properties to the GLFilterBackend class.\n */\n createWebGLCanvas: function(width, height) {\n var canvas = fabric.util.createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n var glOptions = {\n alpha: true,\n premultipliedAlpha: false,\n depth: false,\n stencil: false,\n antialias: false\n },\n gl = canvas.getContext('webgl', glOptions);\n if (!gl) {\n gl = canvas.getContext('experimental-webgl', glOptions);\n }\n if (!gl) {\n return;\n }\n gl.clearColor(0, 0, 0, 0);\n // this canvas can fire webglcontextlost and webglcontextrestored\n this.canvas = canvas;\n this.gl = gl;\n },\n\n /**\n * Attempts to apply the requested filters to the source provided, drawing the filtered output\n * to the provided target canvas.\n *\n * @param {Array} filters The filters to apply.\n * @param {HTMLImageElement|HTMLCanvasElement} source The source to be filtered.\n * @param {Number} width The width of the source input.\n * @param {Number} height The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n * @param {String|undefined} cacheKey A key used to cache resources related to the source. If\n * omitted, caching will be skipped.\n */\n applyFilters: function(filters, source, width, height, targetCanvas, cacheKey) {\n var gl = this.gl;\n var cachedTexture;\n if (cacheKey) {\n cachedTexture = this.getCachedTexture(cacheKey, source);\n }\n var pipelineState = {\n originalWidth: source.width || source.originalWidth,\n originalHeight: source.height || source.originalHeight,\n sourceWidth: width,\n sourceHeight: height,\n destinationWidth: width,\n destinationHeight: height,\n context: gl,\n sourceTexture: this.createTexture(gl, width, height, !cachedTexture && source),\n targetTexture: this.createTexture(gl, width, height),\n originalTexture: cachedTexture ||\n this.createTexture(gl, width, height, !cachedTexture && source),\n passes: filters.length,\n webgl: true,\n aPosition: this.aPosition,\n programCache: this.programCache,\n pass: 0,\n filterBackend: this,\n targetCanvas: targetCanvas\n };\n var tempFbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, tempFbo);\n filters.forEach(function(filter) { filter && filter.applyTo(pipelineState); });\n resizeCanvasIfNeeded(pipelineState);\n this.copyGLTo2D(gl, pipelineState);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.deleteTexture(pipelineState.sourceTexture);\n gl.deleteTexture(pipelineState.targetTexture);\n gl.deleteFramebuffer(tempFbo);\n targetCanvas.getContext('2d').setTransform(1, 0, 0, 1, 0, 0);\n return pipelineState;\n },\n\n /**\n * Detach event listeners, remove references, and clean up caches.\n */\n dispose: function() {\n if (this.canvas) {\n this.canvas = null;\n this.gl = null;\n }\n this.clearWebGLCaches();\n },\n\n /**\n * Wipe out WebGL-related caches.\n */\n clearWebGLCaches: function() {\n this.programCache = {};\n this.textureCache = {};\n },\n\n /**\n * Create a WebGL texture object.\n *\n * Accepts specific dimensions to initialize the textuer to or a source image.\n *\n * @param {WebGLRenderingContext} gl The GL context to use for creating the texture.\n * @param {Number} width The width to initialize the texture at.\n * @param {Number} height The height to initialize the texture.\n * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source for the texture data.\n * @returns {WebGLTexture}\n */\n createTexture: function(gl, width, height, textureImageSource) {\n var texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n if (textureImageSource) {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, textureImageSource);\n }\n else {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n }\n return texture;\n },\n\n /**\n * Can be optionally used to get a texture from the cache array\n *\n * If an existing texture is not found, a new texture is created and cached.\n *\n * @param {String} uniqueId A cache key to use to find an existing texture.\n * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source to use to create the\n * texture cache entry if one does not already exist.\n */\n getCachedTexture: function(uniqueId, textureImageSource) {\n if (this.textureCache[uniqueId]) {\n return this.textureCache[uniqueId];\n }\n else {\n var texture = this.createTexture(\n this.gl, textureImageSource.width, textureImageSource.height, textureImageSource);\n this.textureCache[uniqueId] = texture;\n return texture;\n }\n },\n\n /**\n * Clear out cached resources related to a source image that has been\n * filtered previously.\n *\n * @param {String} cacheKey The cache key provided when the source image was filtered.\n */\n evictCachesForKey: function(cacheKey) {\n if (this.textureCache[cacheKey]) {\n this.gl.deleteTexture(this.textureCache[cacheKey]);\n delete this.textureCache[cacheKey];\n }\n },\n\n copyGLTo2D: copyGLTo2DDrawImage,\n\n /**\n * Attempt to extract GPU information strings from a WebGL context.\n *\n * Useful information when debugging or blacklisting specific GPUs.\n *\n * @returns {Object} A GPU info object with renderer and vendor strings.\n */\n captureGPUInfo: function() {\n if (this.gpuInfo) {\n return this.gpuInfo;\n }\n var gl = this.gl, gpuInfo = { renderer: '', vendor: '' };\n if (!gl) {\n return gpuInfo;\n }\n var ext = gl.getExtension('WEBGL_debug_renderer_info');\n if (ext) {\n var renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);\n var vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);\n if (renderer) {\n gpuInfo.renderer = renderer.toLowerCase();\n }\n if (vendor) {\n gpuInfo.vendor = vendor.toLowerCase();\n }\n }\n this.gpuInfo = gpuInfo;\n return gpuInfo;\n },\n };\n})();\n\nfunction resizeCanvasIfNeeded(pipelineState) {\n var targetCanvas = pipelineState.targetCanvas,\n width = targetCanvas.width, height = targetCanvas.height,\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight;\n\n if (width !== dWidth || height !== dHeight) {\n targetCanvas.width = dWidth;\n targetCanvas.height = dHeight;\n }\n}\n\n/**\n * Copy an input WebGL canvas on to an output 2D canvas.\n *\n * The WebGL canvas is assumed to be upside down, with the top-left pixel of the\n * desired output image appearing in the bottom-left corner of the WebGL canvas.\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\nfunction copyGLTo2DDrawImage(gl, pipelineState) {\n var glCanvas = gl.canvas, targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d');\n ctx.translate(0, targetCanvas.height); // move it down again\n ctx.scale(1, -1); // vertical flip\n // where is my image on the big glcanvas?\n var sourceY = glCanvas.height - targetCanvas.height;\n ctx.drawImage(glCanvas, 0, sourceY, targetCanvas.width, targetCanvas.height, 0, 0,\n targetCanvas.width, targetCanvas.height);\n}\n\n/**\n * Copy an input WebGL canvas on to an output 2D canvas using 2d canvas' putImageData\n * API. Measurably faster than using ctx.drawImage in Firefox (version 54 on OSX Sierra).\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\nfunction copyGLTo2DPutImageData(gl, pipelineState) {\n var targetCanvas = pipelineState.targetCanvas, ctx = targetCanvas.getContext('2d'),\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight,\n numBytes = dWidth * dHeight * 4;\n\n // eslint-disable-next-line no-undef\n var u8 = new Uint8Array(this.imageBuffer, 0, numBytes);\n // eslint-disable-next-line no-undef\n var u8Clamped = new Uint8ClampedArray(this.imageBuffer, 0, numBytes);\n\n gl.readPixels(0, 0, dWidth, dHeight, gl.RGBA, gl.UNSIGNED_BYTE, u8);\n var imgData = new ImageData(u8Clamped, dWidth, dHeight);\n ctx.putImageData(imgData, 0, 0);\n}\n\n\n(function() {\n\n 'use strict';\n\n var noop = function() {};\n\n fabric.Canvas2dFilterBackend = Canvas2dFilterBackend;\n\n /**\n * Canvas 2D filter backend.\n */\n function Canvas2dFilterBackend() {};\n\n Canvas2dFilterBackend.prototype = /** @lends fabric.Canvas2dFilterBackend.prototype */ {\n evictCachesForKey: noop,\n dispose: noop,\n clearWebGLCaches: noop,\n\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: {\n\n },\n\n /**\n * Apply a set of filters against a source image and draw the filtered output\n * to the provided destination canvas.\n *\n * @param {EnhancedFilter} filters The filter to apply.\n * @param {HTMLImageElement|HTMLCanvasElement} sourceElement The source to be filtered.\n * @param {Number} sourceWidth The width of the source input.\n * @param {Number} sourceHeight The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n */\n applyFilters: function(filters, sourceElement, sourceWidth, sourceHeight, targetCanvas) {\n var ctx = targetCanvas.getContext('2d');\n ctx.drawImage(sourceElement, 0, 0, sourceWidth, sourceHeight);\n var imageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n var originalImageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n var pipelineState = {\n sourceWidth: sourceWidth,\n sourceHeight: sourceHeight,\n imageData: imageData,\n originalEl: sourceElement,\n originalImageData: originalImageData,\n canvasEl: targetCanvas,\n ctx: ctx,\n filterBackend: this,\n };\n filters.forEach(function(filter) { filter.applyTo(pipelineState); });\n if (pipelineState.imageData.width !== sourceWidth || pipelineState.imageData.height !== sourceHeight) {\n targetCanvas.width = pipelineState.imageData.width;\n targetCanvas.height = pipelineState.imageData.height;\n }\n ctx.putImageData(pipelineState.imageData, 0, 0);\n return pipelineState;\n },\n\n };\n})();\n\n\n/**\n * @namespace fabric.Image.filters\n * @memberOf fabric.Image\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#image_filters}\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n */\nfabric.Image = fabric.Image || { };\nfabric.Image.filters = fabric.Image.filters || { };\n\n/**\n * Root filter class from which all filter classes inherit from\n * @class fabric.Image.filters.BaseFilter\n * @memberOf fabric.Image.filters\n */\nfabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Image.filters.BaseFilter.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'BaseFilter',\n\n /**\n * Array of attributes to send with buffers. do not modify\n * @private\n */\n\n vertexSource: 'attribute vec2 aPosition;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vTexCoord = aPosition;\\n' +\n 'gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\\n' +\n '}',\n\n fragmentSource: 'precision highp float;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'void main() {\\n' +\n 'gl_FragColor = texture2D(uTexture, vTexCoord);\\n' +\n '}',\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function(options) {\n if (options) {\n this.setOptions(options);\n }\n },\n\n /**\n * Sets filter's properties from options\n * @param {Object} [options] Options object\n */\n setOptions: function(options) {\n for (var prop in options) {\n this[prop] = options[prop];\n }\n },\n\n /**\n * Compile this filter's shader program.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context to use for shader compilation.\n * @param {String} fragmentSource fragmentShader source for compilation\n * @param {String} vertexSource vertexShader source for compilation\n */\n createProgram: function(gl, fragmentSource, vertexSource) {\n fragmentSource = fragmentSource || this.fragmentSource;\n vertexSource = vertexSource || this.vertexSource;\n if (fabric.webGlPrecision !== 'highp'){\n fragmentSource = fragmentSource.replace(\n /precision highp float/g,\n 'precision ' + fabric.webGlPrecision + ' float'\n );\n }\n var vertexShader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(vertexShader, vertexSource);\n gl.compileShader(vertexShader);\n if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {\n throw new Error(\n // eslint-disable-next-line prefer-template\n 'Vertex shader compile error for ' + this.type + ': ' +\n gl.getShaderInfoLog(vertexShader)\n );\n }\n\n var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n throw new Error(\n // eslint-disable-next-line prefer-template\n 'Fragment shader compile error for ' + this.type + ': ' +\n gl.getShaderInfoLog(fragmentShader)\n );\n }\n\n var program = gl.createProgram();\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n throw new Error(\n // eslint-disable-next-line prefer-template\n 'Shader link error for \"${this.type}\" ' +\n gl.getProgramInfoLog(program)\n );\n }\n\n var attributeLocations = this.getAttributeLocations(gl, program);\n var uniformLocations = this.getUniformLocations(gl, program) || { };\n uniformLocations.uStepW = gl.getUniformLocation(program, 'uStepW');\n uniformLocations.uStepH = gl.getUniformLocation(program, 'uStepH');\n return {\n program: program,\n attributeLocations: attributeLocations,\n uniformLocations: uniformLocations\n };\n },\n\n /**\n * Return a map of attribute names to WebGLAttributeLocation objects.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {WebGLShaderProgram} program The shader program from which to take attribute locations.\n * @returns {Object} A map of attribute names to attribute locations.\n */\n getAttributeLocations: function(gl, program) {\n return {\n aPosition: gl.getAttribLocation(program, 'aPosition'),\n };\n },\n\n /**\n * Return a map of uniform names to WebGLUniformLocation objects.\n *\n * Intended to be overridden by subclasses.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {WebGLShaderProgram} program The shader program from which to take uniform locations.\n * @returns {Object} A map of uniform names to uniform locations.\n */\n getUniformLocations: function (/* gl, program */) {\n // in case i do not need any special uniform i need to return an empty object\n return { };\n },\n\n /**\n * Send attribute data from this filter to its shader program on the GPU.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {Object} attributeLocations A map of shader attribute names to their locations.\n */\n sendAttributeData: function(gl, attributeLocations, aPositionData) {\n var attributeLocation = attributeLocations.aPosition;\n var buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.enableVertexAttribArray(attributeLocation);\n gl.vertexAttribPointer(attributeLocation, 2, gl.FLOAT, false, 0, 0);\n gl.bufferData(gl.ARRAY_BUFFER, aPositionData, gl.STATIC_DRAW);\n },\n\n _setupFrameBuffer: function(options) {\n var gl = options.context, width, height;\n if (options.passes > 1) {\n width = options.destinationWidth;\n height = options.destinationHeight;\n if (options.sourceWidth !== width || options.sourceHeight !== height) {\n gl.deleteTexture(options.targetTexture);\n options.targetTexture = options.filterBackend.createTexture(gl, width, height);\n }\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D,\n options.targetTexture, 0);\n }\n else {\n // draw last filter on canvas and not to framebuffer.\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.finish();\n }\n },\n\n _swapTextures: function(options) {\n options.passes--;\n options.pass++;\n var temp = options.targetTexture;\n options.targetTexture = options.sourceTexture;\n options.sourceTexture = temp;\n },\n\n /**\n * Generic isNeutral implementation for one parameter based filters.\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * Other filters may need their own verison ( ColorMatrix, HueRotation, gamma, ComposedFilter )\n * @param {Object} options\n **/\n isNeutralState: function(/* options */) {\n var main = this.mainParameter,\n _class = fabric.Image.filters[this.type].prototype;\n if (main) {\n if (Array.isArray(_class[main])) {\n for (var i = _class[main].length; i--;) {\n if (this[main][i] !== _class[main][i]) {\n return false;\n }\n }\n return true;\n }\n else {\n return _class[main] === this[main];\n }\n }\n else {\n return false;\n }\n },\n\n /**\n * Apply this filter to the input image data provided.\n *\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo: function(options) {\n if (options.webgl) {\n this._setupFrameBuffer(options);\n this.applyToWebGL(options);\n this._swapTextures(options);\n }\n else {\n this.applyTo2d(options);\n }\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n if (!options.programCache.hasOwnProperty(this.type)) {\n options.programCache[this.type] = this.createProgram(options.context);\n }\n return options.programCache[this.type];\n },\n\n /**\n * Apply this filter using webgl.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.originalTexture The texture of the original input image.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyToWebGL: function(options) {\n var gl = options.context;\n var shader = this.retrieveShader(options);\n if (options.pass === 0 && options.originalTexture) {\n gl.bindTexture(gl.TEXTURE_2D, options.originalTexture);\n }\n else {\n gl.bindTexture(gl.TEXTURE_2D, options.sourceTexture);\n }\n gl.useProgram(shader.program);\n this.sendAttributeData(gl, shader.attributeLocations, options.aPosition);\n\n gl.uniform1f(shader.uniformLocations.uStepW, 1 / options.sourceWidth);\n gl.uniform1f(shader.uniformLocations.uStepH, 1 / options.sourceHeight);\n\n this.sendUniformData(gl, shader.uniformLocations);\n gl.viewport(0, 0, options.destinationWidth, options.destinationHeight);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n },\n\n bindAdditionalTexture: function(gl, texture, textureUnit) {\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n // reset active texture to 0 as usual\n gl.activeTexture(gl.TEXTURE0);\n },\n\n unbindAdditionalTexture: function(gl, textureUnit) {\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.activeTexture(gl.TEXTURE0);\n },\n\n getMainParameter: function() {\n return this[this.mainParameter];\n },\n\n setMainParameter: function(value) {\n this[this.mainParameter] = value;\n },\n\n /**\n * Send uniform data from this filter to its shader program on the GPU.\n *\n * Intended to be overridden by subclasses.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {Object} uniformLocations A map of shader uniform names to their locations.\n */\n sendUniformData: function(/* gl, uniformLocations */) {\n // Intentionally left blank. Override me in subclasses.\n },\n\n /**\n * If needed by a 2d filter, this functions can create an helper canvas to be used\n * remember that options.targetCanvas is available for use till end of chain.\n */\n createHelpLayer: function(options) {\n if (!options.helpLayer) {\n var helpLayer = document.createElement('canvas');\n helpLayer.width = options.sourceWidth;\n helpLayer.height = options.sourceHeight;\n options.helpLayer = helpLayer;\n }\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n var object = { type: this.type }, mainP = this.mainParameter;\n if (mainP) {\n object[mainP] = this[mainP];\n }\n return object;\n },\n\n /**\n * Returns a JSON representation of an instance\n * @return {Object} JSON\n */\n toJSON: function() {\n // delegate, not alias\n return this.toObject();\n }\n});\n\nfabric.Image.filters.BaseFilter.fromObject = function(object, callback) {\n var filter = new fabric.Image.filters[object.type](object);\n callback && callback(filter);\n return filter;\n};\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Color Matrix filter class\n * @class fabric.Image.filters.ColorMatrix\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.ColorMatrix#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @see {@Link http://www.webwasp.co.uk/tutorials/219/Color_Matrix_Filter.php}\n * @see {@Link http://phoboslab.org/log/2013/11/fast-image-filters-with-webgl}\n * @example Kodachrome filter\n * var filter = new fabric.Image.filters.ColorMatrix({\n * matrix: [\n 1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,\n -0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,\n -0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,\n 0, 0, 0, 1, 0\n ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.ColorMatrix = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.ColorMatrix.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'ColorMatrix',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'uniform mat4 uColorMatrix;\\n' +\n 'uniform vec4 uConstants;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'color *= uColorMatrix;\\n' +\n 'color += uConstants;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * Colormatrix for pixels.\n * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning\n * outside the -1, 1 range.\n * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n * @param {Array} matrix array of 20 numbers.\n * @default\n */\n matrix: [\n 1, 0, 0, 0, 0,\n 0, 1, 0, 0, 0,\n 0, 0, 1, 0, 0,\n 0, 0, 0, 1, 0\n ],\n\n mainParameter: 'matrix',\n\n /**\n * Lock the colormatrix on the color part, skipping alpha, manly for non webgl scenario\n * to save some calculation\n */\n colorsOnly: true,\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function(options) {\n this.callSuper('initialize', options);\n // create a new array instead mutating the prototype with push\n this.matrix = this.matrix.slice(0);\n },\n\n /**\n * Apply the ColorMatrix operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data,\n iLen = data.length,\n m = this.matrix,\n r, g, b, a, i, colorsOnly = this.colorsOnly;\n\n for (i = 0; i < iLen; i += 4) {\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n if (colorsOnly) {\n data[i] = r * m[0] + g * m[1] + b * m[2] + m[4] * 255;\n data[i + 1] = r * m[5] + g * m[6] + b * m[7] + m[9] * 255;\n data[i + 2] = r * m[10] + g * m[11] + b * m[12] + m[14] * 255;\n }\n else {\n a = data[i + 3];\n data[i] = r * m[0] + g * m[1] + b * m[2] + a * m[3] + m[4] * 255;\n data[i + 1] = r * m[5] + g * m[6] + b * m[7] + a * m[8] + m[9] * 255;\n data[i + 2] = r * m[10] + g * m[11] + b * m[12] + a * m[13] + m[14] * 255;\n data[i + 3] = r * m[15] + g * m[16] + b * m[17] + a * m[18] + m[19] * 255;\n }\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uColorMatrix: gl.getUniformLocation(program, 'uColorMatrix'),\n uConstants: gl.getUniformLocation(program, 'uConstants'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n var m = this.matrix,\n matrix = [\n m[0], m[1], m[2], m[3],\n m[5], m[6], m[7], m[8],\n m[10], m[11], m[12], m[13],\n m[15], m[16], m[17], m[18]\n ],\n constants = [m[4], m[9], m[14], m[19]];\n gl.uniformMatrix4fv(uniformLocations.uColorMatrix, false, matrix);\n gl.uniform4fv(uniformLocations.uConstants, constants);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] function to invoke after filter creation\n * @return {fabric.Image.filters.ColorMatrix} Instance of fabric.Image.filters.ColorMatrix\n */\n fabric.Image.filters.ColorMatrix.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Brightness filter class\n * @class fabric.Image.filters.Brightness\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Brightness#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Brightness({\n * brightness: 0.05\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Brightness = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Brightness.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Brightness',\n\n /**\n * Fragment source for the brightness program\n */\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uBrightness;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'color.rgb += uBrightness;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * Brightness value, from -1 to 1.\n * translated to -255 to 255 for 2d\n * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n * @param {Number} brightness\n * @default\n */\n brightness: 0,\n\n /**\n * Describe the property that is the filter parameter\n * @param {String} m\n * @default\n */\n mainParameter: 'brightness',\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n if (this.brightness === 0) {\n return;\n }\n var imageData = options.imageData,\n data = imageData.data, i, len = data.length,\n brightness = Math.round(this.brightness * 255);\n for (i = 0; i < len; i += 4) {\n data[i] = data[i] + brightness;\n data[i + 1] = data[i + 1] + brightness;\n data[i + 2] = data[i + 2] + brightness;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uBrightness: gl.getUniformLocation(program, 'uBrightness'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uBrightness, this.brightness);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Brightness} Instance of fabric.Image.filters.Brightness\n */\n fabric.Image.filters.Brightness.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Adapted from html5rocks article\n * @class fabric.Image.filters.Convolute\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Convolute#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example Sharpen filter\n * var filter = new fabric.Image.filters.Convolute({\n * matrix: [ 0, -1, 0,\n * -1, 5, -1,\n * 0, -1, 0 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Blur filter\n * var filter = new fabric.Image.filters.Convolute({\n * matrix: [ 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Emboss filter\n * var filter = new fabric.Image.filters.Convolute({\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Emboss filter with opaqueness\n * var filter = new fabric.Image.filters.Convolute({\n * opaque: true,\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n filters.Convolute = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Convolute.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Convolute',\n\n /*\n * Opaque value (true/false)\n */\n opaque: false,\n\n /*\n * matrix for the filter, max 9x9\n */\n matrix: [0, 0, 0, 0, 1, 0, 0, 0, 0],\n\n /**\n * Fragment source for the brightness program\n */\n fragmentSource: {\n Convolute_3_1: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[9];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 0);\\n' +\n 'for (float h = 0.0; h < 3.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 3.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));\\n' +\n 'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n Convolute_3_0: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[9];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 1);\\n' +\n 'for (float h = 0.0; h < 3.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 3.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));\\n' +\n 'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'float alpha = texture2D(uTexture, vTexCoord).a;\\n' +\n 'gl_FragColor = color;\\n' +\n 'gl_FragColor.a = alpha;\\n' +\n '}',\n Convolute_5_1: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[25];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 0);\\n' +\n 'for (float h = 0.0; h < 5.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 5.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\\n' +\n 'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n Convolute_5_0: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[25];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 1);\\n' +\n 'for (float h = 0.0; h < 5.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 5.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\\n' +\n 'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'float alpha = texture2D(uTexture, vTexCoord).a;\\n' +\n 'gl_FragColor = color;\\n' +\n 'gl_FragColor.a = alpha;\\n' +\n '}',\n Convolute_7_1: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[49];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 0);\\n' +\n 'for (float h = 0.0; h < 7.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 7.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\\n' +\n 'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n Convolute_7_0: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[49];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 1);\\n' +\n 'for (float h = 0.0; h < 7.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 7.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\\n' +\n 'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'float alpha = texture2D(uTexture, vTexCoord).a;\\n' +\n 'gl_FragColor = color;\\n' +\n 'gl_FragColor.a = alpha;\\n' +\n '}',\n Convolute_9_1: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[81];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 0);\\n' +\n 'for (float h = 0.0; h < 9.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 9.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\\n' +\n 'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n Convolute_9_0: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[81];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 1);\\n' +\n 'for (float h = 0.0; h < 9.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 9.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\\n' +\n 'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'float alpha = texture2D(uTexture, vTexCoord).a;\\n' +\n 'gl_FragColor = color;\\n' +\n 'gl_FragColor.a = alpha;\\n' +\n '}',\n },\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.Convolute.prototype\n * @param {Object} [options] Options object\n * @param {Boolean} [options.opaque=false] Opaque value (true/false)\n * @param {Array} [options.matrix] Filter matrix\n */\n\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n var size = Math.sqrt(this.matrix.length);\n var cacheKey = this.type + '_' + size + '_' + (this.opaque ? 1 : 0);\n var shaderSource = this.fragmentSource[cacheKey];\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n }\n return options.programCache[cacheKey];\n },\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data,\n weights = this.matrix,\n side = Math.round(Math.sqrt(weights.length)),\n halfSide = Math.floor(side / 2),\n sw = imageData.width,\n sh = imageData.height,\n output = options.ctx.createImageData(sw, sh),\n dst = output.data,\n // go through the destination image pixels\n alphaFac = this.opaque ? 1 : 0,\n r, g, b, a, dstOff,\n scx, scy, srcOff, wt,\n x, y, cx, cy;\n\n for (y = 0; y < sh; y++) {\n for (x = 0; x < sw; x++) {\n dstOff = (y * sw + x) * 4;\n // calculate the weighed sum of the source image pixels that\n // fall under the convolution matrix\n r = 0; g = 0; b = 0; a = 0;\n\n for (cy = 0; cy < side; cy++) {\n for (cx = 0; cx < side; cx++) {\n scy = y + cy - halfSide;\n scx = x + cx - halfSide;\n\n // eslint-disable-next-line max-depth\n if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {\n continue;\n }\n\n srcOff = (scy * sw + scx) * 4;\n wt = weights[cy * side + cx];\n\n r += data[srcOff] * wt;\n g += data[srcOff + 1] * wt;\n b += data[srcOff + 2] * wt;\n // eslint-disable-next-line max-depth\n if (!alphaFac) {\n a += data[srcOff + 3] * wt;\n }\n }\n }\n dst[dstOff] = r;\n dst[dstOff + 1] = g;\n dst[dstOff + 2] = b;\n if (!alphaFac) {\n dst[dstOff + 3] = a;\n }\n else {\n dst[dstOff + 3] = data[dstOff + 3];\n }\n }\n }\n options.imageData = output;\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uMatrix: gl.getUniformLocation(program, 'uMatrix'),\n uOpaque: gl.getUniformLocation(program, 'uOpaque'),\n uHalfSize: gl.getUniformLocation(program, 'uHalfSize'),\n uSize: gl.getUniformLocation(program, 'uSize'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1fv(uniformLocations.uMatrix, this.matrix);\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return extend(this.callSuper('toObject'), {\n opaque: this.opaque,\n matrix: this.matrix\n });\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Convolute} Instance of fabric.Image.filters.Convolute\n */\n fabric.Image.filters.Convolute.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Grayscale image filter class\n * @class fabric.Image.filters.Grayscale\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Grayscale();\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Grayscale = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Grayscale.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Grayscale',\n\n fragmentSource: {\n average: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'float average = (color.r + color.b + color.g) / 3.0;\\n' +\n 'gl_FragColor = vec4(average, average, average, color.a);\\n' +\n '}',\n lightness: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform int uMode;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 col = texture2D(uTexture, vTexCoord);\\n' +\n 'float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\\n' +\n 'gl_FragColor = vec4(average, average, average, col.a);\\n' +\n '}',\n luminosity: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform int uMode;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 col = texture2D(uTexture, vTexCoord);\\n' +\n 'float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\\n' +\n 'gl_FragColor = vec4(average, average, average, col.a);\\n' +\n '}',\n },\n\n\n /**\n * Grayscale mode, between 'average', 'lightness', 'luminosity'\n * @param {String} type\n * @default\n */\n mode: 'average',\n\n mainParameter: 'mode',\n\n /**\n * Apply the Grayscale operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data, i,\n len = data.length, value,\n mode = this.mode;\n for (i = 0; i < len; i += 4) {\n if (mode === 'average') {\n value = (data[i] + data[i + 1] + data[i + 2]) / 3;\n }\n else if (mode === 'lightness') {\n value = (Math.min(data[i], data[i + 1], data[i + 2]) +\n Math.max(data[i], data[i + 1], data[i + 2])) / 2;\n }\n else if (mode === 'luminosity') {\n value = 0.21 * data[i] + 0.72 * data[i + 1] + 0.07 * data[i + 2];\n }\n data[i] = value;\n data[i + 1] = value;\n data[i + 2] = value;\n }\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n var cacheKey = this.type + '_' + this.mode;\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n var shaderSource = this.fragmentSource[this.mode];\n options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n }\n return options.programCache[cacheKey];\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uMode: gl.getUniformLocation(program, 'uMode'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n // default average mode.\n var mode = 1;\n gl.uniform1i(uniformLocations.uMode, mode);\n },\n\n /**\n * Grayscale filter isNeutralState implementation\n * The filter is never neutral\n * on the image\n **/\n isNeutralState: function() {\n return false;\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Grayscale} Instance of fabric.Image.filters.Grayscale\n */\n fabric.Image.filters.Grayscale.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Invert filter class\n * @class fabric.Image.filters.Invert\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Invert();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\n filters.Invert = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Invert.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Invert',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform int uInvert;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'if (uInvert == 1) {\\n' +\n 'gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);\\n' +\n '} else {\\n' +\n 'gl_FragColor = color;\\n' +\n '}\\n' +\n '}',\n\n /**\n * Filter invert. if false, does nothing\n * @param {Boolean} invert\n * @default\n */\n invert: true,\n\n mainParameter: 'invert',\n\n /**\n * Apply the Invert operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data, i,\n len = data.length;\n for (i = 0; i < len; i += 4) {\n data[i] = 255 - data[i];\n data[i + 1] = 255 - data[i + 1];\n data[i + 2] = 255 - data[i + 2];\n }\n },\n\n /**\n * Invert filter isNeutralState implementation\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * @param {Object} options\n **/\n isNeutralState: function() {\n return !this.invert;\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uInvert: gl.getUniformLocation(program, 'uInvert'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1i(uniformLocations.uInvert, this.invert);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Invert} Instance of fabric.Image.filters.Invert\n */\n fabric.Image.filters.Invert.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Noise filter class\n * @class fabric.Image.filters.Noise\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Noise#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Noise({\n * noise: 700\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n filters.Noise = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Noise.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Noise',\n\n /**\n * Fragment source for the noise program\n */\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uStepH;\\n' +\n 'uniform float uNoise;\\n' +\n 'uniform float uSeed;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'float rand(vec2 co, float seed, float vScale) {\\n' +\n 'return fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);\\n' +\n '}\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * Describe the property that is the filter parameter\n * @param {String} m\n * @default\n */\n mainParameter: 'noise',\n\n /**\n * Noise value, from\n * @param {Number} noise\n * @default\n */\n noise: 0,\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n if (this.noise === 0) {\n return;\n }\n var imageData = options.imageData,\n data = imageData.data, i, len = data.length,\n noise = this.noise, rand;\n\n for (i = 0, len = data.length; i < len; i += 4) {\n\n rand = (0.5 - Math.random()) * noise;\n\n data[i] += rand;\n data[i + 1] += rand;\n data[i + 2] += rand;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uNoise: gl.getUniformLocation(program, 'uNoise'),\n uSeed: gl.getUniformLocation(program, 'uSeed'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uNoise, this.noise / 255);\n gl.uniform1f(uniformLocations.uSeed, Math.random());\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return extend(this.callSuper('toObject'), {\n noise: this.noise\n });\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Noise} Instance of fabric.Image.filters.Noise\n */\n fabric.Image.filters.Noise.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Pixelate filter class\n * @class fabric.Image.filters.Pixelate\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Pixelate#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Pixelate({\n * blocksize: 8\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Pixelate = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Pixelate.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Pixelate',\n\n blocksize: 4,\n\n mainParameter: 'blocksize',\n\n /**\n * Fragment source for the Pixelate program\n */\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uBlocksize;\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'float blockW = uBlocksize * uStepW;\\n' +\n 'float blockH = uBlocksize * uStepW;\\n' +\n 'int posX = int(vTexCoord.x / blockW);\\n' +\n 'int posY = int(vTexCoord.y / blockH);\\n' +\n 'float fposX = float(posX);\\n' +\n 'float fposY = float(posY);\\n' +\n 'vec2 squareCoords = vec2(fposX * blockW, fposY * blockH);\\n' +\n 'vec4 color = texture2D(uTexture, squareCoords);\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * Apply the Pixelate operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data,\n iLen = imageData.height,\n jLen = imageData.width,\n index, i, j, r, g, b, a,\n _i, _j, _iLen, _jLen;\n\n for (i = 0; i < iLen; i += this.blocksize) {\n for (j = 0; j < jLen; j += this.blocksize) {\n\n index = (i * 4) * jLen + (j * 4);\n\n r = data[index];\n g = data[index + 1];\n b = data[index + 2];\n a = data[index + 3];\n\n _iLen = Math.min(i + this.blocksize, iLen);\n _jLen = Math.min(j + this.blocksize, jLen);\n for (_i = i; _i < _iLen; _i++) {\n for (_j = j; _j < _jLen; _j++) {\n index = (_i * 4) * jLen + (_j * 4);\n data[index] = r;\n data[index + 1] = g;\n data[index + 2] = b;\n data[index + 3] = a;\n }\n }\n }\n }\n },\n\n /**\n * Indicate when the filter is not gonna apply changes to the image\n **/\n isNeutralState: function() {\n return this.blocksize === 1;\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uBlocksize: gl.getUniformLocation(program, 'uBlocksize'),\n uStepW: gl.getUniformLocation(program, 'uStepW'),\n uStepH: gl.getUniformLocation(program, 'uStepH'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uBlocksize, this.blocksize);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Pixelate} Instance of fabric.Image.filters.Pixelate\n */\n fabric.Image.filters.Pixelate.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Remove white filter class\n * @class fabric.Image.filters.RemoveColor\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.RemoveColor#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.RemoveColor({\n * threshold: 0.2,\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n filters.RemoveColor = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.RemoveColor.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'RemoveColor',\n\n /**\n * Color to remove, in any format understood by fabric.Color.\n * @param {String} type\n * @default\n */\n color: '#FFFFFF',\n\n /**\n * Fragment source for the brightness program\n */\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform vec4 uLow;\\n' +\n 'uniform vec4 uHigh;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'gl_FragColor = texture2D(uTexture, vTexCoord);\\n' +\n 'if(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {\\n' +\n 'gl_FragColor.a = 0.0;\\n' +\n '}\\n' +\n '}',\n\n /**\n * distance to actual color, as value up or down from each r,g,b\n * between 0 and 1\n **/\n distance: 0.02,\n\n /**\n * For color to remove inside distance, use alpha channel for a smoother deletion\n * NOT IMPLEMENTED YET\n **/\n useAlpha: false,\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.RemoveWhite.prototype\n * @param {Object} [options] Options object\n * @param {Number} [options.color=#RRGGBB] Threshold value\n * @param {Number} [options.distance=10] Distance value\n */\n\n /**\n * Applies filter to canvas element\n * @param {Object} canvasEl Canvas element to apply filter to\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data, i,\n distance = this.distance * 255,\n r, g, b,\n source = new fabric.Color(this.color).getSource(),\n lowC = [\n source[0] - distance,\n source[1] - distance,\n source[2] - distance,\n ],\n highC = [\n source[0] + distance,\n source[1] + distance,\n source[2] + distance,\n ];\n\n\n for (i = 0; i < data.length; i += 4) {\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n\n if (r > lowC[0] &&\n g > lowC[1] &&\n b > lowC[2] &&\n r < highC[0] &&\n g < highC[1] &&\n b < highC[2]) {\n data[i + 3] = 0;\n }\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uLow: gl.getUniformLocation(program, 'uLow'),\n uHigh: gl.getUniformLocation(program, 'uHigh'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n var source = new fabric.Color(this.color).getSource(),\n distance = parseFloat(this.distance),\n lowC = [\n 0 + source[0] / 255 - distance,\n 0 + source[1] / 255 - distance,\n 0 + source[2] / 255 - distance,\n 1\n ],\n highC = [\n source[0] / 255 + distance,\n source[1] / 255 + distance,\n source[2] / 255 + distance,\n 1\n ];\n gl.uniform4fv(uniformLocations.uLow, lowC);\n gl.uniform4fv(uniformLocations.uHigh, highC);\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return extend(this.callSuper('toObject'), {\n color: this.color,\n distance: this.distance\n });\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.RemoveColor} Instance of fabric.Image.filters.RemoveWhite\n */\n fabric.Image.filters.RemoveColor.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n var matrices = {\n Brownie: [\n 0.59970,0.34553,-0.27082,0,0.186,\n -0.03770,0.86095,0.15059,0,-0.1449,\n 0.24113,-0.07441,0.44972,0,-0.02965,\n 0,0,0,1,0\n ],\n Vintage: [\n 0.62793,0.32021,-0.03965,0,0.03784,\n 0.02578,0.64411,0.03259,0,0.02926,\n 0.04660,-0.08512,0.52416,0,0.02023,\n 0,0,0,1,0\n ],\n Kodachrome: [\n 1.12855,-0.39673,-0.03992,0,0.24991,\n -0.16404,1.08352,-0.05498,0,0.09698,\n -0.16786,-0.56034,1.60148,0,0.13972,\n 0,0,0,1,0\n ],\n Technicolor: [\n 1.91252,-0.85453,-0.09155,0,0.04624,\n -0.30878,1.76589,-0.10601,0,-0.27589,\n -0.23110,-0.75018,1.84759,0,0.12137,\n 0,0,0,1,0\n ],\n Polaroid: [\n 1.438,-0.062,-0.062,0,0,\n -0.122,1.378,-0.122,0,0,\n -0.016,-0.016,1.483,0,0,\n 0,0,0,1,0\n ],\n Sepia: [\n 0.393, 0.769, 0.189, 0, 0,\n 0.349, 0.686, 0.168, 0, 0,\n 0.272, 0.534, 0.131, 0, 0,\n 0, 0, 0, 1, 0\n ],\n BlackWhite: [\n 1.5, 1.5, 1.5, 0, -1,\n 1.5, 1.5, 1.5, 0, -1,\n 1.5, 1.5, 1.5, 0, -1,\n 0, 0, 0, 1, 0,\n ]\n };\n\n for (var key in matrices) {\n filters[key] = createClass(filters.ColorMatrix, /** @lends fabric.Image.filters.Sepia.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: key,\n\n /**\n * Colormatrix for the effect\n * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning\n * outside the -1, 1 range.\n * @param {Array} matrix array of 20 numbers.\n * @default\n */\n matrix: matrices[key],\n\n /**\n * Lock the matrix export for this kind of static, parameter less filters.\n */\n mainParameter: false,\n /**\n * Lock the colormatrix on the color part, skipping alpha\n */\n colorsOnly: true,\n\n });\n fabric.Image.filters[key].fromObject = fabric.Image.filters.BaseFilter.fromObject;\n }\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n 'use strict';\n\n var fabric = global.fabric,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Color Blend filter class\n * @class fabric.Image.filter.BlendColor\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @example\n * var filter = new fabric.Image.filters.BlendColor({\n * color: '#000',\n * mode: 'multiply'\n * });\n *\n * var filter = new fabric.Image.filters.BlendImage({\n * image: fabricImageObject,\n * mode: 'multiply',\n * alpha: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n\n filters.BlendColor = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Blend.prototype */ {\n type: 'BlendColor',\n\n /**\n * Color to make the blend operation with. default to a reddish color since black or white\n * gives always strong result.\n **/\n color: '#F95C63',\n\n /**\n * Blend mode for the filter: one of multiply, add, diff, screen, subtract,\n * darken, lighten, overlay, exclusion, tint.\n **/\n mode: 'multiply',\n\n /**\n * alpha value. represent the strength of the blend color operation.\n **/\n alpha: 1,\n\n /**\n * Fragment source for the Multiply program\n */\n fragmentSource: {\n multiply: 'gl_FragColor.rgb *= uColor.rgb;\\n',\n screen: 'gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);\\n',\n add: 'gl_FragColor.rgb += uColor.rgb;\\n',\n diff: 'gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);\\n',\n subtract: 'gl_FragColor.rgb -= uColor.rgb;\\n',\n lighten: 'gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);\\n',\n darken: 'gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);\\n',\n exclusion: 'gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);\\n',\n overlay: 'if (uColor.r < 0.5) {\\n' +\n 'gl_FragColor.r *= 2.0 * uColor.r;\\n' +\n '} else {\\n' +\n 'gl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);\\n' +\n '}\\n' +\n 'if (uColor.g < 0.5) {\\n' +\n 'gl_FragColor.g *= 2.0 * uColor.g;\\n' +\n '} else {\\n' +\n 'gl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);\\n' +\n '}\\n' +\n 'if (uColor.b < 0.5) {\\n' +\n 'gl_FragColor.b *= 2.0 * uColor.b;\\n' +\n '} else {\\n' +\n 'gl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);\\n' +\n '}\\n',\n tint: 'gl_FragColor.rgb *= (1.0 - uColor.a);\\n' +\n 'gl_FragColor.rgb += uColor.rgb;\\n',\n },\n\n /**\n * build the fragment source for the filters, joining the common part with\n * the specific one.\n * @param {String} mode the mode of the filter, a key of this.fragmentSource\n * @return {String} the source to be compiled\n * @private\n */\n buildSource: function(mode) {\n return 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform vec4 uColor;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'gl_FragColor = color;\\n' +\n 'if (color.a > 0.0) {\\n' +\n this.fragmentSource[mode] +\n '}\\n' +\n '}';\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n var cacheKey = this.type + '_' + this.mode, shaderSource;\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n shaderSource = this.buildSource(this.mode);\n options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n }\n return options.programCache[cacheKey];\n },\n\n /**\n * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data, iLen = data.length,\n tr, tg, tb,\n r, g, b,\n source, alpha1 = 1 - this.alpha;\n\n source = new fabric.Color(this.color).getSource();\n tr = source[0] * this.alpha;\n tg = source[1] * this.alpha;\n tb = source[2] * this.alpha;\n\n for (var i = 0; i < iLen; i += 4) {\n\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n\n switch (this.mode) {\n case 'multiply':\n data[i] = r * tr / 255;\n data[i + 1] = g * tg / 255;\n data[i + 2] = b * tb / 255;\n break;\n case 'screen':\n data[i] = 255 - (255 - r) * (255 - tr) / 255;\n data[i + 1] = 255 - (255 - g) * (255 - tg) / 255;\n data[i + 2] = 255 - (255 - b) * (255 - tb) / 255;\n break;\n case 'add':\n data[i] = r + tr;\n data[i + 1] = g + tg;\n data[i + 2] = b + tb;\n break;\n case 'diff':\n case 'difference':\n data[i] = Math.abs(r - tr);\n data[i + 1] = Math.abs(g - tg);\n data[i + 2] = Math.abs(b - tb);\n break;\n case 'subtract':\n data[i] = r - tr;\n data[i + 1] = g - tg;\n data[i + 2] = b - tb;\n break;\n case 'darken':\n data[i] = Math.min(r, tr);\n data[i + 1] = Math.min(g, tg);\n data[i + 2] = Math.min(b, tb);\n break;\n case 'lighten':\n data[i] = Math.max(r, tr);\n data[i + 1] = Math.max(g, tg);\n data[i + 2] = Math.max(b, tb);\n break;\n case 'overlay':\n data[i] = tr < 128 ? (2 * r * tr / 255) : (255 - 2 * (255 - r) * (255 - tr) / 255);\n data[i + 1] = tg < 128 ? (2 * g * tg / 255) : (255 - 2 * (255 - g) * (255 - tg) / 255);\n data[i + 2] = tb < 128 ? (2 * b * tb / 255) : (255 - 2 * (255 - b) * (255 - tb) / 255);\n break;\n case 'exclusion':\n data[i] = tr + r - ((2 * tr * r) / 255);\n data[i + 1] = tg + g - ((2 * tg * g) / 255);\n data[i + 2] = tb + b - ((2 * tb * b) / 255);\n break;\n case 'tint':\n data[i] = tr + r * alpha1;\n data[i + 1] = tg + g * alpha1;\n data[i + 2] = tb + b * alpha1;\n }\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uColor: gl.getUniformLocation(program, 'uColor'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n var source = new fabric.Color(this.color).getSource();\n source[0] = this.alpha * source[0] / 255;\n source[1] = this.alpha * source[1] / 255;\n source[2] = this.alpha * source[2] / 255;\n source[3] = this.alpha;\n gl.uniform4fv(uniformLocations.uColor, source);\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return {\n type: this.type,\n color: this.color,\n mode: this.mode,\n alpha: this.alpha\n };\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.BlendColor} Instance of fabric.Image.filters.BlendColor\n */\n fabric.Image.filters.BlendColor.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n 'use strict';\n\n var fabric = global.fabric,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Image Blend filter class\n * @class fabric.Image.filter.BlendImage\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @example\n * var filter = new fabric.Image.filters.BlendColor({\n * color: '#000',\n * mode: 'multiply'\n * });\n *\n * var filter = new fabric.Image.filters.BlendImage({\n * image: fabricImageObject,\n * mode: 'multiply',\n * alpha: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n\n filters.BlendImage = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.BlendImage.prototype */ {\n type: 'BlendImage',\n\n /**\n * Color to make the blend operation with. default to a reddish color since black or white\n * gives always strong result.\n **/\n image: null,\n\n /**\n * Blend mode for the filter: one of multiply, add, diff, screen, subtract,\n * darken, lighten, overlay, exclusion, tint.\n **/\n mode: 'multiply',\n\n /**\n * alpha value. represent the strength of the blend image operation.\n * not implemented.\n **/\n alpha: 1,\n\n vertexSource: 'attribute vec2 aPosition;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'varying vec2 vTexCoord2;\\n' +\n 'uniform mat3 uTransformMatrix;\\n' +\n 'void main() {\\n' +\n 'vTexCoord = aPosition;\\n' +\n 'vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;\\n' +\n 'gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\\n' +\n '}',\n\n /**\n * Fragment source for the Multiply program\n */\n fragmentSource: {\n multiply: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform sampler2D uImage;\\n' +\n 'uniform vec4 uColor;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'varying vec2 vTexCoord2;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'vec4 color2 = texture2D(uImage, vTexCoord2);\\n' +\n 'color.rgba *= color2.rgba;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n mask: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform sampler2D uImage;\\n' +\n 'uniform vec4 uColor;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'varying vec2 vTexCoord2;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'vec4 color2 = texture2D(uImage, vTexCoord2);\\n' +\n 'color.a = color2.a;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n var cacheKey = this.type + '_' + this.mode;\n var shaderSource = this.fragmentSource[this.mode];\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n }\n return options.programCache[cacheKey];\n },\n\n applyToWebGL: function(options) {\n // load texture to blend.\n var gl = options.context,\n texture = this.createTexture(options.filterBackend, this.image);\n this.bindAdditionalTexture(gl, texture, gl.TEXTURE1);\n this.callSuper('applyToWebGL', options);\n this.unbindAdditionalTexture(gl, gl.TEXTURE1);\n },\n\n createTexture: function(backend, image) {\n return backend.getCachedTexture(image.cacheKey, image._element);\n },\n\n /**\n * Calculate a transformMatrix to adapt the image to blend over\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n calculateMatrix: function() {\n var image = this.image,\n width = image._element.width,\n height = image._element.height;\n return [\n 1 / image.scaleX, 0, 0,\n 0, 1 / image.scaleY, 0,\n -image.left / width, -image.top / height, 1\n ];\n },\n\n /**\n * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n resources = options.filterBackend.resources,\n data = imageData.data, iLen = data.length,\n width = imageData.width,\n height = imageData.height,\n tr, tg, tb, ta,\n r, g, b, a,\n canvas1, context, image = this.image, blendData;\n\n if (!resources.blendImage) {\n resources.blendImage = fabric.util.createCanvasElement();\n }\n canvas1 = resources.blendImage;\n context = canvas1.getContext('2d');\n if (canvas1.width !== width || canvas1.height !== height) {\n canvas1.width = width;\n canvas1.height = height;\n }\n else {\n context.clearRect(0, 0, width, height);\n }\n context.setTransform(image.scaleX, 0, 0, image.scaleY, image.left, image.top);\n context.drawImage(image._element, 0, 0, width, height);\n blendData = context.getImageData(0, 0, width, height).data;\n for (var i = 0; i < iLen; i += 4) {\n\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n a = data[i + 3];\n\n tr = blendData[i];\n tg = blendData[i + 1];\n tb = blendData[i + 2];\n ta = blendData[i + 3];\n\n switch (this.mode) {\n case 'multiply':\n data[i] = r * tr / 255;\n data[i + 1] = g * tg / 255;\n data[i + 2] = b * tb / 255;\n data[i + 3] = a * ta / 255;\n break;\n case 'mask':\n data[i + 3] = ta;\n break;\n }\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uTransformMatrix: gl.getUniformLocation(program, 'uTransformMatrix'),\n uImage: gl.getUniformLocation(program, 'uImage'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n var matrix = this.calculateMatrix();\n gl.uniform1i(uniformLocations.uImage, 1); // texture unit 1.\n gl.uniformMatrix3fv(uniformLocations.uTransformMatrix, false, matrix);\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return {\n type: this.type,\n image: this.image && this.image.toObject(),\n mode: this.mode,\n alpha: this.alpha\n };\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} callback to be invoked after filter creation\n * @return {fabric.Image.filters.BlendImage} Instance of fabric.Image.filters.BlendImage\n */\n fabric.Image.filters.BlendImage.fromObject = function(object, callback) {\n fabric.Image.fromObject(object.image, function(image) {\n var options = fabric.util.object.clone(object);\n options.image = image;\n callback(new fabric.Image.filters.BlendImage(options));\n });\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }), pow = Math.pow, floor = Math.floor,\n sqrt = Math.sqrt, abs = Math.abs, round = Math.round, sin = Math.sin,\n ceil = Math.ceil,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Resize image filter class\n * @class fabric.Image.filters.Resize\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Resize();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\n filters.Resize = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Resize.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Resize',\n\n /**\n * Resize type\n * for webgl resizeType is just lanczos, for canvas2d can be:\n * bilinear, hermite, sliceHack, lanczos.\n * @param {String} resizeType\n * @default\n */\n resizeType: 'hermite',\n\n /**\n * Scale factor for resizing, x axis\n * @param {Number} scaleX\n * @default\n */\n scaleX: 1,\n\n /**\n * Scale factor for resizing, y axis\n * @param {Number} scaleY\n * @default\n */\n scaleY: 1,\n\n /**\n * LanczosLobes parameter for lanczos filter, valid for resizeType lanczos\n * @param {Number} lanczosLobes\n * @default\n */\n lanczosLobes: 3,\n\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uDelta: gl.getUniformLocation(program, 'uDelta'),\n uTaps: gl.getUniformLocation(program, 'uTaps'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform2fv(uniformLocations.uDelta, this.horizontal ? [1 / this.width, 0] : [0, 1 / this.height]);\n gl.uniform1fv(uniformLocations.uTaps, this.taps);\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n var filterWindow = this.getFilterWindow(), cacheKey = this.type + '_' + filterWindow;\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n var fragmentShader = this.generateShader(filterWindow);\n options.programCache[cacheKey] = this.createProgram(options.context, fragmentShader);\n }\n return options.programCache[cacheKey];\n },\n\n getFilterWindow: function() {\n var scale = this.tempScale;\n return Math.ceil(this.lanczosLobes / scale);\n },\n\n getTaps: function() {\n var lobeFunction = this.lanczosCreate(this.lanczosLobes), scale = this.tempScale,\n filterWindow = this.getFilterWindow(), taps = new Array(filterWindow);\n for (var i = 1; i <= filterWindow; i++) {\n taps[i - 1] = lobeFunction(i * scale);\n }\n return taps;\n },\n\n /**\n * Generate vertex and shader sources from the necessary steps numbers\n * @param {Number} filterWindow\n */\n generateShader: function(filterWindow) {\n var offsets = new Array(filterWindow),\n fragmentShader = this.fragmentSourceTOP, filterWindow;\n\n for (var i = 1; i <= filterWindow; i++) {\n offsets[i - 1] = i + '.0 * uDelta';\n }\n\n fragmentShader += 'uniform float uTaps[' + filterWindow + '];\\n';\n fragmentShader += 'void main() {\\n';\n fragmentShader += ' vec4 color = texture2D(uTexture, vTexCoord);\\n';\n fragmentShader += ' float sum = 1.0;\\n';\n\n offsets.forEach(function(offset, i) {\n fragmentShader += ' color += texture2D(uTexture, vTexCoord + ' + offset + ') * uTaps[' + i + '];\\n';\n fragmentShader += ' color += texture2D(uTexture, vTexCoord - ' + offset + ') * uTaps[' + i + '];\\n';\n fragmentShader += ' sum += 2.0 * uTaps[' + i + '];\\n';\n });\n fragmentShader += ' gl_FragColor = color / sum;\\n';\n fragmentShader += '}';\n return fragmentShader;\n },\n\n fragmentSourceTOP: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform vec2 uDelta;\\n' +\n 'varying vec2 vTexCoord;\\n',\n\n /**\n * Apply the resize filter to the image\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo: function(options) {\n if (options.webgl) {\n options.passes++;\n this.width = options.sourceWidth;\n this.horizontal = true;\n this.dW = Math.round(this.width * this.scaleX);\n this.dH = options.sourceHeight;\n this.tempScale = this.dW / this.width;\n this.taps = this.getTaps();\n options.destinationWidth = this.dW;\n this._setupFrameBuffer(options);\n this.applyToWebGL(options);\n this._swapTextures(options);\n options.sourceWidth = options.destinationWidth;\n\n this.height = options.sourceHeight;\n this.horizontal = false;\n this.dH = Math.round(this.height * this.scaleY);\n this.tempScale = this.dH / this.height;\n this.taps = this.getTaps();\n options.destinationHeight = this.dH;\n this._setupFrameBuffer(options);\n this.applyToWebGL(options);\n this._swapTextures(options);\n options.sourceHeight = options.destinationHeight;\n }\n else {\n this.applyTo2d(options);\n }\n },\n\n isNeutralState: function() {\n return this.scaleX === 1 && this.scaleY === 1;\n },\n\n lanczosCreate: function(lobes) {\n return function(x) {\n if (x >= lobes || x <= -lobes) {\n return 0.0;\n }\n if (x < 1.19209290E-07 && x > -1.19209290E-07) {\n return 1.0;\n }\n x *= Math.PI;\n var xx = x / lobes;\n return (sin(x) / x) * sin(xx) / xx;\n };\n },\n\n /**\n * Applies filter to canvas element\n * @memberOf fabric.Image.filters.Resize.prototype\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} scaleX\n * @param {Number} scaleY\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n scaleX = this.scaleX,\n scaleY = this.scaleY;\n\n this.rcpScaleX = 1 / scaleX;\n this.rcpScaleY = 1 / scaleY;\n\n var oW = imageData.width, oH = imageData.height,\n dW = round(oW * scaleX), dH = round(oH * scaleY),\n newData;\n\n if (this.resizeType === 'sliceHack') {\n newData = this.sliceByTwo(options, oW, oH, dW, dH);\n }\n else if (this.resizeType === 'hermite') {\n newData = this.hermiteFastResize(options, oW, oH, dW, dH);\n }\n else if (this.resizeType === 'bilinear') {\n newData = this.bilinearFiltering(options, oW, oH, dW, dH);\n }\n else if (this.resizeType === 'lanczos') {\n newData = this.lanczosResize(options, oW, oH, dW, dH);\n }\n options.imageData = newData;\n },\n\n /**\n * Filter sliceByTwo\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n sliceByTwo: function(options, oW, oH, dW, dH) {\n var imageData = options.imageData,\n mult = 0.5, doneW = false, doneH = false, stepW = oW * mult,\n stepH = oH * mult, resources = fabric.filterBackend.resources,\n tmpCanvas, ctx, sX = 0, sY = 0, dX = oW, dY = 0;\n if (!resources.sliceByTwo) {\n resources.sliceByTwo = document.createElement('canvas');\n }\n tmpCanvas = resources.sliceByTwo;\n if (tmpCanvas.width < oW * 1.5 || tmpCanvas.height < oH) {\n tmpCanvas.width = oW * 1.5;\n tmpCanvas.height = oH;\n }\n ctx = tmpCanvas.getContext('2d');\n ctx.clearRect(0, 0, oW * 1.5, oH);\n ctx.putImageData(imageData, 0, 0);\n\n dW = floor(dW);\n dH = floor(dH);\n\n while (!doneW || !doneH) {\n oW = stepW;\n oH = stepH;\n if (dW < floor(stepW * mult)) {\n stepW = floor(stepW * mult);\n }\n else {\n stepW = dW;\n doneW = true;\n }\n if (dH < floor(stepH * mult)) {\n stepH = floor(stepH * mult);\n }\n else {\n stepH = dH;\n doneH = true;\n }\n ctx.drawImage(tmpCanvas, sX, sY, oW, oH, dX, dY, stepW, stepH);\n sX = dX;\n sY = dY;\n dY += stepH;\n }\n return ctx.getImageData(sX, sY, dW, dH);\n },\n\n /**\n * Filter lanczosResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n lanczosResize: function(options, oW, oH, dW, dH) {\n\n function process(u) {\n var v, i, weight, idx, a, red, green,\n blue, alpha, fX, fY;\n center.x = (u + 0.5) * ratioX;\n icenter.x = floor(center.x);\n for (v = 0; v < dH; v++) {\n center.y = (v + 0.5) * ratioY;\n icenter.y = floor(center.y);\n a = 0; red = 0; green = 0; blue = 0; alpha = 0;\n for (i = icenter.x - range2X; i <= icenter.x + range2X; i++) {\n if (i < 0 || i >= oW) {\n continue;\n }\n fX = floor(1000 * abs(i - center.x));\n if (!cacheLanc[fX]) {\n cacheLanc[fX] = { };\n }\n for (var j = icenter.y - range2Y; j <= icenter.y + range2Y; j++) {\n if (j < 0 || j >= oH) {\n continue;\n }\n fY = floor(1000 * abs(j - center.y));\n if (!cacheLanc[fX][fY]) {\n cacheLanc[fX][fY] = lanczos(sqrt(pow(fX * rcpRatioX, 2) + pow(fY * rcpRatioY, 2)) / 1000);\n }\n weight = cacheLanc[fX][fY];\n if (weight > 0) {\n idx = (j * oW + i) * 4;\n a += weight;\n red += weight * srcData[idx];\n green += weight * srcData[idx + 1];\n blue += weight * srcData[idx + 2];\n alpha += weight * srcData[idx + 3];\n }\n }\n }\n idx = (v * dW + u) * 4;\n destData[idx] = red / a;\n destData[idx + 1] = green / a;\n destData[idx + 2] = blue / a;\n destData[idx + 3] = alpha / a;\n }\n\n if (++u < dW) {\n return process(u);\n }\n else {\n return destImg;\n }\n }\n\n var srcData = options.imageData.data,\n destImg = options.ctx.createImageData(dW, dH),\n destData = destImg.data,\n lanczos = this.lanczosCreate(this.lanczosLobes),\n ratioX = this.rcpScaleX, ratioY = this.rcpScaleY,\n rcpRatioX = 2 / this.rcpScaleX, rcpRatioY = 2 / this.rcpScaleY,\n range2X = ceil(ratioX * this.lanczosLobes / 2),\n range2Y = ceil(ratioY * this.lanczosLobes / 2),\n cacheLanc = { }, center = { }, icenter = { };\n\n return process(0);\n },\n\n /**\n * bilinearFiltering\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n bilinearFiltering: function(options, oW, oH, dW, dH) {\n var a, b, c, d, x, y, i, j, xDiff, yDiff, chnl,\n color, offset = 0, origPix, ratioX = this.rcpScaleX,\n ratioY = this.rcpScaleY,\n w4 = 4 * (oW - 1), img = options.imageData,\n pixels = img.data, destImage = options.ctx.createImageData(dW, dH),\n destPixels = destImage.data;\n for (i = 0; i < dH; i++) {\n for (j = 0; j < dW; j++) {\n x = floor(ratioX * j);\n y = floor(ratioY * i);\n xDiff = ratioX * j - x;\n yDiff = ratioY * i - y;\n origPix = 4 * (y * oW + x);\n\n for (chnl = 0; chnl < 4; chnl++) {\n a = pixels[origPix + chnl];\n b = pixels[origPix + 4 + chnl];\n c = pixels[origPix + w4 + chnl];\n d = pixels[origPix + w4 + 4 + chnl];\n color = a * (1 - xDiff) * (1 - yDiff) + b * xDiff * (1 - yDiff) +\n c * yDiff * (1 - xDiff) + d * xDiff * yDiff;\n destPixels[offset++] = color;\n }\n }\n }\n return destImage;\n },\n\n /**\n * hermiteFastResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n hermiteFastResize: function(options, oW, oH, dW, dH) {\n var ratioW = this.rcpScaleX, ratioH = this.rcpScaleY,\n ratioWHalf = ceil(ratioW / 2),\n ratioHHalf = ceil(ratioH / 2),\n img = options.imageData, data = img.data,\n img2 = options.ctx.createImageData(dW, dH), data2 = img2.data;\n for (var j = 0; j < dH; j++) {\n for (var i = 0; i < dW; i++) {\n var x2 = (i + j * dW) * 4, weight = 0, weights = 0, weightsAlpha = 0,\n gxR = 0, gxG = 0, gxB = 0, gxA = 0, centerY = (j + 0.5) * ratioH;\n for (var yy = floor(j * ratioH); yy < (j + 1) * ratioH; yy++) {\n var dy = abs(centerY - (yy + 0.5)) / ratioHHalf,\n centerX = (i + 0.5) * ratioW, w0 = dy * dy;\n for (var xx = floor(i * ratioW); xx < (i + 1) * ratioW; xx++) {\n var dx = abs(centerX - (xx + 0.5)) / ratioWHalf,\n w = sqrt(w0 + dx * dx);\n /* eslint-disable max-depth */\n if (w > 1 && w < -1) {\n continue;\n }\n //hermite filter\n weight = 2 * w * w * w - 3 * w * w + 1;\n if (weight > 0) {\n dx = 4 * (xx + yy * oW);\n //alpha\n gxA += weight * data[dx + 3];\n weightsAlpha += weight;\n //colors\n if (data[dx + 3] < 255) {\n weight = weight * data[dx + 3] / 250;\n }\n gxR += weight * data[dx];\n gxG += weight * data[dx + 1];\n gxB += weight * data[dx + 2];\n weights += weight;\n }\n /* eslint-enable max-depth */\n }\n }\n data2[x2] = gxR / weights;\n data2[x2 + 1] = gxG / weights;\n data2[x2 + 2] = gxB / weights;\n data2[x2 + 3] = gxA / weightsAlpha;\n }\n }\n return img2;\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return {\n type: this.type,\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n resizeType: this.resizeType,\n lanczosLobes: this.lanczosLobes\n };\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Resize} Instance of fabric.Image.filters.Resize\n */\n fabric.Image.filters.Resize.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Contrast filter class\n * @class fabric.Image.filters.Contrast\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Contrast#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Contrast({\n * contrast: 0.25\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Contrast = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Contrast.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Contrast',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uContrast;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\\n' +\n 'color.rgb = contrastF * (color.rgb - 0.5) + 0.5;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * contrast value, range from -1 to 1.\n * @param {Number} contrast\n * @default 0\n */\n contrast: 0,\n\n mainParameter: 'contrast',\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.Contrast.prototype\n * @param {Object} [options] Options object\n * @param {Number} [options.contrast=0] Value to contrast the image up (-1...1)\n */\n\n /**\n * Apply the Contrast operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function(options) {\n if (this.contrast === 0) {\n return;\n }\n var imageData = options.imageData, i, len,\n data = imageData.data, len = data.length,\n contrast = Math.floor(this.contrast * 255),\n contrastF = 259 * (contrast + 255) / (255 * (259 - contrast));\n\n for (i = 0; i < len; i += 4) {\n data[i] = contrastF * (data[i] - 128) + 128;\n data[i + 1] = contrastF * (data[i + 1] - 128) + 128;\n data[i + 2] = contrastF * (data[i + 2] - 128) + 128;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uContrast: gl.getUniformLocation(program, 'uContrast'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uContrast, this.contrast);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Contrast} Instance of fabric.Image.filters.Contrast\n */\n fabric.Image.filters.Contrast.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Saturate filter class\n * @class fabric.Image.filters.Saturation\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Saturation#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Saturation({\n * saturation: 100\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Saturation = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Saturation.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Saturation',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uSaturation;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'float rgMax = max(color.r, color.g);\\n' +\n 'float rgbMax = max(rgMax, color.b);\\n' +\n 'color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;\\n' +\n 'color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;\\n' +\n 'color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n saturation: 0,\n\n mainParameter: 'saturation',\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.Saturate.prototype\n * @param {Object} [options] Options object\n * @param {Number} [options.saturate=0] Value to saturate the image (-1...1)\n */\n\n /**\n * Apply the Saturation operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n if (this.saturation === 0) {\n return;\n }\n var imageData = options.imageData,\n data = imageData.data, len = data.length,\n adjust = -this.saturation, i, max;\n\n for (i = 0; i < len; i += 4) {\n max = Math.max(data[i], data[i + 1], data[i + 2]);\n data[i] += max !== data[i] ? (max - data[i]) * adjust : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * adjust : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * adjust : 0;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uSaturation: gl.getUniformLocation(program, 'uSaturation'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uSaturation, -this.saturation);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Saturation} Instance of fabric.Image.filters.Saturate\n */\n fabric.Image.filters.Saturation.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Blur filter class\n * @class fabric.Image.filters.Blur\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Blur#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Blur({\n * blur: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n filters.Blur = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Blur.prototype */ {\n\n type: 'Blur',\n\n /*\n'gl_FragColor = vec4(0.0);',\n'gl_FragColor += texture2D(texture, vTexCoord + -7 * uDelta)*0.0044299121055113265;',\n'gl_FragColor += texture2D(texture, vTexCoord + -6 * uDelta)*0.00895781211794;',\n'gl_FragColor += texture2D(texture, vTexCoord + -5 * uDelta)*0.0215963866053;',\n'gl_FragColor += texture2D(texture, vTexCoord + -4 * uDelta)*0.0443683338718;',\n'gl_FragColor += texture2D(texture, vTexCoord + -3 * uDelta)*0.0776744219933;',\n'gl_FragColor += texture2D(texture, vTexCoord + -2 * uDelta)*0.115876621105;',\n'gl_FragColor += texture2D(texture, vTexCoord + -1 * uDelta)*0.147308056121;',\n'gl_FragColor += texture2D(texture, vTexCoord )*0.159576912161;',\n'gl_FragColor += texture2D(texture, vTexCoord + 1 * uDelta)*0.147308056121;',\n'gl_FragColor += texture2D(texture, vTexCoord + 2 * uDelta)*0.115876621105;',\n'gl_FragColor += texture2D(texture, vTexCoord + 3 * uDelta)*0.0776744219933;',\n'gl_FragColor += texture2D(texture, vTexCoord + 4 * uDelta)*0.0443683338718;',\n'gl_FragColor += texture2D(texture, vTexCoord + 5 * uDelta)*0.0215963866053;',\n'gl_FragColor += texture2D(texture, vTexCoord + 6 * uDelta)*0.00895781211794;',\n'gl_FragColor += texture2D(texture, vTexCoord + 7 * uDelta)*0.0044299121055113265;',\n*/\n\n /* eslint-disable max-len */\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform vec2 uDelta;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'const float nSamples = 15.0;\\n' +\n 'vec3 v3offset = vec3(12.9898, 78.233, 151.7182);\\n' +\n 'float random(vec3 scale) {\\n' +\n /* use the fragment position for a different seed per-pixel */\n 'return fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);\\n' +\n '}\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0.0);\\n' +\n 'float total = 0.0;\\n' +\n 'float offset = random(v3offset);\\n' +\n 'for (float t = -nSamples; t <= nSamples; t++) {\\n' +\n 'float percent = (t + offset - 0.5) / nSamples;\\n' +\n 'float weight = 1.0 - abs(percent);\\n' +\n 'color += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;\\n' +\n 'total += weight;\\n' +\n '}\\n' +\n 'gl_FragColor = color / total;\\n' +\n '}',\n /* eslint-enable max-len */\n\n /**\n * blur value, in percentage of image dimensions.\n * specific to keep the image blur constant at different resolutions\n * range bewteen 0 and 1.\n */\n blur: 0,\n\n mainParameter: 'blur',\n\n applyTo: function(options) {\n if (options.webgl) {\n // this aspectRatio is used to give the same blur to vertical and horizontal\n this.aspectRatio = options.sourceWidth / options.sourceHeight;\n options.passes++;\n this._setupFrameBuffer(options);\n this.horizontal = true;\n this.applyToWebGL(options);\n this._swapTextures(options);\n this._setupFrameBuffer(options);\n this.horizontal = false;\n this.applyToWebGL(options);\n this._swapTextures(options);\n }\n else {\n this.applyTo2d(options);\n }\n },\n\n applyTo2d: function(options) {\n // paint canvasEl with current image data.\n //options.ctx.putImageData(options.imageData, 0, 0);\n options.imageData = this.simpleBlur(options);\n },\n\n simpleBlur: function(options) {\n var resources = options.filterBackend.resources, canvas1, canvas2,\n width = options.imageData.width,\n height = options.imageData.height;\n\n if (!resources.blurLayer1) {\n resources.blurLayer1 = fabric.util.createCanvasElement();\n resources.blurLayer2 = fabric.util.createCanvasElement();\n }\n canvas1 = resources.blurLayer1;\n canvas2 = resources.blurLayer2;\n if (canvas1.width !== width || canvas1.height !== height) {\n canvas2.width = canvas1.width = width;\n canvas2.height = canvas1.height = height;\n }\n var ctx1 = canvas1.getContext('2d'),\n ctx2 = canvas2.getContext('2d'),\n nSamples = 15,\n random, percent, j, i,\n blur = this.blur * 0.06 * 0.5;\n\n // load first canvas\n ctx1.putImageData(options.imageData, 0, 0);\n ctx2.clearRect(0, 0, width, height);\n\n for (i = -nSamples; i <= nSamples; i++) {\n random = (Math.random() - 0.5) / 4;\n percent = i / nSamples;\n j = blur * percent * width + random;\n ctx2.globalAlpha = 1 - Math.abs(percent);\n ctx2.drawImage(canvas1, j, random);\n ctx1.drawImage(canvas2, 0, 0);\n ctx2.globalAlpha = 1;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n }\n for (i = -nSamples; i <= nSamples; i++) {\n random = (Math.random() - 0.5) / 4;\n percent = i / nSamples;\n j = blur * percent * height + random;\n ctx2.globalAlpha = 1 - Math.abs(percent);\n ctx2.drawImage(canvas1, random, j);\n ctx1.drawImage(canvas2, 0, 0);\n ctx2.globalAlpha = 1;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n }\n options.ctx.drawImage(canvas1, 0, 0);\n var newImageData = options.ctx.getImageData(0, 0, canvas1.width, canvas1.height);\n ctx1.globalAlpha = 1;\n ctx1.clearRect(0, 0, canvas1.width, canvas1.height);\n return newImageData;\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n delta: gl.getUniformLocation(program, 'uDelta'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n var delta = this.chooseRightDelta();\n gl.uniform2fv(uniformLocations.delta, delta);\n },\n\n /**\n * choose right value of image percentage to blur with\n * @returns {Array} a numeric array with delta values\n */\n chooseRightDelta: function() {\n var blurScale = 1, delta = [0, 0], blur;\n if (this.horizontal) {\n if (this.aspectRatio > 1) {\n // image is wide, i want to shrink radius horizontal\n blurScale = 1 / this.aspectRatio;\n }\n }\n else {\n if (this.aspectRatio < 1) {\n // image is tall, i want to shrink radius vertical\n blurScale = this.aspectRatio;\n }\n }\n blur = blurScale * this.blur * 0.12;\n if (this.horizontal) {\n delta[0] = blur;\n }\n else {\n delta[1] = blur;\n }\n return delta;\n },\n });\n\n /**\n * Deserialize a JSON definition of a BlurFilter into a concrete instance.\n */\n filters.Blur.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Gamma filter class\n * @class fabric.Image.filters.Gamma\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Gamma#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Gamma({\n * brightness: 200\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Gamma = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Gamma.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Gamma',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform vec3 uGamma;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'vec3 correction = (1.0 / uGamma);\\n' +\n 'color.r = pow(color.r, correction.r);\\n' +\n 'color.g = pow(color.g, correction.g);\\n' +\n 'color.b = pow(color.b, correction.b);\\n' +\n 'gl_FragColor = color;\\n' +\n 'gl_FragColor.rgb *= color.a;\\n' +\n '}',\n\n /**\n * Gamma array value, from 0.01 to 2.2.\n * @param {Array} gamma\n * @default\n */\n gamma: [1, 1, 1],\n\n /**\n * Describe the property that is the filter parameter\n * @param {String} m\n * @default\n */\n mainParameter: 'gamma',\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function(options) {\n this.gamma = [1, 1, 1];\n filters.BaseFilter.prototype.initialize.call(this, options);\n },\n\n /**\n * Apply the Gamma operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData, data = imageData.data,\n gamma = this.gamma, len = data.length,\n rInv = 1 / gamma[0], gInv = 1 / gamma[1],\n bInv = 1 / gamma[2], i;\n\n if (!this.rVals) {\n // eslint-disable-next-line\n this.rVals = new Uint8Array(256);\n // eslint-disable-next-line\n this.gVals = new Uint8Array(256);\n // eslint-disable-next-line\n this.bVals = new Uint8Array(256);\n }\n\n // This is an optimization - pre-compute a look-up table for each color channel\n // instead of performing these pow calls for each pixel in the image.\n for (i = 0, len = 256; i < len; i++) {\n this.rVals[i] = Math.pow(i / 255, rInv) * 255;\n this.gVals[i] = Math.pow(i / 255, gInv) * 255;\n this.bVals[i] = Math.pow(i / 255, bInv) * 255;\n }\n for (i = 0, len = data.length; i < len; i += 4) {\n data[i] = this.rVals[data[i]];\n data[i + 1] = this.gVals[data[i + 1]];\n data[i + 2] = this.bVals[data[i + 2]];\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uGamma: gl.getUniformLocation(program, 'uGamma'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform3fv(uniformLocations.uGamma, this.gamma);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Gamma} Instance of fabric.Image.filters.Gamma\n */\n fabric.Image.filters.Gamma.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * A container class that knows how to apply a sequence of filters to an input image.\n */\n filters.Composed = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Composed.prototype */ {\n\n type: 'Composed',\n\n /**\n * A non sparse array of filters to apply\n */\n subFilters: [],\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function(options) {\n this.callSuper('initialize', options);\n // create a new array instead mutating the prototype with push\n this.subFilters = this.subFilters.slice(0);\n },\n\n /**\n * Apply this container's filters to the input image provided.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be applied.\n */\n applyTo: function(options) {\n options.passes += this.subFilters.length - 1;\n this.subFilters.forEach(function(filter) {\n filter.applyTo(options);\n });\n },\n\n /**\n * Serialize this filter into JSON.\n *\n * @returns {Object} A JSON representation of this filter.\n */\n toObject: function() {\n return fabric.util.object.extend(this.callSuper('toObject'), {\n subFilters: this.subFilters.map(function(filter) { return filter.toObject(); }),\n });\n },\n\n isNeutralState: function() {\n return !this.subFilters.some(function(filter) { return !filter.isNeutralState(); });\n }\n });\n\n /**\n * Deserialize a JSON definition of a ComposedFilter into a concrete instance.\n */\n fabric.Image.filters.Composed.fromObject = function(object, callback) {\n var filters = object.subFilters || [],\n subFilters = filters.map(function(filter) {\n return new fabric.Image.filters[filter.type](filter);\n }),\n instance = new fabric.Image.filters.Composed({ subFilters: subFilters });\n callback && callback(instance);\n return instance;\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * HueRotation filter class\n * @class fabric.Image.filters.HueRotation\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.HueRotation#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.HueRotation({\n * rotation: -0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.HueRotation = createClass(filters.ColorMatrix, /** @lends fabric.Image.filters.HueRotation.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'HueRotation',\n\n /**\n * HueRotation value, from -1 to 1.\n * the unit is radians\n * @param {Number} myParameter\n * @default\n */\n rotation: 0,\n\n /**\n * Describe the property that is the filter parameter\n * @param {String} m\n * @default\n */\n mainParameter: 'rotation',\n\n calculateMatrix: function() {\n var rad = this.rotation * Math.PI, cos = fabric.util.cos(rad), sin = fabric.util.sin(rad),\n aThird = 1 / 3, aThirdSqtSin = Math.sqrt(aThird) * sin, OneMinusCos = 1 - cos;\n this.matrix = [\n 1, 0, 0, 0, 0,\n 0, 1, 0, 0, 0,\n 0, 0, 1, 0, 0,\n 0, 0, 0, 1, 0\n ];\n this.matrix[0] = cos + OneMinusCos / 3;\n this.matrix[1] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[2] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[5] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[6] = cos + aThird * OneMinusCos;\n this.matrix[7] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[10] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[11] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[12] = cos + aThird * OneMinusCos;\n },\n\n /**\n * HueRotation isNeutralState implementation\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * @param {Object} options\n **/\n isNeutralState: function(options) {\n this.calculateMatrix();\n return filters.BaseFilter.prototype.isNeutralState.call(this, options);\n },\n\n /**\n * Apply this filter to the input image data provided.\n *\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo: function(options) {\n this.calculateMatrix();\n filters.BaseFilter.prototype.applyTo.call(this, options);\n },\n\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.HueRotation} Instance of fabric.Image.filters.HueRotation\n */\n fabric.Image.filters.HueRotation.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n clone = fabric.util.object.clone;\n\n if (fabric.Text) {\n fabric.warn('fabric.Text is already defined');\n return;\n }\n\n /**\n * Text class\n * @class fabric.Text\n * @extends fabric.Object\n * @return {fabric.Text} thisArg\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#text}\n * @see {@link fabric.Text#initialize} for constructor definition\n */\n fabric.Text = fabric.util.createClass(fabric.Object, /** @lends fabric.Text.prototype */ {\n\n /**\n * Properties which when set cause object to change dimensions\n * @type Array\n * @private\n */\n _dimensionAffectingProps: [\n 'fontSize',\n 'fontWeight',\n 'fontFamily',\n 'fontStyle',\n 'lineHeight',\n 'text',\n 'charSpacing',\n 'textAlign',\n 'styles',\n ],\n\n /**\n * @private\n */\n _reNewline: /\\r?\\n/,\n\n /**\n * Use this regular expression to filter for whitespaces that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n _reSpacesAndTabs: /[ \\t\\r]/g,\n\n /**\n * Use this regular expression to filter for whitespace that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n _reSpaceAndTab: /[ \\t\\r]/,\n\n /**\n * Use this regular expression to filter consecutive groups of non spaces.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n _reWords: /\\S+/g,\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'text',\n\n /**\n * Font size (in pixels)\n * @type Number\n * @default\n */\n fontSize: 40,\n\n /**\n * Font weight (e.g. bold, normal, 400, 600, 800)\n * @type {(Number|String)}\n * @default\n */\n fontWeight: 'normal',\n\n /**\n * Font family\n * @type String\n * @default\n */\n fontFamily: 'Times New Roman',\n\n /**\n * Text decoration underline.\n * @type Boolean\n * @default\n */\n underline: false,\n\n /**\n * Text decoration overline.\n * @type Boolean\n * @default\n */\n overline: false,\n\n /**\n * Text decoration linethrough.\n * @type Boolean\n * @default\n */\n linethrough: false,\n\n /**\n * Text alignment. Possible values: \"left\", \"center\", \"right\", \"justify\",\n * \"justify-left\", \"justify-center\" or \"justify-right\".\n * @type String\n * @default\n */\n textAlign: 'left',\n\n /**\n * Font style . Possible values: \"\", \"normal\", \"italic\" or \"oblique\".\n * @type String\n * @default\n */\n fontStyle: 'normal',\n\n /**\n * Line height\n * @type Number\n * @default\n */\n lineHeight: 1.16,\n\n /**\n * Superscript schema object (minimum overlap)\n * @type {Object}\n * @default\n */\n superscript: {\n size: 0.60, // fontSize factor\n baseline: -0.35 // baseline-shift factor (upwards)\n },\n\n /**\n * Subscript schema object (minimum overlap)\n * @type {Object}\n * @default\n */\n subscript: {\n size: 0.60, // fontSize factor\n baseline: 0.11 // baseline-shift factor (downwards)\n },\n\n /**\n * Background color of text lines\n * @type String\n * @default\n */\n textBackgroundColor: '',\n\n /**\n * List of properties to consider when checking if\n * state of an object is changed ({@link fabric.Object#hasStateChanged})\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: fabric.Object.prototype.stateProperties.concat('fontFamily',\n 'fontWeight',\n 'fontSize',\n 'text',\n 'underline',\n 'overline',\n 'linethrough',\n 'textAlign',\n 'fontStyle',\n 'lineHeight',\n 'textBackgroundColor',\n 'charSpacing',\n 'styles'),\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * @type Array\n */\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('fontFamily',\n 'fontWeight',\n 'fontSize',\n 'text',\n 'underline',\n 'overline',\n 'linethrough',\n 'textAlign',\n 'fontStyle',\n 'lineHeight',\n 'textBackgroundColor',\n 'charSpacing',\n 'styles'),\n\n /**\n * When defined, an object is rendered via stroke and this property specifies its color.\n * Backwards incompatibility note: This property was named \"strokeStyle\" until v1.1.6\n * @type String\n * @default\n */\n stroke: null,\n\n /**\n * Shadow object representing shadow of this shape.\n * Backwards incompatibility note: This property was named \"textShadow\" (String) until v1.2.11\n * @type fabric.Shadow\n * @default\n */\n shadow: null,\n\n /**\n * @private\n */\n _fontSizeFraction: 0.222,\n\n /**\n * @private\n */\n offsets: {\n underline: 0.10,\n linethrough: -0.315,\n overline: -0.88\n },\n\n /**\n * Text Line proportion to font Size (in pixels)\n * @type Number\n * @default\n */\n _fontSizeMult: 1.13,\n\n /**\n * additional space between characters\n * expressed in thousands of em unit\n * @type Number\n * @default\n */\n charSpacing: 0,\n\n /**\n * Object containing character styles - top-level properties -> line numbers,\n * 2nd-level properties - charater numbers\n * @type Object\n * @default\n */\n styles: null,\n\n /**\n * Reference to a context to measure text char or couple of chars\n * the cacheContext of the canvas will be used or a freshly created one if the object is not on canvas\n * once created it will be referenced on fabric._measuringContext to avoide creating a canvas for every\n * text object created.\n * @type {CanvasRenderingContext2D}\n * @default\n */\n _measuringContext: null,\n\n /**\n * Baseline shift, stlyes only, keep at 0 for the main text object\n * @type {Number}\n * @default\n */\n deltaY: 0,\n\n /**\n * Array of properties that define a style unit (of 'styles').\n * @type {Array}\n * @default\n */\n _styleProperties: [\n 'stroke',\n 'strokeWidth',\n 'fill',\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'fontStyle',\n 'underline',\n 'overline',\n 'linethrough',\n 'deltaY',\n 'textBackgroundColor',\n ],\n\n /**\n * contains characters bounding boxes\n */\n __charBounds: [],\n\n /**\n * use this size when measuring text. To avoid IE11 rounding errors\n * @type {Number}\n * @default\n * @readonly\n * @private\n */\n CACHE_FONT_SIZE: 400,\n\n /**\n * contains the min text width to avoid getting 0\n * @type {Number}\n * @default\n */\n MIN_TEXT_WIDTH: 2,\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n * @return {fabric.Text} thisArg\n */\n initialize: function(text, options) {\n this.styles = options ? (options.styles || { }) : { };\n this.text = text;\n this.__skipDimension = true;\n this.callSuper('initialize', options);\n this.__skipDimension = false;\n this.initDimensions();\n this.setCoords();\n this.setupState({ propertySet: '_dimensionAffectingProps' });\n },\n\n /**\n * Return a contex for measurement of text string.\n * if created it gets stored for reuse\n * @param {String} text Text string\n * @param {Object} [options] Options object\n * @return {fabric.Text} thisArg\n */\n getMeasuringContext: function() {\n // if we did not return we have to measure something.\n if (!fabric._measuringContext) {\n fabric._measuringContext = this.canvas && this.canvas.contextCache ||\n fabric.util.createCanvasElement().getContext('2d');\n }\n return fabric._measuringContext;\n },\n\n /**\n * @private\n * Divides text into lines of text and lines of graphemes.\n */\n _splitText: function() {\n var newLines = this._splitTextIntoLines(this.text);\n this.textLines = newLines.lines;\n this._textLines = newLines.graphemeLines;\n this._unwrappedTextLines = newLines._unwrappedLines;\n this._text = newLines.graphemeText;\n return newLines;\n },\n\n /**\n * Initialize or update text dimensions.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n */\n initDimensions: function() {\n if (this.__skipDimension) {\n return;\n }\n this._splitText();\n this._clearCache();\n this.width = this.calcTextWidth() || this.cursorWidth || this.MIN_TEXT_WIDTH;\n if (this.textAlign.indexOf('justify') !== -1) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n this.height = this.calcTextHeight();\n this.saveState({ propertySet: '_dimensionAffectingProps' });\n },\n\n /**\n * Enlarge space boxes and shift the others\n */\n enlargeSpaces: function() {\n var diffSpace, currentLineWidth, numberOfSpaces, accumulatedSpace, line, charBound, spaces;\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n if (this.textAlign !== 'justify' && (i === len - 1 || this.isEndOfWrapping(i))) {\n continue;\n }\n accumulatedSpace = 0;\n line = this._textLines[i];\n currentLineWidth = this.getLineWidth(i);\n if (currentLineWidth < this.width && (spaces = this.textLines[i].match(this._reSpacesAndTabs))) {\n numberOfSpaces = spaces.length;\n diffSpace = (this.width - currentLineWidth) / numberOfSpaces;\n for (var j = 0, jlen = line.length; j <= jlen; j++) {\n charBound = this.__charBounds[i][j];\n if (this._reSpaceAndTab.test(line[j])) {\n charBound.width += diffSpace;\n charBound.kernedWidth += diffSpace;\n charBound.left += accumulatedSpace;\n accumulatedSpace += diffSpace;\n }\n else {\n charBound.left += accumulatedSpace;\n }\n }\n }\n }\n },\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @return {Boolean}\n */\n isEndOfWrapping: function(lineIndex) {\n return lineIndex === this._textLines.length - 1;\n },\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * It return always for text and Itext.\n * @return Number\n */\n missingNewlineOffset: function() {\n return 1;\n },\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of text object\n */\n toString: function() {\n return '#';\n },\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @param {Object} dim.x width of object to be cached\n * @param {Object} dim.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions: function() {\n var dims = this.callSuper('_getCacheCanvasDimensions');\n var fontSize = this.fontSize;\n dims.width += fontSize * dims.zoomX;\n dims.height += fontSize * dims.zoomY;\n return dims;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n this._setTextStyles(ctx);\n this._renderTextLinesBackground(ctx);\n this._renderTextDecoration(ctx, 'underline');\n this._renderText(ctx);\n this._renderTextDecoration(ctx, 'overline');\n this._renderTextDecoration(ctx, 'linethrough');\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderText: function(ctx) {\n if (this.paintFirst === 'stroke') {\n this._renderTextStroke(ctx);\n this._renderTextFill(ctx);\n }\n else {\n this._renderTextFill(ctx);\n this._renderTextStroke(ctx);\n }\n },\n\n /**\n * Set the font parameter of the context with the object properties or with charStyle\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [charStyle] object with font style properties\n * @param {String} [charStyle.fontFamily] Font Family\n * @param {Number} [charStyle.fontSize] Font size in pixels. ( without px suffix )\n * @param {String} [charStyle.fontWeight] Font weight\n * @param {String} [charStyle.fontStyle] Font style (italic|normal)\n */\n _setTextStyles: function(ctx, charStyle, forMeasuring) {\n ctx.textBaseline = 'alphabetic';\n ctx.font = this._getFontDeclaration(charStyle, forMeasuring);\n },\n\n /**\n * calculate and return the text Width measuring each line.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {Number} Maximum width of fabric.Text object\n */\n calcTextWidth: function() {\n var maxWidth = this.getLineWidth(0);\n\n for (var i = 1, len = this._textLines.length; i < len; i++) {\n var currentLineWidth = this.getLineWidth(i);\n if (currentLineWidth > maxWidth) {\n maxWidth = currentLineWidth;\n }\n }\n return maxWidth;\n },\n\n /**\n * @private\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} line Text to render\n * @param {Number} left Left position of text\n * @param {Number} top Top position of text\n * @param {Number} lineIndex Index of a line in a text\n */\n _renderTextLine: function(method, ctx, line, left, top, lineIndex) {\n this._renderChars(method, ctx, line, left, top, lineIndex);\n },\n\n /**\n * Renders the text background for lines, taking care of style\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextLinesBackground: function(ctx) {\n if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor')) {\n return;\n }\n var lineTopOffset = 0, heightOfLine,\n lineLeftOffset, originalFill = ctx.fillStyle,\n line, lastColor,\n leftOffset = this._getLeftOffset(),\n topOffset = this._getTopOffset(),\n boxStart = 0, boxWidth = 0, charBox, currentColor;\n\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n heightOfLine = this.getHeightOfLine(i);\n if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor', i)) {\n lineTopOffset += heightOfLine;\n continue;\n }\n line = this._textLines[i];\n lineLeftOffset = this._getLineLeftOffset(i);\n boxWidth = 0;\n boxStart = 0;\n lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n charBox = this.__charBounds[i][j];\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n if (currentColor !== lastColor) {\n ctx.fillStyle = lastColor;\n lastColor && ctx.fillRect(\n leftOffset + lineLeftOffset + boxStart,\n topOffset + lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight\n );\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastColor = currentColor;\n }\n else {\n boxWidth += charBox.kernedWidth;\n }\n }\n if (currentColor) {\n ctx.fillStyle = currentColor;\n ctx.fillRect(\n leftOffset + lineLeftOffset + boxStart,\n topOffset + lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight\n );\n }\n lineTopOffset += heightOfLine;\n }\n ctx.fillStyle = originalFill;\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n },\n\n /**\n * @private\n * @param {Object} decl style declaration for cache\n * @param {String} decl.fontFamily fontFamily\n * @param {String} decl.fontStyle fontStyle\n * @param {String} decl.fontWeight fontWeight\n * @return {Object} reference to cache\n */\n getFontCache: function(decl) {\n var fontFamily = decl.fontFamily.toLowerCase();\n if (!fabric.charWidthsCache[fontFamily]) {\n fabric.charWidthsCache[fontFamily] = { };\n }\n var cache = fabric.charWidthsCache[fontFamily],\n cacheProp = decl.fontStyle.toLowerCase() + '_' + (decl.fontWeight + '').toLowerCase();\n if (!cache[cacheProp]) {\n cache[cacheProp] = { };\n }\n return cache[cacheProp];\n },\n\n /**\n * apply all the character style to canvas for rendering\n * @private\n * @param {String} _char\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} [decl]\n */\n _applyCharStyles: function(method, ctx, lineIndex, charIndex, styleDeclaration) {\n\n this._setFillStyles(ctx, styleDeclaration);\n this._setStrokeStyles(ctx, styleDeclaration);\n\n ctx.font = this._getFontDeclaration(styleDeclaration);\n },\n\n /**\n * measure and return the width of a single character.\n * possibly overridden to accommodate different measure logic or\n * to hook some external lib for character measurement\n * @private\n * @param {String} _char, char to be measured\n * @param {Object} charStyle style of char to be measured\n * @param {String} [previousChar] previous char\n * @param {Object} [prevCharStyle] style of previous char\n */\n _measureChar: function(_char, charStyle, previousChar, prevCharStyle) {\n // first i try to return from cache\n var fontCache = this.getFontCache(charStyle), fontDeclaration = this._getFontDeclaration(charStyle),\n previousFontDeclaration = this._getFontDeclaration(prevCharStyle), couple = previousChar + _char,\n stylesAreEqual = fontDeclaration === previousFontDeclaration, width, coupleWidth, previousWidth,\n fontMultiplier = charStyle.fontSize / this.CACHE_FONT_SIZE, kernedWidth;\n\n if (previousChar && fontCache[previousChar] !== undefined) {\n previousWidth = fontCache[previousChar];\n }\n if (fontCache[_char] !== undefined) {\n kernedWidth = width = fontCache[_char];\n }\n if (stylesAreEqual && fontCache[couple] !== undefined) {\n coupleWidth = fontCache[couple];\n kernedWidth = coupleWidth - previousWidth;\n }\n if (width === undefined || previousWidth === undefined || coupleWidth === undefined) {\n var ctx = this.getMeasuringContext();\n // send a TRUE to specify measuring font size CACHE_FONT_SIZE\n this._setTextStyles(ctx, charStyle, true);\n }\n if (width === undefined) {\n kernedWidth = width = ctx.measureText(_char).width;\n fontCache[_char] = width;\n }\n if (previousWidth === undefined && stylesAreEqual && previousChar) {\n previousWidth = ctx.measureText(previousChar).width;\n fontCache[previousChar] = previousWidth;\n }\n if (stylesAreEqual && coupleWidth === undefined) {\n // we can measure the kerning couple and subtract the width of the previous character\n coupleWidth = ctx.measureText(couple).width;\n fontCache[couple] = coupleWidth;\n kernedWidth = coupleWidth - previousWidth;\n }\n return { width: width * fontMultiplier, kernedWidth: kernedWidth * fontMultiplier };\n },\n\n /**\n * Computes height of character at given position\n * @param {Number} line the line index number\n * @param {Number} _char the character index number\n * @return {Number} fontSize of the character\n */\n getHeightOfChar: function(line, _char) {\n return this.getValueOfPropertyAt(line, _char, 'fontSize');\n },\n\n /**\n * measure a text line measuring all characters.\n * @param {Number} lineIndex line number\n * @return {Number} Line width\n */\n measureLine: function(lineIndex) {\n var lineInfo = this._measureLine(lineIndex);\n if (this.charSpacing !== 0) {\n lineInfo.width -= this._getWidthOfCharSpacing();\n }\n if (lineInfo.width < 0) {\n lineInfo.width = 0;\n }\n return lineInfo;\n },\n\n /**\n * measure every grapheme of a line, populating __charBounds\n * @param {Number} lineIndex\n * @return {Object} object.width total width of characters\n * @return {Object} object.widthOfSpaces length of chars that match this._reSpacesAndTabs\n */\n _measureLine: function(lineIndex) {\n var width = 0, i, grapheme, line = this._textLines[lineIndex], prevGrapheme,\n graphemeInfo, numOfSpaces = 0, lineBounds = new Array(line.length);\n\n this.__charBounds[lineIndex] = lineBounds;\n for (i = 0; i < line.length; i++) {\n grapheme = line[i];\n graphemeInfo = this._getGraphemeBox(grapheme, lineIndex, i, prevGrapheme);\n lineBounds[i] = graphemeInfo;\n width += graphemeInfo.kernedWidth;\n prevGrapheme = grapheme;\n }\n // this latest bound box represent the last character of the line\n // to simplify cursor handling in interactive mode.\n lineBounds[i] = {\n left: graphemeInfo ? graphemeInfo.left + graphemeInfo.width : 0,\n width: 0,\n kernedWidth: 0,\n height: this.fontSize\n };\n return { width: width, numOfSpaces: numOfSpaces };\n },\n\n /**\n * Measure and return the info of a single grapheme.\n * needs the the info of previous graphemes already filled\n * @private\n * @param {String} grapheme to be measured\n * @param {Number} lineIndex index of the line where the char is\n * @param {Number} charIndex position in the line\n * @param {String} [prevGrapheme] character preceding the one to be measured\n */\n _getGraphemeBox: function(grapheme, lineIndex, charIndex, prevGrapheme, skipLeft) {\n var style = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n prevStyle = prevGrapheme ? this.getCompleteStyleDeclaration(lineIndex, charIndex - 1) : { },\n info = this._measureChar(grapheme, style, prevGrapheme, prevStyle),\n kernedWidth = info.kernedWidth,\n width = info.width, charSpacing;\n\n if (this.charSpacing !== 0) {\n charSpacing = this._getWidthOfCharSpacing();\n width += charSpacing;\n kernedWidth += charSpacing;\n }\n\n var box = {\n width: width,\n left: 0,\n height: style.fontSize,\n kernedWidth: kernedWidth,\n deltaY: style.deltaY,\n };\n if (charIndex > 0 && !skipLeft) {\n var previousBox = this.__charBounds[lineIndex][charIndex - 1];\n box.left = previousBox.left + previousBox.width + info.kernedWidth - info.width;\n }\n return box;\n },\n\n /**\n * Calculate height of line at 'lineIndex'\n * @param {Number} lineIndex index of line to calculate\n * @return {Number}\n */\n getHeightOfLine: function(lineIndex) {\n if (this.__lineHeights[lineIndex]) {\n return this.__lineHeights[lineIndex];\n }\n\n var line = this._textLines[lineIndex],\n // char 0 is measured before the line cycle because it nneds to char\n // emptylines\n maxHeight = this.getHeightOfChar(lineIndex, 0);\n for (var i = 1, len = line.length; i < len; i++) {\n maxHeight = Math.max(this.getHeightOfChar(lineIndex, i), maxHeight);\n }\n\n return this.__lineHeights[lineIndex] = maxHeight * this.lineHeight * this._fontSizeMult;\n },\n\n /**\n * Calculate text box height\n */\n calcTextHeight: function() {\n var lineHeight, height = 0;\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n lineHeight = this.getHeightOfLine(i);\n height += (i === len - 1 ? lineHeight / this.lineHeight : lineHeight);\n }\n return height;\n },\n\n /**\n * @private\n * @return {Number} Left offset\n */\n _getLeftOffset: function() {\n return -this.width / 2;\n },\n\n /**\n * @private\n * @return {Number} Top offset\n */\n _getTopOffset: function() {\n return -this.height / 2;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} filler fabric.Pattern or fabric.Gradient\n * @return {Object} offset.offsetX offset for text rendering\n * @return {Object} offset.offsetY offset for text rendering\n */\n _applyPatternGradientTransform: function(ctx, filler) {\n if (!filler || !filler.toLive) {\n return { offsetX: 0, offsetY: 0 };\n }\n var offsetX = -this.width / 2 + filler.offsetX || 0,\n offsetY = -this.height / 2 + filler.offsetY || 0;\n\n ctx.transform(1, 0, 0, 1, offsetX, offsetY);\n return { offsetX: offsetX, offsetY: offsetY };\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n */\n _renderTextCommon: function(ctx, method) {\n ctx.save();\n var lineHeights = 0, left = this._getLeftOffset(), top = this._getTopOffset(),\n offsets = this._applyPatternGradientTransform(ctx, method === 'fillText' ? this.fill : this.stroke);\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n var heightOfLine = this.getHeightOfLine(i),\n maxHeight = heightOfLine / this.lineHeight,\n leftOffset = this._getLineLeftOffset(i);\n this._renderTextLine(\n method,\n ctx,\n this._textLines[i],\n left + leftOffset - offsets.offsetX,\n top + lineHeights + maxHeight - offsets.offsetY,\n i\n );\n lineHeights += heightOfLine;\n }\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextFill: function(ctx) {\n if (!this.fill && !this.styleHas('fill')) {\n return;\n }\n\n this._renderTextCommon(ctx, 'fillText');\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextStroke: function(ctx) {\n if ((!this.stroke || this.strokeWidth === 0) && this.isEmptyStyles()) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n this._setLineDash(ctx, this.strokeDashArray);\n ctx.beginPath();\n this._renderTextCommon(ctx, 'strokeText');\n ctx.closePath();\n ctx.restore();\n },\n\n /**\n * @private\n * @param {String} method\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} line Content of the line\n * @param {Number} left\n * @param {Number} top\n * @param {Number} lineIndex\n * @param {Number} charOffset\n */\n _renderChars: function(method, ctx, line, left, top, lineIndex) {\n // set proper line offset\n var lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.indexOf('justify') !== -1,\n actualStyle,\n nextStyle,\n charsToRender = '',\n charBox,\n boxWidth = 0,\n timeToRender,\n shortCut = !isJustify && this.charSpacing === 0 && this.isEmptyStyles(lineIndex);\n\n ctx.save();\n top -= lineHeight * this._fontSizeFraction / this.lineHeight;\n if (shortCut) {\n // render all the line in one pass without checking\n this._renderChar(method, ctx, lineIndex, 0, this.textLines[lineIndex], left, top, lineHeight);\n ctx.restore();\n return;\n }\n for (var i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i];\n if (boxWidth === 0) {\n left += charBox.kernedWidth - charBox.width;\n boxWidth += charBox.width;\n }\n else {\n boxWidth += charBox.kernedWidth;\n }\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle = actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = this._hasStyleChanged(actualStyle, nextStyle);\n }\n if (timeToRender) {\n this._renderChar(method, ctx, lineIndex, i, charsToRender, left, top, lineHeight);\n charsToRender = '';\n actualStyle = nextStyle;\n left += boxWidth;\n boxWidth = 0;\n }\n }\n ctx.restore();\n },\n\n /**\n * @private\n * @param {String} method\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {String} _char\n * @param {Number} left Left coordinate\n * @param {Number} top Top coordinate\n * @param {Number} lineHeight Height of the line\n */\n _renderChar: function(method, ctx, lineIndex, charIndex, _char, left, top) {\n var decl = this._getStyleDeclaration(lineIndex, charIndex),\n fullDecl = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n shouldFill = method === 'fillText' && fullDecl.fill,\n shouldStroke = method === 'strokeText' && fullDecl.stroke && fullDecl.strokeWidth;\n\n if (!shouldStroke && !shouldFill) {\n return;\n }\n decl && ctx.save();\n\n this._applyCharStyles(method, ctx, lineIndex, charIndex, fullDecl);\n\n if (decl && decl.textBackgroundColor) {\n this._removeShadow(ctx);\n }\n if (decl && decl.deltaY) {\n top += decl.deltaY;\n }\n\n shouldFill && ctx.fillText(_char, left, top);\n shouldStroke && ctx.strokeText(_char, left, top);\n decl && ctx.restore();\n },\n\n /**\n * Turns the character into a 'superior figure' (i.e. 'superscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @returns {fabric.Text} thisArg\n * @chainable\n */\n setSuperscript: function(start, end) {\n return this._setScript(start, end, this.superscript);\n },\n\n /**\n * Turns the character into an 'inferior figure' (i.e. 'subscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @returns {fabric.Text} thisArg\n * @chainable\n */\n setSubscript: function(start, end) {\n return this._setScript(start, end, this.subscript);\n },\n\n /**\n * Applies 'schema' at given position\n * @private\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @param {Number} schema\n * @returns {fabric.Text} thisArg\n * @chainable\n */\n _setScript: function(start, end, schema) {\n var loc = this.get2DCursorLocation(start, true),\n fontSize = this.getValueOfPropertyAt(loc.lineIndex, loc.charIndex, 'fontSize'),\n dy = this.getValueOfPropertyAt(loc.lineIndex, loc.charIndex, 'deltaY'),\n style = { fontSize: fontSize * schema.size, deltaY: dy + fontSize * schema.baseline };\n this.setSelectionStyles(style, start, end);\n return this;\n },\n\n /**\n * @private\n * @param {Object} prevStyle\n * @param {Object} thisStyle\n */\n _hasStyleChanged: function(prevStyle, thisStyle) {\n return prevStyle.fill !== thisStyle.fill ||\n prevStyle.stroke !== thisStyle.stroke ||\n prevStyle.strokeWidth !== thisStyle.strokeWidth ||\n prevStyle.fontSize !== thisStyle.fontSize ||\n prevStyle.fontFamily !== thisStyle.fontFamily ||\n prevStyle.fontWeight !== thisStyle.fontWeight ||\n prevStyle.fontStyle !== thisStyle.fontStyle ||\n prevStyle.deltaY !== thisStyle.deltaY;\n },\n\n /**\n * @private\n * @param {Object} prevStyle\n * @param {Object} thisStyle\n */\n _hasStyleChangedForSvg: function(prevStyle, thisStyle) {\n return this._hasStyleChanged(prevStyle, thisStyle) ||\n prevStyle.overline !== thisStyle.overline ||\n prevStyle.underline !== thisStyle.underline ||\n prevStyle.linethrough !== thisStyle.linethrough;\n },\n\n /**\n * @private\n * @param {Number} lineIndex index text line\n * @return {Number} Line left offset\n */\n _getLineLeftOffset: function(lineIndex) {\n var lineWidth = this.getLineWidth(lineIndex);\n if (this.textAlign === 'center') {\n return (this.width - lineWidth) / 2;\n }\n if (this.textAlign === 'right') {\n return this.width - lineWidth;\n }\n if (this.textAlign === 'justify-center' && this.isEndOfWrapping(lineIndex)) {\n return (this.width - lineWidth) / 2;\n }\n if (this.textAlign === 'justify-right' && this.isEndOfWrapping(lineIndex)) {\n return this.width - lineWidth;\n }\n return 0;\n },\n\n /**\n * @private\n */\n _clearCache: function() {\n this.__lineWidths = [];\n this.__lineHeights = [];\n this.__charBounds = [];\n },\n\n /**\n * @private\n */\n _shouldClearDimensionCache: function() {\n var shouldClear = this._forceClearCache;\n shouldClear || (shouldClear = this.hasStateChanged('_dimensionAffectingProps'));\n if (shouldClear) {\n this.dirty = true;\n this._forceClearCache = false;\n }\n return shouldClear;\n },\n\n /**\n * Measure a single line given its index. Used to calculate the initial\n * text bounding box. The values are calculated and stored in __lineWidths cache.\n * @private\n * @param {Number} lineIndex line number\n * @return {Number} Line width\n */\n getLineWidth: function(lineIndex) {\n if (this.__lineWidths[lineIndex]) {\n return this.__lineWidths[lineIndex];\n }\n\n var width, line = this._textLines[lineIndex], lineInfo;\n\n if (line === '') {\n width = 0;\n }\n else {\n lineInfo = this.measureLine(lineIndex);\n width = lineInfo.width;\n }\n this.__lineWidths[lineIndex] = width;\n return width;\n },\n\n _getWidthOfCharSpacing: function() {\n if (this.charSpacing !== 0) {\n return this.fontSize * this.charSpacing / 1000;\n }\n return 0;\n },\n\n /**\n * Retrieves the value of property at given character position\n * @param {Number} lineIndex the line number\n * @param {Number} charIndex the charater number\n * @param {String} property the property name\n * @returns the value of 'property'\n */\n getValueOfPropertyAt: function(lineIndex, charIndex, property) {\n var charStyle = this._getStyleDeclaration(lineIndex, charIndex);\n if (charStyle && typeof charStyle[property] !== 'undefined') {\n return charStyle[property];\n }\n return this[property];\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextDecoration: function(ctx, type) {\n if (!this[type] && !this.styleHas(type)) {\n return;\n }\n var heightOfLine, size, _size,\n lineLeftOffset, dy, _dy,\n line, lastDecoration,\n leftOffset = this._getLeftOffset(),\n topOffset = this._getTopOffset(), top,\n boxStart, boxWidth, charBox, currentDecoration,\n maxHeight, currentFill, lastFill,\n charSpacing = this._getWidthOfCharSpacing();\n\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n heightOfLine = this.getHeightOfLine(i);\n if (!this[type] && !this.styleHas(type, i)) {\n topOffset += heightOfLine;\n continue;\n }\n line = this._textLines[i];\n maxHeight = heightOfLine / this.lineHeight;\n lineLeftOffset = this._getLineLeftOffset(i);\n boxStart = 0;\n boxWidth = 0;\n lastDecoration = this.getValueOfPropertyAt(i, 0, type);\n lastFill = this.getValueOfPropertyAt(i, 0, 'fill');\n top = topOffset + maxHeight * (1 - this._fontSizeFraction);\n size = this.getHeightOfChar(i, 0);\n dy = this.getValueOfPropertyAt(i, 0, 'deltaY');\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n charBox = this.__charBounds[i][j];\n currentDecoration = this.getValueOfPropertyAt(i, j, type);\n currentFill = this.getValueOfPropertyAt(i, j, 'fill');\n _size = this.getHeightOfChar(i, j);\n _dy = this.getValueOfPropertyAt(i, j, 'deltaY');\n if ((currentDecoration !== lastDecoration || currentFill !== lastFill || _size !== size || _dy !== dy) &&\n boxWidth > 0) {\n ctx.fillStyle = lastFill;\n lastDecoration && lastFill && ctx.fillRect(\n leftOffset + lineLeftOffset + boxStart,\n top + this.offsets[type] * size + dy,\n boxWidth,\n this.fontSize / 15\n );\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastDecoration = currentDecoration;\n lastFill = currentFill;\n size = _size;\n dy = _dy;\n }\n else {\n boxWidth += charBox.kernedWidth;\n }\n }\n ctx.fillStyle = currentFill;\n currentDecoration && currentFill && ctx.fillRect(\n leftOffset + lineLeftOffset + boxStart,\n top + this.offsets[type] * size + dy,\n boxWidth - charSpacing,\n this.fontSize / 15\n );\n topOffset += heightOfLine;\n }\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n },\n\n /**\n * return font declaration string for canvas context\n * @param {Object} [styleObject] object\n * @returns {String} font declaration formatted for canvas context.\n */\n _getFontDeclaration: function(styleObject, forMeasuring) {\n var style = styleObject || this, family = this.fontFamily,\n fontIsGeneric = fabric.Text.genericFonts.indexOf(family.toLowerCase()) > -1;\n var fontFamily = family === undefined ||\n family.indexOf('\\'') > -1 || family.indexOf(',') > -1 ||\n family.indexOf('\"') > -1 || fontIsGeneric\n ? style.fontFamily : '\"' + style.fontFamily + '\"';\n return [\n // node-canvas needs \"weight style\", while browsers need \"style weight\"\n // verify if this can be fixed in JSDOM\n (fabric.isLikelyNode ? style.fontWeight : style.fontStyle),\n (fabric.isLikelyNode ? style.fontStyle : style.fontWeight),\n forMeasuring ? this.CACHE_FONT_SIZE + 'px' : style.fontSize + 'px',\n fontFamily\n ].join(' ');\n },\n\n /**\n * Renders text instance on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render: function(ctx) {\n // do not render if object is not visible\n if (!this.visible) {\n return;\n }\n if (this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen()) {\n return;\n }\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n }\n this.callSuper('render', ctx);\n },\n\n /**\n * Returns the text as an array of lines.\n * @param {String} text text to split\n * @returns {Array} Lines in the text\n */\n _splitTextIntoLines: function(text) {\n var lines = text.split(this._reNewline),\n newLines = new Array(lines.length),\n newLine = ['\\n'],\n newText = [];\n for (var i = 0; i < lines.length; i++) {\n newLines[i] = fabric.util.string.graphemeSplit(lines[i]);\n newText = newText.concat(newLines[i], newLine);\n }\n newText.pop();\n return { _unwrappedLines: newLines, lines: lines, graphemeText: newText, graphemeLines: newLines };\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n var additionalProperties = [\n 'text',\n 'fontSize',\n 'fontWeight',\n 'fontFamily',\n 'fontStyle',\n 'lineHeight',\n 'underline',\n 'overline',\n 'linethrough',\n 'textAlign',\n 'textBackgroundColor',\n 'charSpacing',\n ].concat(propertiesToInclude);\n var obj = this.callSuper('toObject', additionalProperties);\n obj.styles = clone(this.styles, true);\n return obj;\n },\n\n /**\n * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`.\n * @param {String|Object} key Property name or object (if object, iterate over the object properties)\n * @param {Object|Function} value Property value (if function, the value is passed into it and its return value is used as a new one)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n set: function(key, value) {\n this.callSuper('set', key, value);\n var needsDims = false;\n if (typeof key === 'object') {\n for (var _key in key) {\n needsDims = needsDims || this._dimensionAffectingProps.indexOf(_key) !== -1;\n }\n }\n else {\n needsDims = this._dimensionAffectingProps.indexOf(key) !== -1;\n }\n if (needsDims) {\n this.initDimensions();\n this.setCoords();\n }\n return this;\n },\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity\n */\n complexity: function() {\n return 1;\n }\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Text.fromElement})\n * @static\n * @memberOf fabric.Text\n * @see: http://www.w3.org/TR/SVG/text.html#TextElement\n */\n fabric.Text.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat(\n 'x y dx dy font-family font-style font-weight font-size letter-spacing text-decoration text-anchor'.split(' '));\n\n /**\n * Default SVG font size\n * @static\n * @memberOf fabric.Text\n */\n fabric.Text.DEFAULT_SVG_FONT_SIZE = 16;\n\n /**\n * Returns fabric.Text instance from an SVG element (not yet implemented)\n * @static\n * @memberOf fabric.Text\n * @param {SVGElement} element Element to parse\n * @param {Function} callback callback function invoked after parsing\n * @param {Object} [options] Options object\n */\n fabric.Text.fromElement = function(element, callback, options) {\n if (!element) {\n return callback(null);\n }\n\n var parsedAttributes = fabric.parseAttributes(element, fabric.Text.ATTRIBUTE_NAMES),\n parsedAnchor = parsedAttributes.textAnchor || 'left';\n options = fabric.util.object.extend((options ? clone(options) : { }), parsedAttributes);\n\n options.top = options.top || 0;\n options.left = options.left || 0;\n if (parsedAttributes.textDecoration) {\n var textDecoration = parsedAttributes.textDecoration;\n if (textDecoration.indexOf('underline') !== -1) {\n options.underline = true;\n }\n if (textDecoration.indexOf('overline') !== -1) {\n options.overline = true;\n }\n if (textDecoration.indexOf('line-through') !== -1) {\n options.linethrough = true;\n }\n delete options.textDecoration;\n }\n if ('dx' in parsedAttributes) {\n options.left += parsedAttributes.dx;\n }\n if ('dy' in parsedAttributes) {\n options.top += parsedAttributes.dy;\n }\n if (!('fontSize' in options)) {\n options.fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE;\n }\n\n var textContent = '';\n\n // The XML is not properly parsed in IE9 so a workaround to get\n // textContent is through firstChild.data. Another workaround would be\n // to convert XML loaded from a file to be converted using DOMParser (same way loadSVGFromString() does)\n if (!('textContent' in element)) {\n if ('firstChild' in element && element.firstChild !== null) {\n if ('data' in element.firstChild && element.firstChild.data !== null) {\n textContent = element.firstChild.data;\n }\n }\n }\n else {\n textContent = element.textContent;\n }\n\n textContent = textContent.replace(/^\\s+|\\s+$|\\n+/g, '').replace(/\\s+/g, ' ');\n var originalStrokeWidth = options.strokeWidth;\n options.strokeWidth = 0;\n\n var text = new fabric.Text(textContent, options),\n textHeightScaleFactor = text.getScaledHeight() / text.height,\n lineHeightDiff = (text.height + text.strokeWidth) * text.lineHeight - text.height,\n scaledDiff = lineHeightDiff * textHeightScaleFactor,\n textHeight = text.getScaledHeight() + scaledDiff,\n offX = 0;\n /*\n Adjust positioning:\n x/y attributes in SVG correspond to the bottom-left corner of text bounding box\n fabric output by default at top, left.\n */\n if (parsedAnchor === 'center') {\n offX = text.getScaledWidth() / 2;\n }\n if (parsedAnchor === 'right') {\n offX = text.getScaledWidth();\n }\n text.set({\n left: text.left - offX,\n top: text.top - (textHeight - text.fontSize * (0.07 + text._fontSizeFraction)) / text.lineHeight,\n strokeWidth: typeof originalStrokeWidth !== 'undefined' ? originalStrokeWidth : 1,\n });\n callback(text);\n };\n /* _FROM_SVG_END_ */\n\n /**\n * Returns fabric.Text instance from an object representation\n * @static\n * @memberOf fabric.Text\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Text instance is created\n */\n fabric.Text.fromObject = function(object, callback) {\n return fabric.Object._fromObject('Text', object, callback, 'text');\n };\n\n fabric.Text.genericFonts = ['sans-serif', 'serif', 'cursive', 'fantasy', 'monospace'];\n\n fabric.util.createAccessors && fabric.util.createAccessors(fabric.Text);\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n fabric.util.object.extend(fabric.Text.prototype, /** @lends fabric.Text.prototype */ {\n /**\n * Returns true if object has no styling or no styling in a line\n * @param {Number} lineIndex , lineIndex is on wrapped lines.\n * @return {Boolean}\n */\n isEmptyStyles: function(lineIndex) {\n if (!this.styles) {\n return true;\n }\n if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n return true;\n }\n var obj = typeof lineIndex === 'undefined' ? this.styles : { line: this.styles[lineIndex] };\n for (var p1 in obj) {\n for (var p2 in obj[p1]) {\n // eslint-disable-next-line no-unused-vars\n for (var p3 in obj[p1][p2]) {\n return false;\n }\n }\n }\n return true;\n },\n\n /**\n * Returns true if object has a style property or has it ina specified line\n * This function is used to detect if a text will use a particular property or not.\n * @param {String} property to check for\n * @param {Number} lineIndex to check the style on\n * @return {Boolean}\n */\n styleHas: function(property, lineIndex) {\n if (!this.styles || !property || property === '') {\n return false;\n }\n if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n return false;\n }\n var obj = typeof lineIndex === 'undefined' ? this.styles : { 0: this.styles[lineIndex] };\n // eslint-disable-next-line\n for (var p1 in obj) {\n // eslint-disable-next-line\n for (var p2 in obj[p1]) {\n if (typeof obj[p1][p2][property] !== 'undefined') {\n return true;\n }\n }\n }\n return false;\n },\n\n /**\n * Check if characters in a text have a value for a property\n * whose value matches the textbox's value for that property. If so,\n * the character-level property is deleted. If the character\n * has no other properties, then it is also deleted. Finally,\n * if the line containing that character has no other characters\n * then it also is deleted.\n *\n * @param {string} property The property to compare between characters and text.\n */\n cleanStyle: function(property) {\n if (!this.styles || !property || property === '') {\n return false;\n }\n var obj = this.styles, stylesCount = 0, letterCount, stylePropertyValue,\n allStyleObjectPropertiesMatch = true, graphemeCount = 0, styleObject;\n // eslint-disable-next-line\n for (var p1 in obj) {\n letterCount = 0;\n // eslint-disable-next-line\n for (var p2 in obj[p1]) {\n var styleObject = obj[p1][p2],\n stylePropertyHasBeenSet = styleObject.hasOwnProperty(property);\n\n stylesCount++;\n\n if (stylePropertyHasBeenSet) {\n if (!stylePropertyValue) {\n stylePropertyValue = styleObject[property];\n }\n else if (styleObject[property] !== stylePropertyValue) {\n allStyleObjectPropertiesMatch = false;\n }\n\n if (styleObject[property] === this[property]) {\n delete styleObject[property];\n }\n }\n else {\n allStyleObjectPropertiesMatch = false;\n }\n\n if (Object.keys(styleObject).length !== 0) {\n letterCount++;\n }\n else {\n delete obj[p1][p2];\n }\n }\n\n if (letterCount === 0) {\n delete obj[p1];\n }\n }\n // if every grapheme has the same style set then\n // delete those styles and set it on the parent\n for (var i = 0; i < this._textLines.length; i++) {\n graphemeCount += this._textLines[i].length;\n }\n if (allStyleObjectPropertiesMatch && stylesCount === graphemeCount) {\n this[property] = stylePropertyValue;\n this.removeStyle(property);\n }\n },\n\n /**\n * Remove a style property or properties from all individual character styles\n * in a text object. Deletes the character style object if it contains no other style\n * props. Deletes a line style object if it contains no other character styles.\n *\n * @param {String} props The property to remove from character styles.\n */\n removeStyle: function(property) {\n if (!this.styles || !property || property === '') {\n return;\n }\n var obj = this.styles, line, lineNum, charNum;\n for (lineNum in obj) {\n line = obj[lineNum];\n for (charNum in line) {\n delete line[charNum][property];\n if (Object.keys(line[charNum]).length === 0) {\n delete line[charNum];\n }\n }\n if (Object.keys(line).length === 0) {\n delete obj[lineNum];\n }\n }\n },\n\n /**\n * @private\n */\n _extendStyles: function(index, styles) {\n var loc = this.get2DCursorLocation(index);\n\n if (!this._getLineStyle(loc.lineIndex)) {\n this._setLineStyle(loc.lineIndex);\n }\n\n if (!this._getStyleDeclaration(loc.lineIndex, loc.charIndex)) {\n this._setStyleDeclaration(loc.lineIndex, loc.charIndex, {});\n }\n\n fabric.util.object.extend(this._getStyleDeclaration(loc.lineIndex, loc.charIndex), styles);\n },\n\n /**\n * Returns 2d representation (lineIndex and charIndex) of cursor (or selection start)\n * @param {Number} [selectionStart] Optional index. When not given, current selectionStart is used.\n * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. usefull to manage styles.\n */\n get2DCursorLocation: function(selectionStart, skipWrapping) {\n if (typeof selectionStart === 'undefined') {\n selectionStart = this.selectionStart;\n }\n var lines = skipWrapping ? this._unwrappedTextLines : this._textLines,\n len = lines.length;\n for (var i = 0; i < len; i++) {\n if (selectionStart <= lines[i].length) {\n return {\n lineIndex: i,\n charIndex: selectionStart\n };\n }\n selectionStart -= lines[i].length + this.missingNewlineOffset(i);\n }\n return {\n lineIndex: i - 1,\n charIndex: lines[i - 1].length < selectionStart ? lines[i - 1].length : selectionStart\n };\n },\n\n /**\n * Gets style of a current selection/cursor (at the start position)\n * if startIndex or endIndex are not provided, slectionStart or selectionEnd will be used.\n * @param {Number} [startIndex] Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1\n * @param {Boolean} [complete] get full style or not\n * @return {Array} styles an array with one, zero or more Style objects\n */\n getSelectionStyles: function(startIndex, endIndex, complete) {\n if (typeof startIndex === 'undefined') {\n startIndex = this.selectionStart || 0;\n }\n if (typeof endIndex === 'undefined') {\n endIndex = this.selectionEnd || startIndex;\n }\n var styles = [];\n for (var i = startIndex; i < endIndex; i++) {\n styles.push(this.getStyleAtPosition(i, complete));\n }\n return styles;\n },\n\n /**\n * Gets style of a current selection/cursor position\n * @param {Number} position to get styles at\n * @param {Boolean} [complete] full style if true\n * @return {Object} style Style object at a specified index\n * @private\n */\n getStyleAtPosition: function(position, complete) {\n var loc = this.get2DCursorLocation(position),\n style = complete ? this.getCompleteStyleDeclaration(loc.lineIndex, loc.charIndex) :\n this._getStyleDeclaration(loc.lineIndex, loc.charIndex);\n return style || {};\n },\n\n /**\n * Sets style of a current selection, if no selection exist, do not set anything.\n * @param {Object} [styles] Styles object\n * @param {Number} [startIndex] Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1\n * @return {fabric.IText} thisArg\n * @chainable\n */\n setSelectionStyles: function(styles, startIndex, endIndex) {\n if (typeof startIndex === 'undefined') {\n startIndex = this.selectionStart || 0;\n }\n if (typeof endIndex === 'undefined') {\n endIndex = this.selectionEnd || startIndex;\n }\n for (var i = startIndex; i < endIndex; i++) {\n this._extendStyles(i, styles);\n }\n /* not included in _extendStyles to avoid clearing cache more than once */\n this._forceClearCache = true;\n return this;\n },\n\n /**\n * get the reference, not a clone, of the style object for a given character\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {Object} style object\n */\n _getStyleDeclaration: function(lineIndex, charIndex) {\n var lineStyle = this.styles && this.styles[lineIndex];\n if (!lineStyle) {\n return null;\n }\n return lineStyle[charIndex];\n },\n\n /**\n * return a new object that contains all the style property for a character\n * the object returned is newly created\n * @param {Number} lineIndex of the line where the character is\n * @param {Number} charIndex position of the character on the line\n * @return {Object} style object\n */\n getCompleteStyleDeclaration: function(lineIndex, charIndex) {\n var style = this._getStyleDeclaration(lineIndex, charIndex) || { },\n styleObject = { }, prop;\n for (var i = 0; i < this._styleProperties.length; i++) {\n prop = this._styleProperties[i];\n styleObject[prop] = typeof style[prop] === 'undefined' ? this[prop] : style[prop];\n }\n return styleObject;\n },\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} style\n * @private\n */\n _setStyleDeclaration: function(lineIndex, charIndex, style) {\n this.styles[lineIndex][charIndex] = style;\n },\n\n /**\n *\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n _deleteStyleDeclaration: function(lineIndex, charIndex) {\n delete this.styles[lineIndex][charIndex];\n },\n\n /**\n * @param {Number} lineIndex\n * @return {Boolean} if the line exists or not\n * @private\n */\n _getLineStyle: function(lineIndex) {\n return !!this.styles[lineIndex];\n },\n\n /**\n * Set the line style to an empty object so that is initialized\n * @param {Number} lineIndex\n * @private\n */\n _setLineStyle: function(lineIndex) {\n this.styles[lineIndex] = {};\n },\n\n /**\n * @param {Number} lineIndex\n * @private\n */\n _deleteLineStyle: function(lineIndex) {\n delete this.styles[lineIndex];\n }\n });\n})();\n\n\n(function() {\n\n function parseDecoration(object) {\n if (object.textDecoration) {\n object.textDecoration.indexOf('underline') > -1 && (object.underline = true);\n object.textDecoration.indexOf('line-through') > -1 && (object.linethrough = true);\n object.textDecoration.indexOf('overline') > -1 && (object.overline = true);\n delete object.textDecoration;\n }\n }\n\n /**\n * IText class (introduced in v1.4) Events are also fired with \"text:\"\n * prefix when observing canvas.\n * @class fabric.IText\n * @extends fabric.Text\n * @mixes fabric.Observable\n *\n * @fires changed\n * @fires selection:changed\n * @fires editing:entered\n * @fires editing:exited\n *\n * @return {fabric.IText} thisArg\n * @see {@link fabric.IText#initialize} for constructor definition\n *\n *

Supported key combinations:

\n *
\n   *   Move cursor:                    left, right, up, down\n   *   Select character:               shift + left, shift + right\n   *   Select text vertically:         shift + up, shift + down\n   *   Move cursor by word:            alt + left, alt + right\n   *   Select words:                   shift + alt + left, shift + alt + right\n   *   Move cursor to line start/end:  cmd + left, cmd + right or home, end\n   *   Select till start/end of line:  cmd + shift + left, cmd + shift + right or shift + home, shift + end\n   *   Jump to start/end of text:      cmd + up, cmd + down\n   *   Select till start/end of text:  cmd + shift + up, cmd + shift + down or shift + pgUp, shift + pgDown\n   *   Delete character:               backspace\n   *   Delete word:                    alt + backspace\n   *   Delete line:                    cmd + backspace\n   *   Forward delete:                 delete\n   *   Copy text:                      ctrl/cmd + c\n   *   Paste text:                     ctrl/cmd + v\n   *   Cut text:                       ctrl/cmd + x\n   *   Select entire text:             ctrl/cmd + a\n   *   Quit editing                    tab or esc\n   * 
\n *\n *

Supported mouse/touch combination

\n *
\n   *   Position cursor:                click/touch\n   *   Create selection:               click/touch & drag\n   *   Create selection:               click & shift + click\n   *   Select word:                    double click\n   *   Select line:                    triple click\n   * 
\n */\n fabric.IText = fabric.util.createClass(fabric.Text, fabric.Observable, /** @lends fabric.IText.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'i-text',\n\n /**\n * Index where text selection starts (or where cursor is when there is no selection)\n * @type Number\n * @default\n */\n selectionStart: 0,\n\n /**\n * Index where text selection ends\n * @type Number\n * @default\n */\n selectionEnd: 0,\n\n /**\n * Color of text selection\n * @type String\n * @default\n */\n selectionColor: 'rgba(17,119,255,0.3)',\n\n /**\n * Indicates whether text is in editing mode\n * @type Boolean\n * @default\n */\n isEditing: false,\n\n /**\n * Indicates whether a text can be edited\n * @type Boolean\n * @default\n */\n editable: true,\n\n /**\n * Border color of text object while it's in editing mode\n * @type String\n * @default\n */\n editingBorderColor: 'rgba(102,153,255,0.25)',\n\n /**\n * Width of cursor (in px)\n * @type Number\n * @default\n */\n cursorWidth: 2,\n\n /**\n * Color of default cursor (when not overwritten by character style)\n * @type String\n * @default\n */\n cursorColor: '#333',\n\n /**\n * Delay between cursor blink (in ms)\n * @type Number\n * @default\n */\n cursorDelay: 1000,\n\n /**\n * Duration of cursor fadein (in ms)\n * @type Number\n * @default\n */\n cursorDuration: 600,\n\n /**\n * Indicates whether internal text char widths can be cached\n * @type Boolean\n * @default\n */\n caching: true,\n\n /**\n * @private\n */\n _reSpace: /\\s|\\n/,\n\n /**\n * @private\n */\n _currentCursorOpacity: 0,\n\n /**\n * @private\n */\n _selectionDirection: null,\n\n /**\n * @private\n */\n _abortCursorAnimation: false,\n\n /**\n * @private\n */\n __widthOfSpace: [],\n\n /**\n * Helps determining when the text is in composition, so that the cursor\n * rendering is altered.\n */\n inCompositionMode: false,\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n * @return {fabric.IText} thisArg\n */\n initialize: function(text, options) {\n this.callSuper('initialize', text, options);\n this.initBehavior();\n },\n\n /**\n * Sets selection start (left boundary of a selection)\n * @param {Number} index Index to set selection start to\n */\n setSelectionStart: function(index) {\n index = Math.max(index, 0);\n this._updateAndFire('selectionStart', index);\n },\n\n /**\n * Sets selection end (right boundary of a selection)\n * @param {Number} index Index to set selection end to\n */\n setSelectionEnd: function(index) {\n index = Math.min(index, this.text.length);\n this._updateAndFire('selectionEnd', index);\n },\n\n /**\n * @private\n * @param {String} property 'selectionStart' or 'selectionEnd'\n * @param {Number} index new position of property\n */\n _updateAndFire: function(property, index) {\n if (this[property] !== index) {\n this._fireSelectionChanged();\n this[property] = index;\n }\n this._updateTextarea();\n },\n\n /**\n * Fires the even of selection changed\n * @private\n */\n _fireSelectionChanged: function() {\n this.fire('selection:changed');\n this.canvas && this.canvas.fire('text:selection:changed', { target: this });\n },\n\n /**\n * Initialize text dimensions. Render all text on given context\n * or on a offscreen canvas to get the text width with measureText.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n * @private\n */\n initDimensions: function() {\n this.isEditing && this.initDelayedCursor();\n this.clearContextTop();\n this.callSuper('initDimensions');\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render: function(ctx) {\n this.clearContextTop();\n this.callSuper('render', ctx);\n // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor\n // the correct position but not at every cursor animation.\n this.cursorOffsetCache = { };\n this.renderCursorOrSelection();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n this.callSuper('_render', ctx);\n },\n\n /**\n * Prepare and clean the contextTop\n */\n clearContextTop: function(skipRestore) {\n if (!this.isEditing || !this.canvas || !this.canvas.contextTop) {\n return;\n }\n var ctx = this.canvas.contextTop, v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n this.transform(ctx);\n this.transformMatrix && ctx.transform.apply(ctx, this.transformMatrix);\n this._clearTextArea(ctx);\n skipRestore || ctx.restore();\n },\n\n /**\n * Renders cursor or selection (depending on what exists)\n * it does on the contextTop. If contextTop is not available, do nothing.\n */\n renderCursorOrSelection: function() {\n if (!this.isEditing || !this.canvas || !this.canvas.contextTop) {\n return;\n }\n var boundaries = this._getCursorBoundaries(),\n ctx = this.canvas.contextTop;\n this.clearContextTop(true);\n if (this.selectionStart === this.selectionEnd) {\n this.renderCursor(boundaries, ctx);\n }\n else {\n this.renderSelection(boundaries, ctx);\n }\n ctx.restore();\n },\n\n _clearTextArea: function(ctx) {\n // we add 4 pixel, to be sure to do not leave any pixel out\n var width = this.width + 4, height = this.height + 4;\n ctx.clearRect(-width / 2, -height / 2, width, height);\n },\n\n /**\n * Returns cursor boundaries (left, top, leftOffset, topOffset)\n * @private\n * @param {Array} chars Array of characters\n * @param {String} typeOfBoundaries\n */\n _getCursorBoundaries: function(position) {\n\n // left/top are left/top of entire text box\n // leftOffset/topOffset are offset from that left/top point of a text box\n\n if (typeof position === 'undefined') {\n position = this.selectionStart;\n }\n\n var left = this._getLeftOffset(),\n top = this._getTopOffset(),\n offsets = this._getCursorBoundariesOffsets(position);\n\n return {\n left: left,\n top: top,\n leftOffset: offsets.left,\n topOffset: offsets.top\n };\n },\n\n /**\n * @private\n */\n _getCursorBoundariesOffsets: function(position) {\n if (this.cursorOffsetCache && 'top' in this.cursorOffsetCache) {\n return this.cursorOffsetCache;\n }\n var lineLeftOffset,\n lineIndex,\n charIndex,\n topOffset = 0,\n leftOffset = 0,\n boundaries,\n cursorPosition = this.get2DCursorLocation(position);\n charIndex = cursorPosition.charIndex;\n lineIndex = cursorPosition.lineIndex;\n for (var i = 0; i < lineIndex; i++) {\n topOffset += this.getHeightOfLine(i);\n }\n lineLeftOffset = this._getLineLeftOffset(lineIndex);\n var bound = this.__charBounds[lineIndex][charIndex];\n bound && (leftOffset = bound.left);\n if (this.charSpacing !== 0 && charIndex === this._textLines[lineIndex].length) {\n leftOffset -= this._getWidthOfCharSpacing();\n }\n boundaries = {\n top: topOffset,\n left: lineLeftOffset + (leftOffset > 0 ? leftOffset : 0),\n };\n this.cursorOffsetCache = boundaries;\n return this.cursorOffsetCache;\n },\n\n /**\n * Renders cursor\n * @param {Object} boundaries\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderCursor: function(boundaries, ctx) {\n var cursorLocation = this.get2DCursorLocation(),\n lineIndex = cursorLocation.lineIndex,\n charIndex = cursorLocation.charIndex > 0 ? cursorLocation.charIndex - 1 : 0,\n charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize'),\n multiplier = this.scaleX * this.canvas.getZoom(),\n cursorWidth = this.cursorWidth / multiplier,\n topOffset = boundaries.topOffset,\n dy = this.getValueOfPropertyAt(lineIndex, charIndex, 'deltaY');\n\n topOffset += (1 - this._fontSizeFraction) * this.getHeightOfLine(lineIndex) / this.lineHeight\n - charHeight * (1 - this._fontSizeFraction);\n\n if (this.inCompositionMode) {\n this.renderSelection(boundaries, ctx);\n }\n\n ctx.fillStyle = this.getValueOfPropertyAt(lineIndex, charIndex, 'fill');\n ctx.globalAlpha = this.__isMousedown ? 1 : this._currentCursorOpacity;\n ctx.fillRect(\n boundaries.left + boundaries.leftOffset - cursorWidth / 2,\n topOffset + boundaries.top + dy,\n cursorWidth,\n charHeight);\n },\n\n /**\n * Renders text selection\n * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderSelection: function(boundaries, ctx) {\n\n var selectionStart = this.inCompositionMode ? this.hiddenTextarea.selectionStart : this.selectionStart,\n selectionEnd = this.inCompositionMode ? this.hiddenTextarea.selectionEnd : this.selectionEnd,\n isJustify = this.textAlign.indexOf('justify') !== -1,\n start = this.get2DCursorLocation(selectionStart),\n end = this.get2DCursorLocation(selectionEnd),\n startLine = start.lineIndex,\n endLine = end.lineIndex,\n startChar = start.charIndex < 0 ? 0 : start.charIndex,\n endChar = end.charIndex < 0 ? 0 : end.charIndex;\n\n for (var i = startLine; i <= endLine; i++) {\n var lineOffset = this._getLineLeftOffset(i) || 0,\n lineHeight = this.getHeightOfLine(i),\n realLineHeight = 0, boxStart = 0, boxEnd = 0;\n\n if (i === startLine) {\n boxStart = this.__charBounds[startLine][startChar].left;\n }\n if (i >= startLine && i < endLine) {\n boxEnd = isJustify && !this.isEndOfWrapping(i) ? this.width : this.getLineWidth(i) || 5; // WTF is this 5?\n }\n else if (i === endLine) {\n if (endChar === 0) {\n boxEnd = this.__charBounds[endLine][endChar].left;\n }\n else {\n var charSpacing = this._getWidthOfCharSpacing();\n boxEnd = this.__charBounds[endLine][endChar - 1].left\n + this.__charBounds[endLine][endChar - 1].width - charSpacing;\n }\n }\n realLineHeight = lineHeight;\n if (this.lineHeight < 1 || (i === endLine && this.lineHeight > 1)) {\n lineHeight /= this.lineHeight;\n }\n if (this.inCompositionMode) {\n ctx.fillStyle = this.compositionColor || 'black';\n ctx.fillRect(\n boundaries.left + lineOffset + boxStart,\n boundaries.top + boundaries.topOffset + lineHeight,\n boxEnd - boxStart,\n 1);\n }\n else {\n ctx.fillStyle = this.selectionColor;\n ctx.fillRect(\n boundaries.left + lineOffset + boxStart,\n boundaries.top + boundaries.topOffset,\n boxEnd - boxStart,\n lineHeight);\n }\n\n\n boundaries.topOffset += realLineHeight;\n }\n },\n\n /**\n * High level function to know the height of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns fontSize of char at the current cursor\n * Unused from the library, is for the end user\n * @return {Number} Character font size\n */\n getCurrentCharFontSize: function() {\n var cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, 'fontSize');\n },\n\n /**\n * High level function to know the color of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns color (fill) of char at the current cursor\n * Unused from the library, is for the end user\n * @return {String} Character color (fill)\n */\n getCurrentCharColor: function() {\n var cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, 'fill');\n },\n\n /**\n * Returns the cursor position for the getCurrent.. functions\n * @private\n */\n _getCurrentCharIndex: function() {\n var cursorPosition = this.get2DCursorLocation(this.selectionStart, true),\n charIndex = cursorPosition.charIndex > 0 ? cursorPosition.charIndex - 1 : 0;\n return { l: cursorPosition.lineIndex, c: charIndex };\n }\n });\n\n /**\n * Returns fabric.IText instance from an object representation\n * @static\n * @memberOf fabric.IText\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as argument\n */\n fabric.IText.fromObject = function(object, callback) {\n parseDecoration(object);\n if (object.styles) {\n for (var i in object.styles) {\n for (var j in object.styles[i]) {\n parseDecoration(object.styles[i][j]);\n }\n }\n }\n fabric.Object._fromObject('IText', object, callback, 'text');\n };\n})();\n\n\n(function() {\n\n var clone = fabric.util.object.clone;\n\n fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.prototype */ {\n\n /**\n * Initializes all the interactive behavior of IText\n */\n initBehavior: function() {\n this.initAddedHandler();\n this.initRemovedHandler();\n this.initCursorSelectionHandlers();\n this.initDoubleClickSimulation();\n this.mouseMoveHandler = this.mouseMoveHandler.bind(this);\n },\n\n onDeselect: function() {\n this.isEditing && this.exitEditing();\n this.selected = false;\n },\n\n /**\n * Initializes \"added\" event handler\n */\n initAddedHandler: function() {\n var _this = this;\n this.on('added', function() {\n var canvas = _this.canvas;\n if (canvas) {\n if (!canvas._hasITextHandlers) {\n canvas._hasITextHandlers = true;\n _this._initCanvasHandlers(canvas);\n }\n canvas._iTextInstances = canvas._iTextInstances || [];\n canvas._iTextInstances.push(_this);\n }\n });\n },\n\n initRemovedHandler: function() {\n var _this = this;\n this.on('removed', function() {\n var canvas = _this.canvas;\n if (canvas) {\n canvas._iTextInstances = canvas._iTextInstances || [];\n fabric.util.removeFromArray(canvas._iTextInstances, _this);\n if (canvas._iTextInstances.length === 0) {\n canvas._hasITextHandlers = false;\n _this._removeCanvasHandlers(canvas);\n }\n }\n });\n },\n\n /**\n * register canvas event to manage exiting on other instances\n * @private\n */\n _initCanvasHandlers: function(canvas) {\n canvas._mouseUpITextHandler = function() {\n if (canvas._iTextInstances) {\n canvas._iTextInstances.forEach(function(obj) {\n obj.__isMousedown = false;\n });\n }\n };\n canvas.on('mouse:up', canvas._mouseUpITextHandler);\n },\n\n /**\n * remove canvas event to manage exiting on other instances\n * @private\n */\n _removeCanvasHandlers: function(canvas) {\n canvas.off('mouse:up', canvas._mouseUpITextHandler);\n },\n\n /**\n * @private\n */\n _tick: function() {\n this._currentTickState = this._animateCursor(this, 1, this.cursorDuration, '_onTickComplete');\n },\n\n /**\n * @private\n */\n _animateCursor: function(obj, targetOpacity, duration, completeMethod) {\n\n var tickState;\n\n tickState = {\n isAborted: false,\n abort: function() {\n this.isAborted = true;\n },\n };\n\n obj.animate('_currentCursorOpacity', targetOpacity, {\n duration: duration,\n onComplete: function() {\n if (!tickState.isAborted) {\n obj[completeMethod]();\n }\n },\n onChange: function() {\n // we do not want to animate a selection, only cursor\n if (obj.canvas && obj.selectionStart === obj.selectionEnd) {\n obj.renderCursorOrSelection();\n }\n },\n abort: function() {\n return tickState.isAborted;\n }\n });\n return tickState;\n },\n\n /**\n * @private\n */\n _onTickComplete: function() {\n\n var _this = this;\n\n if (this._cursorTimeout1) {\n clearTimeout(this._cursorTimeout1);\n }\n this._cursorTimeout1 = setTimeout(function() {\n _this._currentTickCompleteState = _this._animateCursor(_this, 0, this.cursorDuration / 2, '_tick');\n }, 100);\n },\n\n /**\n * Initializes delayed cursor\n */\n initDelayedCursor: function(restart) {\n var _this = this,\n delay = restart ? 0 : this.cursorDelay;\n\n this.abortCursorAnimation();\n this._currentCursorOpacity = 1;\n this._cursorTimeout2 = setTimeout(function() {\n _this._tick();\n }, delay);\n },\n\n /**\n * Aborts cursor animation and clears all timeouts\n */\n abortCursorAnimation: function() {\n var shouldClear = this._currentTickState || this._currentTickCompleteState,\n canvas = this.canvas;\n this._currentTickState && this._currentTickState.abort();\n this._currentTickCompleteState && this._currentTickCompleteState.abort();\n\n clearTimeout(this._cursorTimeout1);\n clearTimeout(this._cursorTimeout2);\n\n this._currentCursorOpacity = 0;\n // to clear just itext area we need to transform the context\n // it may not be worth it\n if (shouldClear && canvas) {\n canvas.clearContext(canvas.contextTop || canvas.contextContainer);\n }\n\n },\n\n /**\n * Selects entire text\n * @return {fabric.IText} thisArg\n * @chainable\n */\n selectAll: function() {\n this.selectionStart = 0;\n this.selectionEnd = this._text.length;\n this._fireSelectionChanged();\n this._updateTextarea();\n return this;\n },\n\n /**\n * Returns selected text\n * @return {String}\n */\n getSelectedText: function() {\n return this._text.slice(this.selectionStart, this.selectionEnd).join('');\n },\n\n /**\n * Find new selection index representing start of current word according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findWordBoundaryLeft: function(startFrom) {\n var offset = 0, index = startFrom - 1;\n\n // remove space before cursor first\n if (this._reSpace.test(this._text[index])) {\n while (this._reSpace.test(this._text[index])) {\n offset++;\n index--;\n }\n }\n while (/\\S/.test(this._text[index]) && index > -1) {\n offset++;\n index--;\n }\n\n return startFrom - offset;\n },\n\n /**\n * Find new selection index representing end of current word according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findWordBoundaryRight: function(startFrom) {\n var offset = 0, index = startFrom;\n\n // remove space after cursor first\n if (this._reSpace.test(this._text[index])) {\n while (this._reSpace.test(this._text[index])) {\n offset++;\n index++;\n }\n }\n while (/\\S/.test(this._text[index]) && index < this._text.length) {\n offset++;\n index++;\n }\n\n return startFrom + offset;\n },\n\n /**\n * Find new selection index representing start of current line according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findLineBoundaryLeft: function(startFrom) {\n var offset = 0, index = startFrom - 1;\n\n while (!/\\n/.test(this._text[index]) && index > -1) {\n offset++;\n index--;\n }\n\n return startFrom - offset;\n },\n\n /**\n * Find new selection index representing end of current line according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findLineBoundaryRight: function(startFrom) {\n var offset = 0, index = startFrom;\n\n while (!/\\n/.test(this._text[index]) && index < this._text.length) {\n offset++;\n index++;\n }\n\n return startFrom + offset;\n },\n\n /**\n * Finds index corresponding to beginning or end of a word\n * @param {Number} selectionStart Index of a character\n * @param {Number} direction 1 or -1\n * @return {Number} Index of the beginning or end of a word\n */\n searchWordBoundary: function(selectionStart, direction) {\n var text = this._text,\n index = this._reSpace.test(text[selectionStart]) ? selectionStart - 1 : selectionStart,\n _char = text[index],\n // wrong\n reNonWord = fabric.reNonWord;\n\n while (!reNonWord.test(_char) && index > 0 && index < text.length) {\n index += direction;\n _char = text[index];\n }\n if (reNonWord.test(_char)) {\n index += direction === 1 ? 0 : 1;\n }\n return index;\n },\n\n /**\n * Selects a word based on the index\n * @param {Number} selectionStart Index of a character\n */\n selectWord: function(selectionStart) {\n selectionStart = selectionStart || this.selectionStart;\n var newSelectionStart = this.searchWordBoundary(selectionStart, -1), /* search backwards */\n newSelectionEnd = this.searchWordBoundary(selectionStart, 1); /* search forward */\n\n this.selectionStart = newSelectionStart;\n this.selectionEnd = newSelectionEnd;\n this._fireSelectionChanged();\n this._updateTextarea();\n this.renderCursorOrSelection();\n },\n\n /**\n * Selects a line based on the index\n * @param {Number} selectionStart Index of a character\n * @return {fabric.IText} thisArg\n * @chainable\n */\n selectLine: function(selectionStart) {\n selectionStart = selectionStart || this.selectionStart;\n var newSelectionStart = this.findLineBoundaryLeft(selectionStart),\n newSelectionEnd = this.findLineBoundaryRight(selectionStart);\n\n this.selectionStart = newSelectionStart;\n this.selectionEnd = newSelectionEnd;\n this._fireSelectionChanged();\n this._updateTextarea();\n return this;\n },\n\n /**\n * Enters editing state\n * @return {fabric.IText} thisArg\n * @chainable\n */\n enterEditing: function(e) {\n if (this.isEditing || !this.editable) {\n return;\n }\n\n if (this.canvas) {\n this.canvas.calcOffset();\n this.exitEditingOnOthers(this.canvas);\n }\n\n this.isEditing = true;\n\n this.initHiddenTextarea(e);\n this.hiddenTextarea.focus();\n this.hiddenTextarea.value = this.text;\n this._updateTextarea();\n this._saveEditingProps();\n this._setEditingProps();\n this._textBeforeEdit = this.text;\n\n this._tick();\n this.fire('editing:entered');\n this._fireSelectionChanged();\n if (!this.canvas) {\n return this;\n }\n this.canvas.fire('text:editing:entered', { target: this });\n this.initMouseMoveHandler();\n this.canvas.requestRenderAll();\n return this;\n },\n\n exitEditingOnOthers: function(canvas) {\n if (canvas._iTextInstances) {\n canvas._iTextInstances.forEach(function(obj) {\n obj.selected = false;\n if (obj.isEditing) {\n obj.exitEditing();\n }\n });\n }\n },\n\n /**\n * Initializes \"mousemove\" event handler\n */\n initMouseMoveHandler: function() {\n this.canvas.on('mouse:move', this.mouseMoveHandler);\n },\n\n /**\n * @private\n */\n mouseMoveHandler: function(options) {\n if (!this.__isMousedown || !this.isEditing) {\n return;\n }\n\n var newSelectionStart = this.getSelectionStartFromPointer(options.e),\n currentStart = this.selectionStart,\n currentEnd = this.selectionEnd;\n if (\n (newSelectionStart !== this.__selectionStartOnMouseDown || currentStart === currentEnd)\n &&\n (currentStart === newSelectionStart || currentEnd === newSelectionStart)\n ) {\n return;\n }\n if (newSelectionStart > this.__selectionStartOnMouseDown) {\n this.selectionStart = this.__selectionStartOnMouseDown;\n this.selectionEnd = newSelectionStart;\n }\n else {\n this.selectionStart = newSelectionStart;\n this.selectionEnd = this.__selectionStartOnMouseDown;\n }\n if (this.selectionStart !== currentStart || this.selectionEnd !== currentEnd) {\n this.restartCursorIfNeeded();\n this._fireSelectionChanged();\n this._updateTextarea();\n this.renderCursorOrSelection();\n }\n },\n\n /**\n * @private\n */\n _setEditingProps: function() {\n this.hoverCursor = 'text';\n\n if (this.canvas) {\n this.canvas.defaultCursor = this.canvas.moveCursor = 'text';\n }\n\n this.borderColor = this.editingBorderColor;\n this.hasControls = this.selectable = false;\n this.lockMovementX = this.lockMovementY = true;\n },\n\n /**\n * convert from textarea to grapheme indexes\n */\n fromStringToGraphemeSelection: function(start, end, text) {\n var smallerTextStart = text.slice(0, start),\n graphemeStart = fabric.util.string.graphemeSplit(smallerTextStart).length;\n if (start === end) {\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart };\n }\n var smallerTextEnd = text.slice(start, end),\n graphemeEnd = fabric.util.string.graphemeSplit(smallerTextEnd).length;\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart + graphemeEnd };\n },\n\n /**\n * convert from fabric to textarea values\n */\n fromGraphemeToStringSelection: function(start, end, _text) {\n var smallerTextStart = _text.slice(0, start),\n graphemeStart = smallerTextStart.join('').length;\n if (start === end) {\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart };\n }\n var smallerTextEnd = _text.slice(start, end),\n graphemeEnd = smallerTextEnd.join('').length;\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart + graphemeEnd };\n },\n\n /**\n * @private\n */\n _updateTextarea: function() {\n this.cursorOffsetCache = { };\n if (!this.hiddenTextarea) {\n return;\n }\n if (!this.inCompositionMode) {\n var newSelection = this.fromGraphemeToStringSelection(this.selectionStart, this.selectionEnd, this._text);\n this.hiddenTextarea.selectionStart = newSelection.selectionStart;\n this.hiddenTextarea.selectionEnd = newSelection.selectionEnd;\n }\n this.updateTextareaPosition();\n },\n\n /**\n * @private\n */\n updateFromTextArea: function() {\n if (!this.hiddenTextarea) {\n return;\n }\n this.cursorOffsetCache = { };\n this.text = this.hiddenTextarea.value;\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n this.setCoords();\n }\n var newSelection = this.fromStringToGraphemeSelection(\n this.hiddenTextarea.selectionStart, this.hiddenTextarea.selectionEnd, this.hiddenTextarea.value);\n this.selectionEnd = this.selectionStart = newSelection.selectionEnd;\n if (!this.inCompositionMode) {\n this.selectionStart = newSelection.selectionStart;\n }\n this.updateTextareaPosition();\n },\n\n /**\n * @private\n */\n updateTextareaPosition: function() {\n if (this.selectionStart === this.selectionEnd) {\n var style = this._calcTextareaPosition();\n this.hiddenTextarea.style.left = style.left;\n this.hiddenTextarea.style.top = style.top;\n }\n },\n\n /**\n * @private\n * @return {Object} style contains style for hiddenTextarea\n */\n _calcTextareaPosition: function() {\n if (!this.canvas) {\n return { x: 1, y: 1 };\n }\n var desiredPosition = this.inCompositionMode ? this.compositionStart : this.selectionStart,\n boundaries = this._getCursorBoundaries(desiredPosition),\n cursorLocation = this.get2DCursorLocation(desiredPosition),\n lineIndex = cursorLocation.lineIndex,\n charIndex = cursorLocation.charIndex,\n charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize') * this.lineHeight,\n leftOffset = boundaries.leftOffset,\n m = this.calcTransformMatrix(),\n p = {\n x: boundaries.left + leftOffset,\n y: boundaries.top + boundaries.topOffset + charHeight\n },\n retinaScaling = this.canvas.getRetinaScaling(),\n upperCanvas = this.canvas.upperCanvasEl,\n upperCanvasWidth = upperCanvas.width / retinaScaling,\n upperCanvasHeight = upperCanvas.height / retinaScaling,\n maxWidth = upperCanvasWidth - charHeight,\n maxHeight = upperCanvasHeight - charHeight,\n scaleX = upperCanvas.clientWidth / upperCanvasWidth,\n scaleY = upperCanvas.clientHeight / upperCanvasHeight;\n\n p = fabric.util.transformPoint(p, m);\n p = fabric.util.transformPoint(p, this.canvas.viewportTransform);\n p.x *= scaleX;\n p.y *= scaleY;\n if (p.x < 0) {\n p.x = 0;\n }\n if (p.x > maxWidth) {\n p.x = maxWidth;\n }\n if (p.y < 0) {\n p.y = 0;\n }\n if (p.y > maxHeight) {\n p.y = maxHeight;\n }\n\n // add canvas offset on document\n p.x += this.canvas._offset.left;\n p.y += this.canvas._offset.top;\n\n return { left: p.x + 'px', top: p.y + 'px', fontSize: charHeight + 'px', charHeight: charHeight };\n },\n\n /**\n * @private\n */\n _saveEditingProps: function() {\n this._savedProps = {\n hasControls: this.hasControls,\n borderColor: this.borderColor,\n lockMovementX: this.lockMovementX,\n lockMovementY: this.lockMovementY,\n hoverCursor: this.hoverCursor,\n selectable: this.selectable,\n defaultCursor: this.canvas && this.canvas.defaultCursor,\n moveCursor: this.canvas && this.canvas.moveCursor\n };\n },\n\n /**\n * @private\n */\n _restoreEditingProps: function() {\n if (!this._savedProps) {\n return;\n }\n\n this.hoverCursor = this._savedProps.hoverCursor;\n this.hasControls = this._savedProps.hasControls;\n this.borderColor = this._savedProps.borderColor;\n this.selectable = this._savedProps.selectable;\n this.lockMovementX = this._savedProps.lockMovementX;\n this.lockMovementY = this._savedProps.lockMovementY;\n\n if (this.canvas) {\n this.canvas.defaultCursor = this._savedProps.defaultCursor;\n this.canvas.moveCursor = this._savedProps.moveCursor;\n }\n },\n\n /**\n * Exits from editing state\n * @return {fabric.IText} thisArg\n * @chainable\n */\n exitEditing: function() {\n var isTextChanged = (this._textBeforeEdit !== this.text);\n var hiddenTextarea = this.hiddenTextarea;\n this.selected = false;\n this.isEditing = false;\n\n this.selectionEnd = this.selectionStart;\n\n if (hiddenTextarea) {\n hiddenTextarea.blur && hiddenTextarea.blur();\n hiddenTextarea.parentNode && hiddenTextarea.parentNode.removeChild(hiddenTextarea);\n }\n this.hiddenTextarea = null;\n this.abortCursorAnimation();\n this._restoreEditingProps();\n this._currentCursorOpacity = 0;\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n this.setCoords();\n }\n this.fire('editing:exited');\n isTextChanged && this.fire('modified');\n if (this.canvas) {\n this.canvas.off('mouse:move', this.mouseMoveHandler);\n this.canvas.fire('text:editing:exited', { target: this });\n isTextChanged && this.canvas.fire('object:modified', { target: this });\n }\n return this;\n },\n\n /**\n * @private\n */\n _removeExtraneousStyles: function() {\n for (var prop in this.styles) {\n if (!this._textLines[prop]) {\n delete this.styles[prop];\n }\n }\n },\n\n /**\n * remove and reflow a style block from start to end.\n * @param {Number} start linear start position for removal (included in removal)\n * @param {Number} end linear end position for removal ( excluded from removal )\n */\n removeStyleFromTo: function(start, end) {\n var cursorStart = this.get2DCursorLocation(start, true),\n cursorEnd = this.get2DCursorLocation(end, true),\n lineStart = cursorStart.lineIndex,\n charStart = cursorStart.charIndex,\n lineEnd = cursorEnd.lineIndex,\n charEnd = cursorEnd.charIndex,\n i, styleObj;\n if (lineStart !== lineEnd) {\n // step1 remove the trailing of lineStart\n if (this.styles[lineStart]) {\n for (i = charStart; i < this._unwrappedTextLines[lineStart].length; i++) {\n delete this.styles[lineStart][i];\n }\n }\n // step2 move the trailing of lineEnd to lineStart if needed\n if (this.styles[lineEnd]) {\n for (i = charEnd; i < this._unwrappedTextLines[lineEnd].length; i++) {\n styleObj = this.styles[lineEnd][i];\n if (styleObj) {\n this.styles[lineStart] || (this.styles[lineStart] = { });\n this.styles[lineStart][charStart + i - charEnd] = styleObj;\n }\n }\n }\n // step3 detects lines will be completely removed.\n for (i = lineStart + 1; i <= lineEnd; i++) {\n delete this.styles[i];\n }\n // step4 shift remaining lines.\n this.shiftLineStyles(lineEnd, lineStart - lineEnd);\n }\n else {\n // remove and shift left on the same line\n if (this.styles[lineStart]) {\n styleObj = this.styles[lineStart];\n var diff = charEnd - charStart, numericChar, _char;\n for (i = charStart; i < charEnd; i++) {\n delete styleObj[i];\n }\n for (_char in this.styles[lineStart]) {\n numericChar = parseInt(_char, 10);\n if (numericChar >= charEnd) {\n styleObj[numericChar - diff] = styleObj[_char];\n delete styleObj[_char];\n }\n }\n }\n }\n },\n\n /**\n * Shifts line styles up or down\n * @param {Number} lineIndex Index of a line\n * @param {Number} offset Can any number?\n */\n shiftLineStyles: function(lineIndex, offset) {\n // shift all line styles by offset upward or downward\n // do not clone deep. we need new array, not new style objects\n var clonedStyles = clone(this.styles);\n for (var line in this.styles) {\n var numericLine = parseInt(line, 10);\n if (numericLine > lineIndex) {\n this.styles[numericLine + offset] = clonedStyles[numericLine];\n if (!clonedStyles[numericLine - offset]) {\n delete this.styles[numericLine];\n }\n }\n }\n },\n\n restartCursorIfNeeded: function() {\n if (!this._currentTickState || this._currentTickState.isAborted\n || !this._currentTickCompleteState || this._currentTickCompleteState.isAborted\n ) {\n this.initDelayedCursor();\n }\n },\n\n /**\n * Handle insertion of more consecutive style lines for when one or more\n * newlines gets added to the text. Since current style needs to be shifted\n * first we shift the current style of the number lines needed, then we add\n * new lines from the last to the first.\n * @param {Number} lineIndex Index of a line\n * @param {Number} charIndex Index of a char\n * @param {Number} qty number of lines to add\n * @param {Array} copiedStyle Array of objects styles\n */\n insertNewlineStyleObject: function(lineIndex, charIndex, qty, copiedStyle) {\n var currentCharStyle,\n newLineStyles = {},\n somethingAdded = false,\n isEndOfLine = this._unwrappedTextLines[lineIndex].length === charIndex;\n\n qty || (qty = 1);\n this.shiftLineStyles(lineIndex, qty);\n if (this.styles[lineIndex]) {\n currentCharStyle = this.styles[lineIndex][charIndex === 0 ? charIndex : charIndex - 1];\n }\n // we clone styles of all chars\n // after cursor onto the current line\n for (var index in this.styles[lineIndex]) {\n var numIndex = parseInt(index, 10);\n if (numIndex >= charIndex) {\n somethingAdded = true;\n newLineStyles[numIndex - charIndex] = this.styles[lineIndex][index];\n // remove lines from the previous line since they're on a new line now\n if (!(isEndOfLine && charIndex === 0)) {\n delete this.styles[lineIndex][index];\n }\n }\n }\n var styleCarriedOver = false;\n if (somethingAdded && !isEndOfLine) {\n // if is end of line, the extra style we copied\n // is probably not something we want\n this.styles[lineIndex + qty] = newLineStyles;\n styleCarriedOver = true;\n }\n if (styleCarriedOver) {\n // skip the last line of since we already prepared it.\n qty--;\n }\n // for the all the lines or all the other lines\n // we clone current char style onto the next (otherwise empty) line\n while (qty > 0) {\n if (copiedStyle && copiedStyle[qty - 1]) {\n this.styles[lineIndex + qty] = { 0: clone(copiedStyle[qty - 1]) };\n }\n else if (currentCharStyle) {\n this.styles[lineIndex + qty] = { 0: clone(currentCharStyle) };\n }\n else {\n delete this.styles[lineIndex + qty];\n }\n qty--;\n }\n this._forceClearCache = true;\n },\n\n /**\n * Inserts style object for a given line/char index\n * @param {Number} lineIndex Index of a line\n * @param {Number} charIndex Index of a char\n * @param {Number} quantity number Style object to insert, if given\n * @param {Array} copiedStyle array of style objects\n */\n insertCharStyleObject: function(lineIndex, charIndex, quantity, copiedStyle) {\n if (!this.styles) {\n this.styles = {};\n }\n var currentLineStyles = this.styles[lineIndex],\n currentLineStylesCloned = currentLineStyles ? clone(currentLineStyles) : {};\n\n quantity || (quantity = 1);\n // shift all char styles by quantity forward\n // 0,1,2,3 -> (charIndex=2) -> 0,1,3,4 -> (insert 2) -> 0,1,2,3,4\n for (var index in currentLineStylesCloned) {\n var numericIndex = parseInt(index, 10);\n if (numericIndex >= charIndex) {\n currentLineStyles[numericIndex + quantity] = currentLineStylesCloned[numericIndex];\n // only delete the style if there was nothing moved there\n if (!currentLineStylesCloned[numericIndex - quantity]) {\n delete currentLineStyles[numericIndex];\n }\n }\n }\n this._forceClearCache = true;\n if (copiedStyle) {\n while (quantity--) {\n if (!Object.keys(copiedStyle[quantity]).length) {\n continue;\n }\n if (!this.styles[lineIndex]) {\n this.styles[lineIndex] = {};\n }\n this.styles[lineIndex][charIndex + quantity] = clone(copiedStyle[quantity]);\n }\n return;\n }\n if (!currentLineStyles) {\n return;\n }\n var newStyle = currentLineStyles[charIndex ? charIndex - 1 : 1];\n while (newStyle && quantity--) {\n this.styles[lineIndex][charIndex + quantity] = clone(newStyle);\n }\n },\n\n /**\n * Inserts style object(s)\n * @param {Array} insertedText Characters at the location where style is inserted\n * @param {Number} start cursor index for inserting style\n * @param {Array} [copiedStyle] array of style objects to insert.\n */\n insertNewStyleBlock: function(insertedText, start, copiedStyle) {\n var cursorLoc = this.get2DCursorLocation(start, true),\n addedLines = [0], linesLength = 0;\n // get an array of how many char per lines are being added.\n for (var i = 0; i < insertedText.length; i++) {\n if (insertedText[i] === '\\n') {\n linesLength++;\n addedLines[linesLength] = 0;\n }\n else {\n addedLines[linesLength]++;\n }\n }\n // for the first line copy the style from the current char position.\n if (addedLines[0] > 0) {\n this.insertCharStyleObject(cursorLoc.lineIndex, cursorLoc.charIndex, addedLines[0], copiedStyle);\n copiedStyle = copiedStyle && copiedStyle.slice(addedLines[0] + 1);\n }\n linesLength && this.insertNewlineStyleObject(\n cursorLoc.lineIndex, cursorLoc.charIndex + addedLines[0], linesLength);\n for (var i = 1; i < linesLength; i++) {\n if (addedLines[i] > 0) {\n this.insertCharStyleObject(cursorLoc.lineIndex + i, 0, addedLines[i], copiedStyle);\n }\n else if (copiedStyle) {\n this.styles[cursorLoc.lineIndex + i][0] = copiedStyle[0];\n }\n copiedStyle = copiedStyle && copiedStyle.slice(addedLines[i] + 1);\n }\n // we use i outside the loop to get it like linesLength\n if (addedLines[i] > 0) {\n this.insertCharStyleObject(cursorLoc.lineIndex + i, 0, addedLines[i], copiedStyle);\n }\n },\n\n /**\n * Set the selectionStart and selectionEnd according to the new position of cursor\n * mimic the key - mouse navigation when shift is pressed.\n */\n setSelectionStartEndWithShift: function(start, end, newSelection) {\n if (newSelection <= start) {\n if (end === start) {\n this._selectionDirection = 'left';\n }\n else if (this._selectionDirection === 'right') {\n this._selectionDirection = 'left';\n this.selectionEnd = start;\n }\n this.selectionStart = newSelection;\n }\n else if (newSelection > start && newSelection < end) {\n if (this._selectionDirection === 'right') {\n this.selectionEnd = newSelection;\n }\n else {\n this.selectionStart = newSelection;\n }\n }\n else {\n // newSelection is > selection start and end\n if (end === start) {\n this._selectionDirection = 'right';\n }\n else if (this._selectionDirection === 'left') {\n this._selectionDirection = 'right';\n this.selectionStart = end;\n }\n this.selectionEnd = newSelection;\n }\n },\n\n setSelectionInBoundaries: function() {\n var length = this.text.length;\n if (this.selectionStart > length) {\n this.selectionStart = length;\n }\n else if (this.selectionStart < 0) {\n this.selectionStart = 0;\n }\n if (this.selectionEnd > length) {\n this.selectionEnd = length;\n }\n else if (this.selectionEnd < 0) {\n this.selectionEnd = 0;\n }\n }\n });\n})();\n\n\nfabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.prototype */ {\n /**\n * Initializes \"dbclick\" event handler\n */\n initDoubleClickSimulation: function() {\n\n // for double click\n this.__lastClickTime = +new Date();\n\n // for triple click\n this.__lastLastClickTime = +new Date();\n\n this.__lastPointer = { };\n\n this.on('mousedown', this.onMouseDown);\n },\n\n /**\n * Default event handler to simulate triple click\n * @private\n */\n onMouseDown: function(options) {\n if (!this.canvas) {\n return;\n }\n this.__newClickTime = +new Date();\n var newPointer = options.pointer;\n if (this.isTripleClick(newPointer)) {\n this.fire('tripleclick', options);\n this._stopEvent(options.e);\n }\n this.__lastLastClickTime = this.__lastClickTime;\n this.__lastClickTime = this.__newClickTime;\n this.__lastPointer = newPointer;\n this.__lastIsEditing = this.isEditing;\n this.__lastSelected = this.selected;\n },\n\n isTripleClick: function(newPointer) {\n return this.__newClickTime - this.__lastClickTime < 500 &&\n this.__lastClickTime - this.__lastLastClickTime < 500 &&\n this.__lastPointer.x === newPointer.x &&\n this.__lastPointer.y === newPointer.y;\n },\n\n /**\n * @private\n */\n _stopEvent: function(e) {\n e.preventDefault && e.preventDefault();\n e.stopPropagation && e.stopPropagation();\n },\n\n /**\n * Initializes event handlers related to cursor or selection\n */\n initCursorSelectionHandlers: function() {\n this.initMousedownHandler();\n this.initMouseupHandler();\n this.initClicks();\n },\n\n /**\n * Default handler for double click, select a word\n */\n doubleClickHandler: function(options) {\n if (!this.isEditing) {\n return;\n }\n this.selectWord(this.getSelectionStartFromPointer(options.e));\n },\n\n /**\n * Default handler for triple click, select a line\n */\n tripleClickHandler: function(options) {\n if (!this.isEditing) {\n return;\n }\n this.selectLine(this.getSelectionStartFromPointer(options.e));\n },\n\n /**\n * Initializes double and triple click event handlers\n */\n initClicks: function() {\n this.on('mousedblclick', this.doubleClickHandler);\n this.on('tripleclick', this.tripleClickHandler);\n },\n\n /**\n * Default event handler for the basic functionalities needed on _mouseDown\n * can be overridden to do something different.\n * Scope of this implementation is: find the click position, set selectionStart\n * find selectionEnd, initialize the drawing of either cursor or selection area\n */\n _mouseDownHandler: function(options) {\n if (!this.canvas || !this.editable || (options.e.button && options.e.button !== 1)) {\n return;\n }\n\n this.__isMousedown = true;\n\n if (this.selected) {\n this.setCursorByClick(options.e);\n }\n\n if (this.isEditing) {\n this.__selectionStartOnMouseDown = this.selectionStart;\n if (this.selectionStart === this.selectionEnd) {\n this.abortCursorAnimation();\n }\n this.renderCursorOrSelection();\n }\n },\n\n /**\n * Default event handler for the basic functionalities needed on mousedown:before\n * can be overridden to do something different.\n * Scope of this implementation is: verify the object is already selected when mousing down\n */\n _mouseDownHandlerBefore: function(options) {\n if (!this.canvas || !this.editable || (options.e.button && options.e.button !== 1)) {\n return;\n }\n // we want to avoid that an object that was selected and then becomes unselectable,\n // may trigger editing mode in some way.\n this.selected = this === this.canvas._activeObject;\n },\n\n /**\n * Initializes \"mousedown\" event handler\n */\n initMousedownHandler: function() {\n this.on('mousedown', this._mouseDownHandler);\n this.on('mousedown:before', this._mouseDownHandlerBefore);\n },\n\n /**\n * Initializes \"mouseup\" event handler\n */\n initMouseupHandler: function() {\n this.on('mouseup', this.mouseUpHandler);\n },\n\n /**\n * standard hander for mouse up, overridable\n * @private\n */\n mouseUpHandler: function(options) {\n this.__isMousedown = false;\n if (!this.editable || this.group ||\n (options.transform && options.transform.actionPerformed) ||\n (options.e.button && options.e.button !== 1)) {\n return;\n }\n\n if (this.canvas) {\n var currentActive = this.canvas._activeObject;\n if (currentActive && currentActive !== this) {\n // avoid running this logic when there is an active object\n // this because is possible with shift click and fast clicks,\n // to rapidly deselect and reselect this object and trigger an enterEdit\n return;\n }\n }\n\n if (this.__lastSelected && !this.__corner) {\n this.selected = false;\n this.__lastSelected = false;\n this.enterEditing(options.e);\n if (this.selectionStart === this.selectionEnd) {\n this.initDelayedCursor(true);\n }\n else {\n this.renderCursorOrSelection();\n }\n }\n else {\n this.selected = true;\n }\n },\n\n /**\n * Changes cursor location in a text depending on passed pointer (x/y) object\n * @param {Event} e Event object\n */\n setCursorByClick: function(e) {\n var newSelection = this.getSelectionStartFromPointer(e),\n start = this.selectionStart, end = this.selectionEnd;\n if (e.shiftKey) {\n this.setSelectionStartEndWithShift(start, end, newSelection);\n }\n else {\n this.selectionStart = newSelection;\n this.selectionEnd = newSelection;\n }\n if (this.isEditing) {\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n },\n\n /**\n * Returns index of a character corresponding to where an object was clicked\n * @param {Event} e Event object\n * @return {Number} Index of a character\n */\n getSelectionStartFromPointer: function(e) {\n var mouseOffset = this.getLocalPointer(e),\n prevWidth = 0,\n width = 0,\n height = 0,\n charIndex = 0,\n lineIndex = 0,\n lineLeftOffset,\n line;\n\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n if (height <= mouseOffset.y) {\n height += this.getHeightOfLine(i) * this.scaleY;\n lineIndex = i;\n if (i > 0) {\n charIndex += this._textLines[i - 1].length + this.missingNewlineOffset(i - 1);\n }\n }\n else {\n break;\n }\n }\n lineLeftOffset = this._getLineLeftOffset(lineIndex);\n width = lineLeftOffset * this.scaleX;\n line = this._textLines[lineIndex];\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n prevWidth = width;\n // i removed something about flipX here, check.\n width += this.__charBounds[lineIndex][j].kernedWidth * this.scaleX;\n if (width <= mouseOffset.x) {\n charIndex++;\n }\n else {\n break;\n }\n }\n return this._getNewSelectionStartFromOffset(mouseOffset, prevWidth, width, charIndex, jlen);\n },\n\n /**\n * @private\n */\n _getNewSelectionStartFromOffset: function(mouseOffset, prevWidth, width, index, jlen) {\n // we need Math.abs because when width is after the last char, the offset is given as 1, while is 0\n var distanceBtwLastCharAndCursor = mouseOffset.x - prevWidth,\n distanceBtwNextCharAndCursor = width - mouseOffset.x,\n offset = distanceBtwNextCharAndCursor > distanceBtwLastCharAndCursor ||\n distanceBtwNextCharAndCursor < 0 ? 0 : 1,\n newSelectionStart = index + offset;\n // if object is horizontally flipped, mirror cursor location from the end\n if (this.flipX) {\n newSelectionStart = jlen - newSelectionStart;\n }\n\n if (newSelectionStart > this._text.length) {\n newSelectionStart = this._text.length;\n }\n\n return newSelectionStart;\n }\n});\n\n\nfabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.prototype */ {\n\n /**\n * Initializes hidden textarea (needed to bring up keyboard in iOS)\n */\n initHiddenTextarea: function() {\n this.hiddenTextarea = fabric.document.createElement('textarea');\n this.hiddenTextarea.setAttribute('autocapitalize', 'off');\n this.hiddenTextarea.setAttribute('autocorrect', 'off');\n this.hiddenTextarea.setAttribute('autocomplete', 'off');\n this.hiddenTextarea.setAttribute('spellcheck', 'false');\n this.hiddenTextarea.setAttribute('data-fabric-hiddentextarea', '');\n this.hiddenTextarea.setAttribute('wrap', 'off');\n var style = this._calcTextareaPosition();\n // line-height: 1px; was removed from the style to fix this:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=870966\n this.hiddenTextarea.style.cssText = 'position: absolute; top: ' + style.top +\n '; left: ' + style.left + '; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px;' +\n ' paddingï½°top: ' + style.fontSize + ';';\n fabric.document.body.appendChild(this.hiddenTextarea);\n\n fabric.util.addListener(this.hiddenTextarea, 'keydown', this.onKeyDown.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'keyup', this.onKeyUp.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'input', this.onInput.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'copy', this.copy.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'cut', this.copy.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'paste', this.paste.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'compositionstart', this.onCompositionStart.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'compositionupdate', this.onCompositionUpdate.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'compositionend', this.onCompositionEnd.bind(this));\n\n if (!this._clickHandlerInitialized && this.canvas) {\n fabric.util.addListener(this.canvas.upperCanvasEl, 'click', this.onClick.bind(this));\n this._clickHandlerInitialized = true;\n }\n },\n\n /**\n * For functionalities on keyDown\n * Map a special key to a function of the instance/prototype\n * If you need different behaviour for ESC or TAB or arrows, you have to change\n * this map setting the name of a function that you build on the fabric.Itext or\n * your prototype.\n * the map change will affect all Instances unless you need for only some text Instances\n * in that case you have to clone this object and assign your Instance.\n * this.keysMap = fabric.util.object.clone(this.keysMap);\n * The function must be in fabric.Itext.prototype.myFunction And will receive event as args[0]\n */\n keysMap: {\n 9: 'exitEditing',\n 27: 'exitEditing',\n 33: 'moveCursorUp',\n 34: 'moveCursorDown',\n 35: 'moveCursorRight',\n 36: 'moveCursorLeft',\n 37: 'moveCursorLeft',\n 38: 'moveCursorUp',\n 39: 'moveCursorRight',\n 40: 'moveCursorDown',\n },\n\n /**\n * For functionalities on keyUp + ctrl || cmd\n */\n ctrlKeysMapUp: {\n 67: 'copy',\n 88: 'cut'\n },\n\n /**\n * For functionalities on keyDown + ctrl || cmd\n */\n ctrlKeysMapDown: {\n 65: 'selectAll'\n },\n\n onClick: function() {\n // No need to trigger click event here, focus is enough to have the keyboard appear on Android\n this.hiddenTextarea && this.hiddenTextarea.focus();\n },\n\n /**\n * Handles keyup event\n * @param {Event} e Event object\n */\n onKeyDown: function(e) {\n if (!this.isEditing || this.inCompositionMode) {\n return;\n }\n if (e.keyCode in this.keysMap) {\n this[this.keysMap[e.keyCode]](e);\n }\n else if ((e.keyCode in this.ctrlKeysMapDown) && (e.ctrlKey || e.metaKey)) {\n this[this.ctrlKeysMapDown[e.keyCode]](e);\n }\n else {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n if (e.keyCode >= 33 && e.keyCode <= 40) {\n // if i press an arrow key just update selection\n this.clearContextTop();\n this.renderCursorOrSelection();\n }\n else {\n this.canvas && this.canvas.requestRenderAll();\n }\n },\n\n /**\n * Handles keyup event\n * We handle KeyUp because ie11 and edge have difficulties copy/pasting\n * if a copy/cut event fired, keyup is dismissed\n * @param {Event} e Event object\n */\n onKeyUp: function(e) {\n if (!this.isEditing || this._copyDone || this.inCompositionMode) {\n this._copyDone = false;\n return;\n }\n if ((e.keyCode in this.ctrlKeysMapUp) && (e.ctrlKey || e.metaKey)) {\n this[this.ctrlKeysMapUp[e.keyCode]](e);\n }\n else {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n this.canvas && this.canvas.requestRenderAll();\n },\n\n /**\n * Handles onInput event\n * @param {Event} e Event object\n */\n onInput: function(e) {\n var fromPaste = this.fromPaste;\n this.fromPaste = false;\n e && e.stopPropagation();\n if (!this.isEditing) {\n return;\n }\n // decisions about style changes.\n var nextText = this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,\n charCount = this._text.length,\n nextCharCount = nextText.length,\n removedText, insertedText,\n charDiff = nextCharCount - charCount,\n selectionStart = this.selectionStart, selectionEnd = this.selectionEnd,\n selection = selectionStart !== selectionEnd,\n copiedStyle, removeFrom, removeTo;\n if (this.hiddenTextarea.value === '') {\n this.styles = { };\n this.updateFromTextArea();\n this.fire('changed');\n if (this.canvas) {\n this.canvas.fire('text:changed', { target: this });\n this.canvas.requestRenderAll();\n }\n return;\n }\n\n var textareaSelection = this.fromStringToGraphemeSelection(\n this.hiddenTextarea.selectionStart,\n this.hiddenTextarea.selectionEnd,\n this.hiddenTextarea.value\n );\n var backDelete = selectionStart > textareaSelection.selectionStart;\n\n if (selection) {\n removedText = this._text.slice(selectionStart, selectionEnd);\n charDiff += selectionEnd - selectionStart;\n }\n else if (nextCharCount < charCount) {\n if (backDelete) {\n removedText = this._text.slice(selectionEnd + charDiff, selectionEnd);\n }\n else {\n removedText = this._text.slice(selectionStart, selectionStart - charDiff);\n }\n }\n var copiedStyle;\n insertedText = nextText.slice(textareaSelection.selectionEnd - charDiff, textareaSelection.selectionEnd);\n if (removedText && removedText.length) {\n if (insertedText.length) {\n // let's copy some style before deleting.\n // we want to copy the style before the cursor OR the style at the cursor if selection\n // is bigger than 0.\n copiedStyle = this.getSelectionStyles(selectionStart, selectionStart + 1, true);\n // now duplicate the style one for each inserted text.\n copiedStyle = insertedText.map(function() {\n // this return an array of references, but that is fine since we are\n // copying the style later.\n return copiedStyle[0];\n });\n }\n if (selection) {\n removeFrom = selectionStart;\n removeTo = selectionEnd;\n }\n else if (backDelete) {\n // detect differencies between forwardDelete and backDelete\n removeFrom = selectionEnd - removedText.length;\n removeTo = selectionEnd;\n }\n else {\n removeFrom = selectionEnd;\n removeTo = selectionEnd + removedText.length;\n }\n this.removeStyleFromTo(removeFrom, removeTo);\n }\n if (insertedText.length) {\n if (fromPaste && insertedText.join('') === fabric.copiedText && !fabric.disableStyleCopyPaste) {\n copiedStyle = fabric.copiedTextStyle;\n }\n this.insertNewStyleBlock(insertedText, selectionStart, copiedStyle);\n }\n this.updateFromTextArea();\n this.fire('changed');\n if (this.canvas) {\n this.canvas.fire('text:changed', { target: this });\n this.canvas.requestRenderAll();\n }\n },\n /**\n * Composition start\n */\n onCompositionStart: function() {\n this.inCompositionMode = true;\n },\n\n /**\n * Composition end\n */\n onCompositionEnd: function() {\n this.inCompositionMode = false;\n },\n\n // /**\n // * Composition update\n // */\n onCompositionUpdate: function(e) {\n this.compositionStart = e.target.selectionStart;\n this.compositionEnd = e.target.selectionEnd;\n this.updateTextareaPosition();\n },\n\n /**\n * Copies selected text\n * @param {Event} e Event object\n */\n copy: function() {\n if (this.selectionStart === this.selectionEnd) {\n //do not cut-copy if no selection\n return;\n }\n\n fabric.copiedText = this.getSelectedText();\n if (!fabric.disableStyleCopyPaste) {\n fabric.copiedTextStyle = this.getSelectionStyles(this.selectionStart, this.selectionEnd, true);\n }\n else {\n fabric.copiedTextStyle = null;\n }\n this._copyDone = true;\n },\n\n /**\n * Pastes text\n * @param {Event} e Event object\n */\n paste: function() {\n this.fromPaste = true;\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @return {Object} Clipboard data object\n */\n _getClipboardData: function(e) {\n return (e && e.clipboardData) || fabric.window.clipboardData;\n },\n\n /**\n * Finds the width in pixels before the cursor on the same line\n * @private\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {Number} widthBeforeCursor width before cursor\n */\n _getWidthBeforeCursor: function(lineIndex, charIndex) {\n var widthBeforeCursor = this._getLineLeftOffset(lineIndex), bound;\n\n if (charIndex > 0) {\n bound = this.__charBounds[lineIndex][charIndex - 1];\n widthBeforeCursor += bound.left + bound.width;\n }\n return widthBeforeCursor;\n },\n\n /**\n * Gets start offset of a selection\n * @param {Event} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getDownCursorOffset: function(e, isRight) {\n var selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n // if on last line, down cursor goes to end of line\n if (lineIndex === this._textLines.length - 1 || e.metaKey || e.keyCode === 34) {\n // move to the end of a text\n return this._text.length - selectionProp;\n }\n var charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex + 1, widthBeforeCursor),\n textAfterCursor = this._textLines[lineIndex].slice(charIndex);\n return textAfterCursor.length + indexOnOtherLine + 1 + this.missingNewlineOffset(lineIndex);\n },\n\n /**\n * private\n * Helps finding if the offset should be counted from Start or End\n * @param {Event} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n _getSelectionForOffset: function(e, isRight) {\n if (e.shiftKey && this.selectionStart !== this.selectionEnd && isRight) {\n return this.selectionEnd;\n }\n else {\n return this.selectionStart;\n }\n },\n\n /**\n * @param {Event} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getUpCursorOffset: function(e, isRight) {\n var selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n if (lineIndex === 0 || e.metaKey || e.keyCode === 33) {\n // if on first line, up cursor goes to start of line\n return -selectionProp;\n }\n var charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex - 1, widthBeforeCursor),\n textBeforeCursor = this._textLines[lineIndex].slice(0, charIndex),\n missingNewlineOffset = this.missingNewlineOffset(lineIndex - 1);\n // return a negative offset\n return -this._textLines[lineIndex - 1].length\n + indexOnOtherLine - textBeforeCursor.length + (1 - missingNewlineOffset);\n },\n\n /**\n * for a given width it founds the matching character.\n * @private\n */\n _getIndexOnLine: function(lineIndex, width) {\n\n var line = this._textLines[lineIndex],\n lineLeftOffset = this._getLineLeftOffset(lineIndex),\n widthOfCharsOnLine = lineLeftOffset,\n indexOnLine = 0, charWidth, foundMatch;\n\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n charWidth = this.__charBounds[lineIndex][j].width;\n widthOfCharsOnLine += charWidth;\n if (widthOfCharsOnLine > width) {\n foundMatch = true;\n var leftEdge = widthOfCharsOnLine - charWidth,\n rightEdge = widthOfCharsOnLine,\n offsetFromLeftEdge = Math.abs(leftEdge - width),\n offsetFromRightEdge = Math.abs(rightEdge - width);\n\n indexOnLine = offsetFromRightEdge < offsetFromLeftEdge ? j : (j - 1);\n break;\n }\n }\n\n // reached end\n if (!foundMatch) {\n indexOnLine = line.length - 1;\n }\n\n return indexOnLine;\n },\n\n\n /**\n * Moves cursor down\n * @param {Event} e Event object\n */\n moveCursorDown: function(e) {\n if (this.selectionStart >= this._text.length && this.selectionEnd >= this._text.length) {\n return;\n }\n this._moveCursorUpOrDown('Down', e);\n },\n\n /**\n * Moves cursor up\n * @param {Event} e Event object\n */\n moveCursorUp: function(e) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n this._moveCursorUpOrDown('Up', e);\n },\n\n /**\n * Moves cursor up or down, fires the events\n * @param {String} direction 'Up' or 'Down'\n * @param {Event} e Event object\n */\n _moveCursorUpOrDown: function(direction, e) {\n // getUpCursorOffset\n // getDownCursorOffset\n var action = 'get' + direction + 'CursorOffset',\n offset = this[action](e, this._selectionDirection === 'right');\n if (e.shiftKey) {\n this.moveCursorWithShift(offset);\n }\n else {\n this.moveCursorWithoutShift(offset);\n }\n if (offset !== 0) {\n this.setSelectionInBoundaries();\n this.abortCursorAnimation();\n this._currentCursorOpacity = 1;\n this.initDelayedCursor();\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n },\n\n /**\n * Moves cursor with shift\n * @param {Number} offset\n */\n moveCursorWithShift: function(offset) {\n var newSelection = this._selectionDirection === 'left'\n ? this.selectionStart + offset\n : this.selectionEnd + offset;\n this.setSelectionStartEndWithShift(this.selectionStart, this.selectionEnd, newSelection);\n return offset !== 0;\n },\n\n /**\n * Moves cursor up without shift\n * @param {Number} offset\n */\n moveCursorWithoutShift: function(offset) {\n if (offset < 0) {\n this.selectionStart += offset;\n this.selectionEnd = this.selectionStart;\n }\n else {\n this.selectionEnd += offset;\n this.selectionStart = this.selectionEnd;\n }\n return offset !== 0;\n },\n\n /**\n * Moves cursor left\n * @param {Event} e Event object\n */\n moveCursorLeft: function(e) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n this._moveCursorLeftOrRight('Left', e);\n },\n\n /**\n * @private\n * @return {Boolean} true if a change happened\n */\n _move: function(e, prop, direction) {\n var newValue;\n if (e.altKey) {\n newValue = this['findWordBoundary' + direction](this[prop]);\n }\n else if (e.metaKey || e.keyCode === 35 || e.keyCode === 36 ) {\n newValue = this['findLineBoundary' + direction](this[prop]);\n }\n else {\n this[prop] += direction === 'Left' ? -1 : 1;\n return true;\n }\n if (typeof newValue !== undefined && this[prop] !== newValue) {\n this[prop] = newValue;\n return true;\n }\n },\n\n /**\n * @private\n */\n _moveLeft: function(e, prop) {\n return this._move(e, prop, 'Left');\n },\n\n /**\n * @private\n */\n _moveRight: function(e, prop) {\n return this._move(e, prop, 'Right');\n },\n\n /**\n * Moves cursor left without keeping selection\n * @param {Event} e\n */\n moveCursorLeftWithoutShift: function(e) {\n var change = true;\n this._selectionDirection = 'left';\n\n // only move cursor when there is no selection,\n // otherwise we discard it, and leave cursor on same place\n if (this.selectionEnd === this.selectionStart && this.selectionStart !== 0) {\n change = this._moveLeft(e, 'selectionStart');\n\n }\n this.selectionEnd = this.selectionStart;\n return change;\n },\n\n /**\n * Moves cursor left while keeping selection\n * @param {Event} e\n */\n moveCursorLeftWithShift: function(e) {\n if (this._selectionDirection === 'right' && this.selectionStart !== this.selectionEnd) {\n return this._moveLeft(e, 'selectionEnd');\n }\n else if (this.selectionStart !== 0){\n this._selectionDirection = 'left';\n return this._moveLeft(e, 'selectionStart');\n }\n },\n\n /**\n * Moves cursor right\n * @param {Event} e Event object\n */\n moveCursorRight: function(e) {\n if (this.selectionStart >= this._text.length && this.selectionEnd >= this._text.length) {\n return;\n }\n this._moveCursorLeftOrRight('Right', e);\n },\n\n /**\n * Moves cursor right or Left, fires event\n * @param {String} direction 'Left', 'Right'\n * @param {Event} e Event object\n */\n _moveCursorLeftOrRight: function(direction, e) {\n var actionName = 'moveCursor' + direction + 'With';\n this._currentCursorOpacity = 1;\n\n if (e.shiftKey) {\n actionName += 'Shift';\n }\n else {\n actionName += 'outShift';\n }\n if (this[actionName](e)) {\n this.abortCursorAnimation();\n this.initDelayedCursor();\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n },\n\n /**\n * Moves cursor right while keeping selection\n * @param {Event} e\n */\n moveCursorRightWithShift: function(e) {\n if (this._selectionDirection === 'left' && this.selectionStart !== this.selectionEnd) {\n return this._moveRight(e, 'selectionStart');\n }\n else if (this.selectionEnd !== this._text.length) {\n this._selectionDirection = 'right';\n return this._moveRight(e, 'selectionEnd');\n }\n },\n\n /**\n * Moves cursor right without keeping selection\n * @param {Event} e Event object\n */\n moveCursorRightWithoutShift: function(e) {\n var changed = true;\n this._selectionDirection = 'right';\n\n if (this.selectionStart === this.selectionEnd) {\n changed = this._moveRight(e, 'selectionStart');\n this.selectionEnd = this.selectionStart;\n }\n else {\n this.selectionStart = this.selectionEnd;\n }\n return changed;\n },\n\n /**\n * Removes characters from start/end\n * start/end ar per grapheme position in _text array.\n *\n * @param {Number} start\n * @param {Number} end default to start + 1\n */\n removeChars: function(start, end) {\n if (typeof end === 'undefined') {\n end = start + 1;\n }\n this.removeStyleFromTo(start, end);\n this._text.splice(start, end - start);\n this.text = this._text.join('');\n this.set('dirty', true);\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n this.setCoords();\n }\n this._removeExtraneousStyles();\n },\n\n /**\n * insert characters at start position, before start position.\n * start equal 1 it means the text get inserted between actual grapheme 0 and 1\n * if style array is provided, it must be as the same length of text in graphemes\n * if end is provided and is bigger than start, old text is replaced.\n * start/end ar per grapheme position in _text array.\n *\n * @param {String} text text to insert\n * @param {Array} style array of style objects\n * @param {Number} start\n * @param {Number} end default to start + 1\n */\n insertChars: function(text, style, start, end) {\n if (typeof end === 'undefined') {\n end = start;\n }\n if (end > start) {\n this.removeStyleFromTo(start, end);\n }\n var graphemes = fabric.util.string.graphemeSplit(text);\n this.insertNewStyleBlock(graphemes, start, style);\n this._text = [].concat(this._text.slice(0, start), graphemes, this._text.slice(end));\n this.text = this._text.join('');\n this.set('dirty', true);\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n this.setCoords();\n }\n this._removeExtraneousStyles();\n },\n\n});\n\n\n/* _TO_SVG_START_ */\n(function() {\n var toFixed = fabric.util.toFixed,\n multipleSpacesRegex = / +/g;\n\n fabric.util.object.extend(fabric.Text.prototype, /** @lends fabric.Text.prototype */ {\n\n /**\n * Returns SVG representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n _toSVG: function() {\n var offsets = this._getSVGLeftTopOffsets(),\n textAndBg = this._getSVGTextAndBg(offsets.textTop, offsets.textLeft);\n return this._wrapSVGTextAndBg(textAndBg);\n },\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toSVG: function(reviver) {\n return this._createBaseSVGMarkup(\n this._toSVG(),\n { reviver: reviver, noStyle: true, withShadow: true }\n );\n },\n\n /**\n * @private\n */\n _getSVGLeftTopOffsets: function() {\n return {\n textLeft: -this.width / 2,\n textTop: -this.height / 2,\n lineTop: this.getHeightOfLine(0)\n };\n },\n\n /**\n * @private\n */\n _wrapSVGTextAndBg: function(textAndBg) {\n var noShadow = true,\n textDecoration = this.getSvgTextDecoration(this);\n return [\n textAndBg.textBgRects.join(''),\n '\\t\\t',\n textAndBg.textSpans.join(''),\n '\\n'\n ];\n },\n\n /**\n * @private\n * @param {Number} textTopOffset Text top offset\n * @param {Number} textLeftOffset Text left offset\n * @return {Object}\n */\n _getSVGTextAndBg: function(textTopOffset, textLeftOffset) {\n var textSpans = [],\n textBgRects = [],\n height = textTopOffset, lineOffset;\n // bounding-box background\n this._setSVGBg(textBgRects);\n\n // text and text-background\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n lineOffset = this._getLineLeftOffset(i);\n if (this.textBackgroundColor || this.styleHas('textBackgroundColor', i)) {\n this._setSVGTextLineBg(textBgRects, i, textLeftOffset + lineOffset, height);\n }\n this._setSVGTextLineText(textSpans, i, textLeftOffset + lineOffset, height);\n height += this.getHeightOfLine(i);\n }\n\n return {\n textSpans: textSpans,\n textBgRects: textBgRects\n };\n },\n\n /**\n * @private\n */\n _createTextCharSpan: function(_char, styleDecl, left, top) {\n var shouldUseWhitespace = _char !== _char.trim() || _char.match(multipleSpacesRegex),\n styleProps = this.getSvgSpanStyles(styleDecl, shouldUseWhitespace),\n fillStyles = styleProps ? 'style=\"' + styleProps + '\"' : '',\n dy = styleDecl.deltaY, dySpan = '',\n NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n if (dy) {\n dySpan = ' dy=\"' + toFixed(dy, NUM_FRACTION_DIGITS) + '\" ';\n }\n return [\n '',\n fabric.util.string.escapeXml(_char),\n ''\n ].join('');\n },\n\n _setSVGTextLineText: function(textSpans, lineIndex, textLeftOffset, textTopOffset) {\n // set proper line offset\n var lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.indexOf('justify') !== -1,\n actualStyle,\n nextStyle,\n charsToRender = '',\n charBox, style,\n boxWidth = 0,\n line = this._textLines[lineIndex],\n timeToRender;\n\n textTopOffset += lineHeight * (1 - this._fontSizeFraction) / this.lineHeight;\n for (var i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i];\n if (boxWidth === 0) {\n textLeftOffset += charBox.kernedWidth - charBox.width;\n boxWidth += charBox.width;\n }\n else {\n boxWidth += charBox.kernedWidth;\n }\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle = actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = this._hasStyleChangedForSvg(actualStyle, nextStyle);\n }\n if (timeToRender) {\n style = this._getStyleDeclaration(lineIndex, i) || { };\n textSpans.push(this._createTextCharSpan(charsToRender, style, textLeftOffset, textTopOffset));\n charsToRender = '';\n actualStyle = nextStyle;\n textLeftOffset += boxWidth;\n boxWidth = 0;\n }\n }\n },\n\n _pushTextBgRect: function(textBgRects, color, left, top, width, height) {\n var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n textBgRects.push(\n '\\t\\t\\n');\n },\n\n _setSVGTextLineBg: function(textBgRects, i, leftOffset, textTopOffset) {\n var line = this._textLines[i],\n heightOfLine = this.getHeightOfLine(i) / this.lineHeight,\n boxWidth = 0,\n boxStart = 0,\n charBox, currentColor,\n lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n charBox = this.__charBounds[i][j];\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n if (currentColor !== lastColor) {\n lastColor && this._pushTextBgRect(textBgRects, lastColor, leftOffset + boxStart,\n textTopOffset, boxWidth, heightOfLine);\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastColor = currentColor;\n }\n else {\n boxWidth += charBox.kernedWidth;\n }\n }\n currentColor && this._pushTextBgRect(textBgRects, currentColor, leftOffset + boxStart,\n textTopOffset, boxWidth, heightOfLine);\n },\n\n /**\n * Adobe Illustrator (at least CS5) is unable to render rgba()-based fill values\n * we work around it by \"moving\" alpha channel into opacity attribute and setting fill's alpha to 1\n *\n * @private\n * @param {*} value\n * @return {String}\n */\n _getFillAttributes: function(value) {\n var fillColor = (value && typeof value === 'string') ? new fabric.Color(value) : '';\n if (!fillColor || !fillColor.getSource() || fillColor.getAlpha() === 1) {\n return 'fill=\"' + value + '\"';\n }\n return 'opacity=\"' + fillColor.getAlpha() + '\" fill=\"' + fillColor.setAlpha(1).toRgb() + '\"';\n },\n\n /**\n * @private\n */\n _getSVGLineTopOffset: function(lineIndex) {\n var lineTopOffset = 0, lastHeight = 0;\n for (var j = 0; j < lineIndex; j++) {\n lineTopOffset += this.getHeightOfLine(j);\n }\n lastHeight = this.getHeightOfLine(j);\n return {\n lineTop: lineTopOffset,\n offset: (this._fontSizeMult - this._fontSizeFraction) * lastHeight / (this.lineHeight * this._fontSizeMult)\n };\n },\n\n /**\n * Returns styles-string for svg-export\n * @param {Boolean} skipShadow a boolean to skip shadow filter output\n * @return {String}\n */\n getSvgStyles: function(skipShadow) {\n var svgStyle = fabric.Object.prototype.getSvgStyles.call(this, skipShadow);\n return svgStyle + ' white-space: pre;';\n },\n });\n})();\n/* _TO_SVG_END_ */\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {});\n\n /**\n * Textbox class, based on IText, allows the user to resize the text rectangle\n * and wraps lines automatically. Textboxes have their Y scaling locked, the\n * user can only change width. Height is adjusted automatically based on the\n * wrapping of lines.\n * @class fabric.Textbox\n * @extends fabric.IText\n * @mixes fabric.Observable\n * @return {fabric.Textbox} thisArg\n * @see {@link fabric.Textbox#initialize} for constructor definition\n */\n fabric.Textbox = fabric.util.createClass(fabric.IText, fabric.Observable, {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'textbox',\n\n /**\n * Minimum width of textbox, in pixels.\n * @type Number\n * @default\n */\n minWidth: 20,\n\n /**\n * Minimum calculated width of a textbox, in pixels.\n * fixed to 2 so that an empty textbox cannot go to 0\n * and is still selectable without text.\n * @type Number\n * @default\n */\n dynamicMinWidth: 2,\n\n /**\n * Cached array of text wrapping.\n * @type Array\n */\n __cachedLines: null,\n\n /**\n * Override standard Object class values\n */\n lockScalingFlip: true,\n\n /**\n * Override standard Object class values\n * Textbox needs this on false\n */\n noScaleCache: false,\n\n /**\n * Properties which when set cause object to change dimensions\n * @type Object\n * @private\n */\n _dimensionAffectingProps: fabric.Text.prototype._dimensionAffectingProps.concat('width'),\n\n /**\n * Use this regular expression to split strings in breakable lines\n * @private\n */\n _wordJoiners: /[ \\t\\r]/,\n\n /**\n * Use this boolean property in order to split strings that have no white space concept.\n * this is a cheap way to help with chinese/japaense\n * @type Boolean\n * @since 2.6.0\n */\n splitByGrapheme: false,\n\n /**\n * Unlike superclass's version of this function, Textbox does not update\n * its width.\n * @private\n * @override\n */\n initDimensions: function() {\n if (this.__skipDimension) {\n return;\n }\n this.isEditing && this.initDelayedCursor();\n this.clearContextTop();\n this._clearCache();\n // clear dynamicMinWidth as it will be different after we re-wrap line\n this.dynamicMinWidth = 0;\n // wrap lines\n this._styleMap = this._generateStyleMap(this._splitText());\n // if after wrapping, the width is smaller than dynamicMinWidth, change the width and re-wrap\n if (this.dynamicMinWidth > this.width) {\n this._set('width', this.dynamicMinWidth);\n }\n if (this.textAlign.indexOf('justify') !== -1) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n // clear cache and re-calculate height\n this.height = this.calcTextHeight();\n this.saveState({ propertySet: '_dimensionAffectingProps' });\n },\n\n /**\n * Generate an object that translates the style object so that it is\n * broken up by visual lines (new lines and automatic wrapping).\n * The original text styles object is broken up by actual lines (new lines only),\n * which is only sufficient for Text / IText\n * @private\n */\n _generateStyleMap: function(textInfo) {\n var realLineCount = 0,\n realLineCharCount = 0,\n charCount = 0,\n map = {};\n\n for (var i = 0; i < textInfo.graphemeLines.length; i++) {\n if (textInfo.graphemeText[charCount] === '\\n' && i > 0) {\n realLineCharCount = 0;\n charCount++;\n realLineCount++;\n }\n else if (!this.splitByGrapheme && this._reSpaceAndTab.test(textInfo.graphemeText[charCount]) && i > 0) {\n // this case deals with space's that are removed from end of lines when wrapping\n realLineCharCount++;\n charCount++;\n }\n\n map[i] = { line: realLineCount, offset: realLineCharCount };\n\n charCount += textInfo.graphemeLines[i].length;\n realLineCharCount += textInfo.graphemeLines[i].length;\n }\n\n return map;\n },\n\n /**\n * Returns true if object has a style property or has it on a specified line\n * @param {Number} lineIndex\n * @return {Boolean}\n */\n styleHas: function(property, lineIndex) {\n if (this._styleMap && !this.isWrapping) {\n var map = this._styleMap[lineIndex];\n if (map) {\n lineIndex = map.line;\n }\n }\n return fabric.Text.prototype.styleHas.call(this, property, lineIndex);\n },\n\n /**\n * Returns true if object has no styling or no styling in a line\n * @param {Number} lineIndex , lineIndex is on wrapped lines.\n * @return {Boolean}\n */\n isEmptyStyles: function(lineIndex) {\n if (!this.styles) {\n return true;\n }\n var offset = 0, nextLineIndex = lineIndex + 1, nextOffset, obj, shouldLimit = false,\n map = this._styleMap[lineIndex], mapNextLine = this._styleMap[lineIndex + 1];\n if (map) {\n lineIndex = map.line;\n offset = map.offset;\n }\n if (mapNextLine) {\n nextLineIndex = mapNextLine.line;\n shouldLimit = nextLineIndex === lineIndex;\n nextOffset = mapNextLine.offset;\n }\n obj = typeof lineIndex === 'undefined' ? this.styles : { line: this.styles[lineIndex] };\n for (var p1 in obj) {\n for (var p2 in obj[p1]) {\n if (p2 >= offset && (!shouldLimit || p2 < nextOffset)) {\n // eslint-disable-next-line no-unused-vars\n for (var p3 in obj[p1][p2]) {\n return false;\n }\n }\n }\n }\n return true;\n },\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n _getStyleDeclaration: function(lineIndex, charIndex) {\n if (this._styleMap && !this.isWrapping) {\n var map = this._styleMap[lineIndex];\n if (!map) {\n return null;\n }\n lineIndex = map.line;\n charIndex = map.offset + charIndex;\n }\n return this.callSuper('_getStyleDeclaration', lineIndex, charIndex);\n },\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} style\n * @private\n */\n _setStyleDeclaration: function(lineIndex, charIndex, style) {\n var map = this._styleMap[lineIndex];\n lineIndex = map.line;\n charIndex = map.offset + charIndex;\n\n this.styles[lineIndex][charIndex] = style;\n },\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n _deleteStyleDeclaration: function(lineIndex, charIndex) {\n var map = this._styleMap[lineIndex];\n lineIndex = map.line;\n charIndex = map.offset + charIndex;\n delete this.styles[lineIndex][charIndex];\n },\n\n /**\n * probably broken need a fix\n * Returns the real style line that correspond to the wrapped lineIndex line\n * Used just to verify if the line does exist or not.\n * @param {Number} lineIndex\n * @returns {Boolean} if the line exists or not\n * @private\n */\n _getLineStyle: function(lineIndex) {\n var map = this._styleMap[lineIndex];\n return !!this.styles[map.line];\n },\n\n /**\n * Set the line style to an empty object so that is initialized\n * @param {Number} lineIndex\n * @param {Object} style\n * @private\n */\n _setLineStyle: function(lineIndex) {\n var map = this._styleMap[lineIndex];\n this.styles[map.line] = {};\n },\n\n /**\n * Wraps text using the 'width' property of Textbox. First this function\n * splits text on newlines, so we preserve newlines entered by the user.\n * Then it wraps each line using the width of the Textbox by calling\n * _wrapLine().\n * @param {Array} lines The string array of text that is split into lines\n * @param {Number} desiredWidth width you want to wrap to\n * @returns {Array} Array of lines\n */\n _wrapText: function(lines, desiredWidth) {\n var wrapped = [], i;\n this.isWrapping = true;\n for (i = 0; i < lines.length; i++) {\n wrapped = wrapped.concat(this._wrapLine(lines[i], i, desiredWidth));\n }\n this.isWrapping = false;\n return wrapped;\n },\n\n /**\n * Helper function to measure a string of text, given its lineIndex and charIndex offset\n * it gets called when charBounds are not available yet.\n * @param {CanvasRenderingContext2D} ctx\n * @param {String} text\n * @param {number} lineIndex\n * @param {number} charOffset\n * @returns {number}\n * @private\n */\n _measureWord: function(word, lineIndex, charOffset) {\n var width = 0, prevGrapheme, skipLeft = true;\n charOffset = charOffset || 0;\n for (var i = 0, len = word.length; i < len; i++) {\n var box = this._getGraphemeBox(word[i], lineIndex, i + charOffset, prevGrapheme, skipLeft);\n width += box.kernedWidth;\n prevGrapheme = word[i];\n }\n return width;\n },\n\n /**\n * Wraps a line of text using the width of the Textbox and a context.\n * @param {Array} line The grapheme array that represent the line\n * @param {Number} lineIndex\n * @param {Number} desiredWidth width you want to wrap the line to\n * @param {Number} reservedSpace space to remove from wrapping for custom functionalities\n * @returns {Array} Array of line(s) into which the given text is wrapped\n * to.\n */\n _wrapLine: function(_line, lineIndex, desiredWidth, reservedSpace) {\n var lineWidth = 0,\n splitByGrapheme = this.splitByGrapheme,\n graphemeLines = [],\n line = [],\n // spaces in different languges?\n words = splitByGrapheme ? fabric.util.string.graphemeSplit(_line) : _line.split(this._wordJoiners),\n word = '',\n offset = 0,\n infix = splitByGrapheme ? '' : ' ',\n wordWidth = 0,\n infixWidth = 0,\n largestWordWidth = 0,\n lineJustStarted = true,\n additionalSpace = splitByGrapheme ? 0 : this._getWidthOfCharSpacing(),\n reservedSpace = reservedSpace || 0;\n // fix a difference between split and graphemeSplit\n if (words.length === 0) {\n words.push([]);\n }\n desiredWidth -= reservedSpace;\n for (var i = 0; i < words.length; i++) {\n // if using splitByGrapheme words are already in graphemes.\n word = splitByGrapheme ? words[i] : fabric.util.string.graphemeSplit(words[i]);\n wordWidth = this._measureWord(word, lineIndex, offset);\n offset += word.length;\n\n lineWidth += infixWidth + wordWidth - additionalSpace;\n\n if (lineWidth >= desiredWidth && !lineJustStarted) {\n graphemeLines.push(line);\n line = [];\n lineWidth = wordWidth;\n lineJustStarted = true;\n }\n else {\n lineWidth += additionalSpace;\n }\n\n if (!lineJustStarted && !splitByGrapheme) {\n line.push(infix);\n }\n line = line.concat(word);\n\n infixWidth = this._measureWord([infix], lineIndex, offset);\n offset++;\n lineJustStarted = false;\n // keep track of largest word\n if (wordWidth > largestWordWidth) {\n largestWordWidth = wordWidth;\n }\n }\n\n i && graphemeLines.push(line);\n\n if (largestWordWidth + reservedSpace > this.dynamicMinWidth) {\n this.dynamicMinWidth = largestWordWidth - additionalSpace + reservedSpace;\n }\n\n return graphemeLines;\n },\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @param {Number} lineIndex text to split\n * @return {Boolean}\n */\n isEndOfWrapping: function(lineIndex) {\n if (!this._styleMap[lineIndex + 1]) {\n // is last line, return true;\n return true;\n }\n if (this._styleMap[lineIndex + 1].line !== this._styleMap[lineIndex].line) {\n // this is last line before a line break, return true;\n return true;\n }\n return false;\n },\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * @return Number\n */\n missingNewlineOffset: function(lineIndex) {\n if (this.splitByGrapheme) {\n return this.isEndOfWrapping(lineIndex) ? 1 : 0;\n }\n return 1;\n },\n\n /**\n * Gets lines of text to render in the Textbox. This function calculates\n * text wrapping on the fly every time it is called.\n * @param {String} text text to split\n * @returns {Array} Array of lines in the Textbox.\n * @override\n */\n _splitTextIntoLines: function(text) {\n var newText = fabric.Text.prototype._splitTextIntoLines.call(this, text),\n graphemeLines = this._wrapText(newText.lines, this.width),\n lines = new Array(graphemeLines.length);\n for (var i = 0; i < graphemeLines.length; i++) {\n lines[i] = graphemeLines[i].join('');\n }\n newText.lines = lines;\n newText.graphemeLines = graphemeLines;\n return newText;\n },\n\n getMinWidth: function() {\n return Math.max(this.minWidth, this.dynamicMinWidth);\n },\n\n _removeExtraneousStyles: function() {\n var linesToKeep = {};\n for (var prop in this._styleMap) {\n if (this._textLines[prop]) {\n linesToKeep[this._styleMap[prop].line] = 1;\n }\n }\n for (var prop in this.styles) {\n if (!linesToKeep[prop]) {\n delete this.styles[prop];\n }\n }\n },\n\n /**\n * Returns object representation of an instance\n * @method toObject\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return this.callSuper('toObject', ['minWidth', 'splitByGrapheme'].concat(propertiesToInclude));\n }\n });\n\n /**\n * Returns fabric.Textbox instance from an object representation\n * @static\n * @memberOf fabric.Textbox\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Textbox instance is created\n */\n fabric.Textbox.fromObject = function(object, callback) {\n return fabric.Object._fromObject('Textbox', object, callback, 'text');\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n","import {initProdTileCarousel} from './productTileCarousel';\nimport {forceLockScroll, forceUnlockScroll, preventDefault, genericAjaxCall} from '../util/common';\nexport {initProductTile, initSlotCarousel, closeAllQuickAdd};\n\n// SELECTOR ELEMENT CLASS USED LIST\nconst PREVENT_DEFAULT = '.js-prevent-link';\nconst PRODUCT_GRID_PLP = '.js-plp-productGrid';\nconst PRODUCT_TILE = '.js-prodTile';\nconst QUICKADD_BUTTON = '.js-prodTile-quickAdd-button';\nconst QUICKADD_CLOSE = '.js-prodTile-quickAdd-modal-closeQuickAdd';\nconst QUICKADD_MODAL = '.js-prodTile-quickAdd-modal';\nconst QUICKADD_MODAL_OVERFLOW = '.js-prodTile-quickAdd-modal-overflow';\nconst QUICKADD_MODAL_SLIDER = '.js-quickAdd-modal-container';\nconst QUICKADD_PROCEEDBUTTON = '.js-prodTile-quickAdd-modal-confirmButton';\nconst QUICKADD_SIZEBUTTON = '.js-prodTile-quickAdd-modal-sizes-button';\nconst QUICKADD_SIZEBUTTON_SELECTED = '.js-prodTile-quickAdd-modal-size_selected';\nconst QUICKADD_SIZESELECTED_LABEL = '.js-prodTile-quickAdd-modal-sizeSelected';\n\nlet isOpened = false;\n\n// LIST OF STYLE CLASS USED\nconst STYLE_QUICKADD_SIZEBUTTON_SELECTED =\n 'cc-prodTile-quickAdd-modal-sizes-button_selected js-prodTile-quickAdd-modal-size_selected';\nconst QUICKADD_MODAL_OPEN = 'js-prodTile-quickAdd-modal_open';\n\nfunction initProductTile() {\n if ($('.page').data('action') === 'Search-Show') {\n initOnlyPLP();\n } else {\n initProdTileCarousel();\n $(QUICKADD_BUTTON).off('click').on('click', openQuickAdd);\n $(PRODUCT_TILE).off('click').on('click', PREVENT_DEFAULT, preventDefault);\n }\n\n if ($('.js-suggestedProducts-container').length) {\n initSlotCarousel('.js-suggestedProducts-container');\n }\n\n if ($('.js-completeLook').length) {\n initSlotCarousel('.js-completeLook');\n }\n\n if ($('.js-completePromo').length) {\n initSlotCarousel('.js-completePromo');\n }\n\n $(window).on('resize', onResizeFunction);\n}\n\nfunction initSlotCarousel(containerClassName) {\n $(containerClassName)\n .off('click')\n .on('click', QUICKADD_BUTTON, openQuickAdd)\n .on('click', PREVENT_DEFAULT, preventDefault);\n\n if ($('.js-site-search').hasClass('cc-site-search_open') && !Foundation.MediaQuery.atLeast('large')) {\n $('.js-prodTile-quickAdd-modal').addClass('js-quickAdd-modal-container');\n }\n}\n\nfunction initOnlyPLP() {\n if ($(PRODUCT_GRID_PLP).length > 0) {\n initProdTileCarousel(PRODUCT_GRID_PLP);\n initSlotCarousel(PRODUCT_GRID_PLP);\n removeGridFullBanner();\n }\n}\n\nfunction removeGridFullBanner () {\n $('.cc-gridFullBanner-wrp').each(function (i, element) {\n if ($(element).children().length <= 0) {\n $(element).remove();\n }\n });\n}\n\nfunction openQuickAdd(e) {\n if (e.currentTarget.classList.contains('analytics-sizeBox') &&\n e.currentTarget.classList.contains('js-prodTile-quickAdd-button')) {\n $('body').trigger('product:selectSize', e.currentTarget);\n }\n e.preventDefault();\n e.stopPropagation();\n\n let $this = $(this);\n let url = $(this).data('url');\n let $modal = $(this).siblings(QUICKADD_MODAL);\n let $modalForSlider = $(QUICKADD_MODAL_SLIDER);\n let isCompletePromo = false;\n\n // Needed because we have two modals in position fixed one inside the other\n if ($('.js-site-search').hasClass('cc-site-search_open') && !Foundation.MediaQuery.atLeast('large')) {\n $('.js-site-search').after($modalForSlider);\n }\n\n if ($(this).closest('.js-hpShoppable').length > 0) {\n if (Foundation.MediaQuery.atLeast('large')) {\n openQuickAddShoppable($this, url, $modal);\n return;\n } else {\n $modal = $modalForSlider.first();\n }\n } else if (\n $(this).closest('.cc-emCarouselEditProd').length > 0 &&\n !Foundation.MediaQuery.atLeast('large')\n ) {\n $modal = $modalForSlider.first();\n } else {\n if (\n $(this).closest('.slick-track').length &&\n $modalForSlider.length &&\n !Foundation.MediaQuery.atLeast('large')\n ) {\n $modal = $modalForSlider.first();\n } else if (\n $(this).closest('.cc-completeYourPromo-productCards, .cc-productCarousel-coreMedia').length > 0 &&\n !Foundation.MediaQuery.atLeast('large')\n ) {\n let $quickAddOutsideModal = $('.js-quickAdd-modal-container').eq(0).clone();\n if ($('body > .js-quickAdd-modal-container').length === 0) {\n $('body').prepend($quickAddOutsideModal);\n }\n\n if ($(this).closest('.cc-completeYourPromo-productCards').length > 0) {\n isCompletePromo = true;\n }\n\n $modal = $('body > .js-quickAdd-modal-container');\n }\n }\n\n const analytics = $this.closest('.js-prodTile').find('.analytics.productListingItem').data();\n $modal.data('item_list_id', analytics.item_list_id);\n $modal.data('item_list_name', analytics.item_list_name);\n $modal.data('index', analytics.index);\n\n genericAjaxCall(url, null, null, false).then(function (data) {\n var newDOMModal = $(data).clone();\n $modal.empty().html(newDOMModal);\n\n $modal.slideDown({\n start: function () {\n $modal.css({display: 'flex'}).addClass(QUICKADD_MODAL_OPEN);\n $('body').addClass('veiled-for-small-only');\n if (isCompletePromo) {\n $('body').addClass('veiled-for-small-only_higher');\n }\n },\n complete: function () {\n $modal.on('click', QUICKADD_CLOSE, {modal: $modal}, closeQuickAdd);\n $modal.on('click', QUICKADD_SIZEBUTTON, {modal: $modal}, prepareAddToCart);\n searchSelectedSize($modal);\n if (!Foundation.MediaQuery.atLeast('large')) {\n forceLockScroll();\n // closeDrawerWithGesture($modal); comment for the moment\n }\n },\n });\n });\n}\n\nfunction openQuickAddShoppable($this, url, $modal) {\n if (!isOpened || !$modal.hasClass('quickAdd-opened')) {\n isOpened = true;\n // Handle the button rotation when opens in shoppable image banner\n $this.addClass('cm-rotateQuickAddButton');\n genericAjaxCall(url, null, null, true).then(function (data) {\n var newDOMModal = $(data).clone();\n $modal.empty().html(newDOMModal);\n $modal\n .closest('.cc-emShoppable__productCard')\n .addClass('cc-emShoppable__productCard--opened quickAdd-opened');\n $modal.addClass('cc-customModalOpened');\n $('.cc-emShoppableVideo__productCard:not(.cc-active)').removeClass('cc-emShoppable__productCard--opened quickAdd-opened');\n $('.cc-emShoppableVideo__productCard:not(.cc-active)').find('.js-prodTile-quickAdd-modal').removeClass('cc-customModalOpened');\n $this.on('click', {modal: $modal}, closeQuickAddShoppable);\n $modal.on('click', QUICKADD_SIZEBUTTON, {modal: $modal}, prepareAddToCart);\n searchSelectedSize($modal);\n });\n }\n}\n\nfunction closeQuickAdd(e, $modal) {\n try {\n e.preventDefault();\n } catch (exc) {}\n\n if (!Foundation.MediaQuery.atLeast('large')) {\n forceUnlockScroll();\n }\n\n var modal = $modal ? $modal : e.data.modal;\n\n modal.slideUp({\n complete: function () {\n modal.removeClass(QUICKADD_MODAL_OPEN);\n $('body').removeClass('veiled-for-small-only veiled-for-small-only_higher');\n },\n });\n modal.off('click', QUICKADD_CLOSE).off('click', QUICKADD_SIZEBUTTON);\n modal.find(QUICKADD_PROCEEDBUTTON).off('click');\n}\n\nfunction closeQuickAddShoppable(e) {\n try {\n e.preventDefault();\n e.stopPropagation();\n } catch (exc) {}\n\n let $modal = e.data.modal;\n isOpened = false;\n // Handle the button rotation when closes in shoppable image banner\n const closeQuickButton = $(e.currentTarget);\n if (closeQuickButton.hasClass('cm-rotateQuickAddButton')) {\n closeQuickButton.removeClass('cm-rotateQuickAddButton');\n }\n\n $modal\n .closest('.cc-emShoppable__productCard')\n .removeClass('cc-emShoppable__productCard--opened quickAdd-opened');\n $modal.removeClass('cc-customModalOpened');\n $(QUICKADD_BUTTON).off('click');\n $modal.off('click', QUICKADD_CLOSE).off('click', QUICKADD_SIZEBUTTON);\n $modal.find(QUICKADD_PROCEEDBUTTON).off('click');\n}\n\nfunction closeDrawerWithGesture(modal) {\n var modalContainer = modal;\n\n const scrollElement = modalContainer.find(QUICKADD_MODAL_OVERFLOW)[0];\n\n var hammertime = new Hammer(modalContainer[0]);\n hammertime.get('swipe').set({direction: Hammer.DIRECTION_VERTICAL});\n hammertime.get('pan').set({direction: Hammer.DIRECTION_VERTICAL});\n\n const isScrollable = scrollElement.scrollHeight > scrollElement.clientHeight;\n\n var startY,\n scrollTop = 0;\n\n if (isScrollable) {\n let actionStart = false;\n hammertime.on('panstart', function (e) {\n actionStart = true;\n startY = e.deltaY - scrollElement.offsetTop;\n scrollTop = scrollElement.scrollTop;\n });\n hammertime.on('panend', function (e) {\n actionStart = false;\n });\n hammertime.on('panmove', function (e) {\n if (!actionStart) {\n return;\n }\n const y = e.deltaY - scrollElement.offsetTop;\n const scroll = y - startY;\n scrollElement.scrollTop = scrollTop - scroll;\n });\n }\n\n hammertime.on('swipedown', function (e) {\n if (isScrollable && (scrollElement.scrollTop !== 0 || scrollTop > 30)) {\n return;\n }\n\n closeQuickAdd(e, modal);\n hammertime.off('swipedown panmove panend panstart').destroy();\n });\n}\n\n/**\n * function for close all the quickadd open with screen device is in large breakpoint\n */\nfunction closeAllQuickAdd() {\n let allQAopen = $('.' + QUICKADD_MODAL_OPEN);\n if (allQAopen.length > 0) {\n allQAopen.each(function () {\n closeQuickAdd(null, $(this));\n });\n }\n}\n\nfunction searchSelectedSize($modal) {\n var selectSize = $modal.find(QUICKADD_SIZEBUTTON_SELECTED);\n if (selectSize.length) {\n $modal.find(QUICKADD_SIZESELECTED_LABEL).empty().html(selectSize.data('name'));\n }\n}\n\nfunction prepareAddToCart(e) {\n var sizeButton = $(this);\n if (sizeButton.hasClass('notifyMe')) {\n return;\n }\n e.data.modal.find(QUICKADD_SIZEBUTTON).removeClass(STYLE_QUICKADD_SIZEBUTTON_SELECTED);\n sizeButton.addClass(STYLE_QUICKADD_SIZEBUTTON_SELECTED);\n\n const prepareData = {\n form: {\n pid: sizeButton.data('pid'),\n quantity: 1,\n GTMItemListName: e.data.modal.data('item_list_name'),\n GTMItemListId: e.data.modal.data('item_list_id'),\n GTMIndex: e.data.modal.data('index')\n },\n addToCartUrl: sizeButton.data('url'),\n modal: e.data.modal,\n $productContainer: sizeButton.closest('.js-prodTile')\n };\n\n searchSelectedSize(e.data.modal);\n\n if (Foundation.MediaQuery.atLeast('large')) {\n // desktop version\n makeAddToCart({data: prepareData});\n } else {\n // mobile version\n e.data.modal\n .find(QUICKADD_PROCEEDBUTTON)\n .attr('disabled', false)\n .on('click', prepareData, makeAddToCart);\n }\n}\n\nfunction makeAddToCart(e) {\n let $modal = e.data.modal;\n var dataValue = e.data;\n genericAjaxCall(dataValue.addToCartUrl, 'POST', dataValue.form).then(function (data) {\n if (data.error === false) {\n $('body').trigger('product:didChangeSizeQuickAddToCart', {\n ...data,\n form: dataValue.form,\n $productContainer: dataValue.$productContainer\n });\n\n $('body').trigger('product:afterAddToCart', {\n ...data,\n form: dataValue.form,\n $productContainer: dataValue.$productContainer,\n });\n handlePostCartAdd(data);\n\n if ($modal.closest('.js-hpShoppable').length > 0) {\n if (Foundation.MediaQuery.atLeast('large')) {\n closeQuickAddShoppable(e);\n return;\n }\n }\n\n closeAllQuickAdd();\n }\n });\n}\n\nfunction handlePostCartAdd(response) {\n $('body').trigger('count:update', response);\n // show add to cart toast\n if (response.error) {\n return;\n }\n if ($('.add-to-cart-messages').length === 0) {\n $('body').append('
');\n }\n if ($('.page[data-action=\"Cart-Show\"]').length > 0) {\n if (history.scrollRestoration) {\n history.scrollRestoration = 'manual';\n }\n $('html').animate({scrollTop: 0}, 500);\n }\n}\n\nfunction onResizeFunction() {\n closeAllQuickAdd();\n forceUnlockScroll();\n}\n","export default function () {\n // QuickView\n $('.js-carousel-select-color-quickview').slick({\n slidesToShow: 6,\n slidesToScroll: 2,\n infinite: false,\n variableWidth: true,\n responsive: [\n {\n breakpoint: 769,\n settings: {\n slidesToShow: 10,\n slidesToScroll: 2\n }\n },\n {\n breakpoint: 640,\n settings: {\n slidesToShow: 6,\n slidesToScroll: 2\n }\n }\n ]\n\n });\n}\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\n * Renders the template within the given environment\n * @param {string} tmpl The template to render\n * @param {Object.} environment The environment to evaluate the expressions in\n */\nfunction renderTemplate (tmpl, environment) {\n return tmpl.replace(/\\{([a-z0-9]+)\\}/gi, function (_completeMatch, varName) {\n if (environment[varName]) {\n return environment[varName];\n } else {\n return '';\n }\n });\n}\n\n/**\n * Renders the template within the given environment\n * @param {string} id The ID of the HTML element containing the template to render\n * @param {Object.} environment The environment to evaluate the expressions in\n */\nfunction applyRendering (id, environment) {\n return renderTemplate(document.getElementById(id).innerHTML, environment);\n}\n\nexport {\n applyRendering\n};\n","export default [\n {\n 'featureType': 'all',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'weight': '2.00'\n }\n ]\n },\n {\n 'featureType': 'all',\n 'elementType': 'geometry.stroke',\n 'stylers': [\n {\n 'color': '#9c9c9c'\n }\n ]\n },\n {\n 'featureType': 'all',\n 'elementType': 'labels.text',\n 'stylers': [\n {\n 'visibility': 'on'\n }\n ]\n },\n {\n 'featureType': 'landscape',\n 'elementType': 'all',\n 'stylers': [\n {\n 'color': '#f2f2f2'\n }\n ]\n },\n {\n 'featureType': 'landscape',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'color': '#ffffff'\n }\n ]\n },\n {\n 'featureType': 'landscape.man_made',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'color': '#ffffff'\n }\n ]\n },\n {\n 'featureType': 'poi',\n 'elementType': 'all',\n 'stylers': [\n {\n 'visibility': 'off'\n }\n ]\n },\n {\n 'featureType': 'road',\n 'elementType': 'all',\n 'stylers': [\n {\n 'saturation': -100\n },\n {\n 'lightness': 45\n }\n ]\n },\n {\n 'featureType': 'road',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'color': '#eeeeee'\n }\n ]\n },\n {\n 'featureType': 'road',\n 'elementType': 'labels.text.fill',\n 'stylers': [\n {\n 'color': '#7b7b7b'\n }\n ]\n },\n {\n 'featureType': 'road',\n 'elementType': 'labels.text.stroke',\n 'stylers': [\n {\n 'color': '#ffffff'\n }\n ]\n },\n {\n 'featureType': 'road.highway',\n 'elementType': 'all',\n 'stylers': [\n {\n 'visibility': 'simplified'\n }\n ]\n },\n {\n 'featureType': 'road.arterial',\n 'elementType': 'labels.icon',\n 'stylers': [\n {\n 'visibility': 'off'\n }\n ]\n },\n {\n 'featureType': 'transit',\n 'elementType': 'all',\n 'stylers': [\n {\n 'visibility': 'off'\n }\n ]\n },\n {\n 'featureType': 'water',\n 'elementType': 'all',\n 'stylers': [\n {\n 'color': '#46bcec'\n },\n {\n 'visibility': 'on'\n }\n ]\n },\n {\n 'featureType': 'water',\n 'elementType': 'geometry.fill',\n 'stylers': [\n {\n 'color': '#c8d7d4'\n }\n ]\n },\n {\n 'featureType': 'water',\n 'elementType': 'labels.text.fill',\n 'stylers': [\n {\n 'color': '#070707'\n }\n ]\n },\n {\n 'featureType': 'water',\n 'elementType': 'labels.text.stroke',\n 'stylers': [\n {\n 'color': '#ffffff'\n }\n ]\n }\n];\n","export {initProdTileCarousel, unslickProdTileCarousel};\n\nconst IMAGE_CONTAINER_CAROUSEL_CLASS = '.js-prodTile-imageContainer-carousel';\n\nfunction initProdTileCarousel (containerClass) {\n const $tileCarousel = containerClass\n ? $(containerClass + ' ' + IMAGE_CONTAINER_CAROUSEL_CLASS)\n : $(IMAGE_CONTAINER_CAROUSEL_CLASS);\n\n if ($tileCarousel) {\n loadLazyVideo();\n $tileCarousel.on('init', function () {\n $(this).find('.slick-arrow').addClass('js-prevent-link');\n $(this).find('.slick-dots').addClass('js-prevent-link');\n\n var previousLabel = $('.js-fetch-slick-previous-label').data('label');\n $(this).find('.slick-arrow.slick-prev').attr('aria-label', previousLabel);\n var nextLabel = $('.js-fetch-slick-next-label').data('label');\n $(this).find('.slick-arrow.slick-next').attr('aria-label', nextLabel);\n });\n $tileCarousel.slick({\n lazyLoad: 'ondemand',\n draggable: true,\n dots: true,\n accessibility: false,\n arrows: true,\n responsive: [\n {\n breakpoint: 1023,\n settings: {\n arrows: false,\n },\n },\n ],\n });\n }\n}\n\nfunction unslickProdTileCarousel (containerClass) {\n const $tileCarousel = containerClass\n ? $(containerClass + ' ' + IMAGE_CONTAINER_CAROUSEL_CLASS + '.slick-initialized')\n : $(IMAGE_CONTAINER_CAROUSEL_CLASS + '.slick-initialized');\n\n if ($tileCarousel) {\n $tileCarousel.slick('unslick');\n }\n}\n\nfunction loadLazyVideo () {\n const lazyloadclass = 'js-customLazyload';\n let lazyVideos = [].slice.call(document.querySelectorAll('.' + lazyloadclass));\n\n let lazyVideoObserver = new IntersectionObserver(function (entries) {\n entries.forEach(function (video) {\n if (video.isIntersecting) {\n for (let source in video.target.children) {\n let videoSource = video.target.children[source];\n if (\n typeof videoSource.tagName === 'string' &&\n videoSource.tagName === 'SOURCE'\n ) {\n videoSource.src = videoSource.dataset.src;\n }\n }\n\n video.target.load();\n video.target.classList.remove(lazyloadclass);\n lazyVideoObserver.unobserve(video.target);\n }\n });\n });\n\n lazyVideos.forEach(function (lazyVideo) {\n lazyVideoObserver.observe(lazyVideo);\n });\n}\n","// import tingle from 'tingle.js';\n// import ProductHelpers from './base';\nimport { newModal } from '../components/modal';\nimport productSlider from '../components/productSlider';\n// let wishlist = require('./wishlistHeart');\n\n/**\n * replaces the content in the modal window on for the selected product variation.\n * @param {string} productUrl - url to be used for going to the product details page\n * @param {string} selectedValueUrl - url to be used to retrieve a new product model\n */\nconst fillModalElement = (productUrl, selectedValueUrl, modal) => {\n $.ajax({\n url: selectedValueUrl,\n method: 'GET',\n dataType: 'json',\n success: html => {\n modal.setContent(html.renderedTemplate);\n $('.product-quickview .carousel-inner').slick({\n arrows: true,\n dots: false\n });\n productSlider();\n // wishlist.highlightIconsForAllItemsInWishlist();\n modal.open();\n\n localStorage.setItem('prevlisttype', localStorage.getItem('listtype'));\n localStorage.setItem('listtype', 'landing');\n localStorage.setItem('prevlisttypeforcart', localStorage.getItem('listtypeforcart'));\n localStorage.setItem('listtypeforcart', 'landing');\n $('body').trigger('product:productLanding');\n\n if (document.getElementById('TU')) {\n document.getElementById('TU').click();\n }\n $(modal.modalBox)\n .find('.close-custom')\n .on('click', function (e) {\n modal.close();\n modal.destroy();\n });\n\n const destroyModal = () => {\n try {\n modal.close();\n modal.destroy();\n } catch (e) {};\n // remove the event listener to manage cases where the modal\n // is opened two or more times, (removes console error)\n $(document).off('product:afterAddToCart', destroyModal);\n };\n\n $(document).on('product:afterAddToCart', destroyModal);\n },\n error: err => {\n console.log('Error:', err);\n }\n });\n};\n\nconst addToCartFromListing = (pid, promoId, $productContainer) => {\n $.spinner().start();\n var form = {\n pid: pid,\n quantity: 1,\n options: [],\n promoId: promoId\n };\n var url = $('#tileAddToCartUrl').data('url');\n $.ajax({\n url: url,\n type: 'post',\n dataType: 'json',\n data: form,\n success: function (response) {\n if (response) {\n $('.js-mainHeader-minicart').trigger('count:update', response);\n localStorage.setItem('lastClickedPosition', '');\n localStorage.setItem('listtype', 'listing');\n // $(\"body, html\").animate({ scrollTop: 0 }, 500, 'swing');\n $('body').trigger('product:afterAddToCart', {\n ...response,\n form,\n $productContainer\n });\n $('body').trigger('product:afterQuickBuyListing', response);\n } else {\n console.error('Ajax: Empty Response');\n }\n $.spinner().stop();\n },\n error: function (err) {\n console.error('ErrorCase: ' + err.message);\n $.spinner().stop();\n }\n });\n};\n\nclass QuickView {\n run () {\n this.showQuickview();\n this.observeQuickBuy();\n }\n\n showQuickview () {\n $('body').on('click', '.quickview', function (e) {\n e.stopPropagation();\n e.preventDefault();\n const selectedValueUrl = $(this).attr('href');\n const productUrl = selectedValueUrl.replace('Product-ShowQuickView', 'Product-Show');\n const modal = newModal(false, ['quickview-modal']);\n fillModalElement(productUrl, selectedValueUrl, modal);\n\n // trigger for analytics product detail event\n const target = $(this).closest('.product');\n if (target.length > 0) {\n $('body').trigger('product:analyticsProductDetails', target);\n }\n });\n }\n\n observeQuickBuy () {\n $('body').on('click', '.js-quick-buy-sizes-item-select', function (e) {\n e.preventDefault();\n if ($(this).hasClass('disable') || !$(this).data('variant')) {\n return false;\n }\n var url = $(this).data('variant');\n\n var pid = $(e.currentTarget).data('pid');\n $(`.js-quick-buy-sizes-item[data-pid=\"${pid}\"]`).attr('variant', url);\n });\n $('body').on('click', '.js-quick-buy-sizes-item', function (e) {\n e.preventDefault();\n\n var url = $(this).attr('variant');\n $.spinner().start();\n $.ajax({\n url: url,\n type: 'GET',\n dataType: 'json',\n success: function (response) {\n $.spinner().stop();\n const $productContainer = $(e.target);\n if (response.product.available && !response.product.comingSoon) {\n addToCartFromListing(response.product.id, false, $productContainer);\n } else {\n $('body').trigger('product:afterAddToCartFailed', {\n ...response,\n $productContainer\n });\n }\n },\n error: function (err) {\n console.error('ErrorCase: ' + err.message);\n $.spinner().stop();\n }\n });\n });\n }\n}\n// const quickView = new QuickView();\nexport default QuickView;\nexport { addToCartFromListing };\n","import tingle from 'tingle.js';\n\n/**\n * This function retrieves another page of content to display in the content search grid\n * @param {String} selectorID - ID of the modal DOM element to clone\n * @return {Tingle} - https://robinparisi.github.io/tingle/\n */\nconst newModalFromSelector = (selectorID, footer, cssClass = [], onClose = null) => {\n // set optionts\n const modalOptions = {\n closeMethods: ['overlay', 'escape'],\n cssClass,\n onClose: () => {\n modal.destroy();\n if (typeof onClose === 'function') {\n onClose();\n }\n },\n onOpen: () => { $('html').addClass('html-tingle-enabled'); },\n beforeClose: () => {\n if ($('.tingle-modal.tingle-modal--visible').length < 2) {\n $('html').removeClass('html-tingle-enabled');\n }\n return true;\n }\n };\n if (footer) { modalOptions.footer = true; };\n\n // create modal\n const modal = new tingle.modal(modalOptions);\n\n // clone content\n if (selectorID) {\n const contentModal = document.getElementById(selectorID);\n if (contentModal) {\n modal.setContent(contentModal.innerHTML);\n }\n }\n\n return modal;\n};\n\n/**\n * This function retrieves another page of content to display in the content search grid\n * @param {String} html - HTML string\n * @return {Tingle} - https://robinparisi.github.io/tingle/\n */\nconst newModalFromString = (html, footer, cssClass = [], onOpen, onClose) => {\n // set optionts\n const modalOptions = {\n closeMethods: ['overlay', 'button', 'escape'],\n cssClass,\n onClose: () => {\n modal.destroy();\n if (typeof onClose === 'function') {\n onClose();\n }\n },\n onOpen: () => {\n $('html').addClass('html-tingle-enabled');\n if (typeof onOpen === 'function') {\n onOpen();\n }\n },\n beforeClose: () => {\n if ($('.tingle-modal.tingle-modal--visible').length < 2) {\n $('html').removeClass('html-tingle-enabled');\n }\n return true;\n }\n };\n if (footer) { modalOptions.footer = true; };\n\n // create modal\n const modal = new tingle.modal(modalOptions);\n\n // add content\n if (html) {\n modal.setContent(html);\n }\n\n return modal;\n};\n\n/**\n * This function creates a modal starting from supplied options\n * @return {Tingle} - https://robinparisi.github.io/tingle/\n */\nconst newModalWithOptions = (modalOptions) => {\n return new tingle.modal(modalOptions);\n};\n\n/**\n * This class creates a modal without copying or moving any HTML,\n * but simply showing and hiding an existing Node.\n * This is to avoid problems with manipulated elements such as Google Maps\n */\nclass ModalShowHide {\n constructor (selector = '', newModalType, toPropagateClick, classToPreventHide) {\n this.$el = $(selector);\n this.selector = selector;\n this._scrollposition = 0;\n this.toPropagateClick = toPropagateClick;\n this.classToPreventHide = classToPreventHide;\n if (newModalType) {\n this.isOpenTypeCustom = false;\n } else {\n this.isOpen = false;\n }\n\n this.events();\n }\n\n show (newModalType) {\n if (newModalType) {\n if (this.isOpenTypeCustom) {\n return;\n }\n this.isOpenTypeCustom = true;\n } else {\n if (this.isOpen) {\n return;\n }\n this.isOpen = true;\n }\n\n // mimic tingle scroll lock\n this._scrollPosition = window.pageYOffset;\n if (this.$el.hasClass('tingle-override')) {\n // do nothing\n } else {\n $('body').addClass('tingle-enabled');\n $('html').addClass('html-tingle-enabled');\n $('body').css('top', -this._scrollPosition + 'px');\n this.$el.parent('.tingle-modal').addClass('tingle-modal--visible');\n }\n }\n\n hide (newModalType) {\n if (newModalType) {\n if (!this.isOpenTypeCustom) {\n return;\n }\n this.isOpenTypeCustom = false;\n } else {\n if (!this.isOpen) {\n return;\n }\n this.isOpen = false;\n }\n\n // mimic tingle scroll lock\n if ($('.tingle-modal.tingle-modal--visible').length < 2) {\n $('body').removeClass('tingle-enabled');\n $('html').removeClass('html-tingle-enabled');\n window.scrollTo(0, this._scrollPosition);\n $('body').css('top', null);\n }\n this.$el.parent('.tingle-modal').removeClass('tingle-modal--visible');\n }\n\n events () {\n $('body').on('click', '.tingle-modal', (e) => {\n if (e.target.className === '') {\n return;\n }\n if ($(e.target).hasClass('tingle-modal') || !$(e.target).closest(this.classToPreventHide)) {\n var newModalType = $(e.target).data('modalType') || null;\n this.hide(newModalType);\n e.stopPropagation();\n }\n });\n $('body').on('click', '.modal-close', (e) => {\n var newModalType = $(e.target).data('modalType') || null;\n this.hide(newModalType);\n e.stopPropagation();\n });\n\n if (!this.toPropagateClick) {\n $('body').on('click', this.selector, (e) => {\n e.stopPropagation();\n });\n }\n }\n};\nexport {\n newModalFromSelector,\n newModalFromString,\n newModalWithOptions,\n ModalShowHide\n};\n","import { newModalFromString } from '../components/modal';\nimport Gift from '../checkout/gift';\nexport class DispoHelpers {\n run () {\n this.removeExternalItems();\n this.copyGiftOptions();\n this.giftOptionsModal();\n this.giftOptionsLabel();\n this.triggerPersonalizationRemoved();\n }\n\n triggerPersonalizationRemoved () {\n if ($('#personalizationRemoved').val() === 'standard') {\n $('.submit-shipping').trigger('click');\n $('html, body').animate({\n scrollTop: $('.shipping-contact-container-pickup').offset().top\n }, 1000);\n }\n }\n\n giftOptionsLabel () {\n var $giftContainer = $('.copy-wrapper-gift-container');\n $giftContainer.each(function () {\n var addedWrapItems = $(this).attr('data-addedwrapitems') !== '';\n var addedKitItems = parseInt($(this).attr('data-numaddedkititems')) > 0;\n $(this).find('[class*=\"js-wrapperGiftContainer-\"]').addClass('hide');\n if (addedWrapItems && addedKitItems) {\n $(this).find('.js-wrapperGiftContainer-wrappedGiftkit').removeClass('hide');\n } else if (addedWrapItems) {\n $(this).find('.js-wrapperGiftContainer-wrappedNoGiftkit').removeClass('hide');\n } else if (addedKitItems) {\n $(this).find('.js-wrapperGiftContainer-giftKitNotWrapped').removeClass('hide');\n }\n });\n }\n\n isDispoActive () {\n return $('#isDispoCountry').val() === 'true';\n }\n\n handleDispoStores () {\n var noDispoArrival = $('.is-store-method .noDispoArrivalLabel').val() || '';\n noDispoArrival = noDispoArrival.split('-')[1] !== undefined ? noDispoArrival.split('-')[1] : noDispoArrival;\n if (noDispoArrival !== '') {\n $('.result:not(.is-bopis)').find('.js-store-dispo-info-collection').html(noDispoArrival);\n } else {\n var noDispoArivalLabel = $('.shipping-method-selected .js-shipping-method').attr('data-visiblePickableText') || '';\n $('.result:not(.is-bopis)').find('.cc-findInStoreResultsCheckout-bopis').html(noDispoArivalLabel);\n }\n }\n\n removeExternalItems () {\n $('.js-remove-external-items-modal').insertAfter('.productPreviewLongDistance');\n $('.js-remove-external-items-modal').on('click', function (e) {\n e.preventDefault();\n\n const htmlContent = $('#removeExternalItems').clone().html();\n // create and open confirmation modal\n const modal = newModalFromString(htmlContent, false);\n $('.tingle-modal-box').addClass('rightModalAttribute');\n $('.tingle-modal-box').addClass('removeExternalItemsModal');\n modal.open();\n $.spinner().stop();\n $(modal.modal).css({\n 'z-index': '4000'\n });\n $(modal.modalBox).css({\n 'padding': '16px'\n });\n $(modal.modalBox).on('click', '.close, .btn-close', (e) => {\n e.preventDefault();\n modal.close();\n modal.destroy();\n });\n\n const productData = $(e.currentTarget).closest('.checkout-product-summary').find('.analytics.checkout-product').data();\n\n $(modal.modalBox).on('click', '.js-remove-external-items', function (e) {\n e.stopPropagation();\n $.spinner().start();\n\n const url = $(e.currentTarget).data('url');\n const urlnotification = $(e.currentTarget).data('urlnotification');\n\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n success: function (data) {\n $('body').trigger('product:removeExternalItemSuccessfully', { ...data, productData });\n modal.close();\n showRemoveExternalNotification(urlnotification);\n modal.destroy();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n });\n }\n\n selectBopisStore () {\n const htmlContent = $('#removePersonalizationModal').clone().html();\n // create and open confirmation modal\n const modal = newModalFromString(htmlContent, false);\n $(modal.modalBox).addClass('rightModalAttribute');\n $('.tingle-modal-box').addClass('removePersonalizationModal cc-removePersonalizationModal');\n modal.open();\n $.spinner().stop();\n $(modal.modal).css('z-index', '4000');\n $(modal.modalBox).on('click', '.close, .btn-close', (e) => {\n e.preventDefault();\n modal.close();\n modal.destroy();\n });\n\n $(modal.modalBox).on('click', '.js-choose-remove', (e) => {\n var isPersonalizationRemoval = $('#remove-personalization').prop('checked');\n isPersonalizationRemoval ? $('.js-remove-personalization').trigger('click') : $('.js-remove-bopis').trigger('click');\n e.preventDefault();\n modal.close();\n modal.destroy();\n });\n\n $(modal.modalBox).on('click', '.js-remove-personalization', (e) => {\n let url = $(e.currentTarget).data('url');\n let payload = {};\n $.spinner().start();\n $.ajax({\n url: url,\n method: 'POST',\n data: payload,\n success: data => {\n $('.personalization-item').remove();\n $('.fnCartOptions-personalization').hide();\n $('.personalized-attributes').remove();\n $('.personalizationAlert').hide();\n $('.personalization-row').hide();\n $('.total-box-body-item .grand-total-sum').text(data.totalGrossPrice);\n $('.findinstore-form-container .modal-close').trigger('click');\n $('.shipping-content .submit-shipping').trigger('click');\n $.spinner().stop();\n var modalOpened = 'paypal';\n if ($('.amazon-confirm-express').css('display') !== 'none') {\n modalOpened = 'amazon';\n }\n if ($('.klarna-confirm-express').css('display') !== 'none') {\n modalOpened = 'klarna';\n }\n if ($('.page').data('action').indexOf('Checkout') > -1) {\n modalOpened = 'standard';\n }\n var redirect = window.location.href;\n var fragment = redirect.split('#')[1];\n redirect = redirect.split('#')[0];\n if (redirect.indexOf('?') > -1) {\n redirect = redirect + '&personalizationRemoved=' + modalOpened;\n } else {\n redirect = redirect + '?personalizationRemoved=' + modalOpened;\n }\n redirect = redirect + '#' + fragment;\n\n if ($('.page').attr('data-action').indexOf('Cart') > -1 || $('.page').attr('data-action').indexOf('Checkout') > -1) {\n window.location.href = redirect;\n } else {\n location.reload();\n }\n },\n error: data => {\n $.spinner().stop();\n }\n }).then(function () {\n $.spinner().stop();\n });\n modal.close();\n modal.destroy();\n });\n\n $(modal.modalBox).on('click', '.js-remove-bopis', (e) => {\n let url = $(e.currentTarget).data('url');\n let payload = {};\n $.spinner().start();\n $.ajax({\n url: url,\n method: 'POST',\n data: payload,\n success: data => {\n var noBopisLabel = $('#personalizationRemovedNoBopisLabel').val();\n var completeNoDispoArrivalLabel = $('#completeNoDispoArrivalLabel').val();\n $('.shipping-method-estimated-arrive').html(completeNoDispoArrivalLabel);\n $('.shipping-method-selected .estimated-delivery').html(noBopisLabel);\n $('.store-info').removeClass('is-bopis');\n },\n error: data => {\n $.spinner().stop();\n }\n }).then(function () {\n $.spinner().stop();\n });\n modal.close();\n modal.destroy();\n });\n }\n\n copyGiftOptions () {\n if ($('#isDispoCountry').val() !== 'false') {\n var wrapperGiftContainer = $('.wrapper-gift-container').html();\n $('.copy-wrapper-gift-container').html(wrapperGiftContainer);\n Gift.run();\n $('.wrapper-gift-container').addClass('hidden');\n }\n }\n\n updateGiftCtas (e) {\n var addedwrapitems = $(e.currentTarget).parents('.copy-wrapper-gift-container').attr('data-addedwrapitems');\n var addedkititems = $(e.currentTarget).parents('.copy-wrapper-gift-container').attr('data-numaddedkititems');\n addedkititems = parseInt(addedkititems) > 0 ? 'true' : 'false';\n if (addedwrapitems) {\n $('.js-wrap-links').removeClass('hide');\n $('.js-wrap-buttons').addClass('hide');\n } else {\n $('.js-wrap-links').addClass('hide');\n $('.js-wrap-buttons').removeClass('hide');\n }\n if (addedkititems === 'true') {\n $('.js-kit-buttons').addClass('hide');\n $('.js-kit-links').removeClass('hide');\n } else {\n $('.js-kit-buttons').removeClass('hide');\n $('.js-kit-links').addClass('hide');\n }\n }\n\n giftOptionsModal () {\n var _self = this;\n $('.js-openGiftOptionsModal').on('click', function (e) {\n e.preventDefault();\n $('.chosen-gift-box').removeClass('chosen-gift-box');\n $('[class*=\"js-product-giftwrap-container-\"]').addClass('hidden');\n $(e.currentTarget).addClass('chosen-gift-box');\n var numaddedkititems = $('.chosen-gift-box').parents('.copy-wrapper-gift-container').attr('data-numaddedkititems') || '0';\n $('.js-quantity-value').html(numaddedkititems);\n $('.gift-kit-quantity').toggleClass('hide', numaddedkititems === 0).text('(' + numaddedkititems + ')');\n\n const htmlContent = $('#giftOptionsModal').clone().html();\n // create and open dispo gift options modal\n const modal = newModalFromString(htmlContent, false);\n $('.tingle-modal-box').addClass('rightModalAttribute');\n $('.tingle-modal-box').addClass('cc-giftOptionsModal');\n // Use the giftWrap button for modal instead of the regular one\n $('.cc-giftWrapOption').addClass('hidden');\n $('.js-openGiftWrap-regularFlowButton').addClass('hidden');\n $('.js-openGiftWrap-dispoFlowButtonModal').removeClass('hidden');\n $('.cc-openGiftKit-dispoFlowButtonModal').addClass('hidden');\n $('.open-gift-wrap').addClass('cc-openGiftWrapModal');\n $('.cc-giftWrapOption_button').removeClass('large-5');\n // Use the giftKit button for modal instead of the regular one\n $('.cc-giftKitOption').addClass('hidden');\n $('.js-openGiftKit-regularFlowButton').addClass('hidden');\n $('.js-openGiftKit-dispoFlowButtonModal').removeClass('hidden');\n $('.open-gift-kit').addClass('cc-openGiftKitModal');\n $('.cc-giftKitOption_button').removeClass('large-5');\n modal.open();\n Gift.run();\n $(modal.modalBox).on('click', '.close, .btn-close', (e) => {\n e.preventDefault();\n $('.cc-giftWrapOption').removeClass('hidden');\n $('.js-openGiftWrap-regularFlowButton').removeClass('hidden');\n $('.js-openGiftWrap-dispoFlowButtonModal').addClass('hidden');\n $('.cc-openGiftKit-dispoFlowButtonModal').removeClass('hidden');\n $('.open-gift-wrap').removeClass('cc-openGiftWrapModal');\n $('.cc-giftWrapOption_button').addClass('large-5');\n\n $('.cc-giftKitOption').removeClass('hidden');\n $('.js-openGiftKit-regularFlowButton').removeClass('hidden');\n $('.js-openGiftKit-dispoFlowButtonModal').addClass('hidden');\n $('.open-gift-kit').removeClass('cc-openGiftKitModal');\n $('.cc-giftKitOption_button').addClass('large-5');\n modal.close();\n modal.destroy();\n });\n _self.updateGiftCtas(e);\n });\n }\n\n removeNotMainPersonalization () {\n const htmlContent = $('#cartRemoveNotMainPersonalization').clone().html();\n // create and open confirmation modal\n const modal = newModalFromString(htmlContent, false, ['indexRemovePersonalization']);\n $(modal.modalBox).addClass('rightModalAttribute cartRemoveNotMainPersonalization cc-cartRemovePersonalization');\n $(modal.modal).css('z-index', '4000');\n modal.open();\n $.spinner().stop();\n $(modal.modalBox).on('click', '.close, .btn-close', (e) => {\n e.preventDefault();\n modal.close();\n modal.destroy();\n });\n\n $(modal.modalBox).on('click', '.js-remove-personalization', (e) => {\n let url = $(e.currentTarget).data('url');\n let payload = {};\n $.spinner().start();\n $.ajax({\n url: url,\n method: 'POST',\n data: payload,\n success: data => {\n $('.fnCartOptions-personalization').remove();\n $('.personalized-attributes').remove();\n $('.personalization-item').remove();\n $('.personalizationAlert').hide();\n $('.personalization-row').hide();\n $('.total-box-body-item .grand-total-sum').text(data.totalGrossPrice);\n $('.findinstore-form-container .modal-close').trigger('click');\n $('.shipping-content .submit-shipping').trigger('click');\n $('.js-expressButtonContinue').trigger('click');\n $.spinner().stop();\n var modalOpened = 'paypal';\n if ($('.amazon-confirm-express').css('display') !== 'none') {\n modalOpened = 'amazon';\n }\n if ($('.klarna-confirm-express').css('display') !== 'none') {\n modalOpened = 'klarna';\n }\n if ($('.page').data('action').indexOf('Checkout') > -1) {\n modalOpened = 'standard';\n }\n var redirect = window.location.href;\n var fragment = redirect.split('#')[1];\n redirect = redirect.split('#')[0];\n if (redirect.indexOf('?') > -1) {\n redirect = redirect + '&personalizationRemoved=' + modalOpened;\n } else {\n redirect = redirect + '?personalizationRemoved=' + modalOpened;\n }\n redirect = redirect + '#' + fragment;\n\n if ($('.page').attr('data-action').indexOf('Cart') > -1 || $('.page').attr('data-action').indexOf('Checkout') > -1) {\n window.location.href = redirect;\n } else {\n location.reload();\n }\n },\n error: data => {\n $.spinner().stop();\n }\n }).then(function () {\n $.spinner().stop();\n });\n modal.close();\n modal.destroy();\n });\n }\n}\n\nfunction showRemoveExternalNotification (urlnotification) {\n $.ajax(urlnotification).then(data => {\n $('body').append(data);\n let offsetTop = 12;\n offsetTop = $('.js-mainHeader').outerHeight() + 10;\n $('.js-external-product-remove-notification').css({\n top: offsetTop,\n });\n function closeNotification () {\n $('.js-external-product-remove-notification').off('click', '.js-close-notification');\n $('.js-external-product-remove-notification').remove();\n }\n $('.js-external-product-remove-notification').on('click', '.js-close-notification', closeNotification);\n location.reload();\n $.spinner().stop();\n });\n}\n\nconst dispoHelpers = new DispoHelpers();\nexport default dispoHelpers;\n","/**\n * Populate the Billing Address Summary View\n * @param {string} parentSelector - the top level DOM selector for a unique address summary\n * @param {Object} address - the address data\n */\nfunction populateAddressSummary (parentSelector, address) {\n $.each(address, function (attr) {\n var val = address[attr];\n $('.' + attr, parentSelector).text(val || '');\n });\n}\n\n/**\n * returns a formed ');\n }\n var safeShipping = shipping || {};\n var shippingAddress = safeShipping.shippingAddress || {};\n\n if (isBilling && isNew && !order.billing.matchingAddressId) {\n shippingAddress = order.billing.billingAddress.address || {};\n isNew = false;\n isSelected = true;\n safeShipping.UUID = 'manual-entry';\n }\n\n var uuid = safeShipping.UUID ? safeShipping.UUID : 'new';\n var optionEl = $('