{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/javascript/packs/application.js","webpack:///./node_modules/body-scroll-lock/lib/bodyScrollLock.min.js","webpack:///./node_modules/franc-min/index.js","webpack:///./node_modules/trigram-utils/index.js","webpack:///./node_modules/n-gram/index.js","webpack:///./node_modules/collapse-white-space/index.js","webpack:///./node_modules/trim/index.js","webpack:///./node_modules/franc-min/expressions.js","webpack:///./node_modules/cropperjs/dist/cropper.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","__webpack_exports__","franc","require","Cropper","window","document","addEventListener","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","undefined","e","Array","isArray","length","from","passive","removeEventListener","navigator","platform","test","u","a","v","f","some","options","allowTouchMove","event","target","touches","preventDefault","setTimeout","body","style","paddingRight","overflow","disableBodyScroll","console","error","targetElement","concat","ontouchstart","targetTouches","clientY","ontouchmove","scrollTop","scrollHeight","clientHeight","stopPropagation","reserveScrollBarGap","innerWidth","documentElement","clientWidth","clearAllBodyScrollLocks","forEach","enableBodyScroll","filter","apply","utilities","expressions","data","detect","all","detectAll","MAX_LENGTH","MIN_LENGTH","MAX_DIFFERENCE","script","settings","minLength","only","whitelist","ignore","blacklist","und","scripts","topScript","count","topCount","getOccurrence","getTopScript","substr","distances","min","max","index","normalize","trigrams","languages","language","filteredLanguages","allow","filterLanguages","push","getDistance","sort","getDistances","asTuples","singleLanguageTuples","expression","match","model","trigram","difference","distance","indexOf","b","weight","split","collapse","trim","has","clean","String","replace","toLowerCase","getCleanTrigrams","getCleanTrigramsAsDictionary","dictionary","asDictionary","tuples","tuplesAsDictionary","tuple","nGram","isNaN","Infinity","Error","nGrams","slice","bigram","str","left","right","cmn","Latin","Cyrillic","Arabic","ben","Devanagari","jpn","kor","tel","tam","guj","kan","mal","mya","ori","pan","amh","tha","sin","ell","factory","_typeof2","obj","iterator","constructor","_typeof","_defineProperties","props","descriptor","configurable","writable","_defineProperty","ownKeys","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","arguments","source","getOwnPropertyDescriptors","defineProperties","_toConsumableArray","arr","arr2","_arrayWithoutHoles","iter","toString","_iterableToArray","TypeError","_nonIterableSpread","IS_BROWSER","WINDOW","IS_TOUCH_DEVICE","HAS_POINTER_EVENT","CLASS_CROP","CLASS_DISABLED","CLASS_HIDDEN","CLASS_HIDE","CLASS_INVISIBLE","CLASS_MODAL","CLASS_MOVE","DATA_ACTION","DATA_PREVIEW","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","REGEXP_ACTIONS","REGEXP_DATA_URL","REGEXP_DATA_URL_JPEG","REGEXP_TAG_NAME","DEFAULTS","viewMode","dragMode","initialAspectRatio","NaN","aspectRatio","preview","responsive","restore","checkCrossOrigin","checkOrientation","modal","guides","center","highlight","background","autoCrop","autoCropArea","movable","rotatable","scalable","zoomable","zoomOnTouch","zoomOnWheel","wheelZoomRatio","cropBoxMovable","cropBoxResizable","toggleDragModeOnDblclick","minCanvasWidth","minCanvasHeight","minCropBoxWidth","minCropBoxHeight","minContainerWidth","minContainerHeight","ready","cropstart","cropmove","cropend","crop","zoom","Number","isNumber","isPositiveNumber","isUndefined","isObject","isPlainObject","_constructor","isFunction","toArray","callback","assign","_len","args","_key","arg","REGEXP_DECIMALS","normalizeDecimalNumber","times","Math","round","REGEXP_SUFFIX","setStyle","element","styles","addClass","elem","classList","add","className","removeClass","remove","toggleClass","added","REGEXP_CAMEL_CASE","toParamCase","getData","dataset","getAttribute","setData","setAttribute","REGEXP_SPACES","onceSupported","supported","once","listener","set","removeListener","type","handler","listeners","addListener","_handler","_element$listeners","_len2","_key2","dispatchEvent","Event","CustomEvent","detail","bubbles","cancelable","createEvent","initCustomEvent","getOffset","box","getBoundingClientRect","pageXOffset","clientLeft","top","pageYOffset","clientTop","location","REGEXP_ORIGINS","isCrossOriginURL","url","parts","protocol","hostname","port","addTimestamp","timestamp","Date","getTime","getTransforms","_ref","rotate","scaleX","scaleY","translateX","translateY","values","transform","join","WebkitTransform","msTransform","getPointer","_ref2","endOnly","pageX","pageY","end","endX","endY","startX","startY","getAdjustedSizes","_ref4","height","width","isValidWidth","isValidHeight","adjustedWidth","getSourceCanvas","image","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","naturalWidth","imageNaturalHeight","naturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","maxWidth","_ref8$maxHeight","maxHeight","_ref8$minWidth","minWidth","_ref8$minHeight","minHeight","canvas","createElement","context","getContext","maxSizes","minSizes","destMaxSizes","destMinSizes","destWidth","destHeight","params","fillStyle","fillRect","save","translate","PI","scale","drawImage","map","param","floor","fromCharCode","REGEXP_DATA_URL_HEAD","resetAndGetOrientation","arrayBuffer","orientation","dataView","DataView","littleEndian","app1Start","ifdStart","getUint8","byteLength","offset","tiffOffset","start","getStringFromCharCode","endianness","getUint16","firstIFDOffset","getUint32","_offset","_length","setUint16","render","this","initContainer","initCanvas","initCropBox","renderCanvas","cropped","renderCropBox","container","cropper","containerData","offsetWidth","offsetHeight","imageData","rotated","abs","canvasWidth","canvasHeight","canvasData","oldLeft","oldTop","limited","limitCanvas","initialImageData","initialCanvasData","sizeLimited","positionLimited","cropBoxData","_getAdjustedSizes","newCanvasLeft","newCanvasTop","minLeft","minTop","maxLeft","maxTop","changed","transformed","_getRotatedSizes","_ref5","degree","arc","sinArc","cosArc","cos","newWidth","newHeight","getRotatedSizes","renderImage","limitCropBox","output","initialCropBoxData","maxCropBoxWidth","maxCropBoxHeight","face","cropBox","disabled","initPreview","crossOrigin","crossOriginUrl","alt","src","viewBox","appendChild","viewBoxImage","previews","ownerDocument","querySelectorAll","querySelector","el","img","html","innerHTML","cssText","resetPreview","removeAttribute","removeData","cropBoxWidth","cropBoxHeight","originalWidth","originalHeight","ratio","getElementsByTagName","events","onCropStart","cropStart","onWheel","wheel","capture","onDblclick","dblclick","onCropMove","cropMove","onCropEnd","cropEnd","onResize","resize","unbind","handlers","getCanvasData","getCropBoxData","setCanvasData","setCropBoxData","setDragMode","dragBox","contains","_this","delta","wheeling","deltaY","wheelDelta","buttons","button","pointerType","ctrlKey","action","pointers","changedTouches","touch","identifier","pointerId","originalEvent","cropping","change","bottom","renderable","shiftKey","pointer","range","x","y","check","side","move","pointers2","ratios","pointer2","x1","y1","x2","y2","z1","sqrt","getMaxZoomRatio","methods","reset","clear","hasSameSize","isImg","replaced","uncreate","load","enable","disable","destroy","originalUrl","offsetX","offsetY","_this$canvasData","moveTo","_originalEvent","zoomTo","pivot","oldRatio","_ref3","getPointersCenter","rotateTo","_scaleX","_scaleY","rounded","getContainerData","getImageData","sized","widthChanged","heightChanged","getCroppedCanvas","HTMLCanvasElement","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","sourceWidth","sourceHeight","srcX","srcY","setAspectRatio","croppable","AnotherCropper","instance","Constructor","_classCallCheck","tagName","reloading","sizing","init","protoProps","staticProps","toDataURL","ArrayBuffer","read","base64","binary","atob","uint8","Uint8Array","charCodeAt","clone","xhr","XMLHttpRequest","onabort","onerror","ontimeout","onprogress","getResponseHeader","abort","onload","response","onloadend","open","responseType","withCredentials","send","mimeType","chunks","subarray","btoa","arrayBufferToDataURL","_parseOrientation","parseOrientation","stop","parentNode","insertBefore","nextSibling","_this2","isIOSWebKit","userAgent","done","build","sizingImage","removeChild","template","getElementsByClassName","unbuild"],"mappings":"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","file":"js/application-8d4b365166c5582c2ece.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 = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","/* eslint no-console:0 */\n// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n//\n// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate\n// layout file, like app/views/layouts/application.html.erb\n\n\n// Uncomment to copy all static images under ../images to the output folder and reference\n// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)\n// or the `imagePath` JavaScript helper below.\n//\n// const images = require.context('../images', true)\n// const imagePath = (name) => images(name, true)\n\n//console.log('Hello World from Webpacker')\n\nimport { disableBodyScroll } from 'body-scroll-lock';\nimport 'style/application.css'\nvar franc = require('franc-min');\nvar Cropper = require('cropperjs');\n\nwindow.franc = franc;\nwindow.Cropper= Cropper;\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n //disableBodyScroll(document.querySelector('.studio-container'));\n});","!function (e, t) {\n if (\"function\" == typeof define && define.amd) define([\"exports\"], t);else if (\"undefined\" != typeof exports) t(exports);else {\n var o = {};\n t(o), e.bodyScrollLock = o;\n }\n}(this, function (exports) {\n \"use strict\";\n\n function r(e) {\n if (Array.isArray(e)) {\n for (var t = 0, o = Array(e.length); t < e.length; t++) {\n o[t] = e[t];\n }\n\n return o;\n }\n\n return Array.from(e);\n }\n\n Object.defineProperty(exports, \"__esModule\", {\n value: !0\n });\n var l = !1;\n\n if (\"undefined\" != typeof window) {\n var e = {\n get passive() {\n l = !0;\n }\n\n };\n window.addEventListener(\"testPassive\", null, e), window.removeEventListener(\"testPassive\", null, e);\n }\n\n var d = \"undefined\" != typeof window && window.navigator && window.navigator.platform && /iP(ad|hone|od)/.test(window.navigator.platform),\n c = [],\n u = !1,\n a = -1,\n s = void 0,\n v = void 0,\n f = function f(t) {\n return c.some(function (e) {\n return !(!e.options.allowTouchMove || !e.options.allowTouchMove(t));\n });\n },\n m = function m(e) {\n var t = e || window.event;\n return !!f(t.target) || 1 < t.touches.length || (t.preventDefault && t.preventDefault(), !1);\n },\n o = function o() {\n setTimeout(function () {\n void 0 !== v && (document.body.style.paddingRight = v, v = void 0), void 0 !== s && (document.body.style.overflow = s, s = void 0);\n });\n };\n\n exports.disableBodyScroll = function (i, e) {\n if (d) {\n if (!i) return void console.error(\"disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.\");\n\n if (i && !c.some(function (e) {\n return e.targetElement === i;\n })) {\n var t = {\n targetElement: i,\n options: e || {}\n };\n c = [].concat(r(c), [t]), i.ontouchstart = function (e) {\n 1 === e.targetTouches.length && (a = e.targetTouches[0].clientY);\n }, i.ontouchmove = function (e) {\n var t, o, n, r;\n 1 === e.targetTouches.length && (o = i, r = (t = e).targetTouches[0].clientY - a, !f(t.target) && (o && 0 === o.scrollTop && 0 < r ? m(t) : (n = o) && n.scrollHeight - n.scrollTop <= n.clientHeight && r < 0 ? m(t) : t.stopPropagation()));\n }, u || (document.addEventListener(\"touchmove\", m, l ? {\n passive: !1\n } : void 0), u = !0);\n }\n } else {\n n = e, setTimeout(function () {\n if (void 0 === v) {\n var e = !!n && !0 === n.reserveScrollBarGap,\n t = window.innerWidth - document.documentElement.clientWidth;\n e && 0 < t && (v = document.body.style.paddingRight, document.body.style.paddingRight = t + \"px\");\n }\n\n void 0 === s && (s = document.body.style.overflow, document.body.style.overflow = \"hidden\");\n });\n var o = {\n targetElement: i,\n options: e || {}\n };\n c = [].concat(r(c), [o]);\n }\n\n var n;\n }, exports.clearAllBodyScrollLocks = function () {\n d ? (c.forEach(function (e) {\n e.targetElement.ontouchstart = null, e.targetElement.ontouchmove = null;\n }), u && (document.removeEventListener(\"touchmove\", m, l ? {\n passive: !1\n } : void 0), u = !1), c = [], a = -1) : (o(), c = []);\n }, exports.enableBodyScroll = function (t) {\n if (d) {\n if (!t) return void console.error(\"enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.\");\n t.ontouchstart = null, t.ontouchmove = null, c = c.filter(function (e) {\n return e.targetElement !== t;\n }), u && 0 === c.length && (document.removeEventListener(\"touchmove\", m, l ? {\n passive: !1\n } : void 0), u = !1);\n } else (c = c.filter(function (e) {\n return e.targetElement !== t;\n })).length || o();\n };\n});","// This file is generated by `build.js`\n'use strict';\n/* Load `trigram-utils`. */\n\nvar utilities = require('trigram-utils');\n/* Load `expressions` (regular expressions matching\n * scripts). */\n\n\nvar expressions = require('./expressions.js');\n/* Load `data` (trigram information per language,\n * per script). */\n\n\nvar data = require('./data.json');\n/* Expose `detectAll` on `detect`. */\n\n\ndetect.all = detectAll;\n/* Expose `detect`. */\n\nmodule.exports = detect;\n/* Maximum sample length. */\n\nvar MAX_LENGTH = 2048;\n/* Minimum sample length. */\n\nvar MIN_LENGTH = 10;\n/* The maximum distance to add when a given trigram does\n * not exist in a trigram dictionary. */\n\nvar MAX_DIFFERENCE = 300\n/* Construct trigram dictionaries. */\n;\n\n(function () {\n var languages;\n var name;\n var trigrams;\n var model;\n var script;\n var weight;\n\n for (script in data) {\n languages = data[script];\n\n for (name in languages) {\n model = languages[name].split('|');\n weight = model.length;\n trigrams = {};\n\n while (weight--) {\n trigrams[model[weight]] = weight;\n }\n\n languages[name] = trigrams;\n }\n }\n})();\n/**\n * Get the most probable language for the given value.\n *\n * @param {string} value - The value to test.\n * @param {Object} options - Configuration.\n * @return {string} The most probable language.\n */\n\n\nfunction detect(value, options) {\n return detectAll(value, options)[0][0];\n}\n/**\n * Get a list of probable languages the given value is\n * written in.\n *\n * @param {string} value - The value to test.\n * @param {Object} options - Configuration.\n * @return {Array.>} An array\n * containing language--distance tuples.\n */\n\n\nfunction detectAll(value, options) {\n var settings = options || {};\n var minLength = MIN_LENGTH;\n var only = [].concat(settings.whitelist || [], settings.only || []);\n var ignore = [].concat(settings.blacklist || [], settings.ignore || []);\n var script;\n\n if (settings.minLength !== null && settings.minLength !== undefined) {\n minLength = settings.minLength;\n }\n\n if (!value || value.length < minLength) {\n return und();\n }\n\n value = value.substr(0, MAX_LENGTH);\n /* Get the script which characters occur the most\n * in `value`. */\n\n script = getTopScript(value, expressions);\n /* One languages exists for the most-used script. */\n\n if (!(script[0] in data)) {\n /* If no matches occured, such as a digit only string,\n * or because the language is ignored, exit with `und`. */\n if (script[1] === 0 || !allow(script[0], only, ignore)) {\n return und();\n }\n\n return singleLanguageTuples(script[0]);\n }\n /* Get all distances for a given script, and\n * normalize the distance values. */\n\n\n return normalize(value, getDistances(utilities.asTuples(value), data[script[0]], only, ignore));\n}\n/**\n * Normalize the difference for each tuple in\n * `distances`.\n *\n * @param {string} value - Value to normalize.\n * @param {Array.>} distances\n * - List of distances.\n * @return {Array.>} - Normalized\n * distances.\n */\n\n\nfunction normalize(value, distances) {\n var min = distances[0][1];\n var max = value.length * MAX_DIFFERENCE - min;\n var index = -1;\n var length = distances.length;\n\n while (++index < length) {\n distances[index][1] = 1 - (distances[index][1] - min) / max || 0;\n }\n\n return distances;\n}\n/**\n * From `scripts`, get the most occurring expression for\n * `value`.\n *\n * @param {string} value - Value to check.\n * @param {Object.} scripts - Top-Scripts.\n * @return {Array} Top script and its\n * occurrence percentage.\n */\n\n\nfunction getTopScript(value, scripts) {\n var topCount = -1;\n var topScript;\n var script;\n var count;\n\n for (script in scripts) {\n count = getOccurrence(value, scripts[script]);\n\n if (count > topCount) {\n topCount = count;\n topScript = script;\n }\n }\n\n return [topScript, topCount];\n}\n/**\n * Get the occurrence ratio of `expression` for `value`.\n *\n * @param {string} value - Value to check.\n * @param {RegExp} expression - Code-point expression.\n * @return {number} Float between 0 and 1.\n */\n\n\nfunction getOccurrence(value, expression) {\n var count = value.match(expression);\n return (count ? count.length : 0) / value.length || 0;\n}\n/**\n * Get the distance between an array of trigram--count\n * tuples, and multiple trigram dictionaries.\n *\n * @param {Array.>} trigrams - An\n * array containing trigram--count tuples.\n * @param {Object.} languages - multiple\n * trigrams to test against.\n * @param {Array.} only - Allowed languages; if\n * non-empty, only included languages are kept.\n * @param {Array.} ignore - Disallowed languages;\n * included languages are ignored.\n * @return {Array.>} An array\n * containing language--distance tuples.\n */\n\n\nfunction getDistances(trigrams, languages, only, ignore) {\n var distances = [];\n var language;\n languages = filterLanguages(languages, only, ignore);\n\n for (language in languages) {\n distances.push([language, getDistance(trigrams, languages[language])]);\n }\n\n return distances.length === 0 ? und() : distances.sort(sort);\n}\n/**\n * Get the distance between an array of trigram--count\n * tuples, and a language dictionary.\n *\n * @param {Array.>} trigrams - An\n * array containing trigram--count tuples.\n * @param {Object.} model - Object\n * containing weighted trigrams.\n * @return {number} - The distance between the two.\n */\n\n\nfunction getDistance(trigrams, model) {\n var distance = 0;\n var index = -1;\n var length = trigrams.length;\n var trigram;\n var difference;\n\n while (++index < length) {\n trigram = trigrams[index];\n\n if (trigram[0] in model) {\n difference = trigram[1] - model[trigram[0]] - 1;\n\n if (difference < 0) {\n difference = -difference;\n }\n } else {\n difference = MAX_DIFFERENCE;\n }\n\n distance += difference;\n }\n\n return distance;\n}\n/**\n * Filter `languages` by removing languages in\n * `ignore`, or including languages in `only`.\n *\n * @param {Object.} languages - Languages\n * to filter\n * @param {Array.} only - Allowed languages; if\n * non-empty, only included languages are kept.\n * @param {Array.} ignore - Disallowed languages;\n * included languages are ignored.\n * @return {Object.} - Filtered array of\n * languages.\n */\n\n\nfunction filterLanguages(languages, only, ignore) {\n var filteredLanguages;\n var language;\n\n if (only.length === 0 && ignore.length === 0) {\n return languages;\n }\n\n filteredLanguages = {};\n\n for (language in languages) {\n if (allow(language, only, ignore)) {\n filteredLanguages[language] = languages[language];\n }\n }\n\n return filteredLanguages;\n}\n/**\n * Check if `language` can match according to settings.\n *\n * @param {string} language - Languages\n * to filter\n * @param {Array.} only - Allowed languages; if\n * non-empty, only included languages are kept.\n * @param {Array.} ignore - Disallowed languages;\n * included languages are ignored.\n * @return {boolean} - Whether `language` can match\n */\n\n\nfunction allow(language, only, ignore) {\n if (only.length === 0 && ignore.length === 0) {\n return true;\n }\n\n return (only.length === 0 || only.indexOf(language) !== -1) && ignore.indexOf(language) === -1;\n}\n/* Create a single `und` tuple. */\n\n\nfunction und() {\n return singleLanguageTuples('und');\n}\n/* Create a single tuple as a list of tuples from a given\n * language code. */\n\n\nfunction singleLanguageTuples(language) {\n return [[language, 1]];\n}\n/* Deep regular sort on the number at `1` in both objects. */\n\n\nfunction sort(a, b) {\n return a[1] - b[1];\n}","'use strict';\n\nvar trigram = require('n-gram').trigram;\n\nvar collapse = require('collapse-white-space');\n\nvar trim = require('trim');\n\nvar has = {}.hasOwnProperty;\nexports.clean = clean;\nexports.trigrams = getCleanTrigrams;\nexports.asDictionary = getCleanTrigramsAsDictionary;\nexports.asTuples = getCleanTrigramsAsTuples;\nexports.tuplesAsDictionary = getCleanTrigramTuplesAsDictionary; // Clean `value`/\n// Removed general non-important (as in, for language detection) punctuation\n// marks, symbols, and numbers.\n\nfunction clean(value) {\n if (value === null || value === undefined) {\n return '';\n }\n\n return trim(collapse(String(value).replace(/[\\u0021-\\u0040]+/g, ' '))).toLowerCase();\n} // Get clean, padded, trigrams.\n\n\nfunction getCleanTrigrams(value) {\n return trigram(' ' + clean(value) + ' ');\n} // Get an `Object` with trigrams as its attributes, and their occurence count as\n// their values.\n\n\nfunction getCleanTrigramsAsDictionary(value) {\n var trigrams = getCleanTrigrams(value);\n var index = trigrams.length;\n var dictionary = {};\n var trigram;\n\n while (index--) {\n trigram = trigrams[index];\n\n if (has.call(dictionary, trigram)) {\n dictionary[trigram]++;\n } else {\n dictionary[trigram] = 1;\n }\n }\n\n return dictionary;\n} // Get an `Array` containing trigram--count tuples from a given value.\n\n\nfunction getCleanTrigramsAsTuples(value) {\n var dictionary = getCleanTrigramsAsDictionary(value);\n var tuples = [];\n var trigram;\n\n for (trigram in dictionary) {\n tuples.push([trigram, dictionary[trigram]]);\n }\n\n tuples.sort(sort);\n return tuples;\n} // Get an `Array` containing trigram--count tuples from a given value.\n\n\nfunction getCleanTrigramTuplesAsDictionary(tuples) {\n var index = tuples.length;\n var dictionary = {};\n var tuple;\n\n while (index--) {\n tuple = tuples[index];\n dictionary[tuple[0]] = tuple[1];\n }\n\n return dictionary;\n} // Deep regular sort on item at `1` in both `Object`s.\n\n\nfunction sort(a, b) {\n return a[1] - b[1];\n}","'use strict';\n\nmodule.exports = nGram;\nnGram.bigram = nGram(2);\nnGram.trigram = nGram(3); // Factory returning a function that converts a value string to n-grams.\n\nfunction nGram(n) {\n if (typeof n !== 'number' || isNaN(n) || n < 1 || n === Infinity) {\n throw new Error('`' + n + '` is not a valid argument for n-gram');\n }\n\n return grams; // Create n-grams from a given value.\n\n function grams(value) {\n var nGrams = [];\n var index;\n\n if (value === null || value === undefined) {\n return nGrams;\n }\n\n value = value.slice ? value : String(value);\n index = value.length - n + 1;\n\n if (index < 1) {\n return nGrams;\n }\n\n while (index--) {\n nGrams[index] = value.slice(index, index + n);\n }\n\n return nGrams;\n }\n}","'use strict';\n\nmodule.exports = collapse; // `collapse(' \\t\\nbar \\nbaz\\t') // ' bar baz '`\n\nfunction collapse(value) {\n return String(value).replace(/\\s+/g, ' ');\n}","exports = module.exports = trim;\n\nfunction trim(str) {\n return str.replace(/^\\s*|\\s*$/g, '');\n}\n\nexports.left = function (str) {\n return str.replace(/^\\s*/, '');\n};\n\nexports.right = function (str) {\n return str.replace(/\\s*$/, '');\n};","// This file is generated by `build.js`.\nmodule.exports = {\n cmn: /[\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u3005\\u3007\\u3021-\\u3029\\u3038-\\u303B\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uF900-\\uFA6D\\uFA70-\\uFAD9]|[\\uD840-\\uD868\\uD86A-\\uD86C][\\uDC00-\\uDFFF]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D]|\\uD87E[\\uDC00-\\uDE1D]/g,\n Latin: /[A-Za-z\\xAA\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02B8\\u02E0-\\u02E4\\u1D00-\\u1D25\\u1D2C-\\u1D5C\\u1D62-\\u1D65\\u1D6B-\\u1D77\\u1D79-\\u1DBE\\u1E00-\\u1EFF\\u2071\\u207F\\u2090-\\u209C\\u212A\\u212B\\u2132\\u214E\\u2160-\\u2188\\u2C60-\\u2C7F\\uA722-\\uA787\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA7FF\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uFB00-\\uFB06\\uFF21-\\uFF3A\\uFF41-\\uFF5A]/g,\n Cyrillic: /[\\u0400-\\u0484\\u0487-\\u052F\\u1D2B\\u1D78\\u2DE0-\\u2DFF\\uA640-\\uA69D\\uA69F]/g,\n Arabic: /[\\u0600-\\u0604\\u0606-\\u060B\\u060D-\\u061A\\u061E\\u0620-\\u063F\\u0641-\\u064A\\u0656-\\u065F\\u066A-\\u066F\\u0671-\\u06DC\\u06DE-\\u06FF\\u0750-\\u077F\\u08A0-\\u08B2\\u08E4-\\u08FF\\uFB50-\\uFBC1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFD\\uFE70-\\uFE74\\uFE76-\\uFEFC]|\\uD803[\\uDE60-\\uDE7E]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB\\uDEF0\\uDEF1]/g,\n ben: /[\\u0980-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09FB]/g,\n Devanagari: /[\\u0900-\\u0950\\u0953-\\u0963\\u0966-\\u097F\\uA8E0-\\uA8FB]/g,\n jpn: /[\\u3041-\\u3096\\u309D-\\u309F]|\\uD82C\\uDC01|\\uD83C\\uDE00|[\\u30A1-\\u30FA\\u30FD-\\u30FF\\u31F0-\\u31FF\\u32D0-\\u32FE\\u3300-\\u3357\\uFF66-\\uFF6F\\uFF71-\\uFF9D]|\\uD82C\\uDC00/g,\n kor: /[\\u1100-\\u11FF\\u302E\\u302F\\u3131-\\u318E\\u3200-\\u321E\\u3260-\\u327E\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/g,\n tel: /[\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C78-\\u0C7F]/g,\n tam: /[\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BFA]/g,\n guj: /[\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AF1]/g,\n kan: /[\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2]/g,\n mal: /[\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D75\\u0D79-\\u0D7F]/g,\n mya: /[\\u1000-\\u109F\\uA9E0-\\uA9FE\\uAA60-\\uAA7F]/g,\n ori: /[\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B77]/g,\n pan: /[\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75]/g,\n amh: /[\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u137C\\u1380-\\u1399\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]/g,\n tha: /[\\u0E01-\\u0E3A\\u0E40-\\u0E5B]/g,\n sin: /[\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2-\\u0DF4]|\\uD804[\\uDDE1-\\uDDF4]/g,\n ell: /[\\u0370-\\u0373\\u0375-\\u0377\\u037A-\\u037D\\u037F\\u0384\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03E1\\u03F0-\\u03FF\\u1D26-\\u1D2A\\u1D5D-\\u1D61\\u1D66-\\u1D6A\\u1DBF\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FC4\\u1FC6-\\u1FD3\\u1FD6-\\u1FDB\\u1FDD-\\u1FEF\\u1FF2-\\u1FF4\\u1FF6-\\u1FFE\\u2126\\uAB65]|\\uD800[\\uDD40-\\uDD8C\\uDDA0]|\\uD834[\\uDE00-\\uDE45]/g\n};","function _typeof2(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\n/*!\n * Cropper.js v1.5.6\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2019-10-04T04:33:48.372Z\n */\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof2(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.Cropper = factory());\n})(this, function () {\n 'use strict';\n\n function _typeof(obj) {\n if (typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\") {\n _typeof = function _typeof(obj) {\n return _typeof2(obj);\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n }\n\n return _typeof(obj);\n }\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n }\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n }\n\n function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n }\n\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n }\n\n var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n var WINDOW = IS_BROWSER ? window : {};\n var IS_TOUCH_DEVICE = IS_BROWSER ? 'ontouchstart' in WINDOW.document.documentElement : false;\n var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n var NAMESPACE = 'cropper'; // Actions\n\n var ACTION_ALL = 'all';\n var ACTION_CROP = 'crop';\n var ACTION_MOVE = 'move';\n var ACTION_ZOOM = 'zoom';\n var ACTION_EAST = 'e';\n var ACTION_WEST = 'w';\n var ACTION_SOUTH = 's';\n var ACTION_NORTH = 'n';\n var ACTION_NORTH_EAST = 'ne';\n var ACTION_NORTH_WEST = 'nw';\n var ACTION_SOUTH_EAST = 'se';\n var ACTION_SOUTH_WEST = 'sw'; // Classes\n\n var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\n var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\n var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\n var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\n var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\"); // Data keys\n\n var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\"); // Drag modes\n\n var DRAG_MODE_CROP = 'crop';\n var DRAG_MODE_MOVE = 'move';\n var DRAG_MODE_NONE = 'none'; // Events\n\n var EVENT_CROP = 'crop';\n var EVENT_CROP_END = 'cropend';\n var EVENT_CROP_MOVE = 'cropmove';\n var EVENT_CROP_START = 'cropstart';\n var EVENT_DBLCLICK = 'dblclick';\n var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n var EVENT_READY = 'ready';\n var EVENT_RESIZE = 'resize';\n var EVENT_WHEEL = 'wheel';\n var EVENT_ZOOM = 'zoom'; // Mime types\n\n var MIME_TYPE_JPEG = 'image/jpeg'; // RegExps\n\n var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\n var REGEXP_DATA_URL = /^data:/;\n var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\n var REGEXP_TAG_NAME = /^img|canvas$/i; // Misc\n // Inspired by the default width and height of a canvas element.\n\n var MIN_CONTAINER_WIDTH = 200;\n var MIN_CONTAINER_HEIGHT = 100;\n var DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n // Define the initial aspect ratio of the crop box\n initialAspectRatio: NaN,\n // Define the aspect ratio of the crop box\n aspectRatio: NaN,\n // An object with the previous cropping result data\n data: null,\n // A selector for adding extra containers to preview\n preview: '',\n // Re-render the cropper when resize the window\n responsive: true,\n // Restore the cropped area after resize the window\n restore: true,\n // Check if the current image is a cross-origin image\n checkCrossOrigin: true,\n // Check the current image's Exif Orientation information\n checkOrientation: true,\n // Show the black modal\n modal: true,\n // Show the dashed lines for guiding\n guides: true,\n // Show the center indicator for guiding\n center: true,\n // Show the white modal to highlight the crop box\n highlight: true,\n // Show the grid background\n background: true,\n // Enable to crop the image automatically when initialize\n autoCrop: true,\n // Define the percentage of automatic cropping area when initializes\n autoCropArea: 0.8,\n // Enable to move the image\n movable: true,\n // Enable to rotate the image\n rotatable: true,\n // Enable to scale the image\n scalable: true,\n // Enable to zoom the image\n zoomable: true,\n // Enable to zoom the image by dragging touch\n zoomOnTouch: true,\n // Enable to zoom the image by wheeling mouse\n zoomOnWheel: true,\n // Define zoom ratio when zoom the image by wheeling mouse\n wheelZoomRatio: 0.1,\n // Enable to move the crop box\n cropBoxMovable: true,\n // Enable to resize the crop box\n cropBoxResizable: true,\n // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n toggleDragModeOnDblclick: true,\n // Size limitation\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n minContainerWidth: 200,\n minContainerHeight: 100,\n // Shortcuts of events\n ready: null,\n cropstart: null,\n cropmove: null,\n cropend: null,\n crop: null,\n zoom: null\n };\n var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
';\n /**\n * Check if the given value is not a number.\n */\n\n var isNaN = Number.isNaN || WINDOW.isNaN;\n /**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\n\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n /**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\n\n\n var isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n };\n /**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\n\n\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n /**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\n\n\n function isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n }\n\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n /**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\n\n function isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (error) {\n return false;\n }\n }\n /**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\n\n\n function isFunction(value) {\n return typeof value === 'function';\n }\n\n var slice = Array.prototype.slice;\n /**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\n\n function toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n }\n /**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\n\n\n function forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length)\n /* array-like */\n ) {\n toArray(data).forEach(function (value, key) {\n callback.call(data, value, key, data);\n });\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n\n return data;\n }\n /**\n * Extend the given object.\n * @param {*} target - The target object to extend.\n * @param {*} args - The rest objects for merging to the target object.\n * @returns {Object} The extended object.\n */\n\n\n var assign = Object.assign || function assign(target) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (isObject(target) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n target[key] = arg[key];\n });\n }\n });\n }\n\n return target;\n };\n\n var REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n /**\n * Normalize decimal number.\n * Check out {@link http://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\n\n function normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n }\n\n var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n /**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\n\n function setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value = \"\".concat(value, \"px\");\n }\n\n style[property] = value;\n });\n }\n /**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\n\n\n function hasClass(element, value) {\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n }\n /**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\n\n\n function addClass(element, value) {\n if (!value) {\n return;\n }\n\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n\n var className = element.className.trim();\n\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n }\n /**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\n\n\n function removeClass(element, value) {\n if (!value) {\n return;\n }\n\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n }\n /**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\n\n\n function toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n } // IE10-11 doesn't support the second parameter of `classList.toggle`\n\n\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n }\n\n var REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n /**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\n\n function toParamCase(value) {\n return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n }\n /**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\n\n\n function getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n\n if (element.dataset) {\n return element.dataset[name];\n }\n\n return element.getAttribute(\"data-\".concat(toParamCase(name)));\n }\n /**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\n\n\n function setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n }\n }\n /**\n * Remove data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to remove.\n */\n\n\n function removeData(element, name) {\n if (isObject(element[name])) {\n try {\n delete element[name];\n } catch (error) {\n element[name] = undefined;\n }\n } else if (element.dataset) {\n // #128 Safari not allows to delete dataset property\n try {\n delete element.dataset[name];\n } catch (error) {\n element.dataset[name] = undefined;\n }\n } else {\n element.removeAttribute(\"data-\".concat(toParamCase(name)));\n }\n }\n\n var REGEXP_SPACES = /\\s\\s*/;\n\n var onceSupported = function () {\n var supported = false;\n\n if (IS_BROWSER) {\n var once = false;\n\n var listener = function listener() {};\n\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n\n return supported;\n }();\n /**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n\n\n function removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n\n element.removeEventListener(event, handler, options);\n });\n }\n /**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n\n\n function addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n listener.apply(element, args);\n };\n\n if (!listeners[event]) {\n listeners[event] = {};\n }\n\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n\n element.addEventListener(event, _handler, options);\n });\n }\n /**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\n\n\n function dispatchEvent(element, type, data) {\n var event; // Event and CustomEvent on IE9-11 are global objects, not constructors\n\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, {\n detail: data,\n bubbles: true,\n cancelable: true\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n\n return element.dispatchEvent(event);\n }\n /**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\n\n\n function getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n }\n\n var location = WINDOW.location;\n var REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n /**\n * Check if the given URL is a cross origin URL.\n * @param {string} url - The target URL.\n * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n */\n\n function isCrossOriginURL(url) {\n var parts = url.match(REGEXP_ORIGINS);\n return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n }\n /**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\n\n\n function addTimestamp(url) {\n var timestamp = \"timestamp=\".concat(new Date().getTime());\n return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n }\n /**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\n\n\n function getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n } // Rotate should come first before scale to match orientation transform\n\n\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n }\n /**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\n\n\n function getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n\n var ratios = [];\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n ratios.push(ratio);\n });\n });\n ratios.sort(function (a, b) {\n return Math.abs(a) < Math.abs(b);\n });\n return ratios[0];\n }\n /**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\n\n\n function getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n startX: pageX,\n startY: pageY\n }, end);\n }\n /**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\n\n\n function getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n }\n /**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\n\n\n function getAdjustedSizes(_ref4) // or 'cover'\n {\n var aspectRatio = _ref4.aspectRatio,\n height = _ref4.height,\n width = _ref4.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n var isValidWidth = isPositiveNumber(width);\n var isValidHeight = isPositiveNumber(height);\n\n if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\n\n if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidWidth) {\n height = width / aspectRatio;\n } else if (isValidHeight) {\n width = height * aspectRatio;\n }\n\n return {\n width: width,\n height: height\n };\n }\n /**\n * Get the new sizes of a rectangle after rotated.\n * @param {Object} data - The original sizes.\n * @returns {Object} The result sizes.\n */\n\n\n function getRotatedSizes(_ref5) {\n var width = _ref5.width,\n height = _ref5.height,\n degree = _ref5.degree;\n degree = Math.abs(degree) % 180;\n\n if (degree === 90) {\n return {\n width: height,\n height: width\n };\n }\n\n var arc = degree % 90 * Math.PI / 180;\n var sinArc = Math.sin(arc);\n var cosArc = Math.cos(arc);\n var newWidth = width * cosArc + height * sinArc;\n var newHeight = width * sinArc + height * cosArc;\n return degree > 90 ? {\n width: newHeight,\n height: newWidth\n } : {\n width: newWidth,\n height: newHeight\n };\n }\n /**\n * Get a canvas which drew the given image.\n * @param {HTMLImageElement} image - The image for drawing.\n * @param {Object} imageData - The image data.\n * @param {Object} canvasData - The canvas data.\n * @param {Object} options - The options.\n * @returns {HTMLCanvasElement} The result canvas.\n */\n\n\n function getSourceCanvas(image, _ref6, _ref7, _ref8) {\n var imageAspectRatio = _ref6.aspectRatio,\n imageNaturalWidth = _ref6.naturalWidth,\n imageNaturalHeight = _ref6.naturalHeight,\n _ref6$rotate = _ref6.rotate,\n rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n _ref6$scaleX = _ref6.scaleX,\n scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n _ref6$scaleY = _ref6.scaleY,\n scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n var aspectRatio = _ref7.aspectRatio,\n naturalWidth = _ref7.naturalWidth,\n naturalHeight = _ref7.naturalHeight;\n var _ref8$fillColor = _ref8.fillColor,\n fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n _ref8$maxWidth = _ref8.maxWidth,\n maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n _ref8$maxHeight = _ref8.maxHeight,\n maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n _ref8$minWidth = _ref8.minWidth,\n minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n _ref8$minHeight = _ref8.minHeight,\n minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight)); // Note: should always use image's natural sizes for drawing as\n // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n\n var destMaxSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var destMinSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = fillColor;\n context.fillRect(0, 0, width, height);\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n context.imageSmoothingQuality = imageSmoothingQuality;\n context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n context.restore();\n return canvas;\n }\n\n var fromCharCode = String.fromCharCode;\n /**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\n\n function getStringFromCharCode(dataView, start, length) {\n var str = '';\n length += start;\n\n for (var i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n\n return str;\n }\n\n var REGEXP_DATA_URL_HEAD = /^data:.*,/;\n /**\n * Transform Data URL to array buffer.\n * @param {string} dataURL - The Data URL to transform.\n * @returns {ArrayBuffer} The result array buffer.\n */\n\n function dataURLToArrayBuffer(dataURL) {\n var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n var binary = atob(base64);\n var arrayBuffer = new ArrayBuffer(binary.length);\n var uint8 = new Uint8Array(arrayBuffer);\n forEach(uint8, function (value, i) {\n uint8[i] = binary.charCodeAt(i);\n });\n return arrayBuffer;\n }\n /**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\n\n\n function arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = []; // Chunk Typed Array for better performance (#435)\n\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n\n while (uint8.length > 0) {\n // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n // eslint-disable-next-line prefer-spread\n chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n }\n /**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\n\n\n function resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation; // Ignores range error when the image does not have correct Exif information\n\n try {\n var littleEndian;\n var app1Start;\n var ifdStart; // Only handle JPEG image (start by 0xFFD8)\n\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n\n offset += 1;\n }\n }\n\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n\n if (littleEndian || endianness === 0x4D4D\n /* bigEndian */\n ) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n\n var _offset;\n\n var i;\n\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n\n if (dataView.getUint16(_offset, littleEndian) === 0x0112\n /* Orientation */\n ) {\n // 8 is the offset of the current tag's value\n _offset += 8; // Get the original orientation value\n\n orientation = dataView.getUint16(_offset, littleEndian); // Override the orientation with its default value\n\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (error) {\n orientation = 1;\n }\n\n return orientation;\n }\n /**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\n\n\n function parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n // Rotate left 180°\n\n case 3:\n rotate = -180;\n break;\n // Flip vertical\n\n case 4:\n scaleY = -1;\n break;\n // Flip vertical and rotate right 90°\n\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n // Rotate right 90°\n\n case 6:\n rotate = 90;\n break;\n // Flip horizontal and rotate right 90°\n\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n // Rotate left 90°\n\n case 8:\n rotate = -90;\n break;\n\n default:\n }\n\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n }\n\n var render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\n\n if (this.cropped) {\n this.renderCropBox();\n }\n },\n initContainer: function initContainer() {\n var element = this.element,\n options = this.options,\n container = this.container,\n cropper = this.cropper;\n addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, Number(options.minContainerWidth) || 200),\n height: Math.max(container.offsetHeight, Number(options.minContainerHeight) || 100)\n };\n this.containerData = containerData;\n setStyle(cropper, {\n width: containerData.width,\n height: containerData.height\n });\n addClass(element, CLASS_HIDDEN);\n removeClass(cropper, CLASS_HIDDEN);\n },\n // Canvas (image wrapper)\n initCanvas: function initCanvas() {\n var containerData = this.containerData,\n imageData = this.imageData;\n var viewMode = this.options.viewMode;\n var rotated = Math.abs(imageData.rotate) % 180 === 90;\n var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n var aspectRatio = naturalWidth / naturalHeight;\n var canvasWidth = containerData.width;\n var canvasHeight = containerData.height;\n\n if (containerData.height * aspectRatio > containerData.width) {\n if (viewMode === 3) {\n canvasWidth = containerData.height * aspectRatio;\n } else {\n canvasHeight = containerData.width / aspectRatio;\n }\n } else if (viewMode === 3) {\n canvasHeight = containerData.width / aspectRatio;\n } else {\n canvasWidth = containerData.height * aspectRatio;\n }\n\n var canvasData = {\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n width: canvasWidth,\n height: canvasHeight\n };\n canvasData.left = (containerData.width - canvasWidth) / 2;\n canvasData.top = (containerData.height - canvasHeight) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n this.initialImageData = assign({}, imageData);\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true); // Initialize auto crop area\n\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight); // The width/height of auto crop area must large than \"minWidth/Height\"\n\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height; // The min/maxCropBoxWidth/Height must be less than container's width/height\n\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n } // The minWidth/Height must be less than maxWidth/Height\n\n\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n };\n var preview = {\n initPreview: function initPreview() {\n var element = this.element,\n crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var alt = element.alt || 'The image to preview';\n var image = document.createElement('img');\n\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n\n image.src = url;\n image.alt = alt;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n\n if (!preview) {\n return;\n }\n\n var previews = preview;\n\n if (typeof preview === 'string') {\n previews = element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img'); // Save the original size for recover\n\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n\n img.src = url;\n img.alt = alt;\n /**\n * Override img element styles\n * Add `display:block` to avoid margin top issue\n * Add `height:auto` to override `height` attribute on IE8\n * (Occur only when margin-top <= -height)\n */\n\n img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n el.innerHTML = '';\n el.appendChild(img);\n });\n },\n resetPreview: function resetPreview() {\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n setStyle(element, {\n width: data.width,\n height: data.height\n });\n element.innerHTML = data.html;\n removeData(element, DATA_PREVIEW);\n });\n },\n preview: function preview() {\n var imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var cropBoxWidth = cropBoxData.width,\n cropBoxHeight = cropBoxData.height;\n var width = imageData.width,\n height = imageData.height;\n var left = cropBoxData.left - canvasData.left - imageData.left;\n var top = cropBoxData.top - canvasData.top - imageData.top;\n\n if (!this.cropped || this.disabled) {\n return;\n }\n\n setStyle(this.viewBoxImage, assign({\n width: width,\n height: height\n }, getTransforms(assign({\n translateX: -left,\n translateY: -top\n }, imageData))));\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n var originalWidth = data.width;\n var originalHeight = data.height;\n var newWidth = originalWidth;\n var newHeight = originalHeight;\n var ratio = 1;\n\n if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\n }\n\n setStyle(element, {\n width: newWidth,\n height: newHeight\n });\n setStyle(element.getElementsByTagName('img')[0], assign({\n width: width * ratio,\n height: height * ratio\n }, getTransforms(assign({\n translateX: -left * ratio,\n translateY: -top * ratio\n }, imageData))));\n });\n }\n };\n var events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n\n if (options.zoomable && options.zoomOnWheel) {\n addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\n\n if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n\n addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n\n if (options.responsive) {\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n }\n },\n unbind: function unbind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n\n if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n };\n var handlers = {\n resize: function resize() {\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var minContainerWidth = Number(options.minContainerWidth) || MIN_CONTAINER_WIDTH;\n var minContainerHeight = Number(options.minContainerHeight) || MIN_CONTAINER_HEIGHT;\n\n if (this.disabled || containerData.width <= minContainerWidth || containerData.height <= minContainerHeight) {\n return;\n }\n\n var ratio = container.offsetWidth / containerData.width; // Resize when width changed or height changed\n\n if (ratio !== 1 || container.offsetHeight !== containerData.height) {\n var canvasData;\n var cropBoxData;\n\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n\n this.render();\n\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(event) {\n var _this = this;\n\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n\n if (this.disabled) {\n return;\n }\n\n event.preventDefault(); // Limit wheel speed to prevent zoom too fast (#21)\n\n if (this.wheeling) {\n return;\n }\n\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n\n this.zoom(-delta * ratio, event);\n },\n cropStart: function cropStart(event) {\n var buttons = event.buttons,\n button = event.button;\n\n if (this.disabled // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && ( // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0 // Open context menu\n || event.ctrlKey)) {\n return;\n }\n\n var options = this.options,\n pointers = this.pointers;\n var action;\n\n if (event.changedTouches) {\n // Handle touch event\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[event.pointerId || 0] = getPointer(event);\n }\n\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(event.target, DATA_ACTION);\n }\n\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n } // This line is required for preventing page zooming in iOS browsers\n\n\n event.preventDefault();\n this.action = action;\n this.cropping = false;\n\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(event) {\n var action = this.action;\n\n if (this.disabled || !action) {\n return;\n }\n\n var pointers = this.pointers;\n event.preventDefault();\n\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n\n this.change(event);\n },\n cropEnd: function cropEnd(event) {\n if (this.disabled) {\n return;\n }\n\n var action = this.action,\n pointers = this.pointers;\n\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[event.pointerId || 0];\n }\n\n if (!action) {\n return;\n }\n\n event.preventDefault();\n\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: event,\n action: action\n });\n }\n };\n var change = {\n change: function change(event) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset; // Locking aspect ratio in \"free mode\" by holding shift key\n\n if (!aspectRatio && event.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\n }\n\n if (this.limited) {\n minLeft = cropBoxData.minLeft;\n minTop = cropBoxData.minTop;\n maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n }\n\n var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\n };\n\n var check = function check(side) {\n switch (side) {\n case ACTION_EAST:\n if (right + range.x > maxWidth) {\n range.x = maxWidth - right;\n }\n\n break;\n\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n\n break;\n\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n\n break;\n\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n\n break;\n\n default:\n }\n };\n\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n // Resize crop box\n\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n\n check(ACTION_EAST);\n width += range.x;\n\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n\n break;\n\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n\n break;\n\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n\n break;\n\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n\n check(ACTION_SOUTH);\n height += range.y;\n\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n\n break;\n\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\n }\n\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n } else {\n check(ACTION_NORTH);\n check(ACTION_EAST);\n\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n top -= height;\n }\n\n break;\n\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\n }\n\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n left += cropBoxData.width - width;\n } else {\n check(ACTION_NORTH);\n check(ACTION_WEST);\n\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n top -= height;\n }\n\n break;\n\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_WEST);\n\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n top -= height;\n }\n\n break;\n\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\n\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n top -= height;\n }\n\n break;\n // Move canvas\n\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n // Zoom canvas\n\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), event);\n renderable = false;\n break;\n // Create crop box\n\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\n }\n\n offset = getOffset(this.cropper);\n left = pointer.startX - offset.left;\n top = pointer.startY - offset.top;\n width = cropBoxData.minWidth;\n height = cropBoxData.minHeight;\n\n if (range.x > 0) {\n action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n } else if (range.x < 0) {\n left -= width;\n action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n }\n\n if (range.y < 0) {\n top -= height;\n } // Show the crop box if is hidden\n\n\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n\n break;\n\n default:\n }\n\n if (renderable) {\n cropBoxData.width = width;\n cropBoxData.height = height;\n cropBoxData.left = left;\n cropBoxData.top = top;\n this.action = action;\n this.renderCropBox();\n } // Override\n\n\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n };\n var methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\n }\n\n return this;\n },\n // Reset the image and crop box to their initial states\n reset: function reset() {\n if (this.ready && !this.disabled) {\n this.imageData = assign({}, this.initialImageData);\n this.canvasData = assign({}, this.initialCanvasData);\n this.cropBoxData = assign({}, this.initialCropBoxData);\n this.renderCanvas();\n\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n\n return this;\n },\n // Clear the crop box\n clear: function clear() {\n if (this.cropped && !this.disabled) {\n assign(this.cropBoxData, {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n });\n this.cropped = false;\n this.renderCropBox();\n this.limitCanvas(true, true); // Render canvas after crop box rendered\n\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n\n return this;\n },\n\n /**\n * Replace the image's src and rebuild the cropper\n * @param {string} url - The new URL.\n * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n * @returns {Cropper} this\n */\n replace: function replace(url) {\n var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\n\n if (this.ready) {\n this.viewBoxImage.src = url;\n forEach(this.previews, function (element) {\n element.getElementsByTagName('img')[0].src = url;\n });\n }\n } else {\n if (this.isImg) {\n this.replaced = true;\n }\n\n this.options.data = null;\n this.uncreate();\n this.load(url);\n }\n }\n\n return this;\n },\n // Enable (unfreeze) the cropper\n enable: function enable() {\n if (this.ready && this.disabled) {\n this.disabled = false;\n removeClass(this.cropper, CLASS_DISABLED);\n }\n\n return this;\n },\n // Disable (freeze) the cropper\n disable: function disable() {\n if (this.ready && !this.disabled) {\n this.disabled = true;\n addClass(this.cropper, CLASS_DISABLED);\n }\n\n return this;\n },\n\n /**\n * Destroy the cropper and remove the instance from the image\n * @returns {Cropper} this\n */\n destroy: function destroy() {\n var element = this.element;\n\n if (!element[NAMESPACE]) {\n return this;\n }\n\n element[NAMESPACE] = undefined;\n\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n\n this.uncreate();\n return this;\n },\n\n /**\n * Move the canvas with relative offsets\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n * @returns {Cropper} this\n */\n move: function move(offsetX) {\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n var _this$canvasData = this.canvasData,\n left = _this$canvasData.left,\n top = _this$canvasData.top;\n return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n },\n\n /**\n * Move the canvas to an absolute point\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Cropper} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var canvasData = this.canvasData;\n var changed = false;\n x = Number(x);\n y = Number(y);\n\n if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n\n if (changed) {\n this.renderCanvas(true);\n }\n }\n\n return this;\n },\n\n /**\n * Zoom the canvas with a relative ratio\n * @param {number} ratio - The target ratio.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoom: function zoom(ratio, _originalEvent) {\n var canvasData = this.canvasData;\n ratio = Number(ratio);\n\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n },\n\n /**\n * Zoom the canvas to an absolute ratio\n * @param {number} ratio - The target ratio.\n * @param {Object} pivot - The zoom pivot point coordinate.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n var options = this.options,\n canvasData = this.canvasData;\n var width = canvasData.width,\n height = canvasData.height,\n naturalWidth = canvasData.naturalWidth,\n naturalHeight = canvasData.naturalHeight;\n ratio = Number(ratio);\n\n if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n\n if (_originalEvent) {\n var pointers = this.pointers;\n var offset = getOffset(this.cropper);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n }; // Zoom from the triggering point of the event\n\n canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n } else {\n // Zoom from the center of the canvas\n canvasData.left -= (newWidth - width) / 2;\n canvasData.top -= (newHeight - height) / 2;\n }\n\n canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n\n return this;\n },\n\n /**\n * Rotate the canvas with a relative degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotate: function rotate(degree) {\n return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n },\n\n /**\n * Rotate the canvas to an absolute degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotateTo: function rotateTo(degree) {\n degree = Number(degree);\n\n if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n\n return this;\n },\n\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Cropper} this\n */\n scaleX: function scaleX(_scaleX) {\n var scaleY = this.imageData.scaleY;\n return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n },\n\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scaleY: function scaleY(_scaleY) {\n var scaleX = this.imageData.scaleX;\n return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n },\n\n /**\n * Scale the image\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n var transformed = false;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n\n if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n\n return this;\n },\n\n /**\n * Get the cropped area position and size data (base on the original image)\n * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n * @returns {Object} The result cropped data.\n */\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var data;\n\n if (this.ready && this.cropped) {\n data = {\n x: cropBoxData.left - canvasData.left,\n y: cropBoxData.top - canvasData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n var ratio = imageData.width / imageData.naturalWidth;\n forEach(data, function (n, i) {\n data[i] = n / ratio;\n });\n\n if (rounded) {\n // In case rounding off leads to extra 1px in right or bottom border\n // we should round the top-left corner and the dimension (#343).\n var bottom = Math.round(data.y + data.height);\n var right = Math.round(data.x + data.width);\n data.x = Math.round(data.x);\n data.y = Math.round(data.y);\n data.width = right - data.x;\n data.height = bottom - data.y;\n }\n } else {\n data = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n\n if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n\n return data;\n },\n\n /**\n * Set the cropped area position and size with new data\n * @param {Object} data - The new data.\n * @returns {Cropper} this\n */\n setData: function setData(data) {\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData;\n var cropBoxData = {};\n\n if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\n }\n }\n\n if (options.scalable) {\n if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n imageData.scaleX = data.scaleX;\n transformed = true;\n }\n\n if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n\n if (transformed) {\n this.renderCanvas(true, true);\n }\n\n var ratio = imageData.width / imageData.naturalWidth;\n\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n\n this.setCropBoxData(cropBoxData);\n }\n\n return this;\n },\n\n /**\n * Get the container size data.\n * @returns {Object} The result container data.\n */\n getContainerData: function getContainerData() {\n return this.ready ? assign({}, this.containerData) : {};\n },\n\n /**\n * Get the image position and size data.\n * @returns {Object} The result image data.\n */\n getImageData: function getImageData() {\n return this.sized ? assign({}, this.imageData) : {};\n },\n\n /**\n * Get the canvas position and size data.\n * @returns {Object} The result canvas data.\n */\n getCanvasData: function getCanvasData() {\n var canvasData = this.canvasData;\n var data = {};\n\n if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n\n return data;\n },\n\n /**\n * Set the canvas position and size with new data.\n * @param {Object} data - The new canvas data.\n * @returns {Cropper} this\n */\n setCanvasData: function setCanvasData(data) {\n var canvasData = this.canvasData;\n var aspectRatio = canvasData.aspectRatio;\n\n if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n\n if (isNumber(data.top)) {\n canvasData.top = data.top;\n }\n\n if (isNumber(data.width)) {\n canvasData.width = data.width;\n canvasData.height = data.width / aspectRatio;\n } else if (isNumber(data.height)) {\n canvasData.height = data.height;\n canvasData.width = data.height * aspectRatio;\n }\n\n this.renderCanvas(true);\n }\n\n return this;\n },\n\n /**\n * Get the crop box position and size data.\n * @returns {Object} The result crop box data.\n */\n getCropBoxData: function getCropBoxData() {\n var cropBoxData = this.cropBoxData;\n var data;\n\n if (this.ready && this.cropped) {\n data = {\n left: cropBoxData.left,\n top: cropBoxData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n }\n\n return data || {};\n },\n\n /**\n * Set the crop box position and size with new data.\n * @param {Object} data - The new crop box data.\n * @returns {Cropper} this\n */\n setCropBoxData: function setCropBoxData(data) {\n var cropBoxData = this.cropBoxData;\n var aspectRatio = this.options.aspectRatio;\n var widthChanged;\n var heightChanged;\n\n if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\n }\n\n if (aspectRatio) {\n if (widthChanged) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else if (heightChanged) {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n\n this.renderCropBox();\n }\n\n return this;\n },\n\n /**\n * Get a canvas drawn the cropped image.\n * @param {Object} [options={}] - The config options.\n * @returns {HTMLCanvasElement} - The result canvas.\n */\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options); // Returns the source canvas if it is not cropped.\n\n if (!this.cropped) {\n return source;\n }\n\n var _this$getData = this.getData(),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\n }\n\n var aspectRatio = initialWidth / initialHeight;\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.maxWidth || Infinity,\n height: options.maxHeight || Infinity\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.minWidth || 0,\n height: options.minHeight || 0\n }, 'cover');\n\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.width || (ratio !== 1 ? source.width : initialWidth),\n height: options.height || (ratio !== 1 ? source.height : initialHeight)\n }),\n width = _getAdjustedSizes.width,\n height = _getAdjustedSizes.height;\n\n width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = options.fillColor || 'transparent';\n context.fillRect(0, 0, width, height);\n var _options$imageSmoothi = options.imageSmoothingEnabled,\n imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n imageSmoothingQuality = options.imageSmoothingQuality;\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n\n if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n } // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n\n\n var sourceWidth = source.width;\n var sourceHeight = source.height; // Source canvas parameters\n\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight; // Destination canvas parameters\n\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\n\n if (srcX <= -initialWidth || srcX > sourceWidth) {\n srcX = 0;\n srcWidth = 0;\n dstX = 0;\n dstWidth = 0;\n } else if (srcX <= 0) {\n dstX = -srcX;\n srcX = 0;\n srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n dstWidth = srcWidth;\n } else if (srcX <= sourceWidth) {\n dstX = 0;\n srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n dstWidth = srcWidth;\n }\n\n if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n srcY = 0;\n srcHeight = 0;\n dstY = 0;\n dstHeight = 0;\n } else if (srcY <= 0) {\n dstY = -srcY;\n srcY = 0;\n srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n dstHeight = srcHeight;\n } else if (srcY <= sourceHeight) {\n dstY = 0;\n srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n dstHeight = srcHeight;\n }\n\n var params = [srcX, srcY, srcWidth, srcHeight]; // Avoid \"IndexSizeError\"\n\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n } // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\n\n\n context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n return canvas;\n },\n\n /**\n * Change the aspect ratio of the crop box.\n * @param {number} aspectRatio - The new aspect ratio.\n * @returns {Cropper} this\n */\n setAspectRatio: function setAspectRatio(aspectRatio) {\n var options = this.options;\n\n if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n\n if (this.ready) {\n this.initCropBox();\n\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n\n return this;\n },\n\n /**\n * Change the drag mode.\n * @param {string} mode - The new drag mode.\n * @returns {Cropper} this\n */\n setDragMode: function setDragMode(mode) {\n var options = this.options,\n dragBox = this.dragBox,\n face = this.face;\n\n if (this.ready && !this.disabled) {\n var croppable = mode === DRAG_MODE_CROP;\n var movable = options.movable && mode === DRAG_MODE_MOVE;\n mode = croppable || movable ? mode : DRAG_MODE_NONE;\n options.dragMode = mode;\n setData(dragBox, DATA_ACTION, mode);\n toggleClass(dragBox, CLASS_CROP, croppable);\n toggleClass(dragBox, CLASS_MOVE, movable);\n\n if (!options.cropBoxMovable) {\n // Sync drag mode to crop box when it is not movable\n setData(face, DATA_ACTION, mode);\n toggleClass(face, CLASS_CROP, croppable);\n toggleClass(face, CLASS_MOVE, movable);\n }\n }\n\n return this;\n }\n };\n var AnotherCropper = WINDOW.Cropper;\n\n var Cropper =\n /*#__PURE__*/\n function () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Cropper);\n\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an or element.');\n }\n\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n\n _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n\n if (element[NAMESPACE]) {\n return;\n }\n\n element[NAMESPACE] = this;\n\n if (tagName === 'img') {\n this.isImg = true; // e.g.: \"img/picture.jpg\"\n\n url = element.getAttribute('src') || '';\n this.originalUrl = url; // Stop when it's a blank image\n\n if (!url) {\n return;\n } // e.g.: \"http://example.com/img/picture.jpg\"\n\n\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n\n if (!url) {\n return;\n }\n\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n } // Only IE10+ supports Typed Arrays\n\n\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n } // Detect the mime type of the image directly if it is a Data URL\n\n\n if (REGEXP_DATA_URL.test(url)) {\n // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n // Only a JPEG image may contains Exif Orientation information,\n // the rest types of Data URLs are not necessary to check orientation at all.\n this.clone();\n }\n\n return;\n } // 1. Detect the mime type of the image by a XMLHttpRequest.\n // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n\n\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr; // 1. Cross origin requests are only supported for protocol schemes:\n // http, https, data, chrome, chrome-extension.\n // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n // in some browsers as IE11 and Safari.\n\n xhr.onabort = clone;\n xhr.onerror = clone;\n xhr.ontimeout = clone;\n\n xhr.onprogress = function () {\n // Abort the request directly if it not a JPEG image for better performance\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n }; // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n\n\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n }\n\n xhr.open('GET', url);\n xhr.responseType = 'arraybuffer';\n xhr.withCredentials = element.crossOrigin === 'use-credentials';\n xhr.send();\n }\n }, {\n key: \"read\",\n value: function read(arrayBuffer) {\n var options = this.options,\n imageData = this.imageData; // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n\n if (orientation > 1) {\n // Generate a new URL which has the default orientation value\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n\n var _parseOrientation = parseOrientation(orientation);\n\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n }\n\n this.clone();\n }\n }, {\n key: \"clone\",\n value: function clone() {\n var element = this.element,\n url = this.url;\n var crossOrigin = element.crossOrigin;\n var crossOriginUrl = url;\n\n if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n if (!crossOrigin) {\n crossOrigin = 'anonymous';\n } // Bust cache when there is not a \"crossOrigin\" property (#519)\n\n\n crossOriginUrl = addTimestamp(url);\n }\n\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n\n image.src = crossOriginUrl || url;\n image.alt = element.alt || 'The image to crop';\n this.image = image;\n image.onload = this.start.bind(this);\n image.onerror = this.stop.bind(this);\n addClass(image, CLASS_HIDE);\n element.parentNode.insertBefore(image, element.nextSibling);\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true; // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n\n var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n\n var done = function done(naturalWidth, naturalHeight) {\n assign(_this2.imageData, {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: naturalWidth / naturalHeight\n });\n _this2.sizing = false;\n _this2.sized = true;\n\n _this2.build();\n }; // Most modern browsers (excepts iOS WebKit)\n\n\n if (image.naturalWidth && !isIOSWebKit) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n\n if (!isIOSWebKit) {\n body.removeChild(sizingImage);\n }\n };\n\n sizingImage.src = image.src; // iOS WebKit will convert the image automatically\n // with its orientation once append it into DOM (#279)\n\n if (!isIOSWebKit) {\n sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n\n var element = this.element,\n options = this.options,\n image = this.image; // Create cropper elements\n\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image); // Hide the original image\n\n addClass(element, CLASS_HIDDEN); // Inserts the cropper after to the current image\n\n container.insertBefore(cropper, element.nextSibling); // Show the image if is hidden\n\n if (!this.isImg) {\n removeClass(image, CLASS_HIDE);\n }\n\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n\n if (options.autoCrop) {\n this.crop();\n }\n\n this.setData(options.data);\n\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n\n this.ready = false;\n this.unbind();\n this.resetPreview();\n this.cropper.parentNode.removeChild(this.cropper);\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n\n return Cropper;\n }();\n\n assign(Cropper.prototype, render, preview, events, handlers, change, methods);\n return Cropper;\n});"],"sourceRoot":""}