{"version":3,"sources":["jsdelivr-header.js","webpack:///webpack/universalModuleDefinition","/npm/angular-image-cropper-gj@1.9.1/dist/webpack:/webpack/bootstrap 07f526a2d030e063477c","webpack:///index.js","/npm/angular-image-cropper-gj@1.9.1/dist/webpack:/external \"angular\"","webpack:///imageCropper.js","webpack:///imageCropperDirective.js","webpack:///angular-image-cropper.scss?b2ef","webpack:///angular-image-cropper.scss","webpack:///~/css-loader/lib/css-base.js","webpack:///~/style-loader/addStyles.js"],"names":[],"mappings":"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","file":"/npm/angular-image-cropper-gj@1.9.1/dist/angular-image-cropper.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/angular-image-cropper-gj@1.9.1/dist/angular-image-cropper.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"angular\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"angular\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"imageCropper\"] = factory(require(\"angular\"));\n\telse\n\t\troot[\"imageCropper\"] = factory(root[\"angular\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/",null,"var angular = require('angular');\n\nvar ngModule = angular.module('imageCropper', []);\n\nvar Cropper = require('./imageCropper');\nrequire('./imageCropperDirective')(angular, Cropper);\n\nmodule.exports = 'imageCropper';\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./index.js\n ** module id = 0\n ** module chunks = 0\n **/",null,"module.exports = Cropper;\n\n/**\n * Cropper.\n * @param options\n * @returns {Cropper}\n * @constructor\n */\nfunction Cropper(options) {\n\n  if (!options.imageUrl) {\n    throw new Error('Cropper: No image url given.');\n  }\n\n  this.isReady = false;\n  this.originalUrl = options.imageUrl;\n\n  // Default options.\n  var defaults = {\n    checkCrossOrigin: false,\n    apiCallback: undefined,\n    cropCallback: undefined,\n    width: 400,\n    height: 300,\n    imageUrl: undefined,\n    target: undefined,\n    showControls: true,\n    fitOnInit: false,\n    centerOnInit: false,\n    zoomStep: 0.1,\n    actionLabels: {\n      rotateLeft: ' < ',\n      rotateRight: ' > ',\n      zoomIn: ' + ',\n      zoomOut: ' - ',\n      fit: '(fit)',\n      crop: '[crop]'\n    }\n  };\n\n  // Setup options.\n  this.options = this.extend(defaults, options);\n\n  // Setup gesture events.\n  this.gesture = {};\n  this.gesture.events = {\n    start: 'touchstart mousedown',\n    move: 'touchmove mousemove',\n    stop: 'touchend mouseup'\n  };\n\n  this.pointerPosition = undefined;\n\n  // Setup basic elements.\n  this.elements = {\n    target: options.target,\n    body: document.getElementsByTagName('body')[0]\n  };\n\n  this.buildDOM();\n  this.useHardwareAccelerate(this.elements.image);\n\n  // API Setup:\n  var api = {\n    crop: this.cropImage.bind(this),\n    fit: this.applyFit.bind(this),\n    rotate: this.applyRotation.bind(this),\n    zoomIn: this.applyZoomIn.bind(this),\n    zoomOut: this.applyZoomOut.bind(this),\n    remove: this.remove.bind(this)\n  };\n\n  /**\n   * Initialization of the Cropper (dimensions, event binding...).\n   */\n  this.events.on('ImageReady', this.initialize.bind(this));\n\n  /**\n   * Execute callback function when cropped.\n   */\n  if (this.options.cropCallback) {\n    this.events.on('Cropped', function(base64) {\n      this.options.cropCallback(base64);\n    }.bind(this));\n  }\n\n  /**\n   * Send API when image is ready if readyCallback is true.\n   */\n  if (this.options.apiCallback) {\n    this.events.on('ImageReady', function() {\n      this.options.apiCallback(api);\n    }.bind(this));\n  }\n}\n\nCropper.prototype.initialize = function() {\n  this.setDimensions();\n\n  if (this.imageHasToFit()) {\n    this.fitImage();\n    this.centerImage();\n  }\n  this.initializeGesture();\n\n  if (this.options.centerOnInit) {\n    this.centerImage();\n  }\n\n  if (this.options.showControls) {\n    this.bindControls();\n  }\n};\n\nCropper.prototype.bindControls = function() {\n  var self = this;\n  this.elements.controls.rotateLeft.addEventListener('click', function() {\n    self.applyRotation(-90);\n  });\n  this.elements.controls.rotateRight.addEventListener('click', function() {\n    self.applyRotation(90);\n  });\n  this.elements.controls.zoomIn.addEventListener('click', function() {\n    self.applyZoomIn(self.zoomInFactor);\n  });\n  this.elements.controls.zoomOut.addEventListener('click', function() {\n    self.applyZoomOut(self.zoomOutFactor);\n  });\n  this.elements.controls.fit.addEventListener('click', this.applyFit.bind(this));\n  this.elements.controls.crop.addEventListener('click', this.cropImage.bind(this));\n};\n\nCropper.prototype.applyRotation = function(degree) {\n  this.rotateImage(degree);\n};\n\nCropper.prototype.applyZoomIn = function(zoom) {\n  this.zoomImage(1 + parseFloat(zoom));\n};\nCropper.prototype.applyZoomOut = function(zoom) {\n  this.zoomImage(1 / ( 1 + parseFloat(zoom)));\n};\n\nCropper.prototype.applyFit = function() {\n  this.fitImage();\n  this.centerImage();\n};\n\nCropper.prototype.imageHasToFit = function() {\n  return this.elements.image.naturalWidth < this.options.width ||\n    this.elements.image.naturalHeight < this.options.height ||\n    this.width < 1 || this.height < 1 || // 1 means 100%.\n    this.options.fitOnInit;\n};\n\n/**\n * Build DOM element for the Cropper appended in the targeted element.\n */\nCropper.prototype.buildDOM = function() {\n  var _elements;\n  _elements = this.elements;\n\n  // Wrapper.\n  _elements.wrapper = document.createElement('div');\n  _elements.wrapper.className = 'imgCropper-wrapper';\n\n  // Container.\n  _elements.container = document.createElement('div');\n  _elements.container.className = 'imgCropper-container';\n\n  // Image.\n  _elements.image = document.createElement('img');\n  _elements.image.className = 'imgCropper-image';\n\n\n  // Target -> Wrapper -> Container -> Image\n  _elements.container.appendChild(_elements.image);\n  _elements.wrapper.appendChild(_elements.container);\n  _elements.target.appendChild(_elements.wrapper);\n\n  if (!this.options.showControls) {\n    return this.loadImage();\n  }\n\n  // Controls.\n  _elements.controls = {};\n  _elements.controls.wrapper = document.createElement('div');\n  _elements.controls.wrapper.className = 'imgCropper-controls';\n\n  _elements.controls.rotateLeft = this._buildControl(this.options.actionLabels.rotateLeft);\n  _elements.controls.rotateRight = this._buildControl(this.options.actionLabels.rotateRight);\n  _elements.controls.zoomIn = this._buildControl(this.options.actionLabels.zoomIn);\n  _elements.controls.zoomOut = this._buildControl(this.options.actionLabels.zoomOut);\n  _elements.controls.fit = this._buildControl(this.options.actionLabels.fit);\n\n  _elements.controls.crop = this._buildControl(this.options.actionLabels.crop);\n\n  // Target -> Wrapper -> buttons\n  _elements.controls.wrapper.appendChild(_elements.controls.rotateLeft);\n  _elements.controls.wrapper.appendChild(_elements.controls.zoomOut);\n  _elements.controls.wrapper.appendChild(_elements.controls.fit);\n  _elements.controls.wrapper.appendChild(_elements.controls.crop);\n  _elements.controls.wrapper.appendChild(_elements.controls.zoomIn);\n  _elements.controls.wrapper.appendChild(_elements.controls.rotateRight);\n  _elements.target.appendChild(_elements.controls.wrapper);\n\n  this.loadImage();\n};\n\n/**\n * Build control element.\n * @param label\n * @returns {Element}\n */\nCropper.prototype._buildControl = function(label) {\n  var control = document.createElement('button');\n  control.setAttribute('type', 'button');\n  control.innerHTML = label;\n\n  return control;\n};\n\n/**\n * Remove all DOM element parts of the Cropper.\n */\nCropper.prototype.remove = function() {\n  var elements = this.elements;\n  elements.target.removeChild(elements.wrapper);\n  if (this.options.showControls) elements.target.removeChild(elements.controls.wrapper);\n};\n\nCropper.prototype.loadImage = function() {\n  var self = this;\n  var xhr;\n\n  // XMLHttpRequest disallows to open a Data URL in some browsers like IE11 and Safari.\n  if (/^data\\:/.test(this.originalUrl)) {\n    this.originalBase64 = this.originalUrl;\n    return this.setupImageSRC();\n  }\n\n  xhr = new XMLHttpRequest();\n  xhr.onerror = xhr.onabort = function(response) {\n    self.originalBase64 = self.originalUrl;\n    self.setupImageSRC();\n  };\n\n  // Need to have proper sets of 'Access-Control-Allow-Origin' on the requested resource server.\n  xhr.onload = function() {\n    self.originalArrayBuffer = this.response;\n    self.originalBase64 = 'data:image/jpeg;base64,' + self.base64ArrayBuffer(this.response);\n    self.setupImageSRC();\n  };\n  xhr.open('get', this.originalUrl, true);\n  //xhr.setRequestHeader('Content-Type', 'image/jpg'); // TODO: Auto determine the image MIME's type.\n  xhr.responseType = 'arraybuffer';\n  xhr.send();\n};\n\n/**\n * Check crossOrigins and setup image src.\n */\nCropper.prototype.setupImageSRC = function() {\n  var _image = this.elements.image;\n\n  if (this.options.checkCrossOrigin && this.isCrossOrigin(this.originalUrl)) {\n    this.crossOrigin = _image.crossOrigin;\n\n    if (this.crossOrigin) {\n      this.crossOrigin = this.originalUrl;\n    } else {\n      this.crossOrigin = 'anonymous';\n\n      // Bust cache with a timestamp.\n      this.crossOriginUrl = this.addTimestamp(this.originalUrl);\n    }\n  }\n\n  if (this.crossOrigin) {\n    this.elements.image.crossOrigin = this.crossOrigin;\n  }\n\n  // Setup image src.\n  this.elements.image.src = this.crossOriginUrl || this.originalUrl; // Need to verify.\n  //this.elements.image.src = this.originalBase64; // Need to verify.\n\n  // Waiting the image as loaded to trigger event.\n  this.elements.image.onload = function() {\n    this.events.triggerHandler('ImageReady');\n  }.bind(this);\n};\n\n/**\n * Set dimensions.\n */\nCropper.prototype.setDimensions = function() {\n  this.zoomInFactor = 1 + parseFloat(this.options.zoomStep);\n  this.zoomOutFactor = 1 / this.zoomInFactor;\n\n  this.imageRatio = this.options.height / this.options.width;\n  this.width = this.elements.image.naturalWidth / this.options.width;\n  this.height = this.elements.image.naturalHeight / this.options.height;\n  this.left = 0;\n  this.top = 0;\n  this.angle = 0;\n  this.data = {\n    scale: 1,\n    degrees: 0,\n    x: 0,\n    y: 0,\n    w: this.options.width,\n    h: this.options.height\n  };\n\n  // Container.\n  this.elements.container.style.width = this.width * 100 + '%';\n  this.elements.container.style.height = this.height * 100 + '%';\n  this.elements.container.style.top = 0;\n  this.elements.container.style.left = 0;\n\n  // Wrapper.\n  this.elements.wrapper.style.height = 'auto';\n  this.elements.wrapper.style.width = '100%';\n  this.elements.wrapper.style.paddingTop = (this.imageRatio * 100) + '%';\n\n  this.isReady = true;\n};\n\n/**\n * Image should be already loaded.\n */\nCropper.prototype.initializeGesture = function() {\n  var self = this;\n  this.addEventListeners(this.elements.image, this.gesture.events.start, function(event) {\n    if (self.isReady && self.isValidEvent(event)) {\n      event.preventDefault();\n      event.stopImmediatePropagation();\n      self.pointerPosition = self.getPointerPosition(event);\n      bind();\n    }\n  });\n\n  var bind = function() {\n    self.elements.body.classList.add('imgCropper-dragging');\n    self.addEventListeners(self.elements.body, self.gesture.events.move, drag);\n    self.addEventListeners(self.elements.body, self.gesture.events.stop, unbind);\n  };\n\n  var unbind = function() {\n    self.elements.body.classList.remove('imgCropper-dragging');\n    self.removeEventListeners(self.elements.body, self.gesture.events.move, drag);\n    self.removeEventListeners(self.elements.body, self.gesture.events.stop, unbind);\n  };\n\n  var drag = function(event) {\n    self.dragging.call(self, event);\n  };\n};\n\n/**\n * Dragging action.\n * @param event\n */\nCropper.prototype.dragging = function(event) {\n  var dx, dy, left, p, top;\n  event.preventDefault();\n  event.stopImmediatePropagation();\n\n  p = this.getPointerPosition(event); // Cursor position after moving.\n\n  dx = p.x - this.pointerPosition.x; // Difference (cursor movement) on X axes.\n  dy = p.y - this.pointerPosition.y; // Difference (cursor movement) on Y axes.\n\n  this.pointerPosition = p; // Update cursor position.\n\n  /**\n   * dx > 0 if moving right.\n   * dx / clientWidth is the percentage of the wrapper's width it moved over X.\n   */\n  left = (dx === 0)? null : this.left - dx / this.elements.wrapper.clientWidth;\n\n  /**\n   * dy > 0 if moving down.\n   * dy / clientHeight is the percentage of the wrapper's width it moved over Y.\n   */\n  top = (dy === 0)? null : this.top - dy / this.elements.wrapper.clientHeight;\n\n  // Move.\n  this.setOffset(left, top);\n};\n\n/**\n * Set image offset manipulations.\n * @param left {number} is a relative number.\n * @param top {number} is a relative number.\n */\nCropper.prototype.setOffset = function(left, top) {\n  /**\n   * Offset left.\n   */\n  if (left || left === 0) {\n    if (left < 0) { left = 0; }\n    if (left > this.width - 1) { left = this.width - 1; }\n\n    this.elements.container.style.left = (-left * 100).toFixed(2) + '%';\n    this.left = left;\n    this.data.x = Math.round(left * this.options.width);\n  }\n\n  /**\n   * Offset top.\n   */\n  if (top || top === 0) {\n    if (top < 0) { top = 0; }\n    if (top > this.height - 1) { top = this.height - 1; }\n\n    this.elements.container.style.top = (-top * 100).toFixed(2) + '%';\n    this.top = top;\n    this.data.y = Math.round(top * this.options.height);\n  }\n};\n\nCropper.prototype.fitImage = function() {\n  var prevWidth, relativeRatio;\n\n  prevWidth = this.width;\n  relativeRatio = this.height / this.width;\n\n  if (relativeRatio > 1) {\n    this.width = 1;\n    this.height = relativeRatio;\n  } else {\n    this.width = 1 / relativeRatio;\n    this.height = 1;\n  }\n\n  this.elements.container.style.width = (this.width * 100).toFixed(2) + '%';\n  this.elements.container.style.height = (this.height * 100).toFixed(2) + '%';\n\n  this.data.scale *= this.width / prevWidth;\n};\n\nCropper.prototype.centerImage = function() {\n  this.setOffset((this.width - 1) / 2, (this.height - 1) / 2);\n};\n\n/**\n * Do a rotation on the image with degrees given.\n * @param degrees\n */\nCropper.prototype.rotateImage = function(degrees) {\n  // Only rotate of 90°.\n  if (!(degrees !== 0 && degrees % 90 === 0)) {\n    throw new Error('Cropper: Support only multiple of 90° for rotation.');\n  }\n\n  // Smallest positive equivalent angle (total rotation).\n  this.angle = (this.angle + degrees) % 360;\n  if (this.angle < 0) {\n    this.angle += 360;\n  }\n\n  // Dimensions are changed?\n  if (degrees % 180 !== 0) {\n    /**\n     * Switch canvas dimensions (as percentages).\n     * canvasWidth = @width * this.options.width; canvasHeight = @height * this.options.height\n     * To make canvasWidth = canvasHeight (to switch dimensions):\n     * => newWidth * this.options.width = @height * this.options.height\n     * => newWidth = @height * this.options.height / this.options.width\n     * => newWidth = @height * this.imageRatio\n     */\n    var tempW = this.height * this.imageRatio;\n    var tempH = this.width / this.imageRatio;\n    this.width = tempW;\n    this.height = tempH;\n    if (this.width >= 1 && this.height >= 1) {\n      this.elements.container.style.width = this.width * 100 + '%';\n      this.elements.container.style.height = this.height * 100 + '%';\n    } else {\n      this.fitImage();\n    }\n  }\n\n  var newWidth = 1;\n  var newHeight = 1;\n\n  // Adjust element's (image) dimensions inside the container.\n  if (this.angle % 180 !== 0) {\n    var ratio = this.height / this.width * this.imageRatio;\n    newWidth = ratio;\n    newHeight = 1 / ratio;\n  }\n\n  this.elements.image.style.width = newWidth * 100 + '%';\n  this.elements.image.style.height = newHeight * 100 + '%';\n  this.elements.image.style.left = (1 - newWidth) / 2 * 100 + '%';\n  this.elements.image.style.top = (1 - newHeight) / 2 * 100 + '%';\n\n\n  this.elements.image.style.transform = 'rotate(' + this.angle + 'deg)';\n  this.elements.image.style.webkitTransform = 'rotate(' + this.angle + 'deg)';\n  this.elements.image.style.mozTransform = 'rotate(' + this.angle + 'deg)';\n  this.elements.image.style.msTransform = 'rotate(' + this.angle + 'deg)';\n  this.elements.image.style.oTransform = 'rotate(' + this.angle + 'deg)';\n\n  this.centerImage();\n  this.data.degrees = this.angle;\n};\n\nCropper.prototype.zoomImage = function(factor) {\n  if (factor <= 0 || factor == 1) {\n    return;\n  }\n\n  var originalWidth = this.width;\n\n  if (this.width * factor > 1 && this.height * factor > 1) {\n    this.height *= factor;\n    this.width *= factor;\n    this.elements.container.style.height = (this.height * 100).toFixed(2) + '%';\n    this.elements.container.style.width = (this.width * 100).toFixed(2) + '%';\n    this.data.scale *= factor;\n  } else {\n    this.fitImage();\n    factor = this.width / originalWidth;\n  }\n\n  /**\n   * Keep window center.\n   * The offsets are the distances between the image point in the center of the wrapper\n   * and each edge of the image, less half the size of the window.\n   * Percentage offsets are relative to the container (the wrapper), so half the wrapper\n   * is 50% (0.5) and when zooming the distance between any two points in the image\n   * grows by 'factor', so the new offsets are:\n   *\n   * offset = (prev-center-to-edge) * factor - half-window\n   *\n   */\n  var left = (this.left + 0.5) * factor - 0.5;\n  var top = (this.top + 0.5) * factor - 0.5;\n\n  this.setOffset(left, top);\n};\n\nCropper.prototype.cropImage = function() {\n  return this.cropHandler();\n};\n\nCropper.prototype.cropHandler = function() {\n  var canvas, context;\n\n  canvas = document.createElement('canvas');\n  canvas.height = this.options.height;\n  canvas.width = this.options.width;\n\n  var cx = -canvas.width / 2;\n  var cy = -canvas.height / 2;\n\n  context = canvas.getContext('2d');\n  context.translate(-cx,-cy); //move to centre of canvas\n  context.rotate(this.data.degrees * Math.PI/180);\n  context.scale(this.data.scale, this.data.scale);\n\n  if(this.data.degrees == 0) { // simple offsets from canvas centre & scale\n    context.drawImage(this.elements.image,\n      (cx - this.data.x) / this.data.scale,\n      (cy - this.data.y) / this.data.scale\n    );\n  } else if(this.data.degrees == 90) { // swap axis and reverse the new y origin\n    context.drawImage(this.elements.image,\n      (cy - this.data.y) / this.data.scale,\n      (-1 * this.elements.image.naturalHeight) + ((-cx + this.data.x) / this.data.scale)\n    );\n  } else if(this.data.degrees == 180) { // reverse both origins\n    context.drawImage(this.elements.image,\n      (-1 * this.elements.image.naturalWidth) + ((-cx + this.data.x) / this.data.scale),\n      (-1 * this.elements.image.naturalHeight) + ((-cy + this.data.y) / this.data.scale)\n    );\n  } else if(this.data.degrees == 270) { // swap axis and reverse the new x origin\n    context.drawImage(this.elements.image,\n      (-1 * this.elements.image.naturalWidth) + ((-cy + this.data.y) / this.data.scale),\n      (cx - this.data.x) / this.data.scale\n    );\n  }\n\n  var base64 = canvas.toDataURL('image/jpeg');\n  this.events.triggerHandler('Cropped', base64);\n  return base64;\n};\n\nCropper.prototype.useHardwareAccelerate = function(element) {\n  element.style.perspective = '1000px';\n  element.style.backfaceVisibility = 'hidden';\n};\n\nCropper.prototype.extend = function(defaults, options) {\n  var target = defaults;\n  var defaultsKeys = Object.keys(defaults);\n\n  defaultsKeys.forEach(function(key, index, keysArray) {\n    if (options[key] !== undefined) {\n      target[key] = options[key];\n    }\n  });\n\n  return target;\n};\n\n/**\n * Helper for adding new event listener on element given.\n * @param element\n * @param eventNames\n * @param func\n * @param context\n */\nCropper.prototype.addEventListeners = function(element, eventNames, func, context) {\n  eventNames.split(' ').forEach(function(eventName) {\n    if (context) {\n      element.addEventListener(eventName, func.bind(context), false);\n    } else {\n      element.addEventListener(eventName, func, false);\n    }\n  });\n};\n\n/**\n * Helper for removing event listener in element given.\n * @param element\n * @param eventNames\n * @param func\n * @param context\n */\nCropper.prototype.removeEventListeners = function(element, eventNames, func, context) {\n  eventNames.split(' ').forEach(function(eventName) {\n    if (context) {\n      element.removeEventListener(eventName, func.bind(context), false);\n    } else {\n      element.removeEventListener(eventName, func, false);\n    }\n  });\n};\n\n/**\n * Helper for setting pointer position.\n * @param {object} event\n * @returns {{x: *, y: *}}\n */\nCropper.prototype.getPointerPosition = function(event) {\n  if (this.isTouchEvent(event)) {\n    event = event.touches[0];\n  }\n  return {\n    x: event.pageX,\n    y: event.pageY\n  };\n};\n/**\n * Helper for testing if the event is valid.\n * TODO: Comment this magic thing.\n * @param event\n * @returns {boolean}\n */\nCropper.prototype.isValidEvent = function(event) {\n  if (this.isTouchEvent(event)) {\n    return event.changedTouches.length === 1;\n  }\n  return event.which === 1;\n};\n\n/**\n * Helper for testing if the event is touch.\n * @param event\n * @returns {boolean}\n */\nCropper.prototype.isTouchEvent = function(event) {\n  return /touch/i.test(event.type);\n};\n\n/**\n * Helper for adding a timestamp at the end of an URL.\n * @param url\n * @returns {string}\n */\nCropper.prototype.addTimestamp = function(url) {\n  var timestamp = 'timestamp=' + (new Date()).getTime();\n  var sign = '?';\n\n  if (url.indexOf('?') !== -1) {\n    sign = '&';\n  }\n\n  return url.concat(sign, timestamp);\n};\n/**\n * Helper for checking if the given url is cross origin.\n * @param url\n * @returns {boolean}\n */\nCropper.prototype.isCrossOrigin = function(url) {\n  var parts = url.match();\n\n  return Boolean(parts && (\n      parts[1] !== location.protocol ||\n      parts[2] !== location.hostname ||\n      parts[3] !== location.port\n    ));\n};\n\n/**\n * Helper for converting arrayBuffer to base64.\n * @param arrayBuffer\n * @returns {string}\n */\nCropper.prototype.base64ArrayBuffer = function(arrayBuffer) {\n  var base64 = '';\n  var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n  var bytes = new Uint8Array(arrayBuffer);\n  var byteLength = bytes.byteLength;\n  var byteRemainder = byteLength % 3;\n  var mainLength = byteLength - byteRemainder;\n  var a, b, c, d;\n  var chunk;\n  // Main loop deals with bytes in chunks of 3\n  for (var i = 0; i < mainLength; i = i + 3) {\n    // Combine the three bytes into a single integer\n    chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n    // Use bitmasks to extract 6-bit segments from the triplet\n    a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18\n    b = (chunk & 258048) >> 12; // 258048   = (2^6 - 1) << 12\n    c = (chunk & 4032) >> 6; // 4032     = (2^6 - 1) << 6\n    d = chunk & 63;               // 63       = 2^6 - 1\n    // Convert the raw binary segments to the appropriate ASCII encoding\n    base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];\n  }\n  // Deal with the remaining bytes and padding\n  if (byteRemainder == 1) {\n    chunk = bytes[mainLength];\n    a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2\n    // Set the 4 least significant bits to zero\n    b = (chunk & 3) << 4; // 3   = 2^2 - 1\n    base64 += encodings[a] + encodings[b] + '==';\n  } else if (byteRemainder == 2) {\n    chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];\n    a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10\n    b = (chunk & 1008) >> 4; // 1008  = (2^6 - 1) << 4\n    // Set the 2 least significant bits to zero\n    c = (chunk & 15) << 2; // 15    = 2^4 - 1\n    base64 += encodings[a] + encodings[b] + encodings[c] + '=';\n  }\n  return base64;\n};\n\n/**\n * Helper for events handler.\n */\nCropper.prototype.events = new function() {\n  var _triggers = {};\n\n  this.on = function(event, callback) {\n    if (!_triggers[event]) {\n      _triggers[event] = [];\n    }\n    _triggers[event].push(callback);\n  };\n\n  this.triggerHandler = function(event, params) {\n    if (_triggers[event]) {\n      for (var i in _triggers[event]) {\n        _triggers[event][i](params);\n      }\n    }\n  };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./imageCropper.js\n ** module id = 2\n ** module chunks = 0\n **/","if (ON_TEST) {\n  require('./imageCropperDirective.test.js')(angular);\n}\n\nmodule.exports = function(angular, Cropper) {\n  require('./angular-image-cropper.scss');\n  angular\n    .module('imageCropper')\n    .directive('imageCropper', function() {\n      return {\n        restrict: 'E',\n        scope: {\n          centerOnInit: '@',\n          checkCrossOrigin: '@',\n          cropCallback: '&',\n          api: '&',\n          fitOnInit: '@',\n          height: '@',\n          imageUrl: '@',\n          showControls: '@',\n          width: '@',\n          zoomStep: '@',\n          actionLabels: '&'\n        },\n        bindToController: true,\n        controllerAs: 'vm',\n        controller: function() {\n          var self = this;\n\n          // Get action labels.\n          this.actionLabels = this.actionLabels();\n\n          // Get callback.\n          this.apiCallback = this.api();\n          this.cropCallback = this.cropCallback();\n\n          // Eval for boolean values.\n          this.fitOnInit = eval(this.fitOnInit);\n          this.centerOnInit = eval(this.centerOnInit);\n          this.checkCrossOrigin = eval(this.checkCrossOrigin);\n          this.showControls = eval(this.showControls);\n\n          this.init = function() {\n            this.target = this.element;\n            this.api = new Cropper(self);\n          }\n        },\n        'link': function(scope, element, attributes, controller) {\n          controller.element = element[0];\n          controller.init();\n        }\n      };\n    });\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./imageCropperDirective.js\n ** module id = 3\n ** module chunks = 0\n **/","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!./../node_modules/css-loader/index.js!./../node_modules/sass-loader/index.js!./angular-image-cropper.scss\");\nif(typeof content === 'string') content = [[module.id, content, '']];\n// add the styles to the DOM\nvar update = require(\"!./../node_modules/style-loader/addStyles.js\")(content, {});\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(module.hot) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\"!!./../node_modules/css-loader/index.js!./../node_modules/sass-loader/index.js!./angular-image-cropper.scss\", function() {\n\t\t\tvar newContent = require(\"!!./../node_modules/css-loader/index.js!./../node_modules/sass-loader/index.js!./angular-image-cropper.scss\");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./angular-image-cropper.scss\n ** module id = 4\n ** module chunks = 0\n **/","exports = module.exports = require(\"./../node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.id, \"body.imgCropper-dragging, body.imgCropper-dragging * {\\n  cursor: move !important;\\n  cursor: -webkit-grabbing !important;\\n  cursor: -moz-grabbing !important;\\n  cursor: grabbing !important;\\n  cursor: grabbing, move;\\n  /* IE hack */ }\\n\\n.imgCropper-wrapper {\\n  display: block;\\n  position: relative;\\n  overflow: hidden;\\n  cursor: move;\\n  cursor: -webkit-grab;\\n  cursor: -moz-grab;\\n  cursor: grab;\\n  cursor: grab, move;\\n  /* IE hack */ }\\n\\n.imgCropper-container {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  text-align: center;\\n  margin: 0 !important;\\n  padding: 0 !important;\\n  border: none !important; }\\n\\n.imgCropper-container > * {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  max-width: none;\\n  max-height: none;\\n  width: 100%;\\n  height: 100%;\\n  margin: 0 !important;\\n  padding: 0 !important;\\n  border: none !important; }\\n\\n.imgCropper-sample {\\n  position: absolute !important;\\n  top: -100000px     !important;\\n  left: -100000px    !important;\\n  width: auto        !important;\\n  height: auto       !important; }\\n\", \"\"]);\n\n// exports\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/css-loader!../~/sass-loader!./angular-image-cropper.scss\n ** module id = 5\n ** module chunks = 0\n **/","/*\r\n\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\tAuthor Tobias Koppers @sokra\r\n*/\r\n// css base code, injected by the css-loader\r\nmodule.exports = function() {\r\n\tvar list = [];\r\n\r\n\t// return the list of modules as css string\r\n\tlist.toString = function toString() {\r\n\t\tvar result = [];\r\n\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\tvar item = this[i];\r\n\t\t\tif(item[2]) {\r\n\t\t\t\tresult.push(\"@media \" + item[2] + \"{\" + item[1] + \"}\");\r\n\t\t\t} else {\r\n\t\t\t\tresult.push(item[1]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result.join(\"\");\r\n\t};\r\n\r\n\t// import a list of modules into the list\r\n\tlist.i = function(modules, mediaQuery) {\r\n\t\tif(typeof modules === \"string\")\r\n\t\t\tmodules = [[null, modules, \"\"]];\r\n\t\tvar alreadyImportedModules = {};\r\n\t\tfor(var i = 0; i < this.length; i++) {\r\n\t\t\tvar id = this[i][0];\r\n\t\t\tif(typeof id === \"number\")\r\n\t\t\t\talreadyImportedModules[id] = true;\r\n\t\t}\r\n\t\tfor(i = 0; i < modules.length; i++) {\r\n\t\t\tvar item = modules[i];\r\n\t\t\t// skip already imported module\r\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\r\n\t\t\t//  when a module is imported multiple times with different media queries.\r\n\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\r\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\r\n\t\t\t\tif(mediaQuery && !item[2]) {\r\n\t\t\t\t\titem[2] = mediaQuery;\r\n\t\t\t\t} else if(mediaQuery) {\r\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\r\n\t\t\t\t}\r\n\t\t\t\tlist.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\treturn list;\r\n};\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/css-loader/lib/css-base.js\n ** module id = 6\n ** module chunks = 0\n **/","/*\r\n\tMIT License http://www.opensource.org/licenses/mit-license.php\r\n\tAuthor Tobias Koppers @sokra\r\n*/\r\nvar stylesInDom = {},\r\n\tmemoize = function(fn) {\r\n\t\tvar memo;\r\n\t\treturn function () {\r\n\t\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\r\n\t\t\treturn memo;\r\n\t\t};\r\n\t},\r\n\tisOldIE = memoize(function() {\r\n\t\treturn /msie [6-9]\\b/.test(window.navigator.userAgent.toLowerCase());\r\n\t}),\r\n\tgetHeadElement = memoize(function () {\r\n\t\treturn document.head || document.getElementsByTagName(\"head\")[0];\r\n\t}),\r\n\tsingletonElement = null,\r\n\tsingletonCounter = 0,\r\n\tstyleElementsInsertedAtTop = [];\r\n\r\nmodule.exports = function(list, options) {\r\n\tif(typeof DEBUG !== \"undefined\" && DEBUG) {\r\n\t\tif(typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\r\n\t}\r\n\r\n\toptions = options || {};\r\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\r\n\t// tags it will allow on a page\r\n\tif (typeof options.singleton === \"undefined\") options.singleton = isOldIE();\r\n\r\n\t// By default, add <style> tags to the bottom of <head>.\r\n\tif (typeof options.insertAt === \"undefined\") options.insertAt = \"bottom\";\r\n\r\n\tvar styles = listToStyles(list);\r\n\taddStylesToDom(styles, options);\r\n\r\n\treturn function update(newList) {\r\n\t\tvar mayRemove = [];\r\n\t\tfor(var i = 0; i < styles.length; i++) {\r\n\t\t\tvar item = styles[i];\r\n\t\t\tvar domStyle = stylesInDom[item.id];\r\n\t\t\tdomStyle.refs--;\r\n\t\t\tmayRemove.push(domStyle);\r\n\t\t}\r\n\t\tif(newList) {\r\n\t\t\tvar newStyles = listToStyles(newList);\r\n\t\t\taddStylesToDom(newStyles, options);\r\n\t\t}\r\n\t\tfor(var i = 0; i < mayRemove.length; i++) {\r\n\t\t\tvar domStyle = mayRemove[i];\r\n\t\t\tif(domStyle.refs === 0) {\r\n\t\t\t\tfor(var j = 0; j < domStyle.parts.length; j++)\r\n\t\t\t\t\tdomStyle.parts[j]();\r\n\t\t\t\tdelete stylesInDom[domStyle.id];\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction addStylesToDom(styles, options) {\r\n\tfor(var i = 0; i < styles.length; i++) {\r\n\t\tvar item = styles[i];\r\n\t\tvar domStyle = stylesInDom[item.id];\r\n\t\tif(domStyle) {\r\n\t\t\tdomStyle.refs++;\r\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\r\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\r\n\t\t\t}\r\n\t\t\tfor(; j < item.parts.length; j++) {\r\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvar parts = [];\r\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\r\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\r\n\t\t\t}\r\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction listToStyles(list) {\r\n\tvar styles = [];\r\n\tvar newStyles = {};\r\n\tfor(var i = 0; i < list.length; i++) {\r\n\t\tvar item = list[i];\r\n\t\tvar id = item[0];\r\n\t\tvar css = item[1];\r\n\t\tvar media = item[2];\r\n\t\tvar sourceMap = item[3];\r\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\r\n\t\tif(!newStyles[id])\r\n\t\t\tstyles.push(newStyles[id] = {id: id, parts: [part]});\r\n\t\telse\r\n\t\t\tnewStyles[id].parts.push(part);\r\n\t}\r\n\treturn styles;\r\n}\r\n\r\nfunction insertStyleElement(options, styleElement) {\r\n\tvar head = getHeadElement();\r\n\tvar lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];\r\n\tif (options.insertAt === \"top\") {\r\n\t\tif(!lastStyleElementInsertedAtTop) {\r\n\t\t\thead.insertBefore(styleElement, head.firstChild);\r\n\t\t} else if(lastStyleElementInsertedAtTop.nextSibling) {\r\n\t\t\thead.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);\r\n\t\t} else {\r\n\t\t\thead.appendChild(styleElement);\r\n\t\t}\r\n\t\tstyleElementsInsertedAtTop.push(styleElement);\r\n\t} else if (options.insertAt === \"bottom\") {\r\n\t\thead.appendChild(styleElement);\r\n\t} else {\r\n\t\tthrow new Error(\"Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\");\r\n\t}\r\n}\r\n\r\nfunction removeStyleElement(styleElement) {\r\n\tstyleElement.parentNode.removeChild(styleElement);\r\n\tvar idx = styleElementsInsertedAtTop.indexOf(styleElement);\r\n\tif(idx >= 0) {\r\n\t\tstyleElementsInsertedAtTop.splice(idx, 1);\r\n\t}\r\n}\r\n\r\nfunction createStyleElement(options) {\r\n\tvar styleElement = document.createElement(\"style\");\r\n\tstyleElement.type = \"text/css\";\r\n\tinsertStyleElement(options, styleElement);\r\n\treturn styleElement;\r\n}\r\n\r\nfunction createLinkElement(options) {\r\n\tvar linkElement = document.createElement(\"link\");\r\n\tlinkElement.rel = \"stylesheet\";\r\n\tinsertStyleElement(options, linkElement);\r\n\treturn linkElement;\r\n}\r\n\r\nfunction addStyle(obj, options) {\r\n\tvar styleElement, update, remove;\r\n\r\n\tif (options.singleton) {\r\n\t\tvar styleIndex = singletonCounter++;\r\n\t\tstyleElement = singletonElement || (singletonElement = createStyleElement(options));\r\n\t\tupdate = applyToSingletonTag.bind(null, styleElement, styleIndex, false);\r\n\t\tremove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);\r\n\t} else if(obj.sourceMap &&\r\n\t\ttypeof URL === \"function\" &&\r\n\t\ttypeof URL.createObjectURL === \"function\" &&\r\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\r\n\t\ttypeof Blob === \"function\" &&\r\n\t\ttypeof btoa === \"function\") {\r\n\t\tstyleElement = createLinkElement(options);\r\n\t\tupdate = updateLink.bind(null, styleElement);\r\n\t\tremove = function() {\r\n\t\t\tremoveStyleElement(styleElement);\r\n\t\t\tif(styleElement.href)\r\n\t\t\t\tURL.revokeObjectURL(styleElement.href);\r\n\t\t};\r\n\t} else {\r\n\t\tstyleElement = createStyleElement(options);\r\n\t\tupdate = applyToTag.bind(null, styleElement);\r\n\t\tremove = function() {\r\n\t\t\tremoveStyleElement(styleElement);\r\n\t\t};\r\n\t}\r\n\r\n\tupdate(obj);\r\n\r\n\treturn function updateStyle(newObj) {\r\n\t\tif(newObj) {\r\n\t\t\tif(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)\r\n\t\t\t\treturn;\r\n\t\t\tupdate(obj = newObj);\r\n\t\t} else {\r\n\t\t\tremove();\r\n\t\t}\r\n\t};\r\n}\r\n\r\nvar replaceText = (function () {\r\n\tvar textStore = [];\r\n\r\n\treturn function (index, replacement) {\r\n\t\ttextStore[index] = replacement;\r\n\t\treturn textStore.filter(Boolean).join('\\n');\r\n\t};\r\n})();\r\n\r\nfunction applyToSingletonTag(styleElement, index, remove, obj) {\r\n\tvar css = remove ? \"\" : obj.css;\r\n\r\n\tif (styleElement.styleSheet) {\r\n\t\tstyleElement.styleSheet.cssText = replaceText(index, css);\r\n\t} else {\r\n\t\tvar cssNode = document.createTextNode(css);\r\n\t\tvar childNodes = styleElement.childNodes;\r\n\t\tif (childNodes[index]) styleElement.removeChild(childNodes[index]);\r\n\t\tif (childNodes.length) {\r\n\t\t\tstyleElement.insertBefore(cssNode, childNodes[index]);\r\n\t\t} else {\r\n\t\t\tstyleElement.appendChild(cssNode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction applyToTag(styleElement, obj) {\r\n\tvar css = obj.css;\r\n\tvar media = obj.media;\r\n\tvar sourceMap = obj.sourceMap;\r\n\r\n\tif(media) {\r\n\t\tstyleElement.setAttribute(\"media\", media)\r\n\t}\r\n\r\n\tif(styleElement.styleSheet) {\r\n\t\tstyleElement.styleSheet.cssText = css;\r\n\t} else {\r\n\t\twhile(styleElement.firstChild) {\r\n\t\t\tstyleElement.removeChild(styleElement.firstChild);\r\n\t\t}\r\n\t\tstyleElement.appendChild(document.createTextNode(css));\r\n\t}\r\n}\r\n\r\nfunction updateLink(linkElement, obj) {\r\n\tvar css = obj.css;\r\n\tvar media = obj.media;\r\n\tvar sourceMap = obj.sourceMap;\r\n\r\n\tif(sourceMap) {\r\n\t\t// http://stackoverflow.com/a/26603875\r\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\r\n\t}\r\n\r\n\tvar blob = new Blob([css], { type: \"text/css\" });\r\n\r\n\tvar oldSrc = linkElement.href;\r\n\r\n\tlinkElement.href = URL.createObjectURL(blob);\r\n\r\n\tif(oldSrc)\r\n\t\tURL.revokeObjectURL(oldSrc);\r\n}\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/style-loader/addStyles.js\n ** module id = 7\n ** module chunks = 0\n **/"]}