From e5c8ccc189aff44442e9cc8b953440ecc83bd9c8 Mon Sep 17 00:00:00 2001 From: Chen Fengyuan Date: Thu, 1 Mar 2018 22:35:45 +0800 Subject: [PATCH] build: release 4.0.0-alpha --- CHANGELOG.md | 37 + README.md | 920 +- dist/cropper.common.js | 1954 ++-- dist/cropper.css | 5 +- dist/cropper.esm.js | 1954 ++-- dist/cropper.js | 1954 ++-- dist/cropper.min.css | 4 +- dist/cropper.min.js | 6 +- docs/apple-touch-icon.png | Bin 3796 -> 0 bytes docs/css/cropper.css | 5 +- docs/images/data.jpg | Bin 16534 -> 0 bytes docs/images/layers.jpg | Bin 26921 -> 0 bytes docs/images/picture-2.jpg | Bin 182998 -> 0 bytes docs/images/picture-3.jpg | Bin 224777 -> 0 bytes docs/index.html | 13 +- docs/js/cropper.js | 1954 ++-- docs/js/main.js | 24 +- docs/v0.7.9/css/cropper.css | 278 - docs/v0.7.9/css/cropper.min.css | 9 - docs/v0.7.9/css/main.css | 248 - docs/v0.7.9/img/picture-1.jpg | Bin 157370 -> 0 bytes docs/v0.7.9/img/picture-2.jpg | Bin 101348 -> 0 bytes docs/v0.7.9/index.html | 914 -- docs/v0.7.9/js/cropper.js | 1641 ---- docs/v0.7.9/js/cropper.min.js | 9 - docs/v0.7.9/js/main.js | 278 - docs/v1.0.0/css/cropper.min.css | 9 - docs/v1.0.0/css/main.css | 304 - docs/v1.0.0/img/picture-2.jpg | Bin 182998 -> 0 bytes docs/v1.0.0/index.html | 697 -- docs/v1.0.0/js/cropper.js | 2519 ----- docs/v1.0.0/js/cropper.min.js | 10 - docs/v1.0.0/js/main.js | 301 - docs/v2.3.4/css/cropper.css | 2 +- docs/v2.3.4/css/cropper.min.css | 9 - .../{v1.0.0/img => v2.3.4/images}/picture.jpg | Bin docs/v2.3.4/img/data.jpg | Bin 16534 -> 0 bytes docs/v2.3.4/img/icons.png | Bin 3065 -> 0 bytes docs/v2.3.4/img/layers.jpg | Bin 26921 -> 0 bytes docs/v2.3.4/img/picture-2.jpg | Bin 182998 -> 0 bytes docs/v2.3.4/img/picture-3.jpg | Bin 224777 -> 0 bytes docs/v2.3.4/index.html | 12 +- docs/v2.3.4/js/cropper.js | 2 +- docs/v2.3.4/js/cropper.min.js | 10 - docs/{v1.0.0 => v3.1.6}/css/cropper.css | 233 +- docs/v3.1.6/css/main.css | 253 + .../{v2.3.4/img => v3.1.6/images}/picture.jpg | Bin docs/v3.1.6/index.html | 567 ++ docs/v3.1.6/js/cropper.js | 3260 +++++++ docs/v3.1.6/js/main.js | 275 + package-lock.json | 8284 +++++++++++------ package.json | 41 +- 52 files changed, 14896 insertions(+), 14099 deletions(-) delete mode 100644 docs/apple-touch-icon.png delete mode 100644 docs/images/data.jpg delete mode 100644 docs/images/layers.jpg delete mode 100644 docs/images/picture-2.jpg delete mode 100644 docs/images/picture-3.jpg delete mode 100644 docs/v0.7.9/css/cropper.css delete mode 100644 docs/v0.7.9/css/cropper.min.css delete mode 100644 docs/v0.7.9/css/main.css delete mode 100644 docs/v0.7.9/img/picture-1.jpg delete mode 100644 docs/v0.7.9/img/picture-2.jpg delete mode 100644 docs/v0.7.9/index.html delete mode 100644 docs/v0.7.9/js/cropper.js delete mode 100644 docs/v0.7.9/js/cropper.min.js delete mode 100644 docs/v0.7.9/js/main.js delete mode 100644 docs/v1.0.0/css/cropper.min.css delete mode 100644 docs/v1.0.0/css/main.css delete mode 100644 docs/v1.0.0/img/picture-2.jpg delete mode 100644 docs/v1.0.0/index.html delete mode 100644 docs/v1.0.0/js/cropper.js delete mode 100644 docs/v1.0.0/js/cropper.min.js delete mode 100644 docs/v1.0.0/js/main.js delete mode 100644 docs/v2.3.4/css/cropper.min.css rename docs/{v1.0.0/img => v2.3.4/images}/picture.jpg (100%) delete mode 100644 docs/v2.3.4/img/data.jpg delete mode 100644 docs/v2.3.4/img/icons.png delete mode 100644 docs/v2.3.4/img/layers.jpg delete mode 100644 docs/v2.3.4/img/picture-2.jpg delete mode 100644 docs/v2.3.4/img/picture-3.jpg delete mode 100644 docs/v2.3.4/js/cropper.min.js rename docs/{v1.0.0 => v3.1.6}/css/cropper.css (75%) create mode 100644 docs/v3.1.6/css/main.css rename docs/{v2.3.4/img => v3.1.6/images}/picture.jpg (100%) create mode 100644 docs/v3.1.6/index.html create mode 100644 docs/v3.1.6/js/cropper.js create mode 100644 docs/v3.1.6/js/main.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 2deaffbf..2d57d734 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,42 @@ # Changelog +## 4.0.0-alpha (Mar 1, 2018) + +- The core code of Cropper is replaced with [Cropper.js](https://github.com/fengyuanchen/cropperjs) now. +- Migration from Cropper 3.x: + - **Before:** + ```js + $().cropper({ + crop(event) { + console.log( + event.x, + event.y, + event.width, + event.height, + event.rotate, + event.scaleX, + event.scaleY, + ); + }, + }); + ``` + - **After:** + ```js + $().cropper({ + crop(event) { + console.log( + event.detail.x, + event.detail.y, + event.detail.width, + event.detail.height, + event.detail.rotate, + event.detail.scaleX, + event.detail.scaleY, + ); + }, + }); + ``` + ## 3.1.6 (Mar 1, 2018) - Fixed a bug of incorrect behavior of `viewMode: 2`. diff --git a/README.md b/README.md index a4adada2..c4f28338 100644 --- a/README.md +++ b/README.md @@ -2,40 +2,11 @@ [![Build Status](https://travis-ci.org/fengyuanchen/cropper.svg)](https://travis-ci.org/fengyuanchen/cropper) [![Downloads](https://img.shields.io/npm/dm/cropper.svg)](https://www.npmjs.com/package/cropper) [![Version](https://img.shields.io/npm/v/cropper.svg)](https://www.npmjs.com/package/cropper) -> A simple jQuery image cropping plugin. - -- [Website](https://fengyuanchen.github.io/cropper) -- [Cropper.js](https://github.com/fengyuanchen/cropperjs) - the non-jQuery version of Cropper (**recommended**). - -## Table of contents - -- [Features](#features) -- [Main](#main) -- [Getting started](#getting-started) -- [Options](#options) -- [Methods](#methods) -- [Events](#events) -- [No conflict](#no-conflict) -- [Browser support](#browser-support) -- [Contributing](#contributing) -- [Versioning](#versioning) -- [License](#license) - -## Features - -- Supports jQuery v1.9.1+ -- Supports 38 [options](#options) -- Supports 27 [methods](#methods) -- Supports 6 [events](#events) -- Supports touch (mobile) -- Supports zooming -- Supports rotating -- Supports scaling (flipping) -- Supports multiple croppers -- Supports to crop on a canvas -- Supports to crop image in the browser-side by canvas -- Supports to translate Exif Orientation information -- Cross-browser support +> A simple jQuery image cropping plugin. As of v4.0.0, the core code of Cropper is replaced with [Cropper.js](https://github.com/fengyuanchen/cropperjs). + +- [Demo](https://fengyuanchen.github.io/cropper) +- [Cropper.js](https://github.com/fengyuanchen/cropperjs) - JavaScript image cropper (**recommended**) +- [jquery-cropper](https://github.com/fengyuanchen/jquery-cropper) - A jQuery plugin wrapper for Cropper.js (**recommended** for jQuery users to use this instead of Cropper) ## Main @@ -88,875 +59,43 @@ img { ```js $('#image').cropper({ aspectRatio: 16 / 9, - crop: function(e) { + crop: function(event) { // Output the result data for cropping image. - console.log(e.x); - console.log(e.y); - console.log(e.width); - console.log(e.height); - console.log(e.rotate); - console.log(e.scaleX); - console.log(e.scaleY); + console.log(event.detail.x); + console.log(event.detail.y); + console.log(event.detail.width); + console.log(event.detail.height); + console.log(event.detail.rotate); + console.log(event.detail.scaleX); + console.log(event.detail.scaleY); } }); ``` -#### FAQ - -How to crop a new area after zoom in or zoom out? - -> Just double click your mouse to enter crop mode. - -How to move the image after crop an area? - -> Just double click your mouse to enter move mode. - -How to fix aspect ratio in free ratio mode? - -> Just hold the `shift` key when you resize the crop box. - -How to crop a square area in free ratio mode? - -> Just hold the `shift` key when you crop on the image. - -#### Notes - -- The size of the cropper inherits from the size of the image's parent element (wrapper), so be sure to wrap the image with a **visible block element**. - > If you are using cropper in a modal, you should initialize the cropper after the modal shown completely. Otherwise, you will not get a correct cropper. - -- The outputted cropped data bases on the original image size, so you can use them to crop the image directly. - -- If you try to start cropper on a cross-origin image, please make sure that your browser supports HTML5 [CORS settings attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes), and your image server supports the `Access-Control-Allow-Origin` option (see the [HTTP access control (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)). - -#### Known issues - -- [Known iOS resource limits](https://developer.apple.com/library/mac/documentation/AppleApplications/Reference/SafariWebContent/CreatingContentforSafarioniPhone/CreatingContentforSafarioniPhone.html): As iOS devices limit memory, the browser may crash when you are cropping a large image (iPhone camera resolution). To avoid this, you may resize the image first (below 1024px) before start a cropper. - -- Known image size increase: When export the cropped image on browser-side with the `HTMLCanvasElement.toDataURL` method, the size of the exported image may be greater than the original image's. This is because the type of the exported image is not the same as the original image's. So just pass the type the original image's as the first parameter to `toDataURL` to fix this. For example, if the original type is JPEG, then use `$().cropper('getCroppedCanvas').toDataURL('image/jpeg')` to export image. - -[⬆ back to top](#table-of-contents) - ## Options -You may set cropper options with `$().cropper(options)`. -If you want to change the global default options, You may use `$.fn.cropper.setDefaults(options)`. - -### viewMode - -- Type: `Number` -- Default: `0` -- Options: - - `0`: no restrictions - - `1`: restrict the crop box to not exceed the size of the canvas. - - `2`: restrict the minimum canvas size to fit within the container. If the proportions of the the canvas and the container differ, the minimum canvas will be surrounded by extra space in one of the dimensions. - - `3`: restrict the minimum canvas size to fill fit the container. If the proportions of the canvas and the container are different, the container will not be able to fit the whole canvas in one of the dimensions. - -Define the view mode of the cropper. If you set `viewMode` to `0`, the crop box can extend outside the canvas, while a value of `1`, `2` or `3` will restrict the crop box to the size of the canvas. A `viewMode` of `2` or `3` will additionally restrict the canvas to the container. Note that if the proportions of the canvas and the container are the same, there is no difference between `2` and `3`. - -### dragMode - -- Type: `String` -- Default: `'crop'` -- Options: - - `'crop'`: create a new crop box - - `'move'`: move the canvas - - `'none'`: do nothing - -Define the dragging mode of the cropper. - -### aspectRatio - -- Type: `Number` -- Default: `NaN` - -Set the aspect ratio of the crop box. By default, the crop box is free ratio. - -### data - -- Type: `Object` -- Default: `null` - -The previous cropped data if you had stored, will be passed to `setData` method automatically. - -### preview - -- Type: `String` (**jQuery selector**) -- Default: `''` - -Add extra elements (containers) for previewing. - -**Notes:** - -- The maximum width is the initial width of preview container. -- The maximum height is the initial height of preview container. -- If you set an `aspectRatio` option, be sure to set the preview container with the same aspect ratio. -- If preview is not getting properly displayed, set `overflow:hidden` to the preview container. - -### responsive - -- Type: `Boolean` -- Default: `true` - -Re-render the cropper when resize the window. - -### restore - -- Type: `Boolean` -- Default: `true` - -Restore the cropped area after resize the window. - -### checkCrossOrigin - -- Type: `Boolean` -- Default: `true` - -Check if the current image is a cross-origin image. - -If it is, when clone the image, a `crossOrigin` attribute will be added to the cloned image element and a timestamp will be added to the `src` attribute to reload the source image to avoid browser cache error. - -By adding `crossOrigin` attribute to image will stop adding timestamp to image url and stop reload of image, but the request (XMLHttpRequest) to read the image data for orientation checking will require a timestamp now. - -If the value of the image's `crossOrigin` attribute is `"use-credentials"`, then the `withCredentials` attribute will set to `true` when read the image data by XMLHttpRequest. - -### checkOrientation - -- Type: `Boolean` -- Default: `true` - -Check the current image's Exif Orientation information. - -More exactly, read the Orientation value for rotating or flipping the image, and then override the Orientation value with `1` (the default value) to avoid some issues (#120, #509) on iOS devices. - -Requires to set both the `rotatable` and `scalable` options to `true` at the same time. - -**Note:** Don't trust this all the time as some JPG images have incorrect (not standard) Orientation values. - -> Requires [Typed Arrays](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) support ([IE 10+](http://caniuse.com/typedarrays)). - -### modal - -- Type: `Boolean` -- Default: `true` - -Show the black modal above the image and under the crop box. - -### guides - -- Type: `Boolean` -- Default: `true` - -Show the dashed lines above the crop box. - -### center - -- Type: `Boolean` -- Default: `true` - -Show the center indicator above the crop box. - -### highlight - -- Type: `Boolean` -- Default: `true` - -Show the white modal above the crop box (highlight the crop box). - -### background - -- Type: `Boolean` -- Default: `true` - -Show the grid background of the container. - -### autoCrop - -- Type: `Boolean` -- Default: `true` - -Enable to crop the image automatically when initialize. - -### autoCropArea - -- Type: `Number` -- Default: `0.8` (80% of the image) - -A number between 0 and 1. Define the automatic cropping area size (percentage). - -### movable - -- Type: `Boolean` -- Default: `true` - -Enable to move the image. - -### rotatable - -- Type: `Boolean` -- Default: `true` - -Enable to rotate the image. - -### scalable - -- Type: `Boolean` -- Default: `true` - -Enable to scale the image. - -### zoomable - -- Type: `Boolean` -- Default: `true` - -Enable to zoom the image. - -### zoomOnTouch - -- Type: `Boolean` -- Default: `true` - -Enable to zoom the image by dragging touch. - -### zoomOnWheel - -- Type: `Boolean` -- Default: `true` - -Enable to zoom the image by wheeling mouse. - -### wheelZoomRatio - -- Type: `Number` -- Default: `0.1` - -Define zoom ratio when zoom the image by wheeling mouse. - -### cropBoxMovable - -- Type: `Boolean` -- Default: `true` - -Enable to move the crop box by dragging. - -### cropBoxResizable - -- Type: `Boolean` -- Default: `true` - -Enable to resize the crop box by dragging. - -### toggleDragModeOnDblclick - -- Type: `Boolean` -- Default: `true` - -Enable to toggle drag mode between "crop" and "move" when click twice on the cropper. - -### minContainerWidth - -- Type: `Number` -- Default: `200` - -The minimum width of the container. - -### minContainerHeight - -- Type: `Number` -- Default: `100` - -The minimum height of the container. - -### minCanvasWidth - -- Type: `Number` -- Default: `0` - -The minimum width of the canvas (image wrapper). - -### minCanvasHeight - -- Type: `Number` -- Default: `0` - -The minimum height of the canvas (image wrapper). - -### minCropBoxWidth - -- Type: `Number` -- Default: `0` - -The minimum width of the crop box. - -**Note:** This size is relative to the page, not the image. - -### minCropBoxHeight - -- Type: `Number` -- Default: `0` - -The minimum height of the crop box. - -**Note:** This size is relative to the page, not the image. - -### ready - -- Type: `Function` -- Default: `null` - -A shortcut of the "ready" event. - -### cropstart - -- Type: `Function` -- Default: `null` - -A shortcut of the "cropstart" event. - -### cropmove - -- Type: `Function` -- Default: `null` - -A shortcut of the "cropmove" event. - -### cropend - -- Type: `Function` -- Default: `null` - -A shortcut of the "cropend" event. - -### crop - -- Type: `Function` -- Default: `null` - -A shortcut of the "crop" event. - -### zoom - -- Type: `Function` -- Default: `null` - -A shortcut of the "zoom" event. - -[⬆ back to top](#table-of-contents) - -## Methods - -As there is an **asynchronous** process when load the image, you **should call most of the methods after ready**, except "setAspectRatio", "replace" and "destroy". - -```js -$().cropper({ - ready: function () { - $().cropper('method', argument1, , argument2, ..., argumentN); - } -}); -``` - -### crop() - -Show the crop box manually. +See the available [options](https://github.com/fengyuanchen/cropperjs#options) of Cropper.js. ```js -$().cropper({ - autoCrop: false, - ready: function () { - // Do something here - // ... - - // And then - $(this).cropper('crop'); - } -}); +$().cropper(options); ``` -### reset() - -Reset the image and crop box to their initial states. - -### clear() - -Clear the crop box. - -### replace(url[, onlyColorChanged]) - -- **url**: - - Type: `String` - - A new image url. - -- **onlyColorChanged** (optional): - - Type: `Boolean` - - If only change the color, not the size, then the cropper only need to change the srcs of all related images, not need to rebuild the cropper. This can be used for applying filters. - - If not present, its default value is `false`. - -Replace the image's src and rebuild the cropper. - -### enable() - -Enable (unfreeze) the cropper. - -### disable() - -Disable (freeze) the cropper. - -### destroy() - -Destroy the cropper and remove the instance from the image. - -### move(offsetX[, offsetY]) - -- **offsetX**: - - Type: `Number` - - Moving size (px) in the horizontal direction. - -- **offsetY** (optional): - - Type: `Number` - - Moving size (px) in the vertical direction. - - If not present, its default value is `offsetX`. - -Move the canvas (image wrapper) with relative offsets. - -```js -$().cropper('move', 1); -$().cropper('move', 1, 0); -$().cropper('move', 0, -1); -``` - -### moveTo(x[, y]) - -- **x**: - - Type: `Number` - - The `left` value of the canvas - -- **y** (optional): - - Type: `Number` - - The `top` value of the canvas - - If not present, its default value is `x`. - -Move the canvas (image wrapper) to an absolute point. - -### zoom(ratio) - -- **ratio**: - - Type: `Number` - - Zoom in: requires a positive number (ratio > 0) - - Zoom out: requires a negative number (ratio < 0) - -Zoom the canvas (image wrapper) with a relative ratio. - -```js -$().cropper('zoom', 0.1); -$().cropper('zoom', -0.1); -``` - -### zoomTo(ratio) - -- **ratio**: - - Type: `Number` - -Zoom the canvas (image wrapper) to an absolute ratio. - -```js -$().cropper('zoomTo', 1); // 1:1 (canvasData.width === canvasData.naturalWidth) -``` - -### rotate(degree) - -- **degree**: - - Type: `Number` - - Rotate right: requires a positive number (degree > 0) - - Rotate left: requires a negative number (degree < 0) - -Rotate the image with a relative degree. - -> Requires [CSS3 2D Transforms](http://caniuse.com/transforms2d) support (IE 9+). - -```js -$().cropper('rotate', 90); -$().cropper('rotate', -90); -``` - -### rotateTo(degree) - -- **degree**: - - Type: `Number` - -Rotate the image to an absolute degree. - -### scale(scaleX[, scaleY]) - -- **scaleX**: - - Type: `Number` - - Default: `1` - - The scaling factor to apply on the abscissa of the image. - - When equal to `1` it does nothing. - -- **scaleY** (optional): - - Type: `Number` - - The scaling factor to apply on the ordinate of the image. - - If not present, its default value is `scaleX`. - -Scale the image. - -> Requires [CSS3 2D Transforms](http://caniuse.com/transforms2d) support (IE 9+). - -```js -$().cropper('scale', -1); // Flip both horizontal and vertical -$().cropper('scale', -1, 1); // Flip horizontal -$().cropper('scale', 1, -1); // Flip vertical -``` - -### scaleX(scaleX) - -- **scaleX**: - - Type: `Number` - - Default: `1` - - The scaling factor to apply on the abscissa of the image. - - When equal to `1` it does nothing. - -Scale the abscissa of the image. - -### scaleY(scaleY) - -- **scaleY**: - - Type: `Number` - - Default: `1` - - The scaling factor to apply on the ordinate of the image. - - When equal to `1` it does nothing. - -Scale the ordinate of the image. - -### getData([rounded]) - -- **rounded** (optional): - - Type: `Boolean` - - Default: `false` - - Set `true` to get rounded values. - -- (return value): - - Type: `Object` - - Properties: - - `x`: the offset left of the cropped area - - `y`: the offset top of the cropped area - - `width`: the width of the cropped area - - `height`: the height of the cropped area - - `rotate`: the rotated degrees of the image - - `scaleX`: the scaling factor to apply on the abscissa of the image - - `scaleY`: the scaling factor to apply on the ordinate of the image - -Output the final cropped area position and size data (base on the natural size of the original image). - -> You can send the data to server-side to crop the image directly: -> 1. Rotate the image with the `rotate` property. -> 1. Scale the image with the `scaleX` and `scaleY` properties. -> 1. Crop the image with the `x`, `y`, `width` and `height` properties. - -![a schematic diagram of data's properties](docs/images/data.jpg) - -### setData(data) - -- **data**: - - Type: `Object` - - Properties: See the [`getData`](#getdatarounded) method. - - You may need to round the data properties before pass it in. - -Change the cropped area position and size with new data (base on the original image). - -> **Note:** This method only available when the `viewMode` option great than or equal to `1`. - -### getContainerData() - -- (return value): - - Type: `Object` - - Properties: - - `width`: the current width of the container - - `height`: the current height of the container - -Output the container size data. - -![a schematic diagram of cropper's layers](docs/images/layers.jpg) - -### getImageData() - -- (return value): - - Type: `Object` - - Properties: - - `left`: the offset left of the image - - `top`: the offset top of the image - - `width`: the width of the image - - `height`: the height of the image - - `naturalWidth`: the natural width of the image - - `naturalHeight`: the natural height of the image - - `aspectRatio`: the aspect ratio of the image - - `rotate`: the rotated degrees of the image if rotated - - `scaleX`: the scaling factor to apply on the abscissa of the image if scaled - - `scaleY`: the scaling factor to apply on the ordinate of the image if scaled - -Output the image position, size and other related data. - -### getCanvasData() - -- (return value): - - Type: `Object` - - Properties: - - `left`: the offset left of the canvas - - `top`: the offset top of the canvas - - `width`: the width of the canvas - - `height`: the height of the canvas - - `naturalWidth`: the natural width of the canvas (read only) - - `naturalHeight`: the natural height of the canvas (read only) - -Output the canvas (image wrapper) position and size data. - -```js -var imageData = $().cropper('getImageData'); -var canvasData = $().cropper('getCanvasData'); - -if (imageData.rotate % 180 === 0) { - console.log(canvasData.naturalWidth === imageData.naturalWidth); // true -} -``` - -### setCanvasData(data) - -- **data**: - - Type: `Object` - - Properties: - - `left`: the new offset left of the canvas - - `top`: the new offset top of the canvas - - `width`: the new width of the canvas - - `height`: the new height of the canvas - -Change the canvas (image wrapper) position and size with new data. - -### getCropBoxData() - -- (return value): - - Type: `Object` - - Properties: - - `left`: the offset left of the crop box - - `top`: the offset top of the crop box - - `width`: the width of the crop box - - `height`: the height of the crop box - -Output the crop box position and size data. - -### setCropBoxData(data) - -- **data**: - - Type: `Object` - - Properties: - - `left`: the new offset left of the crop box - - `top`: the new offset top of the crop box - - `width`: the new width of the crop box - - `height`: the new height of the crop box - -Change the crop box position and size with new data. - -### getCroppedCanvas([options]) - -- **options** (optional): - - Type: `Object` - - Properties: - - `width`: the destination width of the output canvas. - - `height`: the destination height of the output canvas. - - `minWidth`: the minimum destination width of the output canvas, the default value is `0`. - - `minHeight`: the minimum destination height of the output canvas, the default value is `0`. - - `maxWidth`: the maximum destination width of the output canvas, the default value is `Infinity`. - - `maxHeight`: the maximum destination height of the output canvas, the default value is `Infinity`. - - `fillColor`: a color to fill any alpha values in the output canvas, the default value is `transparent`. - - [`imageSmoothingEnabled`](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/imageSmoothingEnabled): set to change if images are smoothed (`true`, default) or not (`false`). - - [`imageSmoothingQuality`](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/imageSmoothingQuality): set the quality of image smoothing, one of "low" (default), "medium", or "high". - -- (return value): - - Type: `HTMLCanvasElement` - - A canvas drawn the cropped image. - -- Notes: - - The aspect ratio of the output canvas will be fitted to aspect ratio of the crop box automatically. - - If you intend to get a JPEG image from the output canvas, you should set the `fillColor` option first, if not, the transparent part in the JPEG image will become black by default. - -- Browser support: - - Basic image: requires [Canvas](http://caniuse.com/canvas) support (IE 9+). - - Rotated image: requires [CSS3 2D Transforms](http://caniuse.com/transforms2d) support (IE 9+). - - Cross-origin image: requires HTML5 [CORS settings attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) support (IE 11+). - -Get a canvas drawn the cropped image. If it is not cropped, then returns a canvas drawn the whole image. - -> After then, you can display the canvas as an image directly, or use [HTMLCanvasElement.toDataURL](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL) to get a Data URL, or use [HTMLCanvasElement.toBlob](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob) to get a blob and upload it to server with [FormData](https://developer.mozilla.org/en-US/docs/Web/API/FormData) if the browser supports these APIs. +## Methods -Avoid to get a blank output image, you might need to set the `maxWidth` and `maxHeight`properties to limited numbers, because of [the size limits of a canvas element](https://stackoverflow.com/questions/6081483/maximum-size-of-a-canvas-element). +See the available [methods](https://github.com/fengyuanchen/cropperjs#methods) of Cropper.js. ```js -$().cropper('getCroppedCanvas'); - -$().cropper('getCroppedCanvas', { - width: 160, - height: 90, - minWidth: 256, - minHeight: 256, - maxWidth: 4096, - maxHeight: 4096, - fillColor: '#fff', - imageSmoothingEnabled: false, - imageSmoothingQuality: 'high', -}); - -// Upload cropped image to server if the browser supports `HTMLCanvasElement.toBlob` -$().cropper('getCroppedCanvas').toBlob(function (blob) { - var formData = new FormData(); - - formData.append('croppedImage', blob); - - $.ajax('/path/to/upload', { - method: "POST", - data: formData, - processData: false, - contentType: false, - success: function () { - console.log('Upload success'); - }, - error: function () { - console.log('Upload error'); - } - }); -}); +$().cropper('method', argument1, , argument2, ..., argumentN); ``` -### setAspectRatio(aspectRatio) - -- **aspectRatio**: - - Type: `Number` - - Requires a positive number. - -Change the aspect ratio of the crop box. - -### setDragMode([mode]) - -- **mode** (optional): - - Type: `String` - - Default: `'none'` - - Options: `'none'`, `'crop'`, `'move'` - -Change the drag mode. - -**Tips:** You can toggle the "crop" and "move" mode by double click on the cropper. - -[⬆ back to top](#table-of-contents) - ## Events -### ready - -This event fires when a cropper instance has built completely. - -### cropstart - -- **event.originalEvent**: - - Type: `Event` - - Options: `mousedown`, `touchstart` and `pointerdown` - -- **event.action**: - - Type: `String` - - Options: - - `'crop'`: create a new crop box - - `'move'`: move the canvas (image wrapper) - - `'zoom'`: zoom in / out the canvas (image wrapper) by touch. - - `'e'`: resize the east side of the crop box - - `'w'`: resize the west side of the crop box - - `'s'`: resize the south side of the crop box - - `'n'`: resize the north side of the crop box - - `'se'`: resize the southeast side of the crop box - - `'sw'`: resize the southwest side of the crop box - - `'ne'`: resize the northeast side of the crop box - - `'nw'`: resize the northwest side of the crop box - - `'all'`: move the crop box (all directions) - -This event fires when the canvas (image wrapper) or the crop box starts to change. - -```js -$().on('cropstart', function (e) { - console.log(e.type); // cropstart - console.log(e.namespace); // cropper - console.log(e.action); // ... - console.log(e.originalEvent.pageX); - - // Prevent to start cropping, moving, etc if necessary - if (e.action === 'crop') { - e.preventDefault(); - } -}); -``` - -### cropmove - -- **event.originalEvent**: - - Type: `Event` - - Options: `mousemove`, `touchmove` and `pointermove`. - -- **event.action**: the same as "cropstart". - -This event fires when the canvas (image wrapper) or the crop box is changing. - -### cropend - -- **event.originalEvent**: - - Type: `Event` - - Options: `mouseup`, `touchend`, `touchcancel`, `pointerup` and `pointercancel`. - -- **event.action**: the same as "cropstart". - -This event fires when the canvas (image wrapper) or the crop box stops to change. - -### crop - -- **event.x** -- **event.y** -- **event.width** -- **event.height** -- **event.rotate** -- **event.scaleX** -- **event.scaleY** - -> About these properties, see the [`getData`](#getdatarounded) method. - -This event fires when the canvas (image wrapper) or the crop box changed. - -### zoom - -- **event.originalEvent**: - - Type: `Event` - - Options: `wheel`, `touchmove`. - -- **event.oldRatio**: - - Type: `Number` - - The old (current) ratio of the canvas - -- **event.ratio**: - - Type: `Number` - - The new (next) ratio of the canvas (`canvasData.width / canvasData.naturalWidth`) - -This event fires when a cropper instance starts to zoom in or zoom out its canvas (image wrapper). +See the available [events](https://github.com/fengyuanchen/cropperjs#events) of Cropper.js. ```js -$().on('zoom', function (e) { - - // Zoom in - if (e.ratio > e.oldRatio) { - - // Prevent zoom in - e.preventDefault(); - } - - // Zoom out - // ... -}); +$().on('event', handler); ``` -[⬆ back to top](#table-of-contents) - ## No conflict If you have to use other plugin with the same namespace, just call the `$.fn.cropper.noConflict` method to revert to it. @@ -972,14 +111,7 @@ If you have to use other plugin with the same namespace, just call the `$.fn.cro ## Browser support -- Chrome (latest) -- Firefox (latest) -- Safari (latest) -- Opera (latest) -- Edge (latest) -- Internet Explorer 9+ - -As a jQuery plugin, you also need to see the [jQuery Browser Support](http://jquery.com/browser-support/). +It is the same as the [browser support of Cropper.js](https://github.com/fengyuanchen/cropperjs#browser-support). As a jQuery plugin, you also need to see the [jQuery Browser Support](http://jquery.com/browser-support/). ## Contributing @@ -992,13 +124,3 @@ Maintained under the [Semantic Versioning guidelines](http://semver.org/). ## License [MIT](http://opensource.org/licenses/MIT) © [Chen Fengyuan](http://chenfengyuan.com) - -## Related projects - -- [ember-cli-image-cropper](https://github.com/mhretab/ember-cli-image-cropper) by @mhretab -- [Image Widget Crop](https://www.drupal.org/project/image_widget_crop) - the main Crop solution in Drupal 8 -- [meteor-cropper](https://github.com/jonblum/meteor-cropper) by @jonblum -- [ngCropper](https://github.com/koorgoo/ngCropper) by @koorgoo -- [redux-cropper](https://github.com/lapanoid/redux-cropper) by @lapanoid - -[⬆ back to top](#table-of-contents) diff --git a/dist/cropper.common.js b/dist/cropper.common.js index 2eccea4f..63a36e69 100644 --- a/dist/cropper.common.js +++ b/dist/cropper.common.js @@ -1,11 +1,11 @@ /*! - * Cropper v3.1.6 + * Cropper v4.0.0-alpha * https://github.com/fengyuanchen/cropper * * Copyright (c) 2014-2018 Chen Fengyuan * Released under the MIT license * - * Date: 2018-03-01T13:33:48.179Z + * Date: 2018-03-01T14:21:13.980Z */ 'use strict'; @@ -55,7 +55,6 @@ var EVENT_CROP_END = 'cropend'; var EVENT_CROP_MOVE = 'cropmove'; var EVENT_CROP_START = 'cropstart'; var EVENT_DBLCLICK = 'dblclick'; -var EVENT_ERROR = 'error'; var EVENT_LOAD = 'load'; var EVENT_POINTER_DOWN = WINDOW.PointerEvent ? 'pointerdown' : 'touchstart mousedown'; var EVENT_POINTER_MOVE = WINDOW.PointerEvent ? 'pointermove' : 'touchmove mousemove'; @@ -66,10 +65,10 @@ var EVENT_WHEEL = 'wheel mousewheel DOMMouseScroll'; var EVENT_ZOOM = 'zoom'; // RegExps -var REGEXP_ACTIONS = /^(e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/; +var REGEXP_ACTIONS = /^(?:e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/; var REGEXP_DATA_URL = /^data:/; var REGEXP_DATA_URL_JPEG = /^data:image\/jpeg;base64,/; -var REGEXP_TAG_NAME = /^(img|canvas)$/i; +var REGEXP_TAG_NAME = /^(?:img|canvas)$/i; var DEFAULTS = { // Define the view mode of the cropper @@ -167,7 +166,13 @@ var DEFAULTS = { zoom: null }; -var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
'; +var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; var classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { @@ -203,15 +208,6 @@ var toConsumableArray = function (arr) { } }; -/** - * Check if the given value is a string. - * @param {*} value - The value to check. - * @returns {boolean} Returns `true` if the given value is a string, else `false`. - */ -function isString(value) { - return typeof value === 'string'; -} - /** * Check if the given value is not a number. */ @@ -236,39 +232,97 @@ function isUndefined(value) { } /** - * Takes a function and returns a new one that will always have a particular context. - * Custom proxy to avoid jQuery's guid. - * @param {Function} fn - The target function. - * @param {Object} context - The new context for the function. - * @returns {Function} The new function. + * Check if the given value is an object. + * @param {*} value - The value to check. + * @returns {boolean} Returns `true` if the given value is an object, else `false`. */ -function proxy(fn, context) { - for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - args[_key - 2] = arguments[_key]; +function isObject(value) { + return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value !== null; +} + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +/** + * Check if the given value is a plain object. + * @param {*} value - The value to check. + * @returns {boolean} Returns `true` if the given value is a plain object, else `false`. + */ + +function isPlainObject(value) { + if (!isObject(value)) { + return false; + } + + try { + var _constructor = value.constructor; + var prototype = _constructor.prototype; + + + return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf'); + } catch (e) { + return false; } +} + +/** + * Check if the given value is a function. + * @param {*} value - The value to check. + * @returns {boolean} Returns `true` if the given value is a function, else `false`. + */ +function isFunction(value) { + return typeof value === 'function'; +} - return function () { - for (var _len2 = arguments.length, args2 = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args2[_key2] = arguments[_key2]; +/** + * Iterate the given data. + * @param {*} data - The data to iterate. + * @param {Function} callback - The process function for each element. + * @returns {*} The original data. + */ +function forEach(data, callback) { + if (data && isFunction(callback)) { + if (Array.isArray(data) || isNumber(data.length) /* array-like */) { + var length = data.length; + + var i = void 0; + + for (i = 0; i < length; i += 1) { + if (callback.call(data, data[i], i, data) === false) { + break; + } + } + } else if (isObject(data)) { + Object.keys(data).forEach(function (key) { + callback.call(data, data[key], key, data); + }); } + } - return fn.apply(context, args.concat(args2)); - }; + return data; } /** - * Get the own enumerable properties of a given object. - * @param {Object} obj - The target object. - * @returns {Array} All the own enumerable properties of the given object. + * Extend the given object. + * @param {*} obj - The object to be extended. + * @param {*} args - The rest objects which will be merged to the first object. + * @returns {Object} The extended object. */ -var objectKeys = Object.keys || function objectKeys(obj) { - var keys = []; +var assign = Object.assign || function assign(obj) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } - $.each(obj, function (key) { - keys.push(key); - }); + if (isObject(obj) && args.length > 0) { + args.forEach(function (arg) { + if (isObject(arg)) { + Object.keys(arg).forEach(function (key) { + obj[key] = arg[key]; + }); + } + }); + } - return keys; + return obj; }; var REGEXP_DECIMALS = /\.\d*(?:0|9){12}\d*$/i; @@ -286,6 +340,271 @@ function normalizeDecimalNumber(value) { return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value; } +var REGEXP_SUFFIX = /^(?:width|height|left|top|marginLeft|marginTop)$/; + +/** + * Apply styles to the given element. + * @param {Element} element - The target element. + * @param {Object} styles - The styles for applying. + */ +function setStyle(element, styles) { + var style = element.style; + + + forEach(styles, function (value, property) { + if (REGEXP_SUFFIX.test(property) && isNumber(value)) { + value += 'px'; + } + + style[property] = value; + }); +} + +/** + * Check if the given element has a special class. + * @param {Element} element - The element to check. + * @param {string} value - The class to search. + * @returns {boolean} Returns `true` if the special class was found. + */ +function hasClass(element, value) { + return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1; +} + +/** + * Add classes to the given element. + * @param {Element} element - The target element. + * @param {string} value - The classes to be added. + */ +function addClass(element, value) { + if (!value) { + return; + } + + if (isNumber(element.length)) { + forEach(element, function (elem) { + addClass(elem, value); + }); + return; + } + + if (element.classList) { + element.classList.add(value); + return; + } + + var className = element.className.trim(); + + if (!className) { + element.className = value; + } else if (className.indexOf(value) < 0) { + element.className = className + ' ' + value; + } +} + +/** + * Remove classes from the given element. + * @param {Element} element - The target element. + * @param {string} value - The classes to be removed. + */ +function removeClass(element, value) { + if (!value) { + return; + } + + if (isNumber(element.length)) { + forEach(element, function (elem) { + removeClass(elem, value); + }); + return; + } + + if (element.classList) { + element.classList.remove(value); + return; + } + + if (element.className.indexOf(value) >= 0) { + element.className = element.className.replace(value, ''); + } +} + +/** + * Add or remove classes from the given element. + * @param {Element} element - The target element. + * @param {string} value - The classes to be toggled. + * @param {boolean} added - Add only. + */ +function toggleClass(element, value, added) { + if (!value) { + return; + } + + if (isNumber(element.length)) { + forEach(element, function (elem) { + toggleClass(elem, value, added); + }); + return; + } + + // IE10-11 doesn't support the second parameter of `classList.toggle` + if (added) { + addClass(element, value); + } else { + removeClass(element, value); + } +} + +var REGEXP_HYPHENATE = /([a-z\d])([A-Z])/g; + +/** + * Transform the given string from camelCase to kebab-case + * @param {string} value - The value to transform. + * @returns {string} The transformed value. + */ +function hyphenate(value) { + return value.replace(REGEXP_HYPHENATE, '$1-$2').toLowerCase(); +} + +/** + * Get data from the given element. + * @param {Element} element - The target element. + * @param {string} name - The data key to get. + * @returns {string} The data value. + */ +function getData(element, name) { + if (isObject(element[name])) { + return element[name]; + } else if (element.dataset) { + return element.dataset[name]; + } + + return element.getAttribute('data-' + hyphenate(name)); +} + +/** + * Set data to the given element. + * @param {Element} element - The target element. + * @param {string} name - The data key to set. + * @param {string} data - The data value. + */ +function setData(element, name, data) { + if (isObject(data)) { + element[name] = data; + } else if (element.dataset) { + element.dataset[name] = data; + } else { + element.setAttribute('data-' + hyphenate(name), data); + } +} + +/** + * Remove data from the given element. + * @param {Element} element - The target element. + * @param {string} name - The data key to remove. + */ +function removeData(element, name) { + if (isObject(element[name])) { + try { + delete element[name]; + } catch (e) { + element[name] = undefined; + } + } else if (element.dataset) { + // #128 Safari not allows to delete dataset property + try { + delete element.dataset[name]; + } catch (e) { + element.dataset[name] = undefined; + } + } else { + element.removeAttribute('data-' + hyphenate(name)); + } +} + +var REGEXP_SPACES = /\s\s*/; + +/** + * Remove event listener from the target element. + * @param {Element} element - The event target. + * @param {string} type - The event type(s). + * @param {Function} listener - The event listener. + * @param {Object} options - The event options. + */ +function removeListener(element, type, listener) { + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + + forEach(type.trim().split(REGEXP_SPACES), function (t) { + element.removeEventListener(t, listener, options); + }); +} + +/** + * Add event listener to the target element. + * @param {Element} element - The event target. + * @param {string} type - The event type(s). + * @param {Function} listener - The event listener. + * @param {Object} options - The event options. + */ +function addListener(element, type, _listener) { + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + + if (options.once) { + var originalListener = _listener; + + _listener = function listener() { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + removeListener(element, type, _listener, options); + return originalListener.apply(element, args); + }; + } + + forEach(type.trim().split(REGEXP_SPACES), function (t) { + element.addEventListener(t, _listener, options); + }); +} + +/** + * Dispatch event on the target element. + * @param {Element} element - The event target. + * @param {string} type - The event type(s). + * @param {Object} data - The additional event data. + * @returns {boolean} Indicate if the event is default prevented or not. + */ +function dispatchEvent(element, type, data) { + var event = void 0; + + // Event and CustomEvent on IE9-11 are global objects, not constructors + if (isFunction(Event) && isFunction(CustomEvent)) { + event = new CustomEvent(type, { + detail: data, + bubbles: true, + cancelable: true + }); + } else { + event = document.createEvent('CustomEvent'); + event.initCustomEvent(type, true, true, data); + } + + return element.dispatchEvent(event); +} + +/** + * Get the offset base on the document. + * @param {Element} element - The target element. + * @returns {Object} The offset data. + */ +function getOffset(element) { + var box = element.getBoundingClientRect(); + + return { + left: box.left + (window.pageXOffset - document.documentElement.clientLeft), + top: box.top + (window.pageYOffset - document.documentElement.clientTop) + }; +} + var location = WINDOW.location; var REGEXP_ORIGINS = /^(https?:)\/\/([^:/?#]+):?(\d*)/i; @@ -313,11 +632,11 @@ function addTimestamp(url) { } /** - * Get transform values base on the given object. + * Get transforms base on the given object. * @param {Object} obj - The target object. * @returns {string} A string contains transform values. */ -function getTransformValues(_ref) { +function getTransforms(_ref) { var rotate = _ref.rotate, scaleX = _ref.scaleX, scaleY = _ref.scaleY, @@ -347,32 +666,13 @@ function getTransformValues(_ref) { values.push('scaleY(' + scaleY + ')'); } - return values.length ? values.join(' ') : 'none'; -} - -var navigator = WINDOW.navigator; + var transform = values.length ? values.join(' ') : 'none'; -var IS_SAFARI_OR_UIWEBVIEW = navigator && /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(navigator.userAgent); - -/** - * Get an image's natural sizes. - * @param {string} image - The target image. - * @param {Function} callback - The callback function. - */ -function getImageNaturalSizes(image, callback) { - // Modern browsers (except Safari) - if (image.naturalWidth && !IS_SAFARI_OR_UIWEBVIEW) { - callback(image.naturalWidth, image.naturalHeight); - return; - } - - var newImage = document.createElement('img'); - - newImage.onload = function () { - callback(newImage.width, newImage.height); + return { + WebkitTransform: transform, + msTransform: transform, + transform: transform }; - - newImage.src = image.src; } /** @@ -381,13 +681,13 @@ function getImageNaturalSizes(image, callback) { * @returns {number} The result ratio. */ function getMaxZoomRatio(pointers) { - var pointers2 = $.extend({}, pointers); + var pointers2 = assign({}, pointers); var ratios = []; - $.each(pointers, function (pointerId, pointer) { + forEach(pointers, function (pointer, pointerId) { delete pointers2[pointerId]; - $.each(pointers2, function (pointerId2, pointer2) { + forEach(pointers2, function (pointer2) { var x1 = Math.abs(pointer.startX - pointer2.startX); var y1 = Math.abs(pointer.startY - pointer2.startY); var x2 = Math.abs(pointer.endX - pointer2.endX); @@ -422,11 +722,7 @@ function getPointer(_ref2, endOnly) { endY: pageY }; - if (endOnly) { - return end; - } - - return $.extend({ + return endOnly ? end : assign({ startX: pageX, startY: pageY }, end); @@ -442,7 +738,7 @@ function getPointersCenter(pointers) { var pageY = 0; var count = 0; - $.each(pointers, function (pointerId, _ref3) { + forEach(pointers, function (_ref3) { var startX = _ref3.startX, startY = _ref3.startY; @@ -595,7 +891,7 @@ function getSourceCanvas(image, _ref6, _ref7, _ref8) { context.scale(scaleX, scaleY); context.imageSmoothingEnabled = imageSmoothingEnabled; context.imageSmoothingQuality = imageSmoothingQuality; - context.drawImage.apply(context, [image].concat(toConsumableArray($.map(params, function (param) { + context.drawImage.apply(context, [image].concat(toConsumableArray(params.map(function (param) { return Math.floor(normalizeDecimalNumber(param)); })))); context.restore(); @@ -638,7 +934,7 @@ function dataURLToArrayBuffer(dataURL) { var arrayBuffer = new ArrayBuffer(binary.length); var uint8 = new Uint8Array(arrayBuffer); - $.each(uint8, function (i) { + forEach(uint8, function (value, i) { uint8[i] = binary.charCodeAt(i); }); @@ -656,7 +952,7 @@ function arrayBufferToDataURL(arrayBuffer, mimeType) { var data = ''; // TypedArray.prototype.forEach is not supported in some browsers. - $.each(uint8, function (i, value) { + forEach(uint8, function (value) { data += fromCharCode(value); }); @@ -806,51 +1102,58 @@ var render = { } }, initContainer: function initContainer() { - var $element = this.$element, + var element = this.element, options = this.options, - $container = this.$container, - $cropper = this.$cropper; + container = this.container, + cropper = this.cropper; - $cropper.addClass(CLASS_HIDDEN); - $element.removeClass(CLASS_HIDDEN); + addClass(cropper, CLASS_HIDDEN); + removeClass(element, CLASS_HIDDEN); + + var containerData = { + width: Math.max(container.offsetWidth, Number(options.minContainerWidth) || 200), + height: Math.max(container.offsetHeight, Number(options.minContainerHeight) || 100) + }; + + this.containerData = containerData; - $cropper.css(this.container = { - width: Math.max($container.width(), Number(options.minContainerWidth) || 200), - height: Math.max($container.height(), Number(options.minContainerHeight) || 100) + setStyle(cropper, { + width: containerData.width, + height: containerData.height }); - $element.addClass(CLASS_HIDDEN); - $cropper.removeClass(CLASS_HIDDEN); + addClass(element, CLASS_HIDDEN); + removeClass(cropper, CLASS_HIDDEN); }, // Canvas (image wrapper) initCanvas: function initCanvas() { - var container = this.container, - image = this.image; + var containerData = this.containerData, + imageData = this.imageData; var viewMode = this.options.viewMode; - var rotated = Math.abs(image.rotate) % 180 === 90; - var naturalWidth = rotated ? image.naturalHeight : image.naturalWidth; - var naturalHeight = rotated ? image.naturalWidth : image.naturalHeight; + var rotated = Math.abs(imageData.rotate) % 180 === 90; + var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth; + var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight; var aspectRatio = naturalWidth / naturalHeight; - var canvasWidth = container.width; - var canvasHeight = container.height; + var canvasWidth = containerData.width; + var canvasHeight = containerData.height; - if (container.height * aspectRatio > container.width) { + if (containerData.height * aspectRatio > containerData.width) { if (viewMode === 3) { - canvasWidth = container.height * aspectRatio; + canvasWidth = containerData.height * aspectRatio; } else { - canvasHeight = container.width / aspectRatio; + canvasHeight = containerData.width / aspectRatio; } } else if (viewMode === 3) { - canvasHeight = container.width / aspectRatio; + canvasHeight = containerData.width / aspectRatio; } else { - canvasWidth = container.height * aspectRatio; + canvasWidth = containerData.height * aspectRatio; } - var canvas = { + var canvasData = { aspectRatio: aspectRatio, naturalWidth: naturalWidth, naturalHeight: naturalHeight, @@ -858,50 +1161,50 @@ var render = { height: canvasHeight }; - canvas.left = (container.width - canvasWidth) / 2; - canvas.top = (container.height - canvasHeight) / 2; - canvas.oldLeft = canvas.left; - canvas.oldTop = canvas.top; + canvasData.left = (containerData.width - canvasWidth) / 2; + canvasData.top = (containerData.height - canvasHeight) / 2; + canvasData.oldLeft = canvasData.left; + canvasData.oldTop = canvasData.top; - this.canvas = canvas; + this.canvasData = canvasData; this.limited = viewMode === 1 || viewMode === 2; this.limitCanvas(true, true); - this.initialImage = $.extend({}, image); - this.initialCanvas = $.extend({}, canvas); + this.initialImageData = assign({}, imageData); + this.initialCanvasData = assign({}, canvasData); }, - limitCanvas: function limitCanvas(isSizeLimited, isPositionLimited) { + limitCanvas: function limitCanvas(sizeLimited, positionLimited) { var options = this.options, - container = this.container, - canvas = this.canvas, - cropBox = this.cropBox; + containerData = this.containerData, + canvasData = this.canvasData, + cropBoxData = this.cropBoxData; var viewMode = options.viewMode; - var aspectRatio = canvas.aspectRatio; + var aspectRatio = canvasData.aspectRatio; - var cropped = this.cropped && cropBox; + var cropped = this.cropped && cropBoxData; - if (isSizeLimited) { + if (sizeLimited) { var minCanvasWidth = Number(options.minCanvasWidth) || 0; var minCanvasHeight = Number(options.minCanvasHeight) || 0; - if (viewMode > 0) { - if (viewMode > 1) { - minCanvasWidth = Math.max(minCanvasWidth, container.width); - minCanvasHeight = Math.max(minCanvasHeight, container.height); + if (viewMode > 1) { + minCanvasWidth = Math.max(minCanvasWidth, containerData.width); + minCanvasHeight = Math.max(minCanvasHeight, containerData.height); - if (viewMode === 3) { - if (minCanvasHeight * aspectRatio > minCanvasWidth) { - minCanvasWidth = minCanvasHeight * aspectRatio; - } else { - minCanvasHeight = minCanvasWidth / aspectRatio; - } + if (viewMode === 3) { + if (minCanvasHeight * aspectRatio > minCanvasWidth) { + minCanvasWidth = minCanvasHeight * aspectRatio; + } else { + minCanvasHeight = minCanvasWidth / aspectRatio; } - } else if (minCanvasWidth) { - minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBox.width : 0); + } + } else if (viewMode > 0) { + if (minCanvasWidth) { + minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0); } else if (minCanvasHeight) { - minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBox.height : 0); + minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0); } else if (cropped) { - minCanvasWidth = cropBox.width; - minCanvasHeight = cropBox.height; + minCanvasWidth = cropBoxData.width; + minCanvasHeight = cropBoxData.height; if (minCanvasHeight * aspectRatio > minCanvasWidth) { minCanvasWidth = minCanvasHeight * aspectRatio; @@ -921,101 +1224,100 @@ var render = { minCanvasHeight = _getAdjustedSizes.height; - canvas.minWidth = minCanvasWidth; - canvas.minHeight = minCanvasHeight; - canvas.maxWidth = Infinity; - canvas.maxHeight = Infinity; + canvasData.minWidth = minCanvasWidth; + canvasData.minHeight = minCanvasHeight; + canvasData.maxWidth = Infinity; + canvasData.maxHeight = Infinity; } - if (isPositionLimited) { - if (viewMode > 0) { - var newCanvasLeft = container.width - canvas.width; - var newCanvasTop = container.height - canvas.height; + if (positionLimited) { + if (viewMode) { + var newCanvasLeft = containerData.width - canvasData.width; + var newCanvasTop = containerData.height - canvasData.height; - canvas.minLeft = Math.min(0, newCanvasLeft); - canvas.minTop = Math.min(0, newCanvasTop); - canvas.maxLeft = Math.max(0, newCanvasLeft); - canvas.maxTop = Math.max(0, newCanvasTop); + canvasData.minLeft = Math.min(0, newCanvasLeft); + canvasData.minTop = Math.min(0, newCanvasTop); + canvasData.maxLeft = Math.max(0, newCanvasLeft); + canvasData.maxTop = Math.max(0, newCanvasTop); if (cropped && this.limited) { - canvas.minLeft = Math.min(cropBox.left, cropBox.left + cropBox.width - canvas.width); - canvas.minTop = Math.min(cropBox.top, cropBox.top + cropBox.height - canvas.height); - canvas.maxLeft = cropBox.left; - canvas.maxTop = cropBox.top; + canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width)); + canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height)); + canvasData.maxLeft = cropBoxData.left; + canvasData.maxTop = cropBoxData.top; if (viewMode === 2) { - if (canvas.width >= container.width) { - canvas.minLeft = Math.min(0, newCanvasLeft); - canvas.maxLeft = Math.max(0, newCanvasLeft); + if (canvasData.width >= containerData.width) { + canvasData.minLeft = Math.min(0, newCanvasLeft); + canvasData.maxLeft = Math.max(0, newCanvasLeft); } - if (canvas.height >= container.height) { - canvas.minTop = Math.min(0, newCanvasTop); - canvas.maxTop = Math.max(0, newCanvasTop); + if (canvasData.height >= containerData.height) { + canvasData.minTop = Math.min(0, newCanvasTop); + canvasData.maxTop = Math.max(0, newCanvasTop); } } } } else { - canvas.minLeft = -canvas.width; - canvas.minTop = -canvas.height; - canvas.maxLeft = container.width; - canvas.maxTop = container.height; + canvasData.minLeft = -canvasData.width; + canvasData.minTop = -canvasData.height; + canvasData.maxLeft = containerData.width; + canvasData.maxTop = containerData.height; } } }, renderCanvas: function renderCanvas(changed, transformed) { - var canvas = this.canvas, - image = this.image; + var canvasData = this.canvasData, + imageData = this.imageData; if (transformed) { var _getRotatedSizes = getRotatedSizes({ - width: image.naturalWidth * Math.abs(image.scaleX || 1), - height: image.naturalHeight * Math.abs(image.scaleY || 1), - degree: image.rotate || 0 + width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1), + height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1), + degree: imageData.rotate || 0 }), naturalWidth = _getRotatedSizes.width, naturalHeight = _getRotatedSizes.height; - var width = canvas.width * (naturalWidth / canvas.naturalWidth); - var height = canvas.height * (naturalHeight / canvas.naturalHeight); + var width = canvasData.width * (naturalWidth / canvasData.naturalWidth); + var height = canvasData.height * (naturalHeight / canvasData.naturalHeight); - canvas.left -= (width - canvas.width) / 2; - canvas.top -= (height - canvas.height) / 2; - canvas.width = width; - canvas.height = height; - canvas.aspectRatio = naturalWidth / naturalHeight; - canvas.naturalWidth = naturalWidth; - canvas.naturalHeight = naturalHeight; + canvasData.left -= (width - canvasData.width) / 2; + canvasData.top -= (height - canvasData.height) / 2; + canvasData.width = width; + canvasData.height = height; + canvasData.aspectRatio = naturalWidth / naturalHeight; + canvasData.naturalWidth = naturalWidth; + canvasData.naturalHeight = naturalHeight; this.limitCanvas(true, false); } - if (canvas.width > canvas.maxWidth || canvas.width < canvas.minWidth) { - canvas.left = canvas.oldLeft; + if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) { + canvasData.left = canvasData.oldLeft; } - if (canvas.height > canvas.maxHeight || canvas.height < canvas.minHeight) { - canvas.top = canvas.oldTop; + if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) { + canvasData.top = canvasData.oldTop; } - canvas.width = Math.min(Math.max(canvas.width, canvas.minWidth), canvas.maxWidth); - canvas.height = Math.min(Math.max(canvas.height, canvas.minHeight), canvas.maxHeight); + canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth); + canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight); this.limitCanvas(false, true); - canvas.left = Math.min(Math.max(canvas.left, canvas.minLeft), canvas.maxLeft); - canvas.top = Math.min(Math.max(canvas.top, canvas.minTop), canvas.maxTop); - canvas.oldLeft = canvas.left; - canvas.oldTop = canvas.top; - - this.$canvas.css({ - width: canvas.width, - height: canvas.height, - transform: getTransformValues({ - translateX: canvas.left, - translateY: canvas.top - }) - }); + canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft); + canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop); + canvasData.oldLeft = canvasData.left; + canvasData.oldTop = canvasData.top; + + setStyle(this.canvas, assign({ + width: canvasData.width, + height: canvasData.height + }, getTransforms({ + translateX: canvasData.left, + translateY: canvasData.top + }))); this.renderImage(changed); @@ -1024,27 +1326,25 @@ var render = { } }, renderImage: function renderImage(changed) { - var canvas = this.canvas, - image = this.image; + var canvasData = this.canvasData, + imageData = this.imageData; - var width = image.naturalWidth * (canvas.width / canvas.naturalWidth); - var height = image.naturalHeight * (canvas.height / canvas.naturalHeight); + var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth); + var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight); - $.extend(image, { + assign(imageData, { width: width, height: height, - left: (canvas.width - width) / 2, - top: (canvas.height - height) / 2 - }); - - this.$clone.css({ - width: image.width, - height: image.height, - transform: getTransformValues($.extend({ - translateX: image.left, - translateY: image.top - }, image)) + left: (canvasData.width - width) / 2, + top: (canvasData.height - height) / 2 }); + setStyle(this.image, assign({ + width: imageData.width, + height: imageData.height + }, getTransforms(assign({ + translateX: imageData.left, + translateY: imageData.top + }, imageData)))); if (changed) { this.output(); @@ -1052,58 +1352,58 @@ var render = { }, initCropBox: function initCropBox() { var options = this.options, - canvas = this.canvas; + canvasData = this.canvasData; var aspectRatio = options.aspectRatio; var autoCropArea = Number(options.autoCropArea) || 0.8; - var cropBox = { - width: canvas.width, - height: canvas.height + var cropBoxData = { + width: canvasData.width, + height: canvasData.height }; if (aspectRatio) { - if (canvas.height * aspectRatio > canvas.width) { - cropBox.height = cropBox.width / aspectRatio; + if (canvasData.height * aspectRatio > canvasData.width) { + cropBoxData.height = cropBoxData.width / aspectRatio; } else { - cropBox.width = cropBox.height * aspectRatio; + cropBoxData.width = cropBoxData.height * aspectRatio; } } - this.cropBox = cropBox; + this.cropBoxData = cropBoxData; this.limitCropBox(true, true); // Initialize auto crop area - cropBox.width = Math.min(Math.max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); - cropBox.height = Math.min(Math.max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); - - // The width of auto crop area must large than "minWidth", and the height too. (#164) - cropBox.width = Math.max(cropBox.minWidth, cropBox.width * autoCropArea); - cropBox.height = Math.max(cropBox.minHeight, cropBox.height * autoCropArea); - cropBox.left = canvas.left + (canvas.width - cropBox.width) / 2; - cropBox.top = canvas.top + (canvas.height - cropBox.height) / 2; - cropBox.oldLeft = cropBox.left; - cropBox.oldTop = cropBox.top; - - this.initialCropBox = $.extend({}, cropBox); + cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth); + cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight); + + // The width/height of auto crop area must large than "minWidth/Height" + cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea); + cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea); + cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2; + cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2; + cropBoxData.oldLeft = cropBoxData.left; + cropBoxData.oldTop = cropBoxData.top; + + this.initialCropBoxData = assign({}, cropBoxData); }, - limitCropBox: function limitCropBox(isSizeLimited, isPositionLimited) { + limitCropBox: function limitCropBox(sizeLimited, positionLimited) { var options = this.options, - container = this.container, - canvas = this.canvas, - cropBox = this.cropBox, + containerData = this.containerData, + canvasData = this.canvasData, + cropBoxData = this.cropBoxData, limited = this.limited; var aspectRatio = options.aspectRatio; - if (isSizeLimited) { + if (sizeLimited) { var minCropBoxWidth = Number(options.minCropBoxWidth) || 0; var minCropBoxHeight = Number(options.minCropBoxHeight) || 0; - var maxCropBoxWidth = Math.min(container.width, limited ? canvas.width : container.width); - var maxCropBoxHeight = Math.min(container.height, limited ? canvas.height : container.height); + var maxCropBoxWidth = Math.min(containerData.width, limited ? canvasData.width : containerData.width); + var maxCropBoxHeight = Math.min(containerData.height, limited ? canvasData.height : containerData.height); - // The min/maxCropBoxWidth/Height must be less than container's width/Height - minCropBoxWidth = Math.min(minCropBoxWidth, container.width); - minCropBoxHeight = Math.min(minCropBoxHeight, container.height); + // The min/maxCropBoxWidth/Height must be less than container's width/height + minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width); + minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height); if (aspectRatio) { if (minCropBoxWidth && minCropBoxHeight) { @@ -1126,63 +1426,62 @@ var render = { } // The minWidth/Height must be less than maxWidth/Height - cropBox.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth); - cropBox.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight); - cropBox.maxWidth = maxCropBoxWidth; - cropBox.maxHeight = maxCropBoxHeight; + cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth); + cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight); + cropBoxData.maxWidth = maxCropBoxWidth; + cropBoxData.maxHeight = maxCropBoxHeight; } - if (isPositionLimited) { + if (positionLimited) { if (limited) { - cropBox.minLeft = Math.max(0, canvas.left); - cropBox.minTop = Math.max(0, canvas.top); - cropBox.maxLeft = Math.min(container.width, canvas.left + canvas.width) - cropBox.width; - cropBox.maxTop = Math.min(container.height, canvas.top + canvas.height) - cropBox.height; + cropBoxData.minLeft = Math.max(0, canvasData.left); + cropBoxData.minTop = Math.max(0, canvasData.top); + cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width; + cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height; } else { - cropBox.minLeft = 0; - cropBox.minTop = 0; - cropBox.maxLeft = container.width - cropBox.width; - cropBox.maxTop = container.height - cropBox.height; + cropBoxData.minLeft = 0; + cropBoxData.minTop = 0; + cropBoxData.maxLeft = containerData.width - cropBoxData.width; + cropBoxData.maxTop = containerData.height - cropBoxData.height; } } }, renderCropBox: function renderCropBox() { var options = this.options, - container = this.container, - cropBox = this.cropBox; + containerData = this.containerData, + cropBoxData = this.cropBoxData; - if (cropBox.width > cropBox.maxWidth || cropBox.width < cropBox.minWidth) { - cropBox.left = cropBox.oldLeft; + if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) { + cropBoxData.left = cropBoxData.oldLeft; } - if (cropBox.height > cropBox.maxHeight || cropBox.height < cropBox.minHeight) { - cropBox.top = cropBox.oldTop; + if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) { + cropBoxData.top = cropBoxData.oldTop; } - cropBox.width = Math.min(Math.max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); - cropBox.height = Math.min(Math.max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); + cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth); + cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight); this.limitCropBox(false, true); - cropBox.left = Math.min(Math.max(cropBox.left, cropBox.minLeft), cropBox.maxLeft); - cropBox.top = Math.min(Math.max(cropBox.top, cropBox.minTop), cropBox.maxTop); - cropBox.oldLeft = cropBox.left; - cropBox.oldTop = cropBox.top; + cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft); + cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop); + cropBoxData.oldLeft = cropBoxData.left; + cropBoxData.oldTop = cropBoxData.top; if (options.movable && options.cropBoxMovable) { // Turn to move the canvas when the crop box is equal to the container - this.$face.data(DATA_ACTION, cropBox.width >= container.width && cropBox.height >= container.height ? ACTION_MOVE : ACTION_ALL); + setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL); } - this.$cropBox.css({ - width: cropBox.width, - height: cropBox.height, - transform: getTransformValues({ - translateX: cropBox.left, - translateY: cropBox.top - }) - }); + setStyle(this.cropBox, assign({ + width: cropBoxData.width, + height: cropBoxData.height + }, getTransforms({ + translateX: cropBoxData.left, + translateY: cropBoxData.top + }))); if (this.cropped && this.limited) { this.limitCanvas(true, true); @@ -1194,16 +1493,14 @@ var render = { }, output: function output() { this.preview(); - - if (this.completed) { - this.trigger(EVENT_CROP, this.getData()); - } + dispatchEvent(this.element, EVENT_CROP, this.getData()); } }; var preview = { initPreview: function initPreview() { var crossOrigin = this.crossOrigin; + var preview = this.options.preview; var url = crossOrigin ? this.crossOriginUrl : this.url; var image = document.createElement('img'); @@ -1213,21 +1510,31 @@ var preview = { } image.src = url; + this.viewBox.appendChild(image); + this.viewBoxImage = image; - var $clone2 = $(image); + if (!preview) { + return; + } - this.$preview = $(this.options.preview); - this.$clone2 = $clone2; - this.$viewBox.html($clone2); - this.$preview.each(function (i, element) { - var $element = $(element); + var previews = preview; + + if (typeof preview === 'string') { + previews = this.element.ownerDocument.querySelectorAll(preview); + } else if (preview.querySelector) { + previews = [preview]; + } + + this.previews = previews; + + forEach(previews, function (el) { var img = document.createElement('img'); // Save the original size for recover - $element.data(DATA_PREVIEW, { - width: $element.width(), - height: $element.height(), - html: $element.html() + setData(el, DATA_PREVIEW, { + width: el.offsetWidth, + height: el.offsetHeight, + html: el.innerHTML }); if (crossOrigin) { @@ -1244,48 +1551,49 @@ var preview = { */ 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;"'; - $element.html(img); + el.innerHTML = ''; + el.appendChild(img); }); }, resetPreview: function resetPreview() { - this.$preview.each(function (i, element) { - var $element = $(element); - var data = $element.data(DATA_PREVIEW); + forEach(this.previews, function (element) { + var data = getData(element, DATA_PREVIEW); - $element.css({ + setStyle(element, { width: data.width, height: data.height - }).html(data.html).removeData(DATA_PREVIEW); + }); + + element.innerHTML = data.html; + removeData(element, DATA_PREVIEW); }); }, preview: function preview() { - var image = this.image, - canvas = this.canvas, - cropBox = this.cropBox; - var cropBoxWidth = cropBox.width, - cropBoxHeight = cropBox.height; - var width = image.width, - height = image.height; + var imageData = this.imageData, + canvasData = this.canvasData, + cropBoxData = this.cropBoxData; + var cropBoxWidth = cropBoxData.width, + cropBoxHeight = cropBoxData.height; + var width = imageData.width, + height = imageData.height; - var left = cropBox.left - canvas.left - image.left; - var top = cropBox.top - canvas.top - image.top; + var left = cropBoxData.left - canvasData.left - imageData.left; + var top = cropBoxData.top - canvasData.top - imageData.top; if (!this.cropped || this.disabled) { return; } - this.$clone2.css({ + setStyle(this.viewBoxImage, assign({ width: width, - height: height, - transform: getTransformValues($.extend({ - translateX: -left, - translateY: -top - }, image)) - }); - - this.$preview.each(function (i, element) { - var $element = $(element); - var data = $element.data(DATA_PREVIEW); + height: height + }, getTransforms(assign({ + translateX: -left, + translateY: -top + }, imageData)))); + + forEach(this.previews, function (element) { + var data = getData(element, DATA_PREVIEW); var originalWidth = data.width; var originalHeight = data.height; var newWidth = originalWidth; @@ -1303,104 +1611,107 @@ var preview = { newHeight = originalHeight; } - $element.css({ + setStyle(element, { width: newWidth, height: newHeight - }).find('img').css({ - width: width * ratio, - height: height * ratio, - transform: getTransformValues($.extend({ - translateX: -left * ratio, - translateY: -top * ratio - }, image)) }); + + setStyle(element.getElementsByTagName('img')[0], assign({ + width: width * ratio, + height: height * ratio + }, getTransforms(assign({ + translateX: -left * ratio, + translateY: -top * ratio + }, imageData)))); }); } }; var events = { bind: function bind() { - var $element = this.$element, + var element = this.element, options = this.options, - $cropper = this.$cropper; + cropper = this.cropper; - if ($.isFunction(options.cropstart)) { - $element.on(EVENT_CROP_START, options.cropstart); + if (isFunction(options.cropstart)) { + addListener(element, EVENT_CROP_START, options.cropstart); } - if ($.isFunction(options.cropmove)) { - $element.on(EVENT_CROP_MOVE, options.cropmove); + if (isFunction(options.cropmove)) { + addListener(element, EVENT_CROP_MOVE, options.cropmove); } - if ($.isFunction(options.cropend)) { - $element.on(EVENT_CROP_END, options.cropend); + if (isFunction(options.cropend)) { + addListener(element, EVENT_CROP_END, options.cropend); } - if ($.isFunction(options.crop)) { - $element.on(EVENT_CROP, options.crop); + if (isFunction(options.crop)) { + addListener(element, EVENT_CROP, options.crop); } - if ($.isFunction(options.zoom)) { - $element.on(EVENT_ZOOM, options.zoom); + if (isFunction(options.zoom)) { + addListener(element, EVENT_ZOOM, options.zoom); } - $cropper.on(EVENT_POINTER_DOWN, proxy(this.cropStart, this)); + addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this)); if (options.zoomable && options.zoomOnWheel) { - $cropper.on(EVENT_WHEEL, proxy(this.wheel, this)); + addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this)); } if (options.toggleDragModeOnDblclick) { - $cropper.on(EVENT_DBLCLICK, proxy(this.dblclick, this)); + addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this)); } - $(this.element.ownerDocument).on(EVENT_POINTER_MOVE, this.onCropMove = proxy(this.cropMove, this)).on(EVENT_POINTER_UP, this.onCropEnd = proxy(this.cropEnd, this)); + addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this)); + addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this)); if (options.responsive) { - $(window).on(EVENT_RESIZE, this.onResize = proxy(this.resize, this)); + addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this)); } }, unbind: function unbind() { - var $element = this.$element, + var element = this.element, options = this.options, - $cropper = this.$cropper; + cropper = this.cropper; - if ($.isFunction(options.cropstart)) { - $element.off(EVENT_CROP_START, options.cropstart); + if (isFunction(options.cropstart)) { + removeListener(element, EVENT_CROP_START, options.cropstart); } - if ($.isFunction(options.cropmove)) { - $element.off(EVENT_CROP_MOVE, options.cropmove); + if (isFunction(options.cropmove)) { + removeListener(element, EVENT_CROP_MOVE, options.cropmove); } - if ($.isFunction(options.cropend)) { - $element.off(EVENT_CROP_END, options.cropend); + if (isFunction(options.cropend)) { + removeListener(element, EVENT_CROP_END, options.cropend); } - if ($.isFunction(options.crop)) { - $element.off(EVENT_CROP, options.crop); + if (isFunction(options.crop)) { + removeListener(element, EVENT_CROP, options.crop); } - if ($.isFunction(options.zoom)) { - $element.off(EVENT_ZOOM, options.zoom); + if (isFunction(options.zoom)) { + removeListener(element, EVENT_ZOOM, options.zoom); } - $cropper.off(EVENT_POINTER_DOWN, this.cropStart); + removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart); if (options.zoomable && options.zoomOnWheel) { - $cropper.off(EVENT_WHEEL, this.wheel); + removeListener(cropper, EVENT_WHEEL, this.onWheel); } if (options.toggleDragModeOnDblclick) { - $cropper.off(EVENT_DBLCLICK, this.dblclick); + removeListener(cropper, EVENT_DBLCLICK, this.onDblclick); } - $(this.element.ownerDocument).off(EVENT_POINTER_MOVE, this.onCropMove).off(EVENT_POINTER_UP, this.onCropEnd); + removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove); + removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd); if (options.responsive) { - $(window).off(EVENT_RESIZE, this.onResize); + removeListener(window, EVENT_RESIZE, this.onResize); } } }; @@ -1408,20 +1719,20 @@ var events = { var handlers = { resize: function resize() { var options = this.options, - $container = this.$container, - container = this.container; + container = this.container, + containerData = this.containerData; var minContainerWidth = Number(options.minContainerWidth) || 200; var minContainerHeight = Number(options.minContainerHeight) || 100; - if (this.disabled || container.width <= minContainerWidth || container.height <= minContainerHeight) { + if (this.disabled || containerData.width <= minContainerWidth || containerData.height <= minContainerHeight) { return; } - var ratio = $container.width() / container.width; + var ratio = container.offsetWidth / containerData.width; // Resize when width changed or height changed - if (ratio !== 1 || $container.height() !== container.height) { + if (ratio !== 1 || container.offsetHeight !== containerData.height) { var canvasData = void 0; var cropBoxData = void 0; @@ -1433,10 +1744,10 @@ var handlers = { this.render(); if (options.restore) { - this.setCanvasData($.each(canvasData, function (i, n) { + this.setCanvasData(forEach(canvasData, function (n, i) { canvasData[i] = n * ratio; })); - this.setCropBoxData($.each(cropBoxData, function (i, n) { + this.setCropBoxData(forEach(cropBoxData, function (n, i) { cropBoxData[i] = n * ratio; })); } @@ -1447,21 +1758,21 @@ var handlers = { return; } - this.setDragMode(this.$dragBox.hasClass(CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP); + this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP); }, - wheel: function wheel(event) { + wheel: function wheel(e) { var _this = this; - var e = event.originalEvent || event; var ratio = Number(this.options.wheelZoomRatio) || 0.1; + var delta = 1; if (this.disabled) { return; } - event.preventDefault(); + e.preventDefault(); - // Limit wheel speed to prevent zoom too fast + // Limit wheel speed to prevent zoom too fast (#21) if (this.wheeling) { return; } @@ -1472,8 +1783,6 @@ var handlers = { _this.wheeling = false; }, 50); - var delta = 1; - if (e.deltaY) { delta = e.deltaY > 0 ? 1 : -1; } else if (e.wheelDelta) { @@ -1482,7 +1791,7 @@ var handlers = { delta = e.detail > 0 ? 1 : -1; } - this.zoom(-delta * ratio, event); + this.zoom(-delta * ratio, e); }, cropStart: function cropStart(e) { if (this.disabled) { @@ -1491,34 +1800,33 @@ var handlers = { var options = this.options, pointers = this.pointers; - var originalEvent = e.originalEvent; var action = void 0; - if (originalEvent && originalEvent.changedTouches) { + if (e.changedTouches) { // Handle touch event - $.each(originalEvent.changedTouches, function (i, touch) { + forEach(e.changedTouches, function (touch) { pointers[touch.identifier] = getPointer(touch); }); } else { // Handle mouse event and pointer event - pointers[originalEvent && originalEvent.pointerId || 0] = getPointer(originalEvent || e); + pointers[e.pointerId || 0] = getPointer(e); } - if (objectKeys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) { + if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) { action = ACTION_ZOOM; } else { - action = $(e.target).data(DATA_ACTION); + action = getData(e.target, DATA_ACTION); } if (!REGEXP_ACTIONS.test(action)) { return; } - if (this.trigger(EVENT_CROP_START, { - originalEvent: originalEvent, + if (dispatchEvent(this.element, EVENT_CROP_START, { + originalEvent: e, action: action - }).isDefaultPrevented()) { + }) === false) { return; } @@ -1529,7 +1837,7 @@ var handlers = { if (action === ACTION_CROP) { this.cropping = true; - this.$dragBox.addClass(CLASS_MODAL); + addClass(this.dragBox, CLASS_MODAL); } }, cropMove: function cropMove(e) { @@ -1541,24 +1849,23 @@ var handlers = { } var pointers = this.pointers; - var originalEvent = e.originalEvent; e.preventDefault(); - if (this.trigger(EVENT_CROP_MOVE, { - originalEvent: originalEvent, + if (dispatchEvent(this.element, EVENT_CROP_MOVE, { + originalEvent: e, action: action - }).isDefaultPrevented()) { + }) === false) { return; } - if (originalEvent && originalEvent.changedTouches) { - $.each(originalEvent.changedTouches, function (i, touch) { - $.extend(pointers[touch.identifier], getPointer(touch, true)); + if (e.changedTouches) { + forEach(e.changedTouches, function (touch) { + assign(pointers[touch.identifier], getPointer(touch, true)); }); } else { - $.extend(pointers[originalEvent && originalEvent.pointerId || 0], getPointer(originalEvent || e, true)); + assign(pointers[e.pointerId || 0], getPointer(e, true)); } this.change(e); @@ -1568,17 +1875,16 @@ var handlers = { return; } - var action = this.action; - var pointers = this.pointers; - var originalEvent = e.originalEvent; + var action = this.action, + pointers = this.pointers; - if (originalEvent && originalEvent.changedTouches) { - $.each(originalEvent.changedTouches, function (i, touch) { + if (e.changedTouches) { + forEach(e.changedTouches, function (touch) { delete pointers[touch.identifier]; }); } else { - delete pointers[originalEvent && originalEvent.pointerId || 0]; + delete pointers[e.pointerId || 0]; } if (!action) { @@ -1587,17 +1893,17 @@ var handlers = { e.preventDefault(); - if (!objectKeys(pointers).length) { + if (!Object.keys(pointers).length) { this.action = ''; } if (this.cropping) { this.cropping = false; - this.$dragBox.toggleClass(CLASS_MODAL, this.cropped && this.options.modal); + toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal); } - this.trigger(EVENT_CROP_END, { - originalEvent: originalEvent, + dispatchEvent(this.element, EVENT_CROP_END, { + originalEvent: e, action: action }); } @@ -1606,40 +1912,40 @@ var handlers = { var change = { change: function change(e) { var options = this.options, - pointers = this.pointers, - container = this.container, - canvas = this.canvas, - cropBox = this.cropBox; + canvasData = this.canvasData, + containerData = this.containerData, + cropBoxData = this.cropBoxData, + pointers = this.pointers; var action = this.action; var aspectRatio = options.aspectRatio; - var left = cropBox.left, - top = cropBox.top, - width = cropBox.width, - height = cropBox.height; + var left = cropBoxData.left, + top = cropBoxData.top, + width = cropBoxData.width, + height = cropBoxData.height; var right = left + width; var bottom = top + height; var minLeft = 0; var minTop = 0; - var maxWidth = container.width; - var maxHeight = container.height; + var maxWidth = containerData.width; + var maxHeight = containerData.height; var renderable = true; var offset = void 0; - // Locking aspect ratio in "free mode" by holding shift key (#259) + // Locking aspect ratio in "free mode" by holding shift key if (!aspectRatio && e.shiftKey) { aspectRatio = width && height ? width / height : 1; } if (this.limited) { - minLeft = cropBox.minLeft; - minTop = cropBox.minTop; + minLeft = cropBoxData.minLeft; + minTop = cropBoxData.minTop; - maxWidth = minLeft + Math.min(container.width, canvas.width, canvas.left + canvas.width); - maxHeight = minTop + Math.min(container.height, canvas.height, canvas.top + canvas.height); + maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width); + maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height); } - var pointer = pointers[objectKeys(pointers)[0]]; + var pointer = pointers[Object.keys(pointers)[0]]; var range = { x: pointer.endX - pointer.startX, y: pointer.endY - pointer.startY @@ -1980,7 +2286,7 @@ var change = { // Zoom canvas case ACTION_ZOOM: - this.zoom(getMaxZoomRatio(pointers), e.originalEvent); + this.zoom(getMaxZoomRatio(pointers), e); renderable = false; break; @@ -1991,11 +2297,11 @@ var change = { break; } - offset = this.$cropper.offset(); + offset = getOffset(this.cropper); left = pointer.startX - offset.left; top = pointer.startY - offset.top; - width = cropBox.minWidth; - height = cropBox.minHeight; + width = cropBoxData.minWidth; + height = cropBoxData.minHeight; if (range.x > 0) { action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST; @@ -2010,7 +2316,7 @@ var change = { // Show the crop box if is hidden if (!this.cropped) { - this.$cropBox.removeClass(CLASS_HIDDEN); + removeClass(this.cropBox, CLASS_HIDDEN); this.cropped = true; if (this.limited) { @@ -2024,16 +2330,16 @@ var change = { } if (renderable) { - cropBox.width = width; - cropBox.height = height; - cropBox.left = left; - cropBox.top = top; + cropBoxData.width = width; + cropBoxData.height = height; + cropBoxData.left = left; + cropBoxData.top = top; this.action = action; this.renderCropBox(); } // Override - $.each(pointers, function (i, p) { + forEach(pointers, function (p) { p.startX = p.endX; p.startY = p.endY; }); @@ -2043,149 +2349,162 @@ var change = { var methods = { // Show the crop box manually crop: function crop() { - if (!this.ready || this.disabled) { - return; - } - - if (!this.cropped) { + if (this.ready && !this.cropped && !this.disabled) { this.cropped = true; this.limitCropBox(true, true); if (this.options.modal) { - this.$dragBox.addClass(CLASS_MODAL); + addClass(this.dragBox, CLASS_MODAL); } - this.$cropBox.removeClass(CLASS_HIDDEN); + removeClass(this.cropBox, CLASS_HIDDEN); + this.setCropBoxData(this.initialCropBoxData); } - this.setCropBoxData(this.initialCropBox); + return this; }, // Reset the image and crop box to their initial states reset: function reset() { - if (!this.ready || this.disabled) { - return; - } + if (this.ready && !this.disabled) { + this.imageData = assign({}, this.initialImageData); + this.canvasData = assign({}, this.initialCanvasData); + this.cropBoxData = assign({}, this.initialCropBoxData); + this.renderCanvas(); - this.image = $.extend({}, this.initialImage); - this.canvas = $.extend({}, this.initialCanvas); - this.cropBox = $.extend({}, this.initialCropBox); - this.renderCanvas(); - - if (this.cropped) { - this.renderCropBox(); + if (this.cropped) { + this.renderCropBox(); + } } + + return this; }, // Clear the crop box clear: function clear() { - if (!this.cropped || this.disabled) { - return; - } + if (this.cropped && !this.disabled) { + assign(this.cropBoxData, { + left: 0, + top: 0, + width: 0, + height: 0 + }); - $.extend(this.cropBox, { - left: 0, - top: 0, - width: 0, - height: 0 - }); + this.cropped = false; + this.renderCropBox(); + this.limitCanvas(true, true); - this.cropped = false; - this.renderCropBox(); - this.limitCanvas(true, true); + // Render canvas after crop box rendered + this.renderCanvas(); + removeClass(this.dragBox, CLASS_MODAL); + addClass(this.cropBox, CLASS_HIDDEN); + } - // Render canvas after crop box rendered - this.renderCanvas(); - this.$dragBox.removeClass(CLASS_MODAL); - this.$cropBox.addClass(CLASS_HIDDEN); + return this; }, /** * Replace the image's src and rebuild the cropper * @param {string} url - The new URL. - * @param {boolean} [onlyColorChanged] - Indicate if the new image only changed color. + * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one. + * @returns {Cropper} this */ - replace: function replace(url, onlyColorChanged) { + replace: function replace(url) { + var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + if (!this.disabled && url) { if (this.isImg) { - this.$element.attr('src', url); + this.element.src = url; } - if (onlyColorChanged) { + if (hasSameSize) { this.url = url; - this.$clone.attr('src', url); + this.image.src = url; if (this.ready) { - this.$preview.find('img').add(this.$clone2).attr('src', url); + this.viewBoxImage.src = url; + + forEach(this.previews, function (element) { + element.getElementsByTagName('img')[0].src = url; + }); } } else { if (this.isImg) { this.replaced = true; } - // Clear previous data this.options.data = null; + this.uncreate(); this.load(url); } } + + return this; }, // Enable (unfreeze) the cropper enable: function enable() { - if (this.ready) { + if (this.ready && this.disabled) { this.disabled = false; - this.$cropper.removeClass(CLASS_DISABLED); + removeClass(this.cropper, CLASS_DISABLED); } + + return this; }, // Disable (freeze) the cropper disable: function disable() { - if (this.ready) { + if (this.ready && !this.disabled) { this.disabled = true; - this.$cropper.addClass(CLASS_DISABLED); + addClass(this.cropper, CLASS_DISABLED); } + + return this; }, - // Destroy the cropper and remove the instance from the image + /** + * Destroy the cropper and remove the instance from the image + * @returns {Cropper} this + */ destroy: function destroy() { - var $element = this.$element; + var element = this.element; - if (this.loaded) { - if (this.isImg && this.replaced) { - $element.attr('src', this.originalUrl); - } + if (!getData(element, NAMESPACE)) { + return this; + } - this.unbuild(); - $element.removeClass(CLASS_HIDDEN); - } else if (this.isImg) { - $element.off(EVENT_LOAD, this.start); - } else if (this.$clone) { - this.$clone.remove(); + if (this.isImg && this.replaced) { + element.src = this.originalUrl; } - $element.removeData(NAMESPACE); + this.uncreate(); + removeData(element, NAMESPACE); + + return this; }, /** * Move the canvas with relative offsets * @param {number} offsetX - The relative offset distance on the x-axis. - * @param {number} offsetY - The relative offset distance on the y-axis. + * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis. + * @returns {Cropper} this */ - move: function move(offsetX, offsetY) { - var _canvas = this.canvas, - left = _canvas.left, - top = _canvas.top; + move: function move(offsetX) { + var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX; + var _canvasData = this.canvasData, + left = _canvasData.left, + top = _canvasData.top; - this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY)); + return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY)); }, @@ -2193,28 +2512,25 @@ var methods = { * Move the canvas to an absolute point * @param {number} x - The x-axis coordinate. * @param {number} [y=x] - The y-axis coordinate. + * @returns {Cropper} this */ - moveTo: function moveTo(x, y) { - var canvas = this.canvas; + moveTo: function moveTo(x) { + var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x; + var canvasData = this.canvasData; var changed = false; - // If "y" is not present, its default value is "x" - if (isUndefined(y)) { - y = x; - } - x = Number(x); y = Number(y); if (this.ready && !this.disabled && this.options.movable) { if (isNumber(x)) { - canvas.left = x; + canvasData.left = x; changed = true; } if (isNumber(y)) { - canvas.top = y; + canvasData.top = y; changed = true; } @@ -2222,16 +2538,19 @@ var methods = { this.renderCanvas(true); } } + + return this; }, /** * Zoom the canvas with a relative ratio - * @param {Number} ratio - The target ratio. - * @param {Event} _event - The related event if any. + * @param {number} ratio - The target ratio. + * @param {Event} _originalEvent - The original event if any. + * @returns {Cropper} this */ - zoom: function zoom(ratio, _event) { - var canvas = this.canvas; + zoom: function zoom(ratio, _originalEvent) { + var canvasData = this.canvasData; ratio = Number(ratio); @@ -2242,23 +2561,24 @@ var methods = { ratio = 1 + ratio; } - this.zoomTo(canvas.width * ratio / canvas.naturalWidth, _event); + return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent); }, /** * Zoom the canvas to an absolute ratio * @param {number} ratio - The target ratio. - * @param {Event} _event - The related event if any. + * @param {Object} pivot - The zoom pivot point coordinate. + * @param {Event} _originalEvent - The original event if any. + * @returns {Cropper} this */ - zoomTo: function zoomTo(ratio, _event) { + zoomTo: function zoomTo(ratio, pivot, _originalEvent) { var options = this.options, - pointers = this.pointers, - canvas = this.canvas; - var width = canvas.width, - height = canvas.height, - naturalWidth = canvas.naturalWidth, - naturalHeight = canvas.naturalHeight; + canvasData = this.canvasData; + var width = canvasData.width, + height = canvasData.height, + naturalWidth = canvasData.naturalWidth, + naturalHeight = canvasData.naturalHeight; ratio = Number(ratio); @@ -2266,87 +2586,95 @@ var methods = { if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) { var newWidth = naturalWidth * ratio; var newHeight = naturalHeight * ratio; - var originalEvent = void 0; - - if (_event) { - originalEvent = _event.originalEvent; - } - if (this.trigger(EVENT_ZOOM, { - originalEvent: originalEvent, + if (dispatchEvent(this.element, EVENT_ZOOM, { + originalEvent: _originalEvent, oldRatio: width / naturalWidth, ratio: newWidth / naturalWidth - }).isDefaultPrevented()) { - return; + }) === false) { + return this; } - if (originalEvent) { - var offset = this.$cropper.offset(); - var center = pointers && objectKeys(pointers).length ? getPointersCenter(pointers) : { - pageX: _event.pageX || originalEvent.pageX || 0, - pageY: _event.pageY || originalEvent.pageY || 0 + if (_originalEvent) { + var pointers = this.pointers; + + var offset = getOffset(this.cropper); + var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : { + pageX: _originalEvent.pageX, + pageY: _originalEvent.pageY }; // Zoom from the triggering point of the event - canvas.left -= (newWidth - width) * ((center.pageX - offset.left - canvas.left) / width); - canvas.top -= (newHeight - height) * ((center.pageY - offset.top - canvas.top) / height); + canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width); + canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height); + } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) { + canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width); + canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height); } else { // Zoom from the center of the canvas - canvas.left -= (newWidth - width) / 2; - canvas.top -= (newHeight - height) / 2; + canvasData.left -= (newWidth - width) / 2; + canvasData.top -= (newHeight - height) / 2; } - canvas.width = newWidth; - canvas.height = newHeight; + canvasData.width = newWidth; + canvasData.height = newHeight; this.renderCanvas(true); } + + return this; }, /** * Rotate the canvas with a relative degree * @param {number} degree - The rotate degree. + * @returns {Cropper} this */ rotate: function rotate(degree) { - this.rotateTo((this.image.rotate || 0) + Number(degree)); + return this.rotateTo((this.imageData.rotate || 0) + Number(degree)); }, /** * Rotate the canvas to an absolute degree * @param {number} degree - The rotate degree. + * @returns {Cropper} this */ rotateTo: function rotateTo(degree) { degree = Number(degree); if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) { - this.image.rotate = degree % 360; + this.imageData.rotate = degree % 360; this.renderCanvas(true, true); } + + return this; }, /** * Scale the image on the x-axis. * @param {number} scaleX - The scale ratio on the x-axis. + * @returns {Cropper} this */ scaleX: function scaleX(_scaleX) { - var scaleY = this.image.scaleY; + var scaleY = this.imageData.scaleY; - this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1); + return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1); }, /** * Scale the image on the y-axis. * @param {number} scaleY - The scale ratio on the y-axis. + * @returns {Cropper} this */ scaleY: function scaleY(_scaleY) { - var scaleX = this.image.scaleX; + var scaleX = this.imageData.scaleX; - this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY); + return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY); }, @@ -2354,10 +2682,11 @@ var methods = { * Scale the image * @param {number} scaleX - The scale ratio on the x-axis. * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis. + * @returns {Cropper} this */ scale: function scale(scaleX) { var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX; - var image = this.image; + var imageData = this.imageData; var transformed = false; @@ -2366,12 +2695,12 @@ var methods = { if (this.ready && !this.disabled && this.options.scalable) { if (isNumber(scaleX)) { - image.scaleX = scaleX; + imageData.scaleX = scaleX; transformed = true; } if (isNumber(scaleY)) { - image.scaleY = scaleY; + imageData.scaleY = scaleY; transformed = true; } @@ -2379,6 +2708,8 @@ var methods = { this.renderCanvas(true, true); } } + + return this; }, @@ -2387,26 +2718,26 @@ var methods = { * @param {boolean} [rounded=false] - Indicate if round the data values or not. * @returns {Object} The result cropped data. */ - getData: function getData() { + getData: function getData$$1() { var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var options = this.options, - image = this.image, - canvas = this.canvas, - cropBox = this.cropBox; + imageData = this.imageData, + canvasData = this.canvasData, + cropBoxData = this.cropBoxData; var data = void 0; if (this.ready && this.cropped) { data = { - x: cropBox.left - canvas.left, - y: cropBox.top - canvas.top, - width: cropBox.width, - height: cropBox.height + x: cropBoxData.left - canvasData.left, + y: cropBoxData.top - canvasData.top, + width: cropBoxData.width, + height: cropBoxData.height }; - var ratio = image.width / image.naturalWidth; + var ratio = imageData.width / imageData.naturalWidth; - $.each(data, function (i, n) { + forEach(data, function (n, i) { n /= ratio; data[i] = rounded ? Math.round(n) : n; }); @@ -2420,12 +2751,12 @@ var methods = { } if (options.rotatable) { - data.rotate = image.rotate || 0; + data.rotate = imageData.rotate || 0; } if (options.scalable) { - data.scaleX = image.scaleX || 1; - data.scaleY = image.scaleY || 1; + data.scaleX = imageData.scaleX || 1; + data.scaleY = imageData.scaleY || 1; } return data; @@ -2435,36 +2766,33 @@ var methods = { /** * Set the cropped area position and size with new data * @param {Object} data - The new data. + * @returns {Cropper} this */ - setData: function setData(data) { + setData: function setData$$1(data) { var options = this.options, - image = this.image, - canvas = this.canvas; + imageData = this.imageData, + canvasData = this.canvasData; var cropBoxData = {}; - if ($.isFunction(data)) { - data = data.call(this.element); - } - - if (this.ready && !this.disabled && $.isPlainObject(data)) { + if (this.ready && !this.disabled && isPlainObject(data)) { var transformed = false; if (options.rotatable) { - if (isNumber(data.rotate) && data.rotate !== image.rotate) { - image.rotate = data.rotate; + if (isNumber(data.rotate) && data.rotate !== imageData.rotate) { + imageData.rotate = data.rotate; transformed = true; } } if (options.scalable) { - if (isNumber(data.scaleX) && data.scaleX !== image.scaleX) { - image.scaleX = data.scaleX; + if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) { + imageData.scaleX = data.scaleX; transformed = true; } - if (isNumber(data.scaleY) && data.scaleY !== image.scaleY) { - image.scaleY = data.scaleY; + if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) { + imageData.scaleY = data.scaleY; transformed = true; } } @@ -2473,14 +2801,14 @@ var methods = { this.renderCanvas(true, true); } - var ratio = image.width / image.naturalWidth; + var ratio = imageData.width / imageData.naturalWidth; if (isNumber(data.x)) { - cropBoxData.left = data.x * ratio + canvas.left; + cropBoxData.left = data.x * ratio + canvasData.left; } if (isNumber(data.y)) { - cropBoxData.top = data.y * ratio + canvas.top; + cropBoxData.top = data.y * ratio + canvasData.top; } if (isNumber(data.width)) { @@ -2493,6 +2821,8 @@ var methods = { this.setCropBoxData(cropBoxData); } + + return this; }, @@ -2501,7 +2831,7 @@ var methods = { * @returns {Object} The result container data. */ getContainerData: function getContainerData() { - return this.ready ? $.extend({}, this.container) : {}; + return this.ready ? assign({}, this.containerData) : {}; }, @@ -2510,7 +2840,7 @@ var methods = { * @returns {Object} The result image data. */ getImageData: function getImageData() { - return this.loaded ? $.extend({}, this.image) : {}; + return this.sized ? assign({}, this.imageData) : {}; }, @@ -2519,13 +2849,13 @@ var methods = { * @returns {Object} The result canvas data. */ getCanvasData: function getCanvasData() { - var canvas = this.canvas; + var canvasData = this.canvasData; var data = {}; if (this.ready) { - $.each(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (i, n) { - data[n] = canvas[n]; + forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) { + data[n] = canvasData[n]; }); } @@ -2536,35 +2866,34 @@ var methods = { /** * Set the canvas position and size with new data. * @param {Object} data - The new canvas data. + * @returns {Cropper} this */ setCanvasData: function setCanvasData(data) { - var canvas = this.canvas; - var aspectRatio = canvas.aspectRatio; + var canvasData = this.canvasData; + var aspectRatio = canvasData.aspectRatio; - if ($.isFunction(data)) { - data = data.call(this.$element); - } - - if (this.ready && !this.disabled && $.isPlainObject(data)) { + if (this.ready && !this.disabled && isPlainObject(data)) { if (isNumber(data.left)) { - canvas.left = data.left; + canvasData.left = data.left; } if (isNumber(data.top)) { - canvas.top = data.top; + canvasData.top = data.top; } if (isNumber(data.width)) { - canvas.width = data.width; - canvas.height = data.width / aspectRatio; + canvasData.width = data.width; + canvasData.height = data.width / aspectRatio; } else if (isNumber(data.height)) { - canvas.height = data.height; - canvas.width = data.height * aspectRatio; + canvasData.height = data.height; + canvasData.width = data.height * aspectRatio; } this.renderCanvas(true); } + + return this; }, @@ -2573,62 +2902,66 @@ var methods = { * @returns {Object} The result crop box data. */ getCropBoxData: function getCropBoxData() { - var cropBox = this.cropBox; + var cropBoxData = this.cropBoxData; + var data = void 0; - return this.ready && this.cropped ? { - left: cropBox.left, - top: cropBox.top, - width: cropBox.width, - height: cropBox.height - } : {}; + if (this.ready && this.cropped) { + data = { + left: cropBoxData.left, + top: cropBoxData.top, + width: cropBoxData.width, + height: cropBoxData.height + }; + } + + return data || {}; }, /** * Set the crop box position and size with new data. * @param {Object} data - The new crop box data. + * @returns {Cropper} this */ setCropBoxData: function setCropBoxData(data) { - var cropBox = this.cropBox; + var cropBoxData = this.cropBoxData; var aspectRatio = this.options.aspectRatio; var widthChanged = void 0; var heightChanged = void 0; - if ($.isFunction(data)) { - data = data.call(this.$element); - } - - if (this.ready && this.cropped && !this.disabled && $.isPlainObject(data)) { + if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) { if (isNumber(data.left)) { - cropBox.left = data.left; + cropBoxData.left = data.left; } if (isNumber(data.top)) { - cropBox.top = data.top; + cropBoxData.top = data.top; } - if (isNumber(data.width) && data.width !== cropBox.width) { + if (isNumber(data.width) && data.width !== cropBoxData.width) { widthChanged = true; - cropBox.width = data.width; + cropBoxData.width = data.width; } - if (isNumber(data.height) && data.height !== cropBox.height) { + if (isNumber(data.height) && data.height !== cropBoxData.height) { heightChanged = true; - cropBox.height = data.height; + cropBoxData.height = data.height; } if (aspectRatio) { if (widthChanged) { - cropBox.height = cropBox.width / aspectRatio; + cropBoxData.height = cropBoxData.width / aspectRatio; } else if (heightChanged) { - cropBox.width = cropBox.height * aspectRatio; + cropBoxData.width = cropBoxData.height * aspectRatio; } } this.renderCropBox(); } + + return this; }, @@ -2644,9 +2977,9 @@ var methods = { return null; } - var canvasData = this.canvas; + var canvasData = this.canvasData; - var source = getSourceCanvas(this.$clone[0], this.image, canvasData, options); + var source = getSourceCanvas(this.image, this.imageData, canvasData, options); // Returns the source canvas if it is not cropped. if (!this.cropped) { @@ -2696,6 +3029,7 @@ var methods = { canvas.width = normalizeDecimalNumber(width); canvas.height = normalizeDecimalNumber(height); + context.fillStyle = options.fillColor || 'transparent'; context.fillRect(0, 0, width, height); @@ -2769,9 +3103,10 @@ var methods = { params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale); } - context.drawImage.apply(context, [source].concat(toConsumableArray($.map(params, function (param) { + context.drawImage.apply(context, [source].concat(toConsumableArray(params.map(function (param) { return Math.floor(normalizeDecimalNumber(param)); })))); + return canvas; }, @@ -2779,6 +3114,7 @@ var methods = { /** * Change the aspect ratio of the crop box. * @param {number} aspectRatio - The new aspect ratio. + * @returns {Cropper} this */ setAspectRatio: function setAspectRatio(aspectRatio) { var options = this.options; @@ -2796,34 +3132,47 @@ var methods = { } } } + + return this; }, /** * Change the drag mode. * @param {string} mode - The new drag mode. + * @returns {Cropper} this */ setDragMode: function setDragMode(mode) { - var options = this.options; + var options = this.options, + dragBox = this.dragBox, + face = this.face; + - var croppable = void 0; - var movable = void 0; + if (this.ready && !this.disabled) { + var croppable = mode === DRAG_MODE_CROP; + var movable = options.movable && mode === DRAG_MODE_MOVE; - if (this.loaded && !this.disabled) { - croppable = mode === DRAG_MODE_CROP; - movable = options.movable && mode === DRAG_MODE_MOVE; mode = croppable || movable ? mode : DRAG_MODE_NONE; - this.$dragBox.data(DATA_ACTION, mode).toggleClass(CLASS_CROP, croppable).toggleClass(CLASS_MOVE, movable); + options.dragMode = mode; + setData(dragBox, DATA_ACTION, mode); + toggleClass(dragBox, CLASS_CROP, croppable); + toggleClass(dragBox, CLASS_MOVE, movable); if (!options.cropBoxMovable) { - // Sync drag mode to crop box when it is not movable(#300) - this.$face.data(DATA_ACTION, mode).toggleClass(CLASS_CROP, croppable).toggleClass(CLASS_MOVE, movable); + // Sync drag mode to crop box when it is not movable + setData(face, DATA_ACTION, mode); + toggleClass(face, CLASS_CROP, croppable); + toggleClass(face, CLASS_MOVE, movable); } } + + return this; } }; +var AnotherCropper = WINDOW.Cropper; + var Cropper = function () { /** * Create a new Cropper. @@ -2839,36 +3188,37 @@ var Cropper = function () { } this.element = element; - this.$element = $(element); - this.options = $.extend({}, DEFAULTS, $.isPlainObject(options) && options); - this.completed = false; + this.options = assign({}, DEFAULTS, isPlainObject(options) && options); this.cropped = false; this.disabled = false; - this.isImg = false; - this.limited = false; - this.loaded = false; + this.pointers = {}; this.ready = false; + this.reloading = false; this.replaced = false; - this.wheeling = false; - this.originalUrl = ''; - this.canvas = null; - this.cropBox = null; - this.pointers = {}; + this.sized = false; + this.sizing = false; this.init(); } createClass(Cropper, [{ key: 'init', value: function init() { - var $element = this.$element; + var element = this.element; + var tagName = element.tagName.toLowerCase(); var url = void 0; - if ($element.is('img')) { + if (getData(element, NAMESPACE)) { + return; + } + + setData(element, NAMESPACE, this); + + if (tagName === 'img') { this.isImg = true; - // Should use `$.fn.attr` here. e.g.: "img/picture.jpg" - url = $element.attr('src') || ''; + // e.g.: "img/picture.jpg" + url = element.getAttribute('src') || ''; this.originalUrl = url; // Stop when it's a blank image @@ -2876,26 +3226,14 @@ var Cropper = function () { return; } - // Should use `$.fn.prop` here. e.g.: "http://example.com/img/picture.jpg" - url = $element.prop('src'); - } else if ($element.is('canvas') && window.HTMLCanvasElement) { - url = $element[0].toDataURL(); + // e.g.: "http://example.com/img/picture.jpg" + url = element.src; + } else if (tagName === 'canvas' && window.HTMLCanvasElement) { + url = element.toDataURL(); } this.load(url); } - - // A shortcut for triggering custom events - - }, { - key: 'trigger', - value: function trigger(type, data) { - var e = $.Event(type, data); - - this.$element.trigger(e); - - return e; - } }, { key: 'load', value: function load(url) { @@ -2906,9 +3244,9 @@ var Cropper = function () { } this.url = url; - this.image = {}; + this.imageData = {}; - var $element = this.$element, + var element = this.element, options = this.options; @@ -2930,29 +3268,41 @@ var Cropper = function () { var xhr = new XMLHttpRequest(); + this.reloading = true; + this.xhr = xhr; + + var done = function done() { + _this.reloading = false; + _this.xhr = null; + }; + + xhr.ontimeout = done; + xhr.onabort = done; xhr.onerror = function () { + done(); _this.clone(); }; xhr.onload = function () { + done(); _this.read(xhr.response); }; // Bust cache when there is a "crossOrigin" property - if (options.checkCrossOrigin && isCrossOriginURL(url) && !$element.prop('crossOrigin')) { + if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) { url = addTimestamp(url); } xhr.open('get', url); xhr.responseType = 'arraybuffer'; - xhr.withCredentials = $element.prop('crossOrigin') === 'use-credentials'; + xhr.withCredentials = element.crossOrigin === 'use-credentials'; xhr.send(); } }, { key: 'read', value: function read(arrayBuffer) { var options = this.options, - image = this.image; + imageData = this.imageData; var orientation = getOrientation(arrayBuffer); var rotate = 0; @@ -2970,12 +3320,12 @@ var Cropper = function () { } if (options.rotatable) { - image.rotate = rotate; + imageData.rotate = rotate; } if (options.scalable) { - image.scaleX = scaleX; - image.scaleY = scaleY; + imageData.scaleX = scaleX; + imageData.scaleY = scaleY; } this.clone(); @@ -2983,22 +3333,22 @@ var Cropper = function () { }, { key: 'clone', value: function clone() { - var $element = this.$element, - options = this.options, + var element = this.element, url = this.url; - var crossOrigin = ''; + var crossOrigin = void 0; var crossOriginUrl = void 0; - if (options.checkCrossOrigin && isCrossOriginURL(url)) { - crossOrigin = $element.prop('crossOrigin'); + if (this.options.checkCrossOrigin && isCrossOriginURL(url)) { + crossOrigin = element.crossOrigin; + if (crossOrigin) { crossOriginUrl = url; } else { crossOrigin = 'anonymous'; - // Bust cache (#148) when there is not a "crossOrigin" property + // Bust cache when there is not a "crossOrigin" property crossOriginUrl = addTimestamp(url); } } @@ -3014,88 +3364,136 @@ var Cropper = function () { image.src = crossOriginUrl || url; - var $clone = $(image); + var start = this.start.bind(this); + var stop = this.stop.bind(this); - this.$clone = $clone; + this.image = image; + this.onStart = start; + this.onStop = stop; if (this.isImg) { - if (this.element.complete) { - this.start(); + if (element.complete) { + this.timeout = setTimeout(start, 0); } else { - $element.one(EVENT_LOAD, $.proxy(this.start, this)); + addListener(element, EVENT_LOAD, start, { + once: true + }); } } else { - $clone.one(EVENT_LOAD, $.proxy(this.start, this)).one(EVENT_ERROR, $.proxy(this.stop, this)).addClass(CLASS_HIDE).insertAfter($element); + image.onload = start; + image.onerror = stop; + addClass(image, CLASS_HIDE); + element.parentNode.insertBefore(image, element.nextSibling); } } }, { key: 'start', - value: function start() { + value: function start(event) { var _this2 = this; - var $clone = this.$clone; - - var $image = this.$element; + var image = this.isImg ? this.element : this.image; - if (!this.isImg) { - $clone.off(EVENT_ERROR, this.stop); - $image = $clone; + if (event) { + image.onload = null; + image.onerror = null; } - getImageNaturalSizes($image[0], function (naturalWidth, naturalHeight) { - $.extend(_this2.image, { + this.sizing = true; + + var IS_SAFARI = WINDOW.navigator && /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(WINDOW.navigator.userAgent); + var done = function done(naturalWidth, naturalHeight) { + assign(_this2.imageData, { naturalWidth: naturalWidth, naturalHeight: naturalHeight, aspectRatio: naturalWidth / naturalHeight }); - - _this2.loaded = true; + _this2.sizing = false; + _this2.sized = true; _this2.build(); - }); + }; + + // Modern browsers (except Safari) + if (image.naturalWidth && !IS_SAFARI) { + done(image.naturalWidth, image.naturalHeight); + return; + } + + var sizingImage = document.createElement('img'); + var body = document.body || document.documentElement; + + this.sizingImage = sizingImage; + + sizingImage.onload = function () { + done(sizingImage.width, sizingImage.height); + + if (!IS_SAFARI) { + body.removeChild(sizingImage); + } + }; + + sizingImage.src = image.src; + + // iOS Safari will convert the image automatically + // with its orientation once append it into DOM (#279) + if (!IS_SAFARI) { + 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;'; + body.appendChild(sizingImage); + } } }, { key: 'stop', value: function stop() { - this.$clone.remove(); - this.$clone = null; + var image = this.image; + + + image.onload = null; + image.onerror = null; + image.parentNode.removeChild(image); + this.image = null; } }, { key: 'build', value: function build() { - var _this3 = this; - - if (!this.loaded) { + if (!this.sized || this.ready) { return; } - // Unbuild first when replace - if (this.ready) { - this.unbuild(); - } - - var $element = this.$element, + var element = this.element, options = this.options, - $clone = this.$clone; - - var $cropper = $(TEMPLATE); - var $cropBox = $cropper.find('.' + NAMESPACE + '-crop-box'); - var $face = $cropBox.find('.' + NAMESPACE + '-face'); + image = this.image; // Create cropper elements - this.$container = $element.parent(); - this.$cropper = $cropper; - this.$canvas = $cropper.find('.' + NAMESPACE + '-canvas').append($clone); - this.$dragBox = $cropper.find('.' + NAMESPACE + '-drag-box'); - this.$cropBox = $cropBox; - this.$viewBox = $cropper.find('.' + NAMESPACE + '-view-box'); - this.$face = $face; + + var container = element.parentNode; + var template = document.createElement('div'); + + template.innerHTML = TEMPLATE; + + var cropper = template.querySelector('.' + NAMESPACE + '-container'); + var canvas = cropper.querySelector('.' + NAMESPACE + '-canvas'); + var dragBox = cropper.querySelector('.' + NAMESPACE + '-drag-box'); + var cropBox = cropper.querySelector('.' + NAMESPACE + '-crop-box'); + var face = cropBox.querySelector('.' + NAMESPACE + '-face'); + + this.container = container; + this.cropper = cropper; + this.canvas = canvas; + this.dragBox = dragBox; + this.cropBox = cropBox; + this.viewBox = cropper.querySelector('.' + NAMESPACE + '-view-box'); + this.face = face; + + canvas.appendChild(image); // Hide the original image - $element.addClass(CLASS_HIDDEN).after($cropper); + addClass(element, CLASS_HIDDEN); + + // Inserts the cropper after to the current image + container.insertBefore(cropper, element.nextSibling); - // Show the clone image if is hidden + // Show the image if is hidden if (!this.isImg) { - $clone.removeClass(CLASS_HIDE); + removeClass(image, CLASS_HIDE); } this.initPreview(); @@ -3104,55 +3502,51 @@ var Cropper = function () { options.aspectRatio = Math.max(0, options.aspectRatio) || NaN; options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0; - this.cropped = options.autoCrop; - - if (options.autoCrop) { - if (options.modal) { - this.$dragBox.addClass(CLASS_MODAL); - } - } else { - $cropBox.addClass(CLASS_HIDDEN); - } + addClass(cropBox, CLASS_HIDDEN); if (!options.guides) { - $cropBox.find('.' + NAMESPACE + '-dashed').addClass(CLASS_HIDDEN); + addClass(cropBox.getElementsByClassName(NAMESPACE + '-dashed'), CLASS_HIDDEN); } if (!options.center) { - $cropBox.find('.' + NAMESPACE + '-center').addClass(CLASS_HIDDEN); + addClass(cropBox.getElementsByClassName(NAMESPACE + '-center'), CLASS_HIDDEN); } - if (options.cropBoxMovable) { - $face.addClass(CLASS_MOVE).data(DATA_ACTION, ACTION_ALL); + if (options.background) { + addClass(cropper, NAMESPACE + '-bg'); } if (!options.highlight) { - $face.addClass(CLASS_INVISIBLE); + addClass(face, CLASS_INVISIBLE); } - if (options.background) { - $cropper.addClass(NAMESPACE + '-bg'); + if (options.cropBoxMovable) { + addClass(face, CLASS_MOVE); + setData(face, DATA_ACTION, ACTION_ALL); } if (!options.cropBoxResizable) { - $cropBox.find('.' + NAMESPACE + '-line,.' + NAMESPACE + '-point').addClass(CLASS_HIDDEN); + addClass(cropBox.getElementsByClassName(NAMESPACE + '-line'), CLASS_HIDDEN); + addClass(cropBox.getElementsByClassName(NAMESPACE + '-point'), CLASS_HIDDEN); } - this.setDragMode(options.dragMode); this.render(); this.ready = true; + this.setDragMode(options.dragMode); + + if (options.autoCrop) { + this.crop(); + } + this.setData(options.data); - // Trigger the ready event asynchronously to keep `data('cropper')` is defined - this.completing = setTimeout(function () { - if ($.isFunction(options.ready)) { - $element.one(EVENT_READY, options.ready); - } + if (isFunction(options.ready)) { + addListener(element, EVENT_READY, options.ready, { + once: true + }); + } - _this3.trigger(EVENT_READY); - _this3.trigger(EVENT_CROP, _this3.getData()); - _this3.completed = true; - }, 0); + dispatchEvent(element, EVENT_READY); } }, { key: 'unbuild', @@ -3161,35 +3555,49 @@ var Cropper = function () { return; } - if (!this.completed) { - clearTimeout(this.completing); - } - this.ready = false; - this.completed = false; - this.initialImage = null; - - // Clear `initialCanvas` is necessary when replace - this.initialCanvas = null; - this.initialCropBox = null; - this.container = null; - this.canvas = null; - - // Clear `cropBox` is necessary when replace - this.cropBox = null; this.unbind(); - this.resetPreview(); - this.$preview = null; + this.cropper.parentNode.removeChild(this.cropper); + removeClass(this.element, CLASS_HIDDEN); + } + }, { + key: 'uncreate', + value: function uncreate() { + var element = this.element; + + + if (this.ready) { + this.unbuild(); + this.ready = false; + this.cropped = false; + } else if (this.sizing) { + this.sizingImage.onload = null; + this.sizing = false; + this.sized = false; + } else if (this.reloading) { + this.xhr.abort(); + } else if (this.isImg) { + if (element.complete) { + clearTimeout(this.timeout); + } else { + removeListener(element, EVENT_LOAD, this.onStart); + } + } else if (this.image) { + this.stop(); + } + } - this.$viewBox = null; - this.$cropBox = null; - this.$dragBox = null; - this.$canvas = null; - this.$container = null; + /** + * Get the no conflict cropper class. + * @returns {Cropper} The cropper class. + */ - this.$cropper.remove(); - this.$cropper = null; + }], [{ + key: 'noConflict', + value: function noConflict() { + window.Cropper = AnotherCropper; + return Cropper; } /** @@ -3197,21 +3605,20 @@ var Cropper = function () { * @param {Object} options - The new default options. */ - }], [{ + }, { key: 'setDefaults', value: function setDefaults(options) { - $.extend(DEFAULTS, $.isPlainObject(options) && options); + assign(DEFAULTS, isPlainObject(options) && options); } }]); return Cropper; }(); -if ($.extend) { - $.extend(Cropper.prototype, render, preview, events, handlers, change, methods); -} +assign(Cropper.prototype, render, preview, events, handlers, change, methods); if ($.fn) { - var AnotherCropper = $.fn.cropper; + var AnotherCropper$1 = $.fn.cropper; + var NAMESPACE$1 = 'cropper'; $.fn.cropper = function jQueryCropper(option) { for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { @@ -3222,35 +3629,44 @@ if ($.fn) { this.each(function (i, element) { var $element = $(element); - var data = $element.data(NAMESPACE); + var isDestroy = option === 'destroy'; + var cropper = $element.data(NAMESPACE$1); - if (!data) { - if (/destroy/.test(option)) { + if (!cropper) { + if (isDestroy) { return; } var options = $.extend({}, $element.data(), $.isPlainObject(option) && option); - data = new Cropper(element, options); - $element.data(NAMESPACE, data); + cropper = new Cropper(element, options); + $element.data(NAMESPACE$1, cropper); } - if (isString(option)) { - var fn = data[option]; + if (typeof option === 'string') { + var fn = cropper[option]; if ($.isFunction(fn)) { - result = fn.apply(data, args); + result = fn.apply(cropper, args); + + if (result === cropper) { + result = undefined; + } + + if (isDestroy) { + $element.removeData(NAMESPACE$1); + } } } }); - return isUndefined(result) ? this : result; + return typeof result === 'undefined' ? this : result; }; $.fn.cropper.Constructor = Cropper; $.fn.cropper.setDefaults = Cropper.setDefaults; $.fn.cropper.noConflict = function noConflict() { - $.fn.cropper = AnotherCropper; + $.fn.cropper = AnotherCropper$1; return this; }; } diff --git a/dist/cropper.css b/dist/cropper.css index 45399716..29a7a56a 100644 --- a/dist/cropper.css +++ b/dist/cropper.css @@ -1,11 +1,11 @@ /*! - * Cropper v3.1.6 + * Cropper v4.0.0-alpha * https://github.com/fengyuanchen/cropper * * Copyright (c) 2014-2018 Chen Fengyuan * Released under the MIT license * - * Date: 2018-03-01T13:33:39.581Z + * Date: 2018-03-01T14:21:03.491Z */ .cropper-container { @@ -303,4 +303,3 @@ .cropper-disabled .cropper-point { cursor: not-allowed; } - diff --git a/dist/cropper.esm.js b/dist/cropper.esm.js index bccc7bc0..9e9af4c2 100644 --- a/dist/cropper.esm.js +++ b/dist/cropper.esm.js @@ -1,11 +1,11 @@ /*! - * Cropper v3.1.6 + * Cropper v4.0.0-alpha * https://github.com/fengyuanchen/cropper * * Copyright (c) 2014-2018 Chen Fengyuan * Released under the MIT license * - * Date: 2018-03-01T13:33:48.179Z + * Date: 2018-03-01T14:21:13.980Z */ import $ from 'jquery'; @@ -51,7 +51,6 @@ var EVENT_CROP_END = 'cropend'; var EVENT_CROP_MOVE = 'cropmove'; var EVENT_CROP_START = 'cropstart'; var EVENT_DBLCLICK = 'dblclick'; -var EVENT_ERROR = 'error'; var EVENT_LOAD = 'load'; var EVENT_POINTER_DOWN = WINDOW.PointerEvent ? 'pointerdown' : 'touchstart mousedown'; var EVENT_POINTER_MOVE = WINDOW.PointerEvent ? 'pointermove' : 'touchmove mousemove'; @@ -62,10 +61,10 @@ var EVENT_WHEEL = 'wheel mousewheel DOMMouseScroll'; var EVENT_ZOOM = 'zoom'; // RegExps -var REGEXP_ACTIONS = /^(e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/; +var REGEXP_ACTIONS = /^(?:e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/; var REGEXP_DATA_URL = /^data:/; var REGEXP_DATA_URL_JPEG = /^data:image\/jpeg;base64,/; -var REGEXP_TAG_NAME = /^(img|canvas)$/i; +var REGEXP_TAG_NAME = /^(?:img|canvas)$/i; var DEFAULTS = { // Define the view mode of the cropper @@ -163,7 +162,13 @@ var DEFAULTS = { zoom: null }; -var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
'; +var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; var classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { @@ -199,15 +204,6 @@ var toConsumableArray = function (arr) { } }; -/** - * Check if the given value is a string. - * @param {*} value - The value to check. - * @returns {boolean} Returns `true` if the given value is a string, else `false`. - */ -function isString(value) { - return typeof value === 'string'; -} - /** * Check if the given value is not a number. */ @@ -232,39 +228,97 @@ function isUndefined(value) { } /** - * Takes a function and returns a new one that will always have a particular context. - * Custom proxy to avoid jQuery's guid. - * @param {Function} fn - The target function. - * @param {Object} context - The new context for the function. - * @returns {Function} The new function. + * Check if the given value is an object. + * @param {*} value - The value to check. + * @returns {boolean} Returns `true` if the given value is an object, else `false`. */ -function proxy(fn, context) { - for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - args[_key - 2] = arguments[_key]; +function isObject(value) { + return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value !== null; +} + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +/** + * Check if the given value is a plain object. + * @param {*} value - The value to check. + * @returns {boolean} Returns `true` if the given value is a plain object, else `false`. + */ + +function isPlainObject(value) { + if (!isObject(value)) { + return false; + } + + try { + var _constructor = value.constructor; + var prototype = _constructor.prototype; + + + return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf'); + } catch (e) { + return false; } +} + +/** + * Check if the given value is a function. + * @param {*} value - The value to check. + * @returns {boolean} Returns `true` if the given value is a function, else `false`. + */ +function isFunction(value) { + return typeof value === 'function'; +} - return function () { - for (var _len2 = arguments.length, args2 = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args2[_key2] = arguments[_key2]; +/** + * Iterate the given data. + * @param {*} data - The data to iterate. + * @param {Function} callback - The process function for each element. + * @returns {*} The original data. + */ +function forEach(data, callback) { + if (data && isFunction(callback)) { + if (Array.isArray(data) || isNumber(data.length) /* array-like */) { + var length = data.length; + + var i = void 0; + + for (i = 0; i < length; i += 1) { + if (callback.call(data, data[i], i, data) === false) { + break; + } + } + } else if (isObject(data)) { + Object.keys(data).forEach(function (key) { + callback.call(data, data[key], key, data); + }); } + } - return fn.apply(context, args.concat(args2)); - }; + return data; } /** - * Get the own enumerable properties of a given object. - * @param {Object} obj - The target object. - * @returns {Array} All the own enumerable properties of the given object. + * Extend the given object. + * @param {*} obj - The object to be extended. + * @param {*} args - The rest objects which will be merged to the first object. + * @returns {Object} The extended object. */ -var objectKeys = Object.keys || function objectKeys(obj) { - var keys = []; +var assign = Object.assign || function assign(obj) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } - $.each(obj, function (key) { - keys.push(key); - }); + if (isObject(obj) && args.length > 0) { + args.forEach(function (arg) { + if (isObject(arg)) { + Object.keys(arg).forEach(function (key) { + obj[key] = arg[key]; + }); + } + }); + } - return keys; + return obj; }; var REGEXP_DECIMALS = /\.\d*(?:0|9){12}\d*$/i; @@ -282,6 +336,271 @@ function normalizeDecimalNumber(value) { return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value; } +var REGEXP_SUFFIX = /^(?:width|height|left|top|marginLeft|marginTop)$/; + +/** + * Apply styles to the given element. + * @param {Element} element - The target element. + * @param {Object} styles - The styles for applying. + */ +function setStyle(element, styles) { + var style = element.style; + + + forEach(styles, function (value, property) { + if (REGEXP_SUFFIX.test(property) && isNumber(value)) { + value += 'px'; + } + + style[property] = value; + }); +} + +/** + * Check if the given element has a special class. + * @param {Element} element - The element to check. + * @param {string} value - The class to search. + * @returns {boolean} Returns `true` if the special class was found. + */ +function hasClass(element, value) { + return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1; +} + +/** + * Add classes to the given element. + * @param {Element} element - The target element. + * @param {string} value - The classes to be added. + */ +function addClass(element, value) { + if (!value) { + return; + } + + if (isNumber(element.length)) { + forEach(element, function (elem) { + addClass(elem, value); + }); + return; + } + + if (element.classList) { + element.classList.add(value); + return; + } + + var className = element.className.trim(); + + if (!className) { + element.className = value; + } else if (className.indexOf(value) < 0) { + element.className = className + ' ' + value; + } +} + +/** + * Remove classes from the given element. + * @param {Element} element - The target element. + * @param {string} value - The classes to be removed. + */ +function removeClass(element, value) { + if (!value) { + return; + } + + if (isNumber(element.length)) { + forEach(element, function (elem) { + removeClass(elem, value); + }); + return; + } + + if (element.classList) { + element.classList.remove(value); + return; + } + + if (element.className.indexOf(value) >= 0) { + element.className = element.className.replace(value, ''); + } +} + +/** + * Add or remove classes from the given element. + * @param {Element} element - The target element. + * @param {string} value - The classes to be toggled. + * @param {boolean} added - Add only. + */ +function toggleClass(element, value, added) { + if (!value) { + return; + } + + if (isNumber(element.length)) { + forEach(element, function (elem) { + toggleClass(elem, value, added); + }); + return; + } + + // IE10-11 doesn't support the second parameter of `classList.toggle` + if (added) { + addClass(element, value); + } else { + removeClass(element, value); + } +} + +var REGEXP_HYPHENATE = /([a-z\d])([A-Z])/g; + +/** + * Transform the given string from camelCase to kebab-case + * @param {string} value - The value to transform. + * @returns {string} The transformed value. + */ +function hyphenate(value) { + return value.replace(REGEXP_HYPHENATE, '$1-$2').toLowerCase(); +} + +/** + * Get data from the given element. + * @param {Element} element - The target element. + * @param {string} name - The data key to get. + * @returns {string} The data value. + */ +function getData(element, name) { + if (isObject(element[name])) { + return element[name]; + } else if (element.dataset) { + return element.dataset[name]; + } + + return element.getAttribute('data-' + hyphenate(name)); +} + +/** + * Set data to the given element. + * @param {Element} element - The target element. + * @param {string} name - The data key to set. + * @param {string} data - The data value. + */ +function setData(element, name, data) { + if (isObject(data)) { + element[name] = data; + } else if (element.dataset) { + element.dataset[name] = data; + } else { + element.setAttribute('data-' + hyphenate(name), data); + } +} + +/** + * Remove data from the given element. + * @param {Element} element - The target element. + * @param {string} name - The data key to remove. + */ +function removeData(element, name) { + if (isObject(element[name])) { + try { + delete element[name]; + } catch (e) { + element[name] = undefined; + } + } else if (element.dataset) { + // #128 Safari not allows to delete dataset property + try { + delete element.dataset[name]; + } catch (e) { + element.dataset[name] = undefined; + } + } else { + element.removeAttribute('data-' + hyphenate(name)); + } +} + +var REGEXP_SPACES = /\s\s*/; + +/** + * Remove event listener from the target element. + * @param {Element} element - The event target. + * @param {string} type - The event type(s). + * @param {Function} listener - The event listener. + * @param {Object} options - The event options. + */ +function removeListener(element, type, listener) { + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + + forEach(type.trim().split(REGEXP_SPACES), function (t) { + element.removeEventListener(t, listener, options); + }); +} + +/** + * Add event listener to the target element. + * @param {Element} element - The event target. + * @param {string} type - The event type(s). + * @param {Function} listener - The event listener. + * @param {Object} options - The event options. + */ +function addListener(element, type, _listener) { + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + + if (options.once) { + var originalListener = _listener; + + _listener = function listener() { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + removeListener(element, type, _listener, options); + return originalListener.apply(element, args); + }; + } + + forEach(type.trim().split(REGEXP_SPACES), function (t) { + element.addEventListener(t, _listener, options); + }); +} + +/** + * Dispatch event on the target element. + * @param {Element} element - The event target. + * @param {string} type - The event type(s). + * @param {Object} data - The additional event data. + * @returns {boolean} Indicate if the event is default prevented or not. + */ +function dispatchEvent(element, type, data) { + var event = void 0; + + // Event and CustomEvent on IE9-11 are global objects, not constructors + if (isFunction(Event) && isFunction(CustomEvent)) { + event = new CustomEvent(type, { + detail: data, + bubbles: true, + cancelable: true + }); + } else { + event = document.createEvent('CustomEvent'); + event.initCustomEvent(type, true, true, data); + } + + return element.dispatchEvent(event); +} + +/** + * Get the offset base on the document. + * @param {Element} element - The target element. + * @returns {Object} The offset data. + */ +function getOffset(element) { + var box = element.getBoundingClientRect(); + + return { + left: box.left + (window.pageXOffset - document.documentElement.clientLeft), + top: box.top + (window.pageYOffset - document.documentElement.clientTop) + }; +} + var location = WINDOW.location; var REGEXP_ORIGINS = /^(https?:)\/\/([^:/?#]+):?(\d*)/i; @@ -309,11 +628,11 @@ function addTimestamp(url) { } /** - * Get transform values base on the given object. + * Get transforms base on the given object. * @param {Object} obj - The target object. * @returns {string} A string contains transform values. */ -function getTransformValues(_ref) { +function getTransforms(_ref) { var rotate = _ref.rotate, scaleX = _ref.scaleX, scaleY = _ref.scaleY, @@ -343,32 +662,13 @@ function getTransformValues(_ref) { values.push('scaleY(' + scaleY + ')'); } - return values.length ? values.join(' ') : 'none'; -} - -var navigator = WINDOW.navigator; + var transform = values.length ? values.join(' ') : 'none'; -var IS_SAFARI_OR_UIWEBVIEW = navigator && /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(navigator.userAgent); - -/** - * Get an image's natural sizes. - * @param {string} image - The target image. - * @param {Function} callback - The callback function. - */ -function getImageNaturalSizes(image, callback) { - // Modern browsers (except Safari) - if (image.naturalWidth && !IS_SAFARI_OR_UIWEBVIEW) { - callback(image.naturalWidth, image.naturalHeight); - return; - } - - var newImage = document.createElement('img'); - - newImage.onload = function () { - callback(newImage.width, newImage.height); + return { + WebkitTransform: transform, + msTransform: transform, + transform: transform }; - - newImage.src = image.src; } /** @@ -377,13 +677,13 @@ function getImageNaturalSizes(image, callback) { * @returns {number} The result ratio. */ function getMaxZoomRatio(pointers) { - var pointers2 = $.extend({}, pointers); + var pointers2 = assign({}, pointers); var ratios = []; - $.each(pointers, function (pointerId, pointer) { + forEach(pointers, function (pointer, pointerId) { delete pointers2[pointerId]; - $.each(pointers2, function (pointerId2, pointer2) { + forEach(pointers2, function (pointer2) { var x1 = Math.abs(pointer.startX - pointer2.startX); var y1 = Math.abs(pointer.startY - pointer2.startY); var x2 = Math.abs(pointer.endX - pointer2.endX); @@ -418,11 +718,7 @@ function getPointer(_ref2, endOnly) { endY: pageY }; - if (endOnly) { - return end; - } - - return $.extend({ + return endOnly ? end : assign({ startX: pageX, startY: pageY }, end); @@ -438,7 +734,7 @@ function getPointersCenter(pointers) { var pageY = 0; var count = 0; - $.each(pointers, function (pointerId, _ref3) { + forEach(pointers, function (_ref3) { var startX = _ref3.startX, startY = _ref3.startY; @@ -591,7 +887,7 @@ function getSourceCanvas(image, _ref6, _ref7, _ref8) { context.scale(scaleX, scaleY); context.imageSmoothingEnabled = imageSmoothingEnabled; context.imageSmoothingQuality = imageSmoothingQuality; - context.drawImage.apply(context, [image].concat(toConsumableArray($.map(params, function (param) { + context.drawImage.apply(context, [image].concat(toConsumableArray(params.map(function (param) { return Math.floor(normalizeDecimalNumber(param)); })))); context.restore(); @@ -634,7 +930,7 @@ function dataURLToArrayBuffer(dataURL) { var arrayBuffer = new ArrayBuffer(binary.length); var uint8 = new Uint8Array(arrayBuffer); - $.each(uint8, function (i) { + forEach(uint8, function (value, i) { uint8[i] = binary.charCodeAt(i); }); @@ -652,7 +948,7 @@ function arrayBufferToDataURL(arrayBuffer, mimeType) { var data = ''; // TypedArray.prototype.forEach is not supported in some browsers. - $.each(uint8, function (i, value) { + forEach(uint8, function (value) { data += fromCharCode(value); }); @@ -802,51 +1098,58 @@ var render = { } }, initContainer: function initContainer() { - var $element = this.$element, + var element = this.element, options = this.options, - $container = this.$container, - $cropper = this.$cropper; + container = this.container, + cropper = this.cropper; - $cropper.addClass(CLASS_HIDDEN); - $element.removeClass(CLASS_HIDDEN); + addClass(cropper, CLASS_HIDDEN); + removeClass(element, CLASS_HIDDEN); + + var containerData = { + width: Math.max(container.offsetWidth, Number(options.minContainerWidth) || 200), + height: Math.max(container.offsetHeight, Number(options.minContainerHeight) || 100) + }; + + this.containerData = containerData; - $cropper.css(this.container = { - width: Math.max($container.width(), Number(options.minContainerWidth) || 200), - height: Math.max($container.height(), Number(options.minContainerHeight) || 100) + setStyle(cropper, { + width: containerData.width, + height: containerData.height }); - $element.addClass(CLASS_HIDDEN); - $cropper.removeClass(CLASS_HIDDEN); + addClass(element, CLASS_HIDDEN); + removeClass(cropper, CLASS_HIDDEN); }, // Canvas (image wrapper) initCanvas: function initCanvas() { - var container = this.container, - image = this.image; + var containerData = this.containerData, + imageData = this.imageData; var viewMode = this.options.viewMode; - var rotated = Math.abs(image.rotate) % 180 === 90; - var naturalWidth = rotated ? image.naturalHeight : image.naturalWidth; - var naturalHeight = rotated ? image.naturalWidth : image.naturalHeight; + var rotated = Math.abs(imageData.rotate) % 180 === 90; + var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth; + var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight; var aspectRatio = naturalWidth / naturalHeight; - var canvasWidth = container.width; - var canvasHeight = container.height; + var canvasWidth = containerData.width; + var canvasHeight = containerData.height; - if (container.height * aspectRatio > container.width) { + if (containerData.height * aspectRatio > containerData.width) { if (viewMode === 3) { - canvasWidth = container.height * aspectRatio; + canvasWidth = containerData.height * aspectRatio; } else { - canvasHeight = container.width / aspectRatio; + canvasHeight = containerData.width / aspectRatio; } } else if (viewMode === 3) { - canvasHeight = container.width / aspectRatio; + canvasHeight = containerData.width / aspectRatio; } else { - canvasWidth = container.height * aspectRatio; + canvasWidth = containerData.height * aspectRatio; } - var canvas = { + var canvasData = { aspectRatio: aspectRatio, naturalWidth: naturalWidth, naturalHeight: naturalHeight, @@ -854,50 +1157,50 @@ var render = { height: canvasHeight }; - canvas.left = (container.width - canvasWidth) / 2; - canvas.top = (container.height - canvasHeight) / 2; - canvas.oldLeft = canvas.left; - canvas.oldTop = canvas.top; + canvasData.left = (containerData.width - canvasWidth) / 2; + canvasData.top = (containerData.height - canvasHeight) / 2; + canvasData.oldLeft = canvasData.left; + canvasData.oldTop = canvasData.top; - this.canvas = canvas; + this.canvasData = canvasData; this.limited = viewMode === 1 || viewMode === 2; this.limitCanvas(true, true); - this.initialImage = $.extend({}, image); - this.initialCanvas = $.extend({}, canvas); + this.initialImageData = assign({}, imageData); + this.initialCanvasData = assign({}, canvasData); }, - limitCanvas: function limitCanvas(isSizeLimited, isPositionLimited) { + limitCanvas: function limitCanvas(sizeLimited, positionLimited) { var options = this.options, - container = this.container, - canvas = this.canvas, - cropBox = this.cropBox; + containerData = this.containerData, + canvasData = this.canvasData, + cropBoxData = this.cropBoxData; var viewMode = options.viewMode; - var aspectRatio = canvas.aspectRatio; + var aspectRatio = canvasData.aspectRatio; - var cropped = this.cropped && cropBox; + var cropped = this.cropped && cropBoxData; - if (isSizeLimited) { + if (sizeLimited) { var minCanvasWidth = Number(options.minCanvasWidth) || 0; var minCanvasHeight = Number(options.minCanvasHeight) || 0; - if (viewMode > 0) { - if (viewMode > 1) { - minCanvasWidth = Math.max(minCanvasWidth, container.width); - minCanvasHeight = Math.max(minCanvasHeight, container.height); + if (viewMode > 1) { + minCanvasWidth = Math.max(minCanvasWidth, containerData.width); + minCanvasHeight = Math.max(minCanvasHeight, containerData.height); - if (viewMode === 3) { - if (minCanvasHeight * aspectRatio > minCanvasWidth) { - minCanvasWidth = minCanvasHeight * aspectRatio; - } else { - minCanvasHeight = minCanvasWidth / aspectRatio; - } + if (viewMode === 3) { + if (minCanvasHeight * aspectRatio > minCanvasWidth) { + minCanvasWidth = minCanvasHeight * aspectRatio; + } else { + minCanvasHeight = minCanvasWidth / aspectRatio; } - } else if (minCanvasWidth) { - minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBox.width : 0); + } + } else if (viewMode > 0) { + if (minCanvasWidth) { + minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0); } else if (minCanvasHeight) { - minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBox.height : 0); + minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0); } else if (cropped) { - minCanvasWidth = cropBox.width; - minCanvasHeight = cropBox.height; + minCanvasWidth = cropBoxData.width; + minCanvasHeight = cropBoxData.height; if (minCanvasHeight * aspectRatio > minCanvasWidth) { minCanvasWidth = minCanvasHeight * aspectRatio; @@ -917,101 +1220,100 @@ var render = { minCanvasHeight = _getAdjustedSizes.height; - canvas.minWidth = minCanvasWidth; - canvas.minHeight = minCanvasHeight; - canvas.maxWidth = Infinity; - canvas.maxHeight = Infinity; + canvasData.minWidth = minCanvasWidth; + canvasData.minHeight = minCanvasHeight; + canvasData.maxWidth = Infinity; + canvasData.maxHeight = Infinity; } - if (isPositionLimited) { - if (viewMode > 0) { - var newCanvasLeft = container.width - canvas.width; - var newCanvasTop = container.height - canvas.height; + if (positionLimited) { + if (viewMode) { + var newCanvasLeft = containerData.width - canvasData.width; + var newCanvasTop = containerData.height - canvasData.height; - canvas.minLeft = Math.min(0, newCanvasLeft); - canvas.minTop = Math.min(0, newCanvasTop); - canvas.maxLeft = Math.max(0, newCanvasLeft); - canvas.maxTop = Math.max(0, newCanvasTop); + canvasData.minLeft = Math.min(0, newCanvasLeft); + canvasData.minTop = Math.min(0, newCanvasTop); + canvasData.maxLeft = Math.max(0, newCanvasLeft); + canvasData.maxTop = Math.max(0, newCanvasTop); if (cropped && this.limited) { - canvas.minLeft = Math.min(cropBox.left, cropBox.left + cropBox.width - canvas.width); - canvas.minTop = Math.min(cropBox.top, cropBox.top + cropBox.height - canvas.height); - canvas.maxLeft = cropBox.left; - canvas.maxTop = cropBox.top; + canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width)); + canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height)); + canvasData.maxLeft = cropBoxData.left; + canvasData.maxTop = cropBoxData.top; if (viewMode === 2) { - if (canvas.width >= container.width) { - canvas.minLeft = Math.min(0, newCanvasLeft); - canvas.maxLeft = Math.max(0, newCanvasLeft); + if (canvasData.width >= containerData.width) { + canvasData.minLeft = Math.min(0, newCanvasLeft); + canvasData.maxLeft = Math.max(0, newCanvasLeft); } - if (canvas.height >= container.height) { - canvas.minTop = Math.min(0, newCanvasTop); - canvas.maxTop = Math.max(0, newCanvasTop); + if (canvasData.height >= containerData.height) { + canvasData.minTop = Math.min(0, newCanvasTop); + canvasData.maxTop = Math.max(0, newCanvasTop); } } } } else { - canvas.minLeft = -canvas.width; - canvas.minTop = -canvas.height; - canvas.maxLeft = container.width; - canvas.maxTop = container.height; + canvasData.minLeft = -canvasData.width; + canvasData.minTop = -canvasData.height; + canvasData.maxLeft = containerData.width; + canvasData.maxTop = containerData.height; } } }, renderCanvas: function renderCanvas(changed, transformed) { - var canvas = this.canvas, - image = this.image; + var canvasData = this.canvasData, + imageData = this.imageData; if (transformed) { var _getRotatedSizes = getRotatedSizes({ - width: image.naturalWidth * Math.abs(image.scaleX || 1), - height: image.naturalHeight * Math.abs(image.scaleY || 1), - degree: image.rotate || 0 + width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1), + height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1), + degree: imageData.rotate || 0 }), naturalWidth = _getRotatedSizes.width, naturalHeight = _getRotatedSizes.height; - var width = canvas.width * (naturalWidth / canvas.naturalWidth); - var height = canvas.height * (naturalHeight / canvas.naturalHeight); + var width = canvasData.width * (naturalWidth / canvasData.naturalWidth); + var height = canvasData.height * (naturalHeight / canvasData.naturalHeight); - canvas.left -= (width - canvas.width) / 2; - canvas.top -= (height - canvas.height) / 2; - canvas.width = width; - canvas.height = height; - canvas.aspectRatio = naturalWidth / naturalHeight; - canvas.naturalWidth = naturalWidth; - canvas.naturalHeight = naturalHeight; + canvasData.left -= (width - canvasData.width) / 2; + canvasData.top -= (height - canvasData.height) / 2; + canvasData.width = width; + canvasData.height = height; + canvasData.aspectRatio = naturalWidth / naturalHeight; + canvasData.naturalWidth = naturalWidth; + canvasData.naturalHeight = naturalHeight; this.limitCanvas(true, false); } - if (canvas.width > canvas.maxWidth || canvas.width < canvas.minWidth) { - canvas.left = canvas.oldLeft; + if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) { + canvasData.left = canvasData.oldLeft; } - if (canvas.height > canvas.maxHeight || canvas.height < canvas.minHeight) { - canvas.top = canvas.oldTop; + if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) { + canvasData.top = canvasData.oldTop; } - canvas.width = Math.min(Math.max(canvas.width, canvas.minWidth), canvas.maxWidth); - canvas.height = Math.min(Math.max(canvas.height, canvas.minHeight), canvas.maxHeight); + canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth); + canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight); this.limitCanvas(false, true); - canvas.left = Math.min(Math.max(canvas.left, canvas.minLeft), canvas.maxLeft); - canvas.top = Math.min(Math.max(canvas.top, canvas.minTop), canvas.maxTop); - canvas.oldLeft = canvas.left; - canvas.oldTop = canvas.top; - - this.$canvas.css({ - width: canvas.width, - height: canvas.height, - transform: getTransformValues({ - translateX: canvas.left, - translateY: canvas.top - }) - }); + canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft); + canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop); + canvasData.oldLeft = canvasData.left; + canvasData.oldTop = canvasData.top; + + setStyle(this.canvas, assign({ + width: canvasData.width, + height: canvasData.height + }, getTransforms({ + translateX: canvasData.left, + translateY: canvasData.top + }))); this.renderImage(changed); @@ -1020,27 +1322,25 @@ var render = { } }, renderImage: function renderImage(changed) { - var canvas = this.canvas, - image = this.image; + var canvasData = this.canvasData, + imageData = this.imageData; - var width = image.naturalWidth * (canvas.width / canvas.naturalWidth); - var height = image.naturalHeight * (canvas.height / canvas.naturalHeight); + var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth); + var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight); - $.extend(image, { + assign(imageData, { width: width, height: height, - left: (canvas.width - width) / 2, - top: (canvas.height - height) / 2 - }); - - this.$clone.css({ - width: image.width, - height: image.height, - transform: getTransformValues($.extend({ - translateX: image.left, - translateY: image.top - }, image)) + left: (canvasData.width - width) / 2, + top: (canvasData.height - height) / 2 }); + setStyle(this.image, assign({ + width: imageData.width, + height: imageData.height + }, getTransforms(assign({ + translateX: imageData.left, + translateY: imageData.top + }, imageData)))); if (changed) { this.output(); @@ -1048,58 +1348,58 @@ var render = { }, initCropBox: function initCropBox() { var options = this.options, - canvas = this.canvas; + canvasData = this.canvasData; var aspectRatio = options.aspectRatio; var autoCropArea = Number(options.autoCropArea) || 0.8; - var cropBox = { - width: canvas.width, - height: canvas.height + var cropBoxData = { + width: canvasData.width, + height: canvasData.height }; if (aspectRatio) { - if (canvas.height * aspectRatio > canvas.width) { - cropBox.height = cropBox.width / aspectRatio; + if (canvasData.height * aspectRatio > canvasData.width) { + cropBoxData.height = cropBoxData.width / aspectRatio; } else { - cropBox.width = cropBox.height * aspectRatio; + cropBoxData.width = cropBoxData.height * aspectRatio; } } - this.cropBox = cropBox; + this.cropBoxData = cropBoxData; this.limitCropBox(true, true); // Initialize auto crop area - cropBox.width = Math.min(Math.max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); - cropBox.height = Math.min(Math.max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); - - // The width of auto crop area must large than "minWidth", and the height too. (#164) - cropBox.width = Math.max(cropBox.minWidth, cropBox.width * autoCropArea); - cropBox.height = Math.max(cropBox.minHeight, cropBox.height * autoCropArea); - cropBox.left = canvas.left + (canvas.width - cropBox.width) / 2; - cropBox.top = canvas.top + (canvas.height - cropBox.height) / 2; - cropBox.oldLeft = cropBox.left; - cropBox.oldTop = cropBox.top; - - this.initialCropBox = $.extend({}, cropBox); + cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth); + cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight); + + // The width/height of auto crop area must large than "minWidth/Height" + cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea); + cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea); + cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2; + cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2; + cropBoxData.oldLeft = cropBoxData.left; + cropBoxData.oldTop = cropBoxData.top; + + this.initialCropBoxData = assign({}, cropBoxData); }, - limitCropBox: function limitCropBox(isSizeLimited, isPositionLimited) { + limitCropBox: function limitCropBox(sizeLimited, positionLimited) { var options = this.options, - container = this.container, - canvas = this.canvas, - cropBox = this.cropBox, + containerData = this.containerData, + canvasData = this.canvasData, + cropBoxData = this.cropBoxData, limited = this.limited; var aspectRatio = options.aspectRatio; - if (isSizeLimited) { + if (sizeLimited) { var minCropBoxWidth = Number(options.minCropBoxWidth) || 0; var minCropBoxHeight = Number(options.minCropBoxHeight) || 0; - var maxCropBoxWidth = Math.min(container.width, limited ? canvas.width : container.width); - var maxCropBoxHeight = Math.min(container.height, limited ? canvas.height : container.height); + var maxCropBoxWidth = Math.min(containerData.width, limited ? canvasData.width : containerData.width); + var maxCropBoxHeight = Math.min(containerData.height, limited ? canvasData.height : containerData.height); - // The min/maxCropBoxWidth/Height must be less than container's width/Height - minCropBoxWidth = Math.min(minCropBoxWidth, container.width); - minCropBoxHeight = Math.min(minCropBoxHeight, container.height); + // The min/maxCropBoxWidth/Height must be less than container's width/height + minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width); + minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height); if (aspectRatio) { if (minCropBoxWidth && minCropBoxHeight) { @@ -1122,63 +1422,62 @@ var render = { } // The minWidth/Height must be less than maxWidth/Height - cropBox.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth); - cropBox.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight); - cropBox.maxWidth = maxCropBoxWidth; - cropBox.maxHeight = maxCropBoxHeight; + cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth); + cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight); + cropBoxData.maxWidth = maxCropBoxWidth; + cropBoxData.maxHeight = maxCropBoxHeight; } - if (isPositionLimited) { + if (positionLimited) { if (limited) { - cropBox.minLeft = Math.max(0, canvas.left); - cropBox.minTop = Math.max(0, canvas.top); - cropBox.maxLeft = Math.min(container.width, canvas.left + canvas.width) - cropBox.width; - cropBox.maxTop = Math.min(container.height, canvas.top + canvas.height) - cropBox.height; + cropBoxData.minLeft = Math.max(0, canvasData.left); + cropBoxData.minTop = Math.max(0, canvasData.top); + cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width; + cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height; } else { - cropBox.minLeft = 0; - cropBox.minTop = 0; - cropBox.maxLeft = container.width - cropBox.width; - cropBox.maxTop = container.height - cropBox.height; + cropBoxData.minLeft = 0; + cropBoxData.minTop = 0; + cropBoxData.maxLeft = containerData.width - cropBoxData.width; + cropBoxData.maxTop = containerData.height - cropBoxData.height; } } }, renderCropBox: function renderCropBox() { var options = this.options, - container = this.container, - cropBox = this.cropBox; + containerData = this.containerData, + cropBoxData = this.cropBoxData; - if (cropBox.width > cropBox.maxWidth || cropBox.width < cropBox.minWidth) { - cropBox.left = cropBox.oldLeft; + if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) { + cropBoxData.left = cropBoxData.oldLeft; } - if (cropBox.height > cropBox.maxHeight || cropBox.height < cropBox.minHeight) { - cropBox.top = cropBox.oldTop; + if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) { + cropBoxData.top = cropBoxData.oldTop; } - cropBox.width = Math.min(Math.max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); - cropBox.height = Math.min(Math.max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); + cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth); + cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight); this.limitCropBox(false, true); - cropBox.left = Math.min(Math.max(cropBox.left, cropBox.minLeft), cropBox.maxLeft); - cropBox.top = Math.min(Math.max(cropBox.top, cropBox.minTop), cropBox.maxTop); - cropBox.oldLeft = cropBox.left; - cropBox.oldTop = cropBox.top; + cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft); + cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop); + cropBoxData.oldLeft = cropBoxData.left; + cropBoxData.oldTop = cropBoxData.top; if (options.movable && options.cropBoxMovable) { // Turn to move the canvas when the crop box is equal to the container - this.$face.data(DATA_ACTION, cropBox.width >= container.width && cropBox.height >= container.height ? ACTION_MOVE : ACTION_ALL); + setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL); } - this.$cropBox.css({ - width: cropBox.width, - height: cropBox.height, - transform: getTransformValues({ - translateX: cropBox.left, - translateY: cropBox.top - }) - }); + setStyle(this.cropBox, assign({ + width: cropBoxData.width, + height: cropBoxData.height + }, getTransforms({ + translateX: cropBoxData.left, + translateY: cropBoxData.top + }))); if (this.cropped && this.limited) { this.limitCanvas(true, true); @@ -1190,16 +1489,14 @@ var render = { }, output: function output() { this.preview(); - - if (this.completed) { - this.trigger(EVENT_CROP, this.getData()); - } + dispatchEvent(this.element, EVENT_CROP, this.getData()); } }; var preview = { initPreview: function initPreview() { var crossOrigin = this.crossOrigin; + var preview = this.options.preview; var url = crossOrigin ? this.crossOriginUrl : this.url; var image = document.createElement('img'); @@ -1209,21 +1506,31 @@ var preview = { } image.src = url; + this.viewBox.appendChild(image); + this.viewBoxImage = image; - var $clone2 = $(image); + if (!preview) { + return; + } - this.$preview = $(this.options.preview); - this.$clone2 = $clone2; - this.$viewBox.html($clone2); - this.$preview.each(function (i, element) { - var $element = $(element); + var previews = preview; + + if (typeof preview === 'string') { + previews = this.element.ownerDocument.querySelectorAll(preview); + } else if (preview.querySelector) { + previews = [preview]; + } + + this.previews = previews; + + forEach(previews, function (el) { var img = document.createElement('img'); // Save the original size for recover - $element.data(DATA_PREVIEW, { - width: $element.width(), - height: $element.height(), - html: $element.html() + setData(el, DATA_PREVIEW, { + width: el.offsetWidth, + height: el.offsetHeight, + html: el.innerHTML }); if (crossOrigin) { @@ -1240,48 +1547,49 @@ var preview = { */ 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;"'; - $element.html(img); + el.innerHTML = ''; + el.appendChild(img); }); }, resetPreview: function resetPreview() { - this.$preview.each(function (i, element) { - var $element = $(element); - var data = $element.data(DATA_PREVIEW); + forEach(this.previews, function (element) { + var data = getData(element, DATA_PREVIEW); - $element.css({ + setStyle(element, { width: data.width, height: data.height - }).html(data.html).removeData(DATA_PREVIEW); + }); + + element.innerHTML = data.html; + removeData(element, DATA_PREVIEW); }); }, preview: function preview() { - var image = this.image, - canvas = this.canvas, - cropBox = this.cropBox; - var cropBoxWidth = cropBox.width, - cropBoxHeight = cropBox.height; - var width = image.width, - height = image.height; + var imageData = this.imageData, + canvasData = this.canvasData, + cropBoxData = this.cropBoxData; + var cropBoxWidth = cropBoxData.width, + cropBoxHeight = cropBoxData.height; + var width = imageData.width, + height = imageData.height; - var left = cropBox.left - canvas.left - image.left; - var top = cropBox.top - canvas.top - image.top; + var left = cropBoxData.left - canvasData.left - imageData.left; + var top = cropBoxData.top - canvasData.top - imageData.top; if (!this.cropped || this.disabled) { return; } - this.$clone2.css({ + setStyle(this.viewBoxImage, assign({ width: width, - height: height, - transform: getTransformValues($.extend({ - translateX: -left, - translateY: -top - }, image)) - }); - - this.$preview.each(function (i, element) { - var $element = $(element); - var data = $element.data(DATA_PREVIEW); + height: height + }, getTransforms(assign({ + translateX: -left, + translateY: -top + }, imageData)))); + + forEach(this.previews, function (element) { + var data = getData(element, DATA_PREVIEW); var originalWidth = data.width; var originalHeight = data.height; var newWidth = originalWidth; @@ -1299,104 +1607,107 @@ var preview = { newHeight = originalHeight; } - $element.css({ + setStyle(element, { width: newWidth, height: newHeight - }).find('img').css({ - width: width * ratio, - height: height * ratio, - transform: getTransformValues($.extend({ - translateX: -left * ratio, - translateY: -top * ratio - }, image)) }); + + setStyle(element.getElementsByTagName('img')[0], assign({ + width: width * ratio, + height: height * ratio + }, getTransforms(assign({ + translateX: -left * ratio, + translateY: -top * ratio + }, imageData)))); }); } }; var events = { bind: function bind() { - var $element = this.$element, + var element = this.element, options = this.options, - $cropper = this.$cropper; + cropper = this.cropper; - if ($.isFunction(options.cropstart)) { - $element.on(EVENT_CROP_START, options.cropstart); + if (isFunction(options.cropstart)) { + addListener(element, EVENT_CROP_START, options.cropstart); } - if ($.isFunction(options.cropmove)) { - $element.on(EVENT_CROP_MOVE, options.cropmove); + if (isFunction(options.cropmove)) { + addListener(element, EVENT_CROP_MOVE, options.cropmove); } - if ($.isFunction(options.cropend)) { - $element.on(EVENT_CROP_END, options.cropend); + if (isFunction(options.cropend)) { + addListener(element, EVENT_CROP_END, options.cropend); } - if ($.isFunction(options.crop)) { - $element.on(EVENT_CROP, options.crop); + if (isFunction(options.crop)) { + addListener(element, EVENT_CROP, options.crop); } - if ($.isFunction(options.zoom)) { - $element.on(EVENT_ZOOM, options.zoom); + if (isFunction(options.zoom)) { + addListener(element, EVENT_ZOOM, options.zoom); } - $cropper.on(EVENT_POINTER_DOWN, proxy(this.cropStart, this)); + addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this)); if (options.zoomable && options.zoomOnWheel) { - $cropper.on(EVENT_WHEEL, proxy(this.wheel, this)); + addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this)); } if (options.toggleDragModeOnDblclick) { - $cropper.on(EVENT_DBLCLICK, proxy(this.dblclick, this)); + addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this)); } - $(this.element.ownerDocument).on(EVENT_POINTER_MOVE, this.onCropMove = proxy(this.cropMove, this)).on(EVENT_POINTER_UP, this.onCropEnd = proxy(this.cropEnd, this)); + addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this)); + addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this)); if (options.responsive) { - $(window).on(EVENT_RESIZE, this.onResize = proxy(this.resize, this)); + addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this)); } }, unbind: function unbind() { - var $element = this.$element, + var element = this.element, options = this.options, - $cropper = this.$cropper; + cropper = this.cropper; - if ($.isFunction(options.cropstart)) { - $element.off(EVENT_CROP_START, options.cropstart); + if (isFunction(options.cropstart)) { + removeListener(element, EVENT_CROP_START, options.cropstart); } - if ($.isFunction(options.cropmove)) { - $element.off(EVENT_CROP_MOVE, options.cropmove); + if (isFunction(options.cropmove)) { + removeListener(element, EVENT_CROP_MOVE, options.cropmove); } - if ($.isFunction(options.cropend)) { - $element.off(EVENT_CROP_END, options.cropend); + if (isFunction(options.cropend)) { + removeListener(element, EVENT_CROP_END, options.cropend); } - if ($.isFunction(options.crop)) { - $element.off(EVENT_CROP, options.crop); + if (isFunction(options.crop)) { + removeListener(element, EVENT_CROP, options.crop); } - if ($.isFunction(options.zoom)) { - $element.off(EVENT_ZOOM, options.zoom); + if (isFunction(options.zoom)) { + removeListener(element, EVENT_ZOOM, options.zoom); } - $cropper.off(EVENT_POINTER_DOWN, this.cropStart); + removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart); if (options.zoomable && options.zoomOnWheel) { - $cropper.off(EVENT_WHEEL, this.wheel); + removeListener(cropper, EVENT_WHEEL, this.onWheel); } if (options.toggleDragModeOnDblclick) { - $cropper.off(EVENT_DBLCLICK, this.dblclick); + removeListener(cropper, EVENT_DBLCLICK, this.onDblclick); } - $(this.element.ownerDocument).off(EVENT_POINTER_MOVE, this.onCropMove).off(EVENT_POINTER_UP, this.onCropEnd); + removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove); + removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd); if (options.responsive) { - $(window).off(EVENT_RESIZE, this.onResize); + removeListener(window, EVENT_RESIZE, this.onResize); } } }; @@ -1404,20 +1715,20 @@ var events = { var handlers = { resize: function resize() { var options = this.options, - $container = this.$container, - container = this.container; + container = this.container, + containerData = this.containerData; var minContainerWidth = Number(options.minContainerWidth) || 200; var minContainerHeight = Number(options.minContainerHeight) || 100; - if (this.disabled || container.width <= minContainerWidth || container.height <= minContainerHeight) { + if (this.disabled || containerData.width <= minContainerWidth || containerData.height <= minContainerHeight) { return; } - var ratio = $container.width() / container.width; + var ratio = container.offsetWidth / containerData.width; // Resize when width changed or height changed - if (ratio !== 1 || $container.height() !== container.height) { + if (ratio !== 1 || container.offsetHeight !== containerData.height) { var canvasData = void 0; var cropBoxData = void 0; @@ -1429,10 +1740,10 @@ var handlers = { this.render(); if (options.restore) { - this.setCanvasData($.each(canvasData, function (i, n) { + this.setCanvasData(forEach(canvasData, function (n, i) { canvasData[i] = n * ratio; })); - this.setCropBoxData($.each(cropBoxData, function (i, n) { + this.setCropBoxData(forEach(cropBoxData, function (n, i) { cropBoxData[i] = n * ratio; })); } @@ -1443,21 +1754,21 @@ var handlers = { return; } - this.setDragMode(this.$dragBox.hasClass(CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP); + this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP); }, - wheel: function wheel(event) { + wheel: function wheel(e) { var _this = this; - var e = event.originalEvent || event; var ratio = Number(this.options.wheelZoomRatio) || 0.1; + var delta = 1; if (this.disabled) { return; } - event.preventDefault(); + e.preventDefault(); - // Limit wheel speed to prevent zoom too fast + // Limit wheel speed to prevent zoom too fast (#21) if (this.wheeling) { return; } @@ -1468,8 +1779,6 @@ var handlers = { _this.wheeling = false; }, 50); - var delta = 1; - if (e.deltaY) { delta = e.deltaY > 0 ? 1 : -1; } else if (e.wheelDelta) { @@ -1478,7 +1787,7 @@ var handlers = { delta = e.detail > 0 ? 1 : -1; } - this.zoom(-delta * ratio, event); + this.zoom(-delta * ratio, e); }, cropStart: function cropStart(e) { if (this.disabled) { @@ -1487,34 +1796,33 @@ var handlers = { var options = this.options, pointers = this.pointers; - var originalEvent = e.originalEvent; var action = void 0; - if (originalEvent && originalEvent.changedTouches) { + if (e.changedTouches) { // Handle touch event - $.each(originalEvent.changedTouches, function (i, touch) { + forEach(e.changedTouches, function (touch) { pointers[touch.identifier] = getPointer(touch); }); } else { // Handle mouse event and pointer event - pointers[originalEvent && originalEvent.pointerId || 0] = getPointer(originalEvent || e); + pointers[e.pointerId || 0] = getPointer(e); } - if (objectKeys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) { + if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) { action = ACTION_ZOOM; } else { - action = $(e.target).data(DATA_ACTION); + action = getData(e.target, DATA_ACTION); } if (!REGEXP_ACTIONS.test(action)) { return; } - if (this.trigger(EVENT_CROP_START, { - originalEvent: originalEvent, + if (dispatchEvent(this.element, EVENT_CROP_START, { + originalEvent: e, action: action - }).isDefaultPrevented()) { + }) === false) { return; } @@ -1525,7 +1833,7 @@ var handlers = { if (action === ACTION_CROP) { this.cropping = true; - this.$dragBox.addClass(CLASS_MODAL); + addClass(this.dragBox, CLASS_MODAL); } }, cropMove: function cropMove(e) { @@ -1537,24 +1845,23 @@ var handlers = { } var pointers = this.pointers; - var originalEvent = e.originalEvent; e.preventDefault(); - if (this.trigger(EVENT_CROP_MOVE, { - originalEvent: originalEvent, + if (dispatchEvent(this.element, EVENT_CROP_MOVE, { + originalEvent: e, action: action - }).isDefaultPrevented()) { + }) === false) { return; } - if (originalEvent && originalEvent.changedTouches) { - $.each(originalEvent.changedTouches, function (i, touch) { - $.extend(pointers[touch.identifier], getPointer(touch, true)); + if (e.changedTouches) { + forEach(e.changedTouches, function (touch) { + assign(pointers[touch.identifier], getPointer(touch, true)); }); } else { - $.extend(pointers[originalEvent && originalEvent.pointerId || 0], getPointer(originalEvent || e, true)); + assign(pointers[e.pointerId || 0], getPointer(e, true)); } this.change(e); @@ -1564,17 +1871,16 @@ var handlers = { return; } - var action = this.action; - var pointers = this.pointers; - var originalEvent = e.originalEvent; + var action = this.action, + pointers = this.pointers; - if (originalEvent && originalEvent.changedTouches) { - $.each(originalEvent.changedTouches, function (i, touch) { + if (e.changedTouches) { + forEach(e.changedTouches, function (touch) { delete pointers[touch.identifier]; }); } else { - delete pointers[originalEvent && originalEvent.pointerId || 0]; + delete pointers[e.pointerId || 0]; } if (!action) { @@ -1583,17 +1889,17 @@ var handlers = { e.preventDefault(); - if (!objectKeys(pointers).length) { + if (!Object.keys(pointers).length) { this.action = ''; } if (this.cropping) { this.cropping = false; - this.$dragBox.toggleClass(CLASS_MODAL, this.cropped && this.options.modal); + toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal); } - this.trigger(EVENT_CROP_END, { - originalEvent: originalEvent, + dispatchEvent(this.element, EVENT_CROP_END, { + originalEvent: e, action: action }); } @@ -1602,40 +1908,40 @@ var handlers = { var change = { change: function change(e) { var options = this.options, - pointers = this.pointers, - container = this.container, - canvas = this.canvas, - cropBox = this.cropBox; + canvasData = this.canvasData, + containerData = this.containerData, + cropBoxData = this.cropBoxData, + pointers = this.pointers; var action = this.action; var aspectRatio = options.aspectRatio; - var left = cropBox.left, - top = cropBox.top, - width = cropBox.width, - height = cropBox.height; + var left = cropBoxData.left, + top = cropBoxData.top, + width = cropBoxData.width, + height = cropBoxData.height; var right = left + width; var bottom = top + height; var minLeft = 0; var minTop = 0; - var maxWidth = container.width; - var maxHeight = container.height; + var maxWidth = containerData.width; + var maxHeight = containerData.height; var renderable = true; var offset = void 0; - // Locking aspect ratio in "free mode" by holding shift key (#259) + // Locking aspect ratio in "free mode" by holding shift key if (!aspectRatio && e.shiftKey) { aspectRatio = width && height ? width / height : 1; } if (this.limited) { - minLeft = cropBox.minLeft; - minTop = cropBox.minTop; + minLeft = cropBoxData.minLeft; + minTop = cropBoxData.minTop; - maxWidth = minLeft + Math.min(container.width, canvas.width, canvas.left + canvas.width); - maxHeight = minTop + Math.min(container.height, canvas.height, canvas.top + canvas.height); + maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width); + maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height); } - var pointer = pointers[objectKeys(pointers)[0]]; + var pointer = pointers[Object.keys(pointers)[0]]; var range = { x: pointer.endX - pointer.startX, y: pointer.endY - pointer.startY @@ -1976,7 +2282,7 @@ var change = { // Zoom canvas case ACTION_ZOOM: - this.zoom(getMaxZoomRatio(pointers), e.originalEvent); + this.zoom(getMaxZoomRatio(pointers), e); renderable = false; break; @@ -1987,11 +2293,11 @@ var change = { break; } - offset = this.$cropper.offset(); + offset = getOffset(this.cropper); left = pointer.startX - offset.left; top = pointer.startY - offset.top; - width = cropBox.minWidth; - height = cropBox.minHeight; + width = cropBoxData.minWidth; + height = cropBoxData.minHeight; if (range.x > 0) { action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST; @@ -2006,7 +2312,7 @@ var change = { // Show the crop box if is hidden if (!this.cropped) { - this.$cropBox.removeClass(CLASS_HIDDEN); + removeClass(this.cropBox, CLASS_HIDDEN); this.cropped = true; if (this.limited) { @@ -2020,16 +2326,16 @@ var change = { } if (renderable) { - cropBox.width = width; - cropBox.height = height; - cropBox.left = left; - cropBox.top = top; + cropBoxData.width = width; + cropBoxData.height = height; + cropBoxData.left = left; + cropBoxData.top = top; this.action = action; this.renderCropBox(); } // Override - $.each(pointers, function (i, p) { + forEach(pointers, function (p) { p.startX = p.endX; p.startY = p.endY; }); @@ -2039,149 +2345,162 @@ var change = { var methods = { // Show the crop box manually crop: function crop() { - if (!this.ready || this.disabled) { - return; - } - - if (!this.cropped) { + if (this.ready && !this.cropped && !this.disabled) { this.cropped = true; this.limitCropBox(true, true); if (this.options.modal) { - this.$dragBox.addClass(CLASS_MODAL); + addClass(this.dragBox, CLASS_MODAL); } - this.$cropBox.removeClass(CLASS_HIDDEN); + removeClass(this.cropBox, CLASS_HIDDEN); + this.setCropBoxData(this.initialCropBoxData); } - this.setCropBoxData(this.initialCropBox); + return this; }, // Reset the image and crop box to their initial states reset: function reset() { - if (!this.ready || this.disabled) { - return; - } + if (this.ready && !this.disabled) { + this.imageData = assign({}, this.initialImageData); + this.canvasData = assign({}, this.initialCanvasData); + this.cropBoxData = assign({}, this.initialCropBoxData); + this.renderCanvas(); - this.image = $.extend({}, this.initialImage); - this.canvas = $.extend({}, this.initialCanvas); - this.cropBox = $.extend({}, this.initialCropBox); - this.renderCanvas(); - - if (this.cropped) { - this.renderCropBox(); + if (this.cropped) { + this.renderCropBox(); + } } + + return this; }, // Clear the crop box clear: function clear() { - if (!this.cropped || this.disabled) { - return; - } + if (this.cropped && !this.disabled) { + assign(this.cropBoxData, { + left: 0, + top: 0, + width: 0, + height: 0 + }); - $.extend(this.cropBox, { - left: 0, - top: 0, - width: 0, - height: 0 - }); + this.cropped = false; + this.renderCropBox(); + this.limitCanvas(true, true); - this.cropped = false; - this.renderCropBox(); - this.limitCanvas(true, true); + // Render canvas after crop box rendered + this.renderCanvas(); + removeClass(this.dragBox, CLASS_MODAL); + addClass(this.cropBox, CLASS_HIDDEN); + } - // Render canvas after crop box rendered - this.renderCanvas(); - this.$dragBox.removeClass(CLASS_MODAL); - this.$cropBox.addClass(CLASS_HIDDEN); + return this; }, /** * Replace the image's src and rebuild the cropper * @param {string} url - The new URL. - * @param {boolean} [onlyColorChanged] - Indicate if the new image only changed color. + * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one. + * @returns {Cropper} this */ - replace: function replace(url, onlyColorChanged) { + replace: function replace(url) { + var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + if (!this.disabled && url) { if (this.isImg) { - this.$element.attr('src', url); + this.element.src = url; } - if (onlyColorChanged) { + if (hasSameSize) { this.url = url; - this.$clone.attr('src', url); + this.image.src = url; if (this.ready) { - this.$preview.find('img').add(this.$clone2).attr('src', url); + this.viewBoxImage.src = url; + + forEach(this.previews, function (element) { + element.getElementsByTagName('img')[0].src = url; + }); } } else { if (this.isImg) { this.replaced = true; } - // Clear previous data this.options.data = null; + this.uncreate(); this.load(url); } } + + return this; }, // Enable (unfreeze) the cropper enable: function enable() { - if (this.ready) { + if (this.ready && this.disabled) { this.disabled = false; - this.$cropper.removeClass(CLASS_DISABLED); + removeClass(this.cropper, CLASS_DISABLED); } + + return this; }, // Disable (freeze) the cropper disable: function disable() { - if (this.ready) { + if (this.ready && !this.disabled) { this.disabled = true; - this.$cropper.addClass(CLASS_DISABLED); + addClass(this.cropper, CLASS_DISABLED); } + + return this; }, - // Destroy the cropper and remove the instance from the image + /** + * Destroy the cropper and remove the instance from the image + * @returns {Cropper} this + */ destroy: function destroy() { - var $element = this.$element; + var element = this.element; - if (this.loaded) { - if (this.isImg && this.replaced) { - $element.attr('src', this.originalUrl); - } + if (!getData(element, NAMESPACE)) { + return this; + } - this.unbuild(); - $element.removeClass(CLASS_HIDDEN); - } else if (this.isImg) { - $element.off(EVENT_LOAD, this.start); - } else if (this.$clone) { - this.$clone.remove(); + if (this.isImg && this.replaced) { + element.src = this.originalUrl; } - $element.removeData(NAMESPACE); + this.uncreate(); + removeData(element, NAMESPACE); + + return this; }, /** * Move the canvas with relative offsets * @param {number} offsetX - The relative offset distance on the x-axis. - * @param {number} offsetY - The relative offset distance on the y-axis. + * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis. + * @returns {Cropper} this */ - move: function move(offsetX, offsetY) { - var _canvas = this.canvas, - left = _canvas.left, - top = _canvas.top; + move: function move(offsetX) { + var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX; + var _canvasData = this.canvasData, + left = _canvasData.left, + top = _canvasData.top; - this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY)); + return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY)); }, @@ -2189,28 +2508,25 @@ var methods = { * Move the canvas to an absolute point * @param {number} x - The x-axis coordinate. * @param {number} [y=x] - The y-axis coordinate. + * @returns {Cropper} this */ - moveTo: function moveTo(x, y) { - var canvas = this.canvas; + moveTo: function moveTo(x) { + var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x; + var canvasData = this.canvasData; var changed = false; - // If "y" is not present, its default value is "x" - if (isUndefined(y)) { - y = x; - } - x = Number(x); y = Number(y); if (this.ready && !this.disabled && this.options.movable) { if (isNumber(x)) { - canvas.left = x; + canvasData.left = x; changed = true; } if (isNumber(y)) { - canvas.top = y; + canvasData.top = y; changed = true; } @@ -2218,16 +2534,19 @@ var methods = { this.renderCanvas(true); } } + + return this; }, /** * Zoom the canvas with a relative ratio - * @param {Number} ratio - The target ratio. - * @param {Event} _event - The related event if any. + * @param {number} ratio - The target ratio. + * @param {Event} _originalEvent - The original event if any. + * @returns {Cropper} this */ - zoom: function zoom(ratio, _event) { - var canvas = this.canvas; + zoom: function zoom(ratio, _originalEvent) { + var canvasData = this.canvasData; ratio = Number(ratio); @@ -2238,23 +2557,24 @@ var methods = { ratio = 1 + ratio; } - this.zoomTo(canvas.width * ratio / canvas.naturalWidth, _event); + return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent); }, /** * Zoom the canvas to an absolute ratio * @param {number} ratio - The target ratio. - * @param {Event} _event - The related event if any. + * @param {Object} pivot - The zoom pivot point coordinate. + * @param {Event} _originalEvent - The original event if any. + * @returns {Cropper} this */ - zoomTo: function zoomTo(ratio, _event) { + zoomTo: function zoomTo(ratio, pivot, _originalEvent) { var options = this.options, - pointers = this.pointers, - canvas = this.canvas; - var width = canvas.width, - height = canvas.height, - naturalWidth = canvas.naturalWidth, - naturalHeight = canvas.naturalHeight; + canvasData = this.canvasData; + var width = canvasData.width, + height = canvasData.height, + naturalWidth = canvasData.naturalWidth, + naturalHeight = canvasData.naturalHeight; ratio = Number(ratio); @@ -2262,87 +2582,95 @@ var methods = { if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) { var newWidth = naturalWidth * ratio; var newHeight = naturalHeight * ratio; - var originalEvent = void 0; - - if (_event) { - originalEvent = _event.originalEvent; - } - if (this.trigger(EVENT_ZOOM, { - originalEvent: originalEvent, + if (dispatchEvent(this.element, EVENT_ZOOM, { + originalEvent: _originalEvent, oldRatio: width / naturalWidth, ratio: newWidth / naturalWidth - }).isDefaultPrevented()) { - return; + }) === false) { + return this; } - if (originalEvent) { - var offset = this.$cropper.offset(); - var center = pointers && objectKeys(pointers).length ? getPointersCenter(pointers) : { - pageX: _event.pageX || originalEvent.pageX || 0, - pageY: _event.pageY || originalEvent.pageY || 0 + if (_originalEvent) { + var pointers = this.pointers; + + var offset = getOffset(this.cropper); + var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : { + pageX: _originalEvent.pageX, + pageY: _originalEvent.pageY }; // Zoom from the triggering point of the event - canvas.left -= (newWidth - width) * ((center.pageX - offset.left - canvas.left) / width); - canvas.top -= (newHeight - height) * ((center.pageY - offset.top - canvas.top) / height); + canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width); + canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height); + } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) { + canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width); + canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height); } else { // Zoom from the center of the canvas - canvas.left -= (newWidth - width) / 2; - canvas.top -= (newHeight - height) / 2; + canvasData.left -= (newWidth - width) / 2; + canvasData.top -= (newHeight - height) / 2; } - canvas.width = newWidth; - canvas.height = newHeight; + canvasData.width = newWidth; + canvasData.height = newHeight; this.renderCanvas(true); } + + return this; }, /** * Rotate the canvas with a relative degree * @param {number} degree - The rotate degree. + * @returns {Cropper} this */ rotate: function rotate(degree) { - this.rotateTo((this.image.rotate || 0) + Number(degree)); + return this.rotateTo((this.imageData.rotate || 0) + Number(degree)); }, /** * Rotate the canvas to an absolute degree * @param {number} degree - The rotate degree. + * @returns {Cropper} this */ rotateTo: function rotateTo(degree) { degree = Number(degree); if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) { - this.image.rotate = degree % 360; + this.imageData.rotate = degree % 360; this.renderCanvas(true, true); } + + return this; }, /** * Scale the image on the x-axis. * @param {number} scaleX - The scale ratio on the x-axis. + * @returns {Cropper} this */ scaleX: function scaleX(_scaleX) { - var scaleY = this.image.scaleY; + var scaleY = this.imageData.scaleY; - this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1); + return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1); }, /** * Scale the image on the y-axis. * @param {number} scaleY - The scale ratio on the y-axis. + * @returns {Cropper} this */ scaleY: function scaleY(_scaleY) { - var scaleX = this.image.scaleX; + var scaleX = this.imageData.scaleX; - this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY); + return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY); }, @@ -2350,10 +2678,11 @@ var methods = { * Scale the image * @param {number} scaleX - The scale ratio on the x-axis. * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis. + * @returns {Cropper} this */ scale: function scale(scaleX) { var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX; - var image = this.image; + var imageData = this.imageData; var transformed = false; @@ -2362,12 +2691,12 @@ var methods = { if (this.ready && !this.disabled && this.options.scalable) { if (isNumber(scaleX)) { - image.scaleX = scaleX; + imageData.scaleX = scaleX; transformed = true; } if (isNumber(scaleY)) { - image.scaleY = scaleY; + imageData.scaleY = scaleY; transformed = true; } @@ -2375,6 +2704,8 @@ var methods = { this.renderCanvas(true, true); } } + + return this; }, @@ -2383,26 +2714,26 @@ var methods = { * @param {boolean} [rounded=false] - Indicate if round the data values or not. * @returns {Object} The result cropped data. */ - getData: function getData() { + getData: function getData$$1() { var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var options = this.options, - image = this.image, - canvas = this.canvas, - cropBox = this.cropBox; + imageData = this.imageData, + canvasData = this.canvasData, + cropBoxData = this.cropBoxData; var data = void 0; if (this.ready && this.cropped) { data = { - x: cropBox.left - canvas.left, - y: cropBox.top - canvas.top, - width: cropBox.width, - height: cropBox.height + x: cropBoxData.left - canvasData.left, + y: cropBoxData.top - canvasData.top, + width: cropBoxData.width, + height: cropBoxData.height }; - var ratio = image.width / image.naturalWidth; + var ratio = imageData.width / imageData.naturalWidth; - $.each(data, function (i, n) { + forEach(data, function (n, i) { n /= ratio; data[i] = rounded ? Math.round(n) : n; }); @@ -2416,12 +2747,12 @@ var methods = { } if (options.rotatable) { - data.rotate = image.rotate || 0; + data.rotate = imageData.rotate || 0; } if (options.scalable) { - data.scaleX = image.scaleX || 1; - data.scaleY = image.scaleY || 1; + data.scaleX = imageData.scaleX || 1; + data.scaleY = imageData.scaleY || 1; } return data; @@ -2431,36 +2762,33 @@ var methods = { /** * Set the cropped area position and size with new data * @param {Object} data - The new data. + * @returns {Cropper} this */ - setData: function setData(data) { + setData: function setData$$1(data) { var options = this.options, - image = this.image, - canvas = this.canvas; + imageData = this.imageData, + canvasData = this.canvasData; var cropBoxData = {}; - if ($.isFunction(data)) { - data = data.call(this.element); - } - - if (this.ready && !this.disabled && $.isPlainObject(data)) { + if (this.ready && !this.disabled && isPlainObject(data)) { var transformed = false; if (options.rotatable) { - if (isNumber(data.rotate) && data.rotate !== image.rotate) { - image.rotate = data.rotate; + if (isNumber(data.rotate) && data.rotate !== imageData.rotate) { + imageData.rotate = data.rotate; transformed = true; } } if (options.scalable) { - if (isNumber(data.scaleX) && data.scaleX !== image.scaleX) { - image.scaleX = data.scaleX; + if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) { + imageData.scaleX = data.scaleX; transformed = true; } - if (isNumber(data.scaleY) && data.scaleY !== image.scaleY) { - image.scaleY = data.scaleY; + if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) { + imageData.scaleY = data.scaleY; transformed = true; } } @@ -2469,14 +2797,14 @@ var methods = { this.renderCanvas(true, true); } - var ratio = image.width / image.naturalWidth; + var ratio = imageData.width / imageData.naturalWidth; if (isNumber(data.x)) { - cropBoxData.left = data.x * ratio + canvas.left; + cropBoxData.left = data.x * ratio + canvasData.left; } if (isNumber(data.y)) { - cropBoxData.top = data.y * ratio + canvas.top; + cropBoxData.top = data.y * ratio + canvasData.top; } if (isNumber(data.width)) { @@ -2489,6 +2817,8 @@ var methods = { this.setCropBoxData(cropBoxData); } + + return this; }, @@ -2497,7 +2827,7 @@ var methods = { * @returns {Object} The result container data. */ getContainerData: function getContainerData() { - return this.ready ? $.extend({}, this.container) : {}; + return this.ready ? assign({}, this.containerData) : {}; }, @@ -2506,7 +2836,7 @@ var methods = { * @returns {Object} The result image data. */ getImageData: function getImageData() { - return this.loaded ? $.extend({}, this.image) : {}; + return this.sized ? assign({}, this.imageData) : {}; }, @@ -2515,13 +2845,13 @@ var methods = { * @returns {Object} The result canvas data. */ getCanvasData: function getCanvasData() { - var canvas = this.canvas; + var canvasData = this.canvasData; var data = {}; if (this.ready) { - $.each(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (i, n) { - data[n] = canvas[n]; + forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) { + data[n] = canvasData[n]; }); } @@ -2532,35 +2862,34 @@ var methods = { /** * Set the canvas position and size with new data. * @param {Object} data - The new canvas data. + * @returns {Cropper} this */ setCanvasData: function setCanvasData(data) { - var canvas = this.canvas; - var aspectRatio = canvas.aspectRatio; + var canvasData = this.canvasData; + var aspectRatio = canvasData.aspectRatio; - if ($.isFunction(data)) { - data = data.call(this.$element); - } - - if (this.ready && !this.disabled && $.isPlainObject(data)) { + if (this.ready && !this.disabled && isPlainObject(data)) { if (isNumber(data.left)) { - canvas.left = data.left; + canvasData.left = data.left; } if (isNumber(data.top)) { - canvas.top = data.top; + canvasData.top = data.top; } if (isNumber(data.width)) { - canvas.width = data.width; - canvas.height = data.width / aspectRatio; + canvasData.width = data.width; + canvasData.height = data.width / aspectRatio; } else if (isNumber(data.height)) { - canvas.height = data.height; - canvas.width = data.height * aspectRatio; + canvasData.height = data.height; + canvasData.width = data.height * aspectRatio; } this.renderCanvas(true); } + + return this; }, @@ -2569,62 +2898,66 @@ var methods = { * @returns {Object} The result crop box data. */ getCropBoxData: function getCropBoxData() { - var cropBox = this.cropBox; + var cropBoxData = this.cropBoxData; + var data = void 0; - return this.ready && this.cropped ? { - left: cropBox.left, - top: cropBox.top, - width: cropBox.width, - height: cropBox.height - } : {}; + if (this.ready && this.cropped) { + data = { + left: cropBoxData.left, + top: cropBoxData.top, + width: cropBoxData.width, + height: cropBoxData.height + }; + } + + return data || {}; }, /** * Set the crop box position and size with new data. * @param {Object} data - The new crop box data. + * @returns {Cropper} this */ setCropBoxData: function setCropBoxData(data) { - var cropBox = this.cropBox; + var cropBoxData = this.cropBoxData; var aspectRatio = this.options.aspectRatio; var widthChanged = void 0; var heightChanged = void 0; - if ($.isFunction(data)) { - data = data.call(this.$element); - } - - if (this.ready && this.cropped && !this.disabled && $.isPlainObject(data)) { + if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) { if (isNumber(data.left)) { - cropBox.left = data.left; + cropBoxData.left = data.left; } if (isNumber(data.top)) { - cropBox.top = data.top; + cropBoxData.top = data.top; } - if (isNumber(data.width) && data.width !== cropBox.width) { + if (isNumber(data.width) && data.width !== cropBoxData.width) { widthChanged = true; - cropBox.width = data.width; + cropBoxData.width = data.width; } - if (isNumber(data.height) && data.height !== cropBox.height) { + if (isNumber(data.height) && data.height !== cropBoxData.height) { heightChanged = true; - cropBox.height = data.height; + cropBoxData.height = data.height; } if (aspectRatio) { if (widthChanged) { - cropBox.height = cropBox.width / aspectRatio; + cropBoxData.height = cropBoxData.width / aspectRatio; } else if (heightChanged) { - cropBox.width = cropBox.height * aspectRatio; + cropBoxData.width = cropBoxData.height * aspectRatio; } } this.renderCropBox(); } + + return this; }, @@ -2640,9 +2973,9 @@ var methods = { return null; } - var canvasData = this.canvas; + var canvasData = this.canvasData; - var source = getSourceCanvas(this.$clone[0], this.image, canvasData, options); + var source = getSourceCanvas(this.image, this.imageData, canvasData, options); // Returns the source canvas if it is not cropped. if (!this.cropped) { @@ -2692,6 +3025,7 @@ var methods = { canvas.width = normalizeDecimalNumber(width); canvas.height = normalizeDecimalNumber(height); + context.fillStyle = options.fillColor || 'transparent'; context.fillRect(0, 0, width, height); @@ -2765,9 +3099,10 @@ var methods = { params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale); } - context.drawImage.apply(context, [source].concat(toConsumableArray($.map(params, function (param) { + context.drawImage.apply(context, [source].concat(toConsumableArray(params.map(function (param) { return Math.floor(normalizeDecimalNumber(param)); })))); + return canvas; }, @@ -2775,6 +3110,7 @@ var methods = { /** * Change the aspect ratio of the crop box. * @param {number} aspectRatio - The new aspect ratio. + * @returns {Cropper} this */ setAspectRatio: function setAspectRatio(aspectRatio) { var options = this.options; @@ -2792,34 +3128,47 @@ var methods = { } } } + + return this; }, /** * Change the drag mode. * @param {string} mode - The new drag mode. + * @returns {Cropper} this */ setDragMode: function setDragMode(mode) { - var options = this.options; + var options = this.options, + dragBox = this.dragBox, + face = this.face; + - var croppable = void 0; - var movable = void 0; + if (this.ready && !this.disabled) { + var croppable = mode === DRAG_MODE_CROP; + var movable = options.movable && mode === DRAG_MODE_MOVE; - if (this.loaded && !this.disabled) { - croppable = mode === DRAG_MODE_CROP; - movable = options.movable && mode === DRAG_MODE_MOVE; mode = croppable || movable ? mode : DRAG_MODE_NONE; - this.$dragBox.data(DATA_ACTION, mode).toggleClass(CLASS_CROP, croppable).toggleClass(CLASS_MOVE, movable); + options.dragMode = mode; + setData(dragBox, DATA_ACTION, mode); + toggleClass(dragBox, CLASS_CROP, croppable); + toggleClass(dragBox, CLASS_MOVE, movable); if (!options.cropBoxMovable) { - // Sync drag mode to crop box when it is not movable(#300) - this.$face.data(DATA_ACTION, mode).toggleClass(CLASS_CROP, croppable).toggleClass(CLASS_MOVE, movable); + // Sync drag mode to crop box when it is not movable + setData(face, DATA_ACTION, mode); + toggleClass(face, CLASS_CROP, croppable); + toggleClass(face, CLASS_MOVE, movable); } } + + return this; } }; +var AnotherCropper = WINDOW.Cropper; + var Cropper = function () { /** * Create a new Cropper. @@ -2835,36 +3184,37 @@ var Cropper = function () { } this.element = element; - this.$element = $(element); - this.options = $.extend({}, DEFAULTS, $.isPlainObject(options) && options); - this.completed = false; + this.options = assign({}, DEFAULTS, isPlainObject(options) && options); this.cropped = false; this.disabled = false; - this.isImg = false; - this.limited = false; - this.loaded = false; + this.pointers = {}; this.ready = false; + this.reloading = false; this.replaced = false; - this.wheeling = false; - this.originalUrl = ''; - this.canvas = null; - this.cropBox = null; - this.pointers = {}; + this.sized = false; + this.sizing = false; this.init(); } createClass(Cropper, [{ key: 'init', value: function init() { - var $element = this.$element; + var element = this.element; + var tagName = element.tagName.toLowerCase(); var url = void 0; - if ($element.is('img')) { + if (getData(element, NAMESPACE)) { + return; + } + + setData(element, NAMESPACE, this); + + if (tagName === 'img') { this.isImg = true; - // Should use `$.fn.attr` here. e.g.: "img/picture.jpg" - url = $element.attr('src') || ''; + // e.g.: "img/picture.jpg" + url = element.getAttribute('src') || ''; this.originalUrl = url; // Stop when it's a blank image @@ -2872,26 +3222,14 @@ var Cropper = function () { return; } - // Should use `$.fn.prop` here. e.g.: "http://example.com/img/picture.jpg" - url = $element.prop('src'); - } else if ($element.is('canvas') && window.HTMLCanvasElement) { - url = $element[0].toDataURL(); + // e.g.: "http://example.com/img/picture.jpg" + url = element.src; + } else if (tagName === 'canvas' && window.HTMLCanvasElement) { + url = element.toDataURL(); } this.load(url); } - - // A shortcut for triggering custom events - - }, { - key: 'trigger', - value: function trigger(type, data) { - var e = $.Event(type, data); - - this.$element.trigger(e); - - return e; - } }, { key: 'load', value: function load(url) { @@ -2902,9 +3240,9 @@ var Cropper = function () { } this.url = url; - this.image = {}; + this.imageData = {}; - var $element = this.$element, + var element = this.element, options = this.options; @@ -2926,29 +3264,41 @@ var Cropper = function () { var xhr = new XMLHttpRequest(); + this.reloading = true; + this.xhr = xhr; + + var done = function done() { + _this.reloading = false; + _this.xhr = null; + }; + + xhr.ontimeout = done; + xhr.onabort = done; xhr.onerror = function () { + done(); _this.clone(); }; xhr.onload = function () { + done(); _this.read(xhr.response); }; // Bust cache when there is a "crossOrigin" property - if (options.checkCrossOrigin && isCrossOriginURL(url) && !$element.prop('crossOrigin')) { + if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) { url = addTimestamp(url); } xhr.open('get', url); xhr.responseType = 'arraybuffer'; - xhr.withCredentials = $element.prop('crossOrigin') === 'use-credentials'; + xhr.withCredentials = element.crossOrigin === 'use-credentials'; xhr.send(); } }, { key: 'read', value: function read(arrayBuffer) { var options = this.options, - image = this.image; + imageData = this.imageData; var orientation = getOrientation(arrayBuffer); var rotate = 0; @@ -2966,12 +3316,12 @@ var Cropper = function () { } if (options.rotatable) { - image.rotate = rotate; + imageData.rotate = rotate; } if (options.scalable) { - image.scaleX = scaleX; - image.scaleY = scaleY; + imageData.scaleX = scaleX; + imageData.scaleY = scaleY; } this.clone(); @@ -2979,22 +3329,22 @@ var Cropper = function () { }, { key: 'clone', value: function clone() { - var $element = this.$element, - options = this.options, + var element = this.element, url = this.url; - var crossOrigin = ''; + var crossOrigin = void 0; var crossOriginUrl = void 0; - if (options.checkCrossOrigin && isCrossOriginURL(url)) { - crossOrigin = $element.prop('crossOrigin'); + if (this.options.checkCrossOrigin && isCrossOriginURL(url)) { + crossOrigin = element.crossOrigin; + if (crossOrigin) { crossOriginUrl = url; } else { crossOrigin = 'anonymous'; - // Bust cache (#148) when there is not a "crossOrigin" property + // Bust cache when there is not a "crossOrigin" property crossOriginUrl = addTimestamp(url); } } @@ -3010,88 +3360,136 @@ var Cropper = function () { image.src = crossOriginUrl || url; - var $clone = $(image); + var start = this.start.bind(this); + var stop = this.stop.bind(this); - this.$clone = $clone; + this.image = image; + this.onStart = start; + this.onStop = stop; if (this.isImg) { - if (this.element.complete) { - this.start(); + if (element.complete) { + this.timeout = setTimeout(start, 0); } else { - $element.one(EVENT_LOAD, $.proxy(this.start, this)); + addListener(element, EVENT_LOAD, start, { + once: true + }); } } else { - $clone.one(EVENT_LOAD, $.proxy(this.start, this)).one(EVENT_ERROR, $.proxy(this.stop, this)).addClass(CLASS_HIDE).insertAfter($element); + image.onload = start; + image.onerror = stop; + addClass(image, CLASS_HIDE); + element.parentNode.insertBefore(image, element.nextSibling); } } }, { key: 'start', - value: function start() { + value: function start(event) { var _this2 = this; - var $clone = this.$clone; - - var $image = this.$element; + var image = this.isImg ? this.element : this.image; - if (!this.isImg) { - $clone.off(EVENT_ERROR, this.stop); - $image = $clone; + if (event) { + image.onload = null; + image.onerror = null; } - getImageNaturalSizes($image[0], function (naturalWidth, naturalHeight) { - $.extend(_this2.image, { + this.sizing = true; + + var IS_SAFARI = WINDOW.navigator && /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(WINDOW.navigator.userAgent); + var done = function done(naturalWidth, naturalHeight) { + assign(_this2.imageData, { naturalWidth: naturalWidth, naturalHeight: naturalHeight, aspectRatio: naturalWidth / naturalHeight }); - - _this2.loaded = true; + _this2.sizing = false; + _this2.sized = true; _this2.build(); - }); + }; + + // Modern browsers (except Safari) + if (image.naturalWidth && !IS_SAFARI) { + done(image.naturalWidth, image.naturalHeight); + return; + } + + var sizingImage = document.createElement('img'); + var body = document.body || document.documentElement; + + this.sizingImage = sizingImage; + + sizingImage.onload = function () { + done(sizingImage.width, sizingImage.height); + + if (!IS_SAFARI) { + body.removeChild(sizingImage); + } + }; + + sizingImage.src = image.src; + + // iOS Safari will convert the image automatically + // with its orientation once append it into DOM (#279) + if (!IS_SAFARI) { + 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;'; + body.appendChild(sizingImage); + } } }, { key: 'stop', value: function stop() { - this.$clone.remove(); - this.$clone = null; + var image = this.image; + + + image.onload = null; + image.onerror = null; + image.parentNode.removeChild(image); + this.image = null; } }, { key: 'build', value: function build() { - var _this3 = this; - - if (!this.loaded) { + if (!this.sized || this.ready) { return; } - // Unbuild first when replace - if (this.ready) { - this.unbuild(); - } - - var $element = this.$element, + var element = this.element, options = this.options, - $clone = this.$clone; - - var $cropper = $(TEMPLATE); - var $cropBox = $cropper.find('.' + NAMESPACE + '-crop-box'); - var $face = $cropBox.find('.' + NAMESPACE + '-face'); + image = this.image; // Create cropper elements - this.$container = $element.parent(); - this.$cropper = $cropper; - this.$canvas = $cropper.find('.' + NAMESPACE + '-canvas').append($clone); - this.$dragBox = $cropper.find('.' + NAMESPACE + '-drag-box'); - this.$cropBox = $cropBox; - this.$viewBox = $cropper.find('.' + NAMESPACE + '-view-box'); - this.$face = $face; + + var container = element.parentNode; + var template = document.createElement('div'); + + template.innerHTML = TEMPLATE; + + var cropper = template.querySelector('.' + NAMESPACE + '-container'); + var canvas = cropper.querySelector('.' + NAMESPACE + '-canvas'); + var dragBox = cropper.querySelector('.' + NAMESPACE + '-drag-box'); + var cropBox = cropper.querySelector('.' + NAMESPACE + '-crop-box'); + var face = cropBox.querySelector('.' + NAMESPACE + '-face'); + + this.container = container; + this.cropper = cropper; + this.canvas = canvas; + this.dragBox = dragBox; + this.cropBox = cropBox; + this.viewBox = cropper.querySelector('.' + NAMESPACE + '-view-box'); + this.face = face; + + canvas.appendChild(image); // Hide the original image - $element.addClass(CLASS_HIDDEN).after($cropper); + addClass(element, CLASS_HIDDEN); + + // Inserts the cropper after to the current image + container.insertBefore(cropper, element.nextSibling); - // Show the clone image if is hidden + // Show the image if is hidden if (!this.isImg) { - $clone.removeClass(CLASS_HIDE); + removeClass(image, CLASS_HIDE); } this.initPreview(); @@ -3100,55 +3498,51 @@ var Cropper = function () { options.aspectRatio = Math.max(0, options.aspectRatio) || NaN; options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0; - this.cropped = options.autoCrop; - - if (options.autoCrop) { - if (options.modal) { - this.$dragBox.addClass(CLASS_MODAL); - } - } else { - $cropBox.addClass(CLASS_HIDDEN); - } + addClass(cropBox, CLASS_HIDDEN); if (!options.guides) { - $cropBox.find('.' + NAMESPACE + '-dashed').addClass(CLASS_HIDDEN); + addClass(cropBox.getElementsByClassName(NAMESPACE + '-dashed'), CLASS_HIDDEN); } if (!options.center) { - $cropBox.find('.' + NAMESPACE + '-center').addClass(CLASS_HIDDEN); + addClass(cropBox.getElementsByClassName(NAMESPACE + '-center'), CLASS_HIDDEN); } - if (options.cropBoxMovable) { - $face.addClass(CLASS_MOVE).data(DATA_ACTION, ACTION_ALL); + if (options.background) { + addClass(cropper, NAMESPACE + '-bg'); } if (!options.highlight) { - $face.addClass(CLASS_INVISIBLE); + addClass(face, CLASS_INVISIBLE); } - if (options.background) { - $cropper.addClass(NAMESPACE + '-bg'); + if (options.cropBoxMovable) { + addClass(face, CLASS_MOVE); + setData(face, DATA_ACTION, ACTION_ALL); } if (!options.cropBoxResizable) { - $cropBox.find('.' + NAMESPACE + '-line,.' + NAMESPACE + '-point').addClass(CLASS_HIDDEN); + addClass(cropBox.getElementsByClassName(NAMESPACE + '-line'), CLASS_HIDDEN); + addClass(cropBox.getElementsByClassName(NAMESPACE + '-point'), CLASS_HIDDEN); } - this.setDragMode(options.dragMode); this.render(); this.ready = true; + this.setDragMode(options.dragMode); + + if (options.autoCrop) { + this.crop(); + } + this.setData(options.data); - // Trigger the ready event asynchronously to keep `data('cropper')` is defined - this.completing = setTimeout(function () { - if ($.isFunction(options.ready)) { - $element.one(EVENT_READY, options.ready); - } + if (isFunction(options.ready)) { + addListener(element, EVENT_READY, options.ready, { + once: true + }); + } - _this3.trigger(EVENT_READY); - _this3.trigger(EVENT_CROP, _this3.getData()); - _this3.completed = true; - }, 0); + dispatchEvent(element, EVENT_READY); } }, { key: 'unbuild', @@ -3157,35 +3551,49 @@ var Cropper = function () { return; } - if (!this.completed) { - clearTimeout(this.completing); - } - this.ready = false; - this.completed = false; - this.initialImage = null; - - // Clear `initialCanvas` is necessary when replace - this.initialCanvas = null; - this.initialCropBox = null; - this.container = null; - this.canvas = null; - - // Clear `cropBox` is necessary when replace - this.cropBox = null; this.unbind(); - this.resetPreview(); - this.$preview = null; + this.cropper.parentNode.removeChild(this.cropper); + removeClass(this.element, CLASS_HIDDEN); + } + }, { + key: 'uncreate', + value: function uncreate() { + var element = this.element; + + + if (this.ready) { + this.unbuild(); + this.ready = false; + this.cropped = false; + } else if (this.sizing) { + this.sizingImage.onload = null; + this.sizing = false; + this.sized = false; + } else if (this.reloading) { + this.xhr.abort(); + } else if (this.isImg) { + if (element.complete) { + clearTimeout(this.timeout); + } else { + removeListener(element, EVENT_LOAD, this.onStart); + } + } else if (this.image) { + this.stop(); + } + } - this.$viewBox = null; - this.$cropBox = null; - this.$dragBox = null; - this.$canvas = null; - this.$container = null; + /** + * Get the no conflict cropper class. + * @returns {Cropper} The cropper class. + */ - this.$cropper.remove(); - this.$cropper = null; + }], [{ + key: 'noConflict', + value: function noConflict() { + window.Cropper = AnotherCropper; + return Cropper; } /** @@ -3193,21 +3601,20 @@ var Cropper = function () { * @param {Object} options - The new default options. */ - }], [{ + }, { key: 'setDefaults', value: function setDefaults(options) { - $.extend(DEFAULTS, $.isPlainObject(options) && options); + assign(DEFAULTS, isPlainObject(options) && options); } }]); return Cropper; }(); -if ($.extend) { - $.extend(Cropper.prototype, render, preview, events, handlers, change, methods); -} +assign(Cropper.prototype, render, preview, events, handlers, change, methods); if ($.fn) { - var AnotherCropper = $.fn.cropper; + var AnotherCropper$1 = $.fn.cropper; + var NAMESPACE$1 = 'cropper'; $.fn.cropper = function jQueryCropper(option) { for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { @@ -3218,35 +3625,44 @@ if ($.fn) { this.each(function (i, element) { var $element = $(element); - var data = $element.data(NAMESPACE); + var isDestroy = option === 'destroy'; + var cropper = $element.data(NAMESPACE$1); - if (!data) { - if (/destroy/.test(option)) { + if (!cropper) { + if (isDestroy) { return; } var options = $.extend({}, $element.data(), $.isPlainObject(option) && option); - data = new Cropper(element, options); - $element.data(NAMESPACE, data); + cropper = new Cropper(element, options); + $element.data(NAMESPACE$1, cropper); } - if (isString(option)) { - var fn = data[option]; + if (typeof option === 'string') { + var fn = cropper[option]; if ($.isFunction(fn)) { - result = fn.apply(data, args); + result = fn.apply(cropper, args); + + if (result === cropper) { + result = undefined; + } + + if (isDestroy) { + $element.removeData(NAMESPACE$1); + } } } }); - return isUndefined(result) ? this : result; + return typeof result === 'undefined' ? this : result; }; $.fn.cropper.Constructor = Cropper; $.fn.cropper.setDefaults = Cropper.setDefaults; $.fn.cropper.noConflict = function noConflict() { - $.fn.cropper = AnotherCropper; + $.fn.cropper = AnotherCropper$1; return this; }; } diff --git a/dist/cropper.js b/dist/cropper.js index 3757403d..c82e8516 100644 --- a/dist/cropper.js +++ b/dist/cropper.js @@ -1,11 +1,11 @@ /*! - * Cropper v3.1.6 + * Cropper v4.0.0-alpha * https://github.com/fengyuanchen/cropper * * Copyright (c) 2014-2018 Chen Fengyuan * Released under the MIT license * - * Date: 2018-03-01T13:33:48.179Z + * Date: 2018-03-01T14:21:13.980Z */ (function (global, factory) { @@ -57,7 +57,6 @@ var EVENT_CROP_END = 'cropend'; var EVENT_CROP_MOVE = 'cropmove'; var EVENT_CROP_START = 'cropstart'; var EVENT_DBLCLICK = 'dblclick'; -var EVENT_ERROR = 'error'; var EVENT_LOAD = 'load'; var EVENT_POINTER_DOWN = WINDOW.PointerEvent ? 'pointerdown' : 'touchstart mousedown'; var EVENT_POINTER_MOVE = WINDOW.PointerEvent ? 'pointermove' : 'touchmove mousemove'; @@ -68,10 +67,10 @@ var EVENT_WHEEL = 'wheel mousewheel DOMMouseScroll'; var EVENT_ZOOM = 'zoom'; // RegExps -var REGEXP_ACTIONS = /^(e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/; +var REGEXP_ACTIONS = /^(?:e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/; var REGEXP_DATA_URL = /^data:/; var REGEXP_DATA_URL_JPEG = /^data:image\/jpeg;base64,/; -var REGEXP_TAG_NAME = /^(img|canvas)$/i; +var REGEXP_TAG_NAME = /^(?:img|canvas)$/i; var DEFAULTS = { // Define the view mode of the cropper @@ -169,7 +168,13 @@ var DEFAULTS = { zoom: null }; -var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
'; +var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; var classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { @@ -205,15 +210,6 @@ var toConsumableArray = function (arr) { } }; -/** - * Check if the given value is a string. - * @param {*} value - The value to check. - * @returns {boolean} Returns `true` if the given value is a string, else `false`. - */ -function isString(value) { - return typeof value === 'string'; -} - /** * Check if the given value is not a number. */ @@ -238,39 +234,97 @@ function isUndefined(value) { } /** - * Takes a function and returns a new one that will always have a particular context. - * Custom proxy to avoid jQuery's guid. - * @param {Function} fn - The target function. - * @param {Object} context - The new context for the function. - * @returns {Function} The new function. + * Check if the given value is an object. + * @param {*} value - The value to check. + * @returns {boolean} Returns `true` if the given value is an object, else `false`. */ -function proxy(fn, context) { - for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - args[_key - 2] = arguments[_key]; +function isObject(value) { + return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value !== null; +} + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +/** + * Check if the given value is a plain object. + * @param {*} value - The value to check. + * @returns {boolean} Returns `true` if the given value is a plain object, else `false`. + */ + +function isPlainObject(value) { + if (!isObject(value)) { + return false; + } + + try { + var _constructor = value.constructor; + var prototype = _constructor.prototype; + + + return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf'); + } catch (e) { + return false; } +} + +/** + * Check if the given value is a function. + * @param {*} value - The value to check. + * @returns {boolean} Returns `true` if the given value is a function, else `false`. + */ +function isFunction(value) { + return typeof value === 'function'; +} - return function () { - for (var _len2 = arguments.length, args2 = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args2[_key2] = arguments[_key2]; +/** + * Iterate the given data. + * @param {*} data - The data to iterate. + * @param {Function} callback - The process function for each element. + * @returns {*} The original data. + */ +function forEach(data, callback) { + if (data && isFunction(callback)) { + if (Array.isArray(data) || isNumber(data.length) /* array-like */) { + var length = data.length; + + var i = void 0; + + for (i = 0; i < length; i += 1) { + if (callback.call(data, data[i], i, data) === false) { + break; + } + } + } else if (isObject(data)) { + Object.keys(data).forEach(function (key) { + callback.call(data, data[key], key, data); + }); } + } - return fn.apply(context, args.concat(args2)); - }; + return data; } /** - * Get the own enumerable properties of a given object. - * @param {Object} obj - The target object. - * @returns {Array} All the own enumerable properties of the given object. + * Extend the given object. + * @param {*} obj - The object to be extended. + * @param {*} args - The rest objects which will be merged to the first object. + * @returns {Object} The extended object. */ -var objectKeys = Object.keys || function objectKeys(obj) { - var keys = []; +var assign = Object.assign || function assign(obj) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } - $.each(obj, function (key) { - keys.push(key); - }); + if (isObject(obj) && args.length > 0) { + args.forEach(function (arg) { + if (isObject(arg)) { + Object.keys(arg).forEach(function (key) { + obj[key] = arg[key]; + }); + } + }); + } - return keys; + return obj; }; var REGEXP_DECIMALS = /\.\d*(?:0|9){12}\d*$/i; @@ -288,6 +342,271 @@ function normalizeDecimalNumber(value) { return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value; } +var REGEXP_SUFFIX = /^(?:width|height|left|top|marginLeft|marginTop)$/; + +/** + * Apply styles to the given element. + * @param {Element} element - The target element. + * @param {Object} styles - The styles for applying. + */ +function setStyle(element, styles) { + var style = element.style; + + + forEach(styles, function (value, property) { + if (REGEXP_SUFFIX.test(property) && isNumber(value)) { + value += 'px'; + } + + style[property] = value; + }); +} + +/** + * Check if the given element has a special class. + * @param {Element} element - The element to check. + * @param {string} value - The class to search. + * @returns {boolean} Returns `true` if the special class was found. + */ +function hasClass(element, value) { + return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1; +} + +/** + * Add classes to the given element. + * @param {Element} element - The target element. + * @param {string} value - The classes to be added. + */ +function addClass(element, value) { + if (!value) { + return; + } + + if (isNumber(element.length)) { + forEach(element, function (elem) { + addClass(elem, value); + }); + return; + } + + if (element.classList) { + element.classList.add(value); + return; + } + + var className = element.className.trim(); + + if (!className) { + element.className = value; + } else if (className.indexOf(value) < 0) { + element.className = className + ' ' + value; + } +} + +/** + * Remove classes from the given element. + * @param {Element} element - The target element. + * @param {string} value - The classes to be removed. + */ +function removeClass(element, value) { + if (!value) { + return; + } + + if (isNumber(element.length)) { + forEach(element, function (elem) { + removeClass(elem, value); + }); + return; + } + + if (element.classList) { + element.classList.remove(value); + return; + } + + if (element.className.indexOf(value) >= 0) { + element.className = element.className.replace(value, ''); + } +} + +/** + * Add or remove classes from the given element. + * @param {Element} element - The target element. + * @param {string} value - The classes to be toggled. + * @param {boolean} added - Add only. + */ +function toggleClass(element, value, added) { + if (!value) { + return; + } + + if (isNumber(element.length)) { + forEach(element, function (elem) { + toggleClass(elem, value, added); + }); + return; + } + + // IE10-11 doesn't support the second parameter of `classList.toggle` + if (added) { + addClass(element, value); + } else { + removeClass(element, value); + } +} + +var REGEXP_HYPHENATE = /([a-z\d])([A-Z])/g; + +/** + * Transform the given string from camelCase to kebab-case + * @param {string} value - The value to transform. + * @returns {string} The transformed value. + */ +function hyphenate(value) { + return value.replace(REGEXP_HYPHENATE, '$1-$2').toLowerCase(); +} + +/** + * Get data from the given element. + * @param {Element} element - The target element. + * @param {string} name - The data key to get. + * @returns {string} The data value. + */ +function getData(element, name) { + if (isObject(element[name])) { + return element[name]; + } else if (element.dataset) { + return element.dataset[name]; + } + + return element.getAttribute('data-' + hyphenate(name)); +} + +/** + * Set data to the given element. + * @param {Element} element - The target element. + * @param {string} name - The data key to set. + * @param {string} data - The data value. + */ +function setData(element, name, data) { + if (isObject(data)) { + element[name] = data; + } else if (element.dataset) { + element.dataset[name] = data; + } else { + element.setAttribute('data-' + hyphenate(name), data); + } +} + +/** + * Remove data from the given element. + * @param {Element} element - The target element. + * @param {string} name - The data key to remove. + */ +function removeData(element, name) { + if (isObject(element[name])) { + try { + delete element[name]; + } catch (e) { + element[name] = undefined; + } + } else if (element.dataset) { + // #128 Safari not allows to delete dataset property + try { + delete element.dataset[name]; + } catch (e) { + element.dataset[name] = undefined; + } + } else { + element.removeAttribute('data-' + hyphenate(name)); + } +} + +var REGEXP_SPACES = /\s\s*/; + +/** + * Remove event listener from the target element. + * @param {Element} element - The event target. + * @param {string} type - The event type(s). + * @param {Function} listener - The event listener. + * @param {Object} options - The event options. + */ +function removeListener(element, type, listener) { + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + + forEach(type.trim().split(REGEXP_SPACES), function (t) { + element.removeEventListener(t, listener, options); + }); +} + +/** + * Add event listener to the target element. + * @param {Element} element - The event target. + * @param {string} type - The event type(s). + * @param {Function} listener - The event listener. + * @param {Object} options - The event options. + */ +function addListener(element, type, _listener) { + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + + if (options.once) { + var originalListener = _listener; + + _listener = function listener() { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + removeListener(element, type, _listener, options); + return originalListener.apply(element, args); + }; + } + + forEach(type.trim().split(REGEXP_SPACES), function (t) { + element.addEventListener(t, _listener, options); + }); +} + +/** + * Dispatch event on the target element. + * @param {Element} element - The event target. + * @param {string} type - The event type(s). + * @param {Object} data - The additional event data. + * @returns {boolean} Indicate if the event is default prevented or not. + */ +function dispatchEvent(element, type, data) { + var event = void 0; + + // Event and CustomEvent on IE9-11 are global objects, not constructors + if (isFunction(Event) && isFunction(CustomEvent)) { + event = new CustomEvent(type, { + detail: data, + bubbles: true, + cancelable: true + }); + } else { + event = document.createEvent('CustomEvent'); + event.initCustomEvent(type, true, true, data); + } + + return element.dispatchEvent(event); +} + +/** + * Get the offset base on the document. + * @param {Element} element - The target element. + * @returns {Object} The offset data. + */ +function getOffset(element) { + var box = element.getBoundingClientRect(); + + return { + left: box.left + (window.pageXOffset - document.documentElement.clientLeft), + top: box.top + (window.pageYOffset - document.documentElement.clientTop) + }; +} + var location = WINDOW.location; var REGEXP_ORIGINS = /^(https?:)\/\/([^:/?#]+):?(\d*)/i; @@ -315,11 +634,11 @@ function addTimestamp(url) { } /** - * Get transform values base on the given object. + * Get transforms base on the given object. * @param {Object} obj - The target object. * @returns {string} A string contains transform values. */ -function getTransformValues(_ref) { +function getTransforms(_ref) { var rotate = _ref.rotate, scaleX = _ref.scaleX, scaleY = _ref.scaleY, @@ -349,32 +668,13 @@ function getTransformValues(_ref) { values.push('scaleY(' + scaleY + ')'); } - return values.length ? values.join(' ') : 'none'; -} - -var navigator = WINDOW.navigator; + var transform = values.length ? values.join(' ') : 'none'; -var IS_SAFARI_OR_UIWEBVIEW = navigator && /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(navigator.userAgent); - -/** - * Get an image's natural sizes. - * @param {string} image - The target image. - * @param {Function} callback - The callback function. - */ -function getImageNaturalSizes(image, callback) { - // Modern browsers (except Safari) - if (image.naturalWidth && !IS_SAFARI_OR_UIWEBVIEW) { - callback(image.naturalWidth, image.naturalHeight); - return; - } - - var newImage = document.createElement('img'); - - newImage.onload = function () { - callback(newImage.width, newImage.height); + return { + WebkitTransform: transform, + msTransform: transform, + transform: transform }; - - newImage.src = image.src; } /** @@ -383,13 +683,13 @@ function getImageNaturalSizes(image, callback) { * @returns {number} The result ratio. */ function getMaxZoomRatio(pointers) { - var pointers2 = $.extend({}, pointers); + var pointers2 = assign({}, pointers); var ratios = []; - $.each(pointers, function (pointerId, pointer) { + forEach(pointers, function (pointer, pointerId) { delete pointers2[pointerId]; - $.each(pointers2, function (pointerId2, pointer2) { + forEach(pointers2, function (pointer2) { var x1 = Math.abs(pointer.startX - pointer2.startX); var y1 = Math.abs(pointer.startY - pointer2.startY); var x2 = Math.abs(pointer.endX - pointer2.endX); @@ -424,11 +724,7 @@ function getPointer(_ref2, endOnly) { endY: pageY }; - if (endOnly) { - return end; - } - - return $.extend({ + return endOnly ? end : assign({ startX: pageX, startY: pageY }, end); @@ -444,7 +740,7 @@ function getPointersCenter(pointers) { var pageY = 0; var count = 0; - $.each(pointers, function (pointerId, _ref3) { + forEach(pointers, function (_ref3) { var startX = _ref3.startX, startY = _ref3.startY; @@ -597,7 +893,7 @@ function getSourceCanvas(image, _ref6, _ref7, _ref8) { context.scale(scaleX, scaleY); context.imageSmoothingEnabled = imageSmoothingEnabled; context.imageSmoothingQuality = imageSmoothingQuality; - context.drawImage.apply(context, [image].concat(toConsumableArray($.map(params, function (param) { + context.drawImage.apply(context, [image].concat(toConsumableArray(params.map(function (param) { return Math.floor(normalizeDecimalNumber(param)); })))); context.restore(); @@ -640,7 +936,7 @@ function dataURLToArrayBuffer(dataURL) { var arrayBuffer = new ArrayBuffer(binary.length); var uint8 = new Uint8Array(arrayBuffer); - $.each(uint8, function (i) { + forEach(uint8, function (value, i) { uint8[i] = binary.charCodeAt(i); }); @@ -658,7 +954,7 @@ function arrayBufferToDataURL(arrayBuffer, mimeType) { var data = ''; // TypedArray.prototype.forEach is not supported in some browsers. - $.each(uint8, function (i, value) { + forEach(uint8, function (value) { data += fromCharCode(value); }); @@ -808,51 +1104,58 @@ var render = { } }, initContainer: function initContainer() { - var $element = this.$element, + var element = this.element, options = this.options, - $container = this.$container, - $cropper = this.$cropper; + container = this.container, + cropper = this.cropper; - $cropper.addClass(CLASS_HIDDEN); - $element.removeClass(CLASS_HIDDEN); + addClass(cropper, CLASS_HIDDEN); + removeClass(element, CLASS_HIDDEN); + + var containerData = { + width: Math.max(container.offsetWidth, Number(options.minContainerWidth) || 200), + height: Math.max(container.offsetHeight, Number(options.minContainerHeight) || 100) + }; + + this.containerData = containerData; - $cropper.css(this.container = { - width: Math.max($container.width(), Number(options.minContainerWidth) || 200), - height: Math.max($container.height(), Number(options.minContainerHeight) || 100) + setStyle(cropper, { + width: containerData.width, + height: containerData.height }); - $element.addClass(CLASS_HIDDEN); - $cropper.removeClass(CLASS_HIDDEN); + addClass(element, CLASS_HIDDEN); + removeClass(cropper, CLASS_HIDDEN); }, // Canvas (image wrapper) initCanvas: function initCanvas() { - var container = this.container, - image = this.image; + var containerData = this.containerData, + imageData = this.imageData; var viewMode = this.options.viewMode; - var rotated = Math.abs(image.rotate) % 180 === 90; - var naturalWidth = rotated ? image.naturalHeight : image.naturalWidth; - var naturalHeight = rotated ? image.naturalWidth : image.naturalHeight; + var rotated = Math.abs(imageData.rotate) % 180 === 90; + var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth; + var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight; var aspectRatio = naturalWidth / naturalHeight; - var canvasWidth = container.width; - var canvasHeight = container.height; + var canvasWidth = containerData.width; + var canvasHeight = containerData.height; - if (container.height * aspectRatio > container.width) { + if (containerData.height * aspectRatio > containerData.width) { if (viewMode === 3) { - canvasWidth = container.height * aspectRatio; + canvasWidth = containerData.height * aspectRatio; } else { - canvasHeight = container.width / aspectRatio; + canvasHeight = containerData.width / aspectRatio; } } else if (viewMode === 3) { - canvasHeight = container.width / aspectRatio; + canvasHeight = containerData.width / aspectRatio; } else { - canvasWidth = container.height * aspectRatio; + canvasWidth = containerData.height * aspectRatio; } - var canvas = { + var canvasData = { aspectRatio: aspectRatio, naturalWidth: naturalWidth, naturalHeight: naturalHeight, @@ -860,50 +1163,50 @@ var render = { height: canvasHeight }; - canvas.left = (container.width - canvasWidth) / 2; - canvas.top = (container.height - canvasHeight) / 2; - canvas.oldLeft = canvas.left; - canvas.oldTop = canvas.top; + canvasData.left = (containerData.width - canvasWidth) / 2; + canvasData.top = (containerData.height - canvasHeight) / 2; + canvasData.oldLeft = canvasData.left; + canvasData.oldTop = canvasData.top; - this.canvas = canvas; + this.canvasData = canvasData; this.limited = viewMode === 1 || viewMode === 2; this.limitCanvas(true, true); - this.initialImage = $.extend({}, image); - this.initialCanvas = $.extend({}, canvas); + this.initialImageData = assign({}, imageData); + this.initialCanvasData = assign({}, canvasData); }, - limitCanvas: function limitCanvas(isSizeLimited, isPositionLimited) { + limitCanvas: function limitCanvas(sizeLimited, positionLimited) { var options = this.options, - container = this.container, - canvas = this.canvas, - cropBox = this.cropBox; + containerData = this.containerData, + canvasData = this.canvasData, + cropBoxData = this.cropBoxData; var viewMode = options.viewMode; - var aspectRatio = canvas.aspectRatio; + var aspectRatio = canvasData.aspectRatio; - var cropped = this.cropped && cropBox; + var cropped = this.cropped && cropBoxData; - if (isSizeLimited) { + if (sizeLimited) { var minCanvasWidth = Number(options.minCanvasWidth) || 0; var minCanvasHeight = Number(options.minCanvasHeight) || 0; - if (viewMode > 0) { - if (viewMode > 1) { - minCanvasWidth = Math.max(minCanvasWidth, container.width); - minCanvasHeight = Math.max(minCanvasHeight, container.height); + if (viewMode > 1) { + minCanvasWidth = Math.max(minCanvasWidth, containerData.width); + minCanvasHeight = Math.max(minCanvasHeight, containerData.height); - if (viewMode === 3) { - if (minCanvasHeight * aspectRatio > minCanvasWidth) { - minCanvasWidth = minCanvasHeight * aspectRatio; - } else { - minCanvasHeight = minCanvasWidth / aspectRatio; - } + if (viewMode === 3) { + if (minCanvasHeight * aspectRatio > minCanvasWidth) { + minCanvasWidth = minCanvasHeight * aspectRatio; + } else { + minCanvasHeight = minCanvasWidth / aspectRatio; } - } else if (minCanvasWidth) { - minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBox.width : 0); + } + } else if (viewMode > 0) { + if (minCanvasWidth) { + minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0); } else if (minCanvasHeight) { - minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBox.height : 0); + minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0); } else if (cropped) { - minCanvasWidth = cropBox.width; - minCanvasHeight = cropBox.height; + minCanvasWidth = cropBoxData.width; + minCanvasHeight = cropBoxData.height; if (minCanvasHeight * aspectRatio > minCanvasWidth) { minCanvasWidth = minCanvasHeight * aspectRatio; @@ -923,101 +1226,100 @@ var render = { minCanvasHeight = _getAdjustedSizes.height; - canvas.minWidth = minCanvasWidth; - canvas.minHeight = minCanvasHeight; - canvas.maxWidth = Infinity; - canvas.maxHeight = Infinity; + canvasData.minWidth = minCanvasWidth; + canvasData.minHeight = minCanvasHeight; + canvasData.maxWidth = Infinity; + canvasData.maxHeight = Infinity; } - if (isPositionLimited) { - if (viewMode > 0) { - var newCanvasLeft = container.width - canvas.width; - var newCanvasTop = container.height - canvas.height; + if (positionLimited) { + if (viewMode) { + var newCanvasLeft = containerData.width - canvasData.width; + var newCanvasTop = containerData.height - canvasData.height; - canvas.minLeft = Math.min(0, newCanvasLeft); - canvas.minTop = Math.min(0, newCanvasTop); - canvas.maxLeft = Math.max(0, newCanvasLeft); - canvas.maxTop = Math.max(0, newCanvasTop); + canvasData.minLeft = Math.min(0, newCanvasLeft); + canvasData.minTop = Math.min(0, newCanvasTop); + canvasData.maxLeft = Math.max(0, newCanvasLeft); + canvasData.maxTop = Math.max(0, newCanvasTop); if (cropped && this.limited) { - canvas.minLeft = Math.min(cropBox.left, cropBox.left + cropBox.width - canvas.width); - canvas.minTop = Math.min(cropBox.top, cropBox.top + cropBox.height - canvas.height); - canvas.maxLeft = cropBox.left; - canvas.maxTop = cropBox.top; + canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width)); + canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height)); + canvasData.maxLeft = cropBoxData.left; + canvasData.maxTop = cropBoxData.top; if (viewMode === 2) { - if (canvas.width >= container.width) { - canvas.minLeft = Math.min(0, newCanvasLeft); - canvas.maxLeft = Math.max(0, newCanvasLeft); + if (canvasData.width >= containerData.width) { + canvasData.minLeft = Math.min(0, newCanvasLeft); + canvasData.maxLeft = Math.max(0, newCanvasLeft); } - if (canvas.height >= container.height) { - canvas.minTop = Math.min(0, newCanvasTop); - canvas.maxTop = Math.max(0, newCanvasTop); + if (canvasData.height >= containerData.height) { + canvasData.minTop = Math.min(0, newCanvasTop); + canvasData.maxTop = Math.max(0, newCanvasTop); } } } } else { - canvas.minLeft = -canvas.width; - canvas.minTop = -canvas.height; - canvas.maxLeft = container.width; - canvas.maxTop = container.height; + canvasData.minLeft = -canvasData.width; + canvasData.minTop = -canvasData.height; + canvasData.maxLeft = containerData.width; + canvasData.maxTop = containerData.height; } } }, renderCanvas: function renderCanvas(changed, transformed) { - var canvas = this.canvas, - image = this.image; + var canvasData = this.canvasData, + imageData = this.imageData; if (transformed) { var _getRotatedSizes = getRotatedSizes({ - width: image.naturalWidth * Math.abs(image.scaleX || 1), - height: image.naturalHeight * Math.abs(image.scaleY || 1), - degree: image.rotate || 0 + width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1), + height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1), + degree: imageData.rotate || 0 }), naturalWidth = _getRotatedSizes.width, naturalHeight = _getRotatedSizes.height; - var width = canvas.width * (naturalWidth / canvas.naturalWidth); - var height = canvas.height * (naturalHeight / canvas.naturalHeight); + var width = canvasData.width * (naturalWidth / canvasData.naturalWidth); + var height = canvasData.height * (naturalHeight / canvasData.naturalHeight); - canvas.left -= (width - canvas.width) / 2; - canvas.top -= (height - canvas.height) / 2; - canvas.width = width; - canvas.height = height; - canvas.aspectRatio = naturalWidth / naturalHeight; - canvas.naturalWidth = naturalWidth; - canvas.naturalHeight = naturalHeight; + canvasData.left -= (width - canvasData.width) / 2; + canvasData.top -= (height - canvasData.height) / 2; + canvasData.width = width; + canvasData.height = height; + canvasData.aspectRatio = naturalWidth / naturalHeight; + canvasData.naturalWidth = naturalWidth; + canvasData.naturalHeight = naturalHeight; this.limitCanvas(true, false); } - if (canvas.width > canvas.maxWidth || canvas.width < canvas.minWidth) { - canvas.left = canvas.oldLeft; + if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) { + canvasData.left = canvasData.oldLeft; } - if (canvas.height > canvas.maxHeight || canvas.height < canvas.minHeight) { - canvas.top = canvas.oldTop; + if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) { + canvasData.top = canvasData.oldTop; } - canvas.width = Math.min(Math.max(canvas.width, canvas.minWidth), canvas.maxWidth); - canvas.height = Math.min(Math.max(canvas.height, canvas.minHeight), canvas.maxHeight); + canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth); + canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight); this.limitCanvas(false, true); - canvas.left = Math.min(Math.max(canvas.left, canvas.minLeft), canvas.maxLeft); - canvas.top = Math.min(Math.max(canvas.top, canvas.minTop), canvas.maxTop); - canvas.oldLeft = canvas.left; - canvas.oldTop = canvas.top; - - this.$canvas.css({ - width: canvas.width, - height: canvas.height, - transform: getTransformValues({ - translateX: canvas.left, - translateY: canvas.top - }) - }); + canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft); + canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop); + canvasData.oldLeft = canvasData.left; + canvasData.oldTop = canvasData.top; + + setStyle(this.canvas, assign({ + width: canvasData.width, + height: canvasData.height + }, getTransforms({ + translateX: canvasData.left, + translateY: canvasData.top + }))); this.renderImage(changed); @@ -1026,27 +1328,25 @@ var render = { } }, renderImage: function renderImage(changed) { - var canvas = this.canvas, - image = this.image; + var canvasData = this.canvasData, + imageData = this.imageData; - var width = image.naturalWidth * (canvas.width / canvas.naturalWidth); - var height = image.naturalHeight * (canvas.height / canvas.naturalHeight); + var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth); + var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight); - $.extend(image, { + assign(imageData, { width: width, height: height, - left: (canvas.width - width) / 2, - top: (canvas.height - height) / 2 - }); - - this.$clone.css({ - width: image.width, - height: image.height, - transform: getTransformValues($.extend({ - translateX: image.left, - translateY: image.top - }, image)) + left: (canvasData.width - width) / 2, + top: (canvasData.height - height) / 2 }); + setStyle(this.image, assign({ + width: imageData.width, + height: imageData.height + }, getTransforms(assign({ + translateX: imageData.left, + translateY: imageData.top + }, imageData)))); if (changed) { this.output(); @@ -1054,58 +1354,58 @@ var render = { }, initCropBox: function initCropBox() { var options = this.options, - canvas = this.canvas; + canvasData = this.canvasData; var aspectRatio = options.aspectRatio; var autoCropArea = Number(options.autoCropArea) || 0.8; - var cropBox = { - width: canvas.width, - height: canvas.height + var cropBoxData = { + width: canvasData.width, + height: canvasData.height }; if (aspectRatio) { - if (canvas.height * aspectRatio > canvas.width) { - cropBox.height = cropBox.width / aspectRatio; + if (canvasData.height * aspectRatio > canvasData.width) { + cropBoxData.height = cropBoxData.width / aspectRatio; } else { - cropBox.width = cropBox.height * aspectRatio; + cropBoxData.width = cropBoxData.height * aspectRatio; } } - this.cropBox = cropBox; + this.cropBoxData = cropBoxData; this.limitCropBox(true, true); // Initialize auto crop area - cropBox.width = Math.min(Math.max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); - cropBox.height = Math.min(Math.max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); - - // The width of auto crop area must large than "minWidth", and the height too. (#164) - cropBox.width = Math.max(cropBox.minWidth, cropBox.width * autoCropArea); - cropBox.height = Math.max(cropBox.minHeight, cropBox.height * autoCropArea); - cropBox.left = canvas.left + (canvas.width - cropBox.width) / 2; - cropBox.top = canvas.top + (canvas.height - cropBox.height) / 2; - cropBox.oldLeft = cropBox.left; - cropBox.oldTop = cropBox.top; - - this.initialCropBox = $.extend({}, cropBox); + cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth); + cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight); + + // The width/height of auto crop area must large than "minWidth/Height" + cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea); + cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea); + cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2; + cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2; + cropBoxData.oldLeft = cropBoxData.left; + cropBoxData.oldTop = cropBoxData.top; + + this.initialCropBoxData = assign({}, cropBoxData); }, - limitCropBox: function limitCropBox(isSizeLimited, isPositionLimited) { + limitCropBox: function limitCropBox(sizeLimited, positionLimited) { var options = this.options, - container = this.container, - canvas = this.canvas, - cropBox = this.cropBox, + containerData = this.containerData, + canvasData = this.canvasData, + cropBoxData = this.cropBoxData, limited = this.limited; var aspectRatio = options.aspectRatio; - if (isSizeLimited) { + if (sizeLimited) { var minCropBoxWidth = Number(options.minCropBoxWidth) || 0; var minCropBoxHeight = Number(options.minCropBoxHeight) || 0; - var maxCropBoxWidth = Math.min(container.width, limited ? canvas.width : container.width); - var maxCropBoxHeight = Math.min(container.height, limited ? canvas.height : container.height); + var maxCropBoxWidth = Math.min(containerData.width, limited ? canvasData.width : containerData.width); + var maxCropBoxHeight = Math.min(containerData.height, limited ? canvasData.height : containerData.height); - // The min/maxCropBoxWidth/Height must be less than container's width/Height - minCropBoxWidth = Math.min(minCropBoxWidth, container.width); - minCropBoxHeight = Math.min(minCropBoxHeight, container.height); + // The min/maxCropBoxWidth/Height must be less than container's width/height + minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width); + minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height); if (aspectRatio) { if (minCropBoxWidth && minCropBoxHeight) { @@ -1128,63 +1428,62 @@ var render = { } // The minWidth/Height must be less than maxWidth/Height - cropBox.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth); - cropBox.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight); - cropBox.maxWidth = maxCropBoxWidth; - cropBox.maxHeight = maxCropBoxHeight; + cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth); + cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight); + cropBoxData.maxWidth = maxCropBoxWidth; + cropBoxData.maxHeight = maxCropBoxHeight; } - if (isPositionLimited) { + if (positionLimited) { if (limited) { - cropBox.minLeft = Math.max(0, canvas.left); - cropBox.minTop = Math.max(0, canvas.top); - cropBox.maxLeft = Math.min(container.width, canvas.left + canvas.width) - cropBox.width; - cropBox.maxTop = Math.min(container.height, canvas.top + canvas.height) - cropBox.height; + cropBoxData.minLeft = Math.max(0, canvasData.left); + cropBoxData.minTop = Math.max(0, canvasData.top); + cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width; + cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height; } else { - cropBox.minLeft = 0; - cropBox.minTop = 0; - cropBox.maxLeft = container.width - cropBox.width; - cropBox.maxTop = container.height - cropBox.height; + cropBoxData.minLeft = 0; + cropBoxData.minTop = 0; + cropBoxData.maxLeft = containerData.width - cropBoxData.width; + cropBoxData.maxTop = containerData.height - cropBoxData.height; } } }, renderCropBox: function renderCropBox() { var options = this.options, - container = this.container, - cropBox = this.cropBox; + containerData = this.containerData, + cropBoxData = this.cropBoxData; - if (cropBox.width > cropBox.maxWidth || cropBox.width < cropBox.minWidth) { - cropBox.left = cropBox.oldLeft; + if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) { + cropBoxData.left = cropBoxData.oldLeft; } - if (cropBox.height > cropBox.maxHeight || cropBox.height < cropBox.minHeight) { - cropBox.top = cropBox.oldTop; + if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) { + cropBoxData.top = cropBoxData.oldTop; } - cropBox.width = Math.min(Math.max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); - cropBox.height = Math.min(Math.max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); + cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth); + cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight); this.limitCropBox(false, true); - cropBox.left = Math.min(Math.max(cropBox.left, cropBox.minLeft), cropBox.maxLeft); - cropBox.top = Math.min(Math.max(cropBox.top, cropBox.minTop), cropBox.maxTop); - cropBox.oldLeft = cropBox.left; - cropBox.oldTop = cropBox.top; + cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft); + cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop); + cropBoxData.oldLeft = cropBoxData.left; + cropBoxData.oldTop = cropBoxData.top; if (options.movable && options.cropBoxMovable) { // Turn to move the canvas when the crop box is equal to the container - this.$face.data(DATA_ACTION, cropBox.width >= container.width && cropBox.height >= container.height ? ACTION_MOVE : ACTION_ALL); + setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL); } - this.$cropBox.css({ - width: cropBox.width, - height: cropBox.height, - transform: getTransformValues({ - translateX: cropBox.left, - translateY: cropBox.top - }) - }); + setStyle(this.cropBox, assign({ + width: cropBoxData.width, + height: cropBoxData.height + }, getTransforms({ + translateX: cropBoxData.left, + translateY: cropBoxData.top + }))); if (this.cropped && this.limited) { this.limitCanvas(true, true); @@ -1196,16 +1495,14 @@ var render = { }, output: function output() { this.preview(); - - if (this.completed) { - this.trigger(EVENT_CROP, this.getData()); - } + dispatchEvent(this.element, EVENT_CROP, this.getData()); } }; var preview = { initPreview: function initPreview() { var crossOrigin = this.crossOrigin; + var preview = this.options.preview; var url = crossOrigin ? this.crossOriginUrl : this.url; var image = document.createElement('img'); @@ -1215,21 +1512,31 @@ var preview = { } image.src = url; + this.viewBox.appendChild(image); + this.viewBoxImage = image; - var $clone2 = $(image); + if (!preview) { + return; + } - this.$preview = $(this.options.preview); - this.$clone2 = $clone2; - this.$viewBox.html($clone2); - this.$preview.each(function (i, element) { - var $element = $(element); + var previews = preview; + + if (typeof preview === 'string') { + previews = this.element.ownerDocument.querySelectorAll(preview); + } else if (preview.querySelector) { + previews = [preview]; + } + + this.previews = previews; + + forEach(previews, function (el) { var img = document.createElement('img'); // Save the original size for recover - $element.data(DATA_PREVIEW, { - width: $element.width(), - height: $element.height(), - html: $element.html() + setData(el, DATA_PREVIEW, { + width: el.offsetWidth, + height: el.offsetHeight, + html: el.innerHTML }); if (crossOrigin) { @@ -1246,48 +1553,49 @@ var preview = { */ 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;"'; - $element.html(img); + el.innerHTML = ''; + el.appendChild(img); }); }, resetPreview: function resetPreview() { - this.$preview.each(function (i, element) { - var $element = $(element); - var data = $element.data(DATA_PREVIEW); + forEach(this.previews, function (element) { + var data = getData(element, DATA_PREVIEW); - $element.css({ + setStyle(element, { width: data.width, height: data.height - }).html(data.html).removeData(DATA_PREVIEW); + }); + + element.innerHTML = data.html; + removeData(element, DATA_PREVIEW); }); }, preview: function preview() { - var image = this.image, - canvas = this.canvas, - cropBox = this.cropBox; - var cropBoxWidth = cropBox.width, - cropBoxHeight = cropBox.height; - var width = image.width, - height = image.height; + var imageData = this.imageData, + canvasData = this.canvasData, + cropBoxData = this.cropBoxData; + var cropBoxWidth = cropBoxData.width, + cropBoxHeight = cropBoxData.height; + var width = imageData.width, + height = imageData.height; - var left = cropBox.left - canvas.left - image.left; - var top = cropBox.top - canvas.top - image.top; + var left = cropBoxData.left - canvasData.left - imageData.left; + var top = cropBoxData.top - canvasData.top - imageData.top; if (!this.cropped || this.disabled) { return; } - this.$clone2.css({ + setStyle(this.viewBoxImage, assign({ width: width, - height: height, - transform: getTransformValues($.extend({ - translateX: -left, - translateY: -top - }, image)) - }); - - this.$preview.each(function (i, element) { - var $element = $(element); - var data = $element.data(DATA_PREVIEW); + height: height + }, getTransforms(assign({ + translateX: -left, + translateY: -top + }, imageData)))); + + forEach(this.previews, function (element) { + var data = getData(element, DATA_PREVIEW); var originalWidth = data.width; var originalHeight = data.height; var newWidth = originalWidth; @@ -1305,104 +1613,107 @@ var preview = { newHeight = originalHeight; } - $element.css({ + setStyle(element, { width: newWidth, height: newHeight - }).find('img').css({ - width: width * ratio, - height: height * ratio, - transform: getTransformValues($.extend({ - translateX: -left * ratio, - translateY: -top * ratio - }, image)) }); + + setStyle(element.getElementsByTagName('img')[0], assign({ + width: width * ratio, + height: height * ratio + }, getTransforms(assign({ + translateX: -left * ratio, + translateY: -top * ratio + }, imageData)))); }); } }; var events = { bind: function bind() { - var $element = this.$element, + var element = this.element, options = this.options, - $cropper = this.$cropper; + cropper = this.cropper; - if ($.isFunction(options.cropstart)) { - $element.on(EVENT_CROP_START, options.cropstart); + if (isFunction(options.cropstart)) { + addListener(element, EVENT_CROP_START, options.cropstart); } - if ($.isFunction(options.cropmove)) { - $element.on(EVENT_CROP_MOVE, options.cropmove); + if (isFunction(options.cropmove)) { + addListener(element, EVENT_CROP_MOVE, options.cropmove); } - if ($.isFunction(options.cropend)) { - $element.on(EVENT_CROP_END, options.cropend); + if (isFunction(options.cropend)) { + addListener(element, EVENT_CROP_END, options.cropend); } - if ($.isFunction(options.crop)) { - $element.on(EVENT_CROP, options.crop); + if (isFunction(options.crop)) { + addListener(element, EVENT_CROP, options.crop); } - if ($.isFunction(options.zoom)) { - $element.on(EVENT_ZOOM, options.zoom); + if (isFunction(options.zoom)) { + addListener(element, EVENT_ZOOM, options.zoom); } - $cropper.on(EVENT_POINTER_DOWN, proxy(this.cropStart, this)); + addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this)); if (options.zoomable && options.zoomOnWheel) { - $cropper.on(EVENT_WHEEL, proxy(this.wheel, this)); + addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this)); } if (options.toggleDragModeOnDblclick) { - $cropper.on(EVENT_DBLCLICK, proxy(this.dblclick, this)); + addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this)); } - $(this.element.ownerDocument).on(EVENT_POINTER_MOVE, this.onCropMove = proxy(this.cropMove, this)).on(EVENT_POINTER_UP, this.onCropEnd = proxy(this.cropEnd, this)); + addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this)); + addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this)); if (options.responsive) { - $(window).on(EVENT_RESIZE, this.onResize = proxy(this.resize, this)); + addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this)); } }, unbind: function unbind() { - var $element = this.$element, + var element = this.element, options = this.options, - $cropper = this.$cropper; + cropper = this.cropper; - if ($.isFunction(options.cropstart)) { - $element.off(EVENT_CROP_START, options.cropstart); + if (isFunction(options.cropstart)) { + removeListener(element, EVENT_CROP_START, options.cropstart); } - if ($.isFunction(options.cropmove)) { - $element.off(EVENT_CROP_MOVE, options.cropmove); + if (isFunction(options.cropmove)) { + removeListener(element, EVENT_CROP_MOVE, options.cropmove); } - if ($.isFunction(options.cropend)) { - $element.off(EVENT_CROP_END, options.cropend); + if (isFunction(options.cropend)) { + removeListener(element, EVENT_CROP_END, options.cropend); } - if ($.isFunction(options.crop)) { - $element.off(EVENT_CROP, options.crop); + if (isFunction(options.crop)) { + removeListener(element, EVENT_CROP, options.crop); } - if ($.isFunction(options.zoom)) { - $element.off(EVENT_ZOOM, options.zoom); + if (isFunction(options.zoom)) { + removeListener(element, EVENT_ZOOM, options.zoom); } - $cropper.off(EVENT_POINTER_DOWN, this.cropStart); + removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart); if (options.zoomable && options.zoomOnWheel) { - $cropper.off(EVENT_WHEEL, this.wheel); + removeListener(cropper, EVENT_WHEEL, this.onWheel); } if (options.toggleDragModeOnDblclick) { - $cropper.off(EVENT_DBLCLICK, this.dblclick); + removeListener(cropper, EVENT_DBLCLICK, this.onDblclick); } - $(this.element.ownerDocument).off(EVENT_POINTER_MOVE, this.onCropMove).off(EVENT_POINTER_UP, this.onCropEnd); + removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove); + removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd); if (options.responsive) { - $(window).off(EVENT_RESIZE, this.onResize); + removeListener(window, EVENT_RESIZE, this.onResize); } } }; @@ -1410,20 +1721,20 @@ var events = { var handlers = { resize: function resize() { var options = this.options, - $container = this.$container, - container = this.container; + container = this.container, + containerData = this.containerData; var minContainerWidth = Number(options.minContainerWidth) || 200; var minContainerHeight = Number(options.minContainerHeight) || 100; - if (this.disabled || container.width <= minContainerWidth || container.height <= minContainerHeight) { + if (this.disabled || containerData.width <= minContainerWidth || containerData.height <= minContainerHeight) { return; } - var ratio = $container.width() / container.width; + var ratio = container.offsetWidth / containerData.width; // Resize when width changed or height changed - if (ratio !== 1 || $container.height() !== container.height) { + if (ratio !== 1 || container.offsetHeight !== containerData.height) { var canvasData = void 0; var cropBoxData = void 0; @@ -1435,10 +1746,10 @@ var handlers = { this.render(); if (options.restore) { - this.setCanvasData($.each(canvasData, function (i, n) { + this.setCanvasData(forEach(canvasData, function (n, i) { canvasData[i] = n * ratio; })); - this.setCropBoxData($.each(cropBoxData, function (i, n) { + this.setCropBoxData(forEach(cropBoxData, function (n, i) { cropBoxData[i] = n * ratio; })); } @@ -1449,21 +1760,21 @@ var handlers = { return; } - this.setDragMode(this.$dragBox.hasClass(CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP); + this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP); }, - wheel: function wheel(event) { + wheel: function wheel(e) { var _this = this; - var e = event.originalEvent || event; var ratio = Number(this.options.wheelZoomRatio) || 0.1; + var delta = 1; if (this.disabled) { return; } - event.preventDefault(); + e.preventDefault(); - // Limit wheel speed to prevent zoom too fast + // Limit wheel speed to prevent zoom too fast (#21) if (this.wheeling) { return; } @@ -1474,8 +1785,6 @@ var handlers = { _this.wheeling = false; }, 50); - var delta = 1; - if (e.deltaY) { delta = e.deltaY > 0 ? 1 : -1; } else if (e.wheelDelta) { @@ -1484,7 +1793,7 @@ var handlers = { delta = e.detail > 0 ? 1 : -1; } - this.zoom(-delta * ratio, event); + this.zoom(-delta * ratio, e); }, cropStart: function cropStart(e) { if (this.disabled) { @@ -1493,34 +1802,33 @@ var handlers = { var options = this.options, pointers = this.pointers; - var originalEvent = e.originalEvent; var action = void 0; - if (originalEvent && originalEvent.changedTouches) { + if (e.changedTouches) { // Handle touch event - $.each(originalEvent.changedTouches, function (i, touch) { + forEach(e.changedTouches, function (touch) { pointers[touch.identifier] = getPointer(touch); }); } else { // Handle mouse event and pointer event - pointers[originalEvent && originalEvent.pointerId || 0] = getPointer(originalEvent || e); + pointers[e.pointerId || 0] = getPointer(e); } - if (objectKeys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) { + if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) { action = ACTION_ZOOM; } else { - action = $(e.target).data(DATA_ACTION); + action = getData(e.target, DATA_ACTION); } if (!REGEXP_ACTIONS.test(action)) { return; } - if (this.trigger(EVENT_CROP_START, { - originalEvent: originalEvent, + if (dispatchEvent(this.element, EVENT_CROP_START, { + originalEvent: e, action: action - }).isDefaultPrevented()) { + }) === false) { return; } @@ -1531,7 +1839,7 @@ var handlers = { if (action === ACTION_CROP) { this.cropping = true; - this.$dragBox.addClass(CLASS_MODAL); + addClass(this.dragBox, CLASS_MODAL); } }, cropMove: function cropMove(e) { @@ -1543,24 +1851,23 @@ var handlers = { } var pointers = this.pointers; - var originalEvent = e.originalEvent; e.preventDefault(); - if (this.trigger(EVENT_CROP_MOVE, { - originalEvent: originalEvent, + if (dispatchEvent(this.element, EVENT_CROP_MOVE, { + originalEvent: e, action: action - }).isDefaultPrevented()) { + }) === false) { return; } - if (originalEvent && originalEvent.changedTouches) { - $.each(originalEvent.changedTouches, function (i, touch) { - $.extend(pointers[touch.identifier], getPointer(touch, true)); + if (e.changedTouches) { + forEach(e.changedTouches, function (touch) { + assign(pointers[touch.identifier], getPointer(touch, true)); }); } else { - $.extend(pointers[originalEvent && originalEvent.pointerId || 0], getPointer(originalEvent || e, true)); + assign(pointers[e.pointerId || 0], getPointer(e, true)); } this.change(e); @@ -1570,17 +1877,16 @@ var handlers = { return; } - var action = this.action; - var pointers = this.pointers; - var originalEvent = e.originalEvent; + var action = this.action, + pointers = this.pointers; - if (originalEvent && originalEvent.changedTouches) { - $.each(originalEvent.changedTouches, function (i, touch) { + if (e.changedTouches) { + forEach(e.changedTouches, function (touch) { delete pointers[touch.identifier]; }); } else { - delete pointers[originalEvent && originalEvent.pointerId || 0]; + delete pointers[e.pointerId || 0]; } if (!action) { @@ -1589,17 +1895,17 @@ var handlers = { e.preventDefault(); - if (!objectKeys(pointers).length) { + if (!Object.keys(pointers).length) { this.action = ''; } if (this.cropping) { this.cropping = false; - this.$dragBox.toggleClass(CLASS_MODAL, this.cropped && this.options.modal); + toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal); } - this.trigger(EVENT_CROP_END, { - originalEvent: originalEvent, + dispatchEvent(this.element, EVENT_CROP_END, { + originalEvent: e, action: action }); } @@ -1608,40 +1914,40 @@ var handlers = { var change = { change: function change(e) { var options = this.options, - pointers = this.pointers, - container = this.container, - canvas = this.canvas, - cropBox = this.cropBox; + canvasData = this.canvasData, + containerData = this.containerData, + cropBoxData = this.cropBoxData, + pointers = this.pointers; var action = this.action; var aspectRatio = options.aspectRatio; - var left = cropBox.left, - top = cropBox.top, - width = cropBox.width, - height = cropBox.height; + var left = cropBoxData.left, + top = cropBoxData.top, + width = cropBoxData.width, + height = cropBoxData.height; var right = left + width; var bottom = top + height; var minLeft = 0; var minTop = 0; - var maxWidth = container.width; - var maxHeight = container.height; + var maxWidth = containerData.width; + var maxHeight = containerData.height; var renderable = true; var offset = void 0; - // Locking aspect ratio in "free mode" by holding shift key (#259) + // Locking aspect ratio in "free mode" by holding shift key if (!aspectRatio && e.shiftKey) { aspectRatio = width && height ? width / height : 1; } if (this.limited) { - minLeft = cropBox.minLeft; - minTop = cropBox.minTop; + minLeft = cropBoxData.minLeft; + minTop = cropBoxData.minTop; - maxWidth = minLeft + Math.min(container.width, canvas.width, canvas.left + canvas.width); - maxHeight = minTop + Math.min(container.height, canvas.height, canvas.top + canvas.height); + maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width); + maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height); } - var pointer = pointers[objectKeys(pointers)[0]]; + var pointer = pointers[Object.keys(pointers)[0]]; var range = { x: pointer.endX - pointer.startX, y: pointer.endY - pointer.startY @@ -1982,7 +2288,7 @@ var change = { // Zoom canvas case ACTION_ZOOM: - this.zoom(getMaxZoomRatio(pointers), e.originalEvent); + this.zoom(getMaxZoomRatio(pointers), e); renderable = false; break; @@ -1993,11 +2299,11 @@ var change = { break; } - offset = this.$cropper.offset(); + offset = getOffset(this.cropper); left = pointer.startX - offset.left; top = pointer.startY - offset.top; - width = cropBox.minWidth; - height = cropBox.minHeight; + width = cropBoxData.minWidth; + height = cropBoxData.minHeight; if (range.x > 0) { action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST; @@ -2012,7 +2318,7 @@ var change = { // Show the crop box if is hidden if (!this.cropped) { - this.$cropBox.removeClass(CLASS_HIDDEN); + removeClass(this.cropBox, CLASS_HIDDEN); this.cropped = true; if (this.limited) { @@ -2026,16 +2332,16 @@ var change = { } if (renderable) { - cropBox.width = width; - cropBox.height = height; - cropBox.left = left; - cropBox.top = top; + cropBoxData.width = width; + cropBoxData.height = height; + cropBoxData.left = left; + cropBoxData.top = top; this.action = action; this.renderCropBox(); } // Override - $.each(pointers, function (i, p) { + forEach(pointers, function (p) { p.startX = p.endX; p.startY = p.endY; }); @@ -2045,149 +2351,162 @@ var change = { var methods = { // Show the crop box manually crop: function crop() { - if (!this.ready || this.disabled) { - return; - } - - if (!this.cropped) { + if (this.ready && !this.cropped && !this.disabled) { this.cropped = true; this.limitCropBox(true, true); if (this.options.modal) { - this.$dragBox.addClass(CLASS_MODAL); + addClass(this.dragBox, CLASS_MODAL); } - this.$cropBox.removeClass(CLASS_HIDDEN); + removeClass(this.cropBox, CLASS_HIDDEN); + this.setCropBoxData(this.initialCropBoxData); } - this.setCropBoxData(this.initialCropBox); + return this; }, // Reset the image and crop box to their initial states reset: function reset() { - if (!this.ready || this.disabled) { - return; - } + if (this.ready && !this.disabled) { + this.imageData = assign({}, this.initialImageData); + this.canvasData = assign({}, this.initialCanvasData); + this.cropBoxData = assign({}, this.initialCropBoxData); + this.renderCanvas(); - this.image = $.extend({}, this.initialImage); - this.canvas = $.extend({}, this.initialCanvas); - this.cropBox = $.extend({}, this.initialCropBox); - this.renderCanvas(); - - if (this.cropped) { - this.renderCropBox(); + if (this.cropped) { + this.renderCropBox(); + } } + + return this; }, // Clear the crop box clear: function clear() { - if (!this.cropped || this.disabled) { - return; - } + if (this.cropped && !this.disabled) { + assign(this.cropBoxData, { + left: 0, + top: 0, + width: 0, + height: 0 + }); - $.extend(this.cropBox, { - left: 0, - top: 0, - width: 0, - height: 0 - }); + this.cropped = false; + this.renderCropBox(); + this.limitCanvas(true, true); - this.cropped = false; - this.renderCropBox(); - this.limitCanvas(true, true); + // Render canvas after crop box rendered + this.renderCanvas(); + removeClass(this.dragBox, CLASS_MODAL); + addClass(this.cropBox, CLASS_HIDDEN); + } - // Render canvas after crop box rendered - this.renderCanvas(); - this.$dragBox.removeClass(CLASS_MODAL); - this.$cropBox.addClass(CLASS_HIDDEN); + return this; }, /** * Replace the image's src and rebuild the cropper * @param {string} url - The new URL. - * @param {boolean} [onlyColorChanged] - Indicate if the new image only changed color. + * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one. + * @returns {Cropper} this */ - replace: function replace(url, onlyColorChanged) { + replace: function replace(url) { + var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + if (!this.disabled && url) { if (this.isImg) { - this.$element.attr('src', url); + this.element.src = url; } - if (onlyColorChanged) { + if (hasSameSize) { this.url = url; - this.$clone.attr('src', url); + this.image.src = url; if (this.ready) { - this.$preview.find('img').add(this.$clone2).attr('src', url); + this.viewBoxImage.src = url; + + forEach(this.previews, function (element) { + element.getElementsByTagName('img')[0].src = url; + }); } } else { if (this.isImg) { this.replaced = true; } - // Clear previous data this.options.data = null; + this.uncreate(); this.load(url); } } + + return this; }, // Enable (unfreeze) the cropper enable: function enable() { - if (this.ready) { + if (this.ready && this.disabled) { this.disabled = false; - this.$cropper.removeClass(CLASS_DISABLED); + removeClass(this.cropper, CLASS_DISABLED); } + + return this; }, // Disable (freeze) the cropper disable: function disable() { - if (this.ready) { + if (this.ready && !this.disabled) { this.disabled = true; - this.$cropper.addClass(CLASS_DISABLED); + addClass(this.cropper, CLASS_DISABLED); } + + return this; }, - // Destroy the cropper and remove the instance from the image + /** + * Destroy the cropper and remove the instance from the image + * @returns {Cropper} this + */ destroy: function destroy() { - var $element = this.$element; + var element = this.element; - if (this.loaded) { - if (this.isImg && this.replaced) { - $element.attr('src', this.originalUrl); - } + if (!getData(element, NAMESPACE)) { + return this; + } - this.unbuild(); - $element.removeClass(CLASS_HIDDEN); - } else if (this.isImg) { - $element.off(EVENT_LOAD, this.start); - } else if (this.$clone) { - this.$clone.remove(); + if (this.isImg && this.replaced) { + element.src = this.originalUrl; } - $element.removeData(NAMESPACE); + this.uncreate(); + removeData(element, NAMESPACE); + + return this; }, /** * Move the canvas with relative offsets * @param {number} offsetX - The relative offset distance on the x-axis. - * @param {number} offsetY - The relative offset distance on the y-axis. + * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis. + * @returns {Cropper} this */ - move: function move(offsetX, offsetY) { - var _canvas = this.canvas, - left = _canvas.left, - top = _canvas.top; + move: function move(offsetX) { + var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX; + var _canvasData = this.canvasData, + left = _canvasData.left, + top = _canvasData.top; - this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY)); + return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY)); }, @@ -2195,28 +2514,25 @@ var methods = { * Move the canvas to an absolute point * @param {number} x - The x-axis coordinate. * @param {number} [y=x] - The y-axis coordinate. + * @returns {Cropper} this */ - moveTo: function moveTo(x, y) { - var canvas = this.canvas; + moveTo: function moveTo(x) { + var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x; + var canvasData = this.canvasData; var changed = false; - // If "y" is not present, its default value is "x" - if (isUndefined(y)) { - y = x; - } - x = Number(x); y = Number(y); if (this.ready && !this.disabled && this.options.movable) { if (isNumber(x)) { - canvas.left = x; + canvasData.left = x; changed = true; } if (isNumber(y)) { - canvas.top = y; + canvasData.top = y; changed = true; } @@ -2224,16 +2540,19 @@ var methods = { this.renderCanvas(true); } } + + return this; }, /** * Zoom the canvas with a relative ratio - * @param {Number} ratio - The target ratio. - * @param {Event} _event - The related event if any. + * @param {number} ratio - The target ratio. + * @param {Event} _originalEvent - The original event if any. + * @returns {Cropper} this */ - zoom: function zoom(ratio, _event) { - var canvas = this.canvas; + zoom: function zoom(ratio, _originalEvent) { + var canvasData = this.canvasData; ratio = Number(ratio); @@ -2244,23 +2563,24 @@ var methods = { ratio = 1 + ratio; } - this.zoomTo(canvas.width * ratio / canvas.naturalWidth, _event); + return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent); }, /** * Zoom the canvas to an absolute ratio * @param {number} ratio - The target ratio. - * @param {Event} _event - The related event if any. + * @param {Object} pivot - The zoom pivot point coordinate. + * @param {Event} _originalEvent - The original event if any. + * @returns {Cropper} this */ - zoomTo: function zoomTo(ratio, _event) { + zoomTo: function zoomTo(ratio, pivot, _originalEvent) { var options = this.options, - pointers = this.pointers, - canvas = this.canvas; - var width = canvas.width, - height = canvas.height, - naturalWidth = canvas.naturalWidth, - naturalHeight = canvas.naturalHeight; + canvasData = this.canvasData; + var width = canvasData.width, + height = canvasData.height, + naturalWidth = canvasData.naturalWidth, + naturalHeight = canvasData.naturalHeight; ratio = Number(ratio); @@ -2268,87 +2588,95 @@ var methods = { if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) { var newWidth = naturalWidth * ratio; var newHeight = naturalHeight * ratio; - var originalEvent = void 0; - - if (_event) { - originalEvent = _event.originalEvent; - } - if (this.trigger(EVENT_ZOOM, { - originalEvent: originalEvent, + if (dispatchEvent(this.element, EVENT_ZOOM, { + originalEvent: _originalEvent, oldRatio: width / naturalWidth, ratio: newWidth / naturalWidth - }).isDefaultPrevented()) { - return; + }) === false) { + return this; } - if (originalEvent) { - var offset = this.$cropper.offset(); - var center = pointers && objectKeys(pointers).length ? getPointersCenter(pointers) : { - pageX: _event.pageX || originalEvent.pageX || 0, - pageY: _event.pageY || originalEvent.pageY || 0 + if (_originalEvent) { + var pointers = this.pointers; + + var offset = getOffset(this.cropper); + var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : { + pageX: _originalEvent.pageX, + pageY: _originalEvent.pageY }; // Zoom from the triggering point of the event - canvas.left -= (newWidth - width) * ((center.pageX - offset.left - canvas.left) / width); - canvas.top -= (newHeight - height) * ((center.pageY - offset.top - canvas.top) / height); + canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width); + canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height); + } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) { + canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width); + canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height); } else { // Zoom from the center of the canvas - canvas.left -= (newWidth - width) / 2; - canvas.top -= (newHeight - height) / 2; + canvasData.left -= (newWidth - width) / 2; + canvasData.top -= (newHeight - height) / 2; } - canvas.width = newWidth; - canvas.height = newHeight; + canvasData.width = newWidth; + canvasData.height = newHeight; this.renderCanvas(true); } + + return this; }, /** * Rotate the canvas with a relative degree * @param {number} degree - The rotate degree. + * @returns {Cropper} this */ rotate: function rotate(degree) { - this.rotateTo((this.image.rotate || 0) + Number(degree)); + return this.rotateTo((this.imageData.rotate || 0) + Number(degree)); }, /** * Rotate the canvas to an absolute degree * @param {number} degree - The rotate degree. + * @returns {Cropper} this */ rotateTo: function rotateTo(degree) { degree = Number(degree); if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) { - this.image.rotate = degree % 360; + this.imageData.rotate = degree % 360; this.renderCanvas(true, true); } + + return this; }, /** * Scale the image on the x-axis. * @param {number} scaleX - The scale ratio on the x-axis. + * @returns {Cropper} this */ scaleX: function scaleX(_scaleX) { - var scaleY = this.image.scaleY; + var scaleY = this.imageData.scaleY; - this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1); + return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1); }, /** * Scale the image on the y-axis. * @param {number} scaleY - The scale ratio on the y-axis. + * @returns {Cropper} this */ scaleY: function scaleY(_scaleY) { - var scaleX = this.image.scaleX; + var scaleX = this.imageData.scaleX; - this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY); + return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY); }, @@ -2356,10 +2684,11 @@ var methods = { * Scale the image * @param {number} scaleX - The scale ratio on the x-axis. * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis. + * @returns {Cropper} this */ scale: function scale(scaleX) { var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX; - var image = this.image; + var imageData = this.imageData; var transformed = false; @@ -2368,12 +2697,12 @@ var methods = { if (this.ready && !this.disabled && this.options.scalable) { if (isNumber(scaleX)) { - image.scaleX = scaleX; + imageData.scaleX = scaleX; transformed = true; } if (isNumber(scaleY)) { - image.scaleY = scaleY; + imageData.scaleY = scaleY; transformed = true; } @@ -2381,6 +2710,8 @@ var methods = { this.renderCanvas(true, true); } } + + return this; }, @@ -2389,26 +2720,26 @@ var methods = { * @param {boolean} [rounded=false] - Indicate if round the data values or not. * @returns {Object} The result cropped data. */ - getData: function getData() { + getData: function getData$$1() { var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var options = this.options, - image = this.image, - canvas = this.canvas, - cropBox = this.cropBox; + imageData = this.imageData, + canvasData = this.canvasData, + cropBoxData = this.cropBoxData; var data = void 0; if (this.ready && this.cropped) { data = { - x: cropBox.left - canvas.left, - y: cropBox.top - canvas.top, - width: cropBox.width, - height: cropBox.height + x: cropBoxData.left - canvasData.left, + y: cropBoxData.top - canvasData.top, + width: cropBoxData.width, + height: cropBoxData.height }; - var ratio = image.width / image.naturalWidth; + var ratio = imageData.width / imageData.naturalWidth; - $.each(data, function (i, n) { + forEach(data, function (n, i) { n /= ratio; data[i] = rounded ? Math.round(n) : n; }); @@ -2422,12 +2753,12 @@ var methods = { } if (options.rotatable) { - data.rotate = image.rotate || 0; + data.rotate = imageData.rotate || 0; } if (options.scalable) { - data.scaleX = image.scaleX || 1; - data.scaleY = image.scaleY || 1; + data.scaleX = imageData.scaleX || 1; + data.scaleY = imageData.scaleY || 1; } return data; @@ -2437,36 +2768,33 @@ var methods = { /** * Set the cropped area position and size with new data * @param {Object} data - The new data. + * @returns {Cropper} this */ - setData: function setData(data) { + setData: function setData$$1(data) { var options = this.options, - image = this.image, - canvas = this.canvas; + imageData = this.imageData, + canvasData = this.canvasData; var cropBoxData = {}; - if ($.isFunction(data)) { - data = data.call(this.element); - } - - if (this.ready && !this.disabled && $.isPlainObject(data)) { + if (this.ready && !this.disabled && isPlainObject(data)) { var transformed = false; if (options.rotatable) { - if (isNumber(data.rotate) && data.rotate !== image.rotate) { - image.rotate = data.rotate; + if (isNumber(data.rotate) && data.rotate !== imageData.rotate) { + imageData.rotate = data.rotate; transformed = true; } } if (options.scalable) { - if (isNumber(data.scaleX) && data.scaleX !== image.scaleX) { - image.scaleX = data.scaleX; + if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) { + imageData.scaleX = data.scaleX; transformed = true; } - if (isNumber(data.scaleY) && data.scaleY !== image.scaleY) { - image.scaleY = data.scaleY; + if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) { + imageData.scaleY = data.scaleY; transformed = true; } } @@ -2475,14 +2803,14 @@ var methods = { this.renderCanvas(true, true); } - var ratio = image.width / image.naturalWidth; + var ratio = imageData.width / imageData.naturalWidth; if (isNumber(data.x)) { - cropBoxData.left = data.x * ratio + canvas.left; + cropBoxData.left = data.x * ratio + canvasData.left; } if (isNumber(data.y)) { - cropBoxData.top = data.y * ratio + canvas.top; + cropBoxData.top = data.y * ratio + canvasData.top; } if (isNumber(data.width)) { @@ -2495,6 +2823,8 @@ var methods = { this.setCropBoxData(cropBoxData); } + + return this; }, @@ -2503,7 +2833,7 @@ var methods = { * @returns {Object} The result container data. */ getContainerData: function getContainerData() { - return this.ready ? $.extend({}, this.container) : {}; + return this.ready ? assign({}, this.containerData) : {}; }, @@ -2512,7 +2842,7 @@ var methods = { * @returns {Object} The result image data. */ getImageData: function getImageData() { - return this.loaded ? $.extend({}, this.image) : {}; + return this.sized ? assign({}, this.imageData) : {}; }, @@ -2521,13 +2851,13 @@ var methods = { * @returns {Object} The result canvas data. */ getCanvasData: function getCanvasData() { - var canvas = this.canvas; + var canvasData = this.canvasData; var data = {}; if (this.ready) { - $.each(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (i, n) { - data[n] = canvas[n]; + forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) { + data[n] = canvasData[n]; }); } @@ -2538,35 +2868,34 @@ var methods = { /** * Set the canvas position and size with new data. * @param {Object} data - The new canvas data. + * @returns {Cropper} this */ setCanvasData: function setCanvasData(data) { - var canvas = this.canvas; - var aspectRatio = canvas.aspectRatio; + var canvasData = this.canvasData; + var aspectRatio = canvasData.aspectRatio; - if ($.isFunction(data)) { - data = data.call(this.$element); - } - - if (this.ready && !this.disabled && $.isPlainObject(data)) { + if (this.ready && !this.disabled && isPlainObject(data)) { if (isNumber(data.left)) { - canvas.left = data.left; + canvasData.left = data.left; } if (isNumber(data.top)) { - canvas.top = data.top; + canvasData.top = data.top; } if (isNumber(data.width)) { - canvas.width = data.width; - canvas.height = data.width / aspectRatio; + canvasData.width = data.width; + canvasData.height = data.width / aspectRatio; } else if (isNumber(data.height)) { - canvas.height = data.height; - canvas.width = data.height * aspectRatio; + canvasData.height = data.height; + canvasData.width = data.height * aspectRatio; } this.renderCanvas(true); } + + return this; }, @@ -2575,62 +2904,66 @@ var methods = { * @returns {Object} The result crop box data. */ getCropBoxData: function getCropBoxData() { - var cropBox = this.cropBox; + var cropBoxData = this.cropBoxData; + var data = void 0; - return this.ready && this.cropped ? { - left: cropBox.left, - top: cropBox.top, - width: cropBox.width, - height: cropBox.height - } : {}; + if (this.ready && this.cropped) { + data = { + left: cropBoxData.left, + top: cropBoxData.top, + width: cropBoxData.width, + height: cropBoxData.height + }; + } + + return data || {}; }, /** * Set the crop box position and size with new data. * @param {Object} data - The new crop box data. + * @returns {Cropper} this */ setCropBoxData: function setCropBoxData(data) { - var cropBox = this.cropBox; + var cropBoxData = this.cropBoxData; var aspectRatio = this.options.aspectRatio; var widthChanged = void 0; var heightChanged = void 0; - if ($.isFunction(data)) { - data = data.call(this.$element); - } - - if (this.ready && this.cropped && !this.disabled && $.isPlainObject(data)) { + if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) { if (isNumber(data.left)) { - cropBox.left = data.left; + cropBoxData.left = data.left; } if (isNumber(data.top)) { - cropBox.top = data.top; + cropBoxData.top = data.top; } - if (isNumber(data.width) && data.width !== cropBox.width) { + if (isNumber(data.width) && data.width !== cropBoxData.width) { widthChanged = true; - cropBox.width = data.width; + cropBoxData.width = data.width; } - if (isNumber(data.height) && data.height !== cropBox.height) { + if (isNumber(data.height) && data.height !== cropBoxData.height) { heightChanged = true; - cropBox.height = data.height; + cropBoxData.height = data.height; } if (aspectRatio) { if (widthChanged) { - cropBox.height = cropBox.width / aspectRatio; + cropBoxData.height = cropBoxData.width / aspectRatio; } else if (heightChanged) { - cropBox.width = cropBox.height * aspectRatio; + cropBoxData.width = cropBoxData.height * aspectRatio; } } this.renderCropBox(); } + + return this; }, @@ -2646,9 +2979,9 @@ var methods = { return null; } - var canvasData = this.canvas; + var canvasData = this.canvasData; - var source = getSourceCanvas(this.$clone[0], this.image, canvasData, options); + var source = getSourceCanvas(this.image, this.imageData, canvasData, options); // Returns the source canvas if it is not cropped. if (!this.cropped) { @@ -2698,6 +3031,7 @@ var methods = { canvas.width = normalizeDecimalNumber(width); canvas.height = normalizeDecimalNumber(height); + context.fillStyle = options.fillColor || 'transparent'; context.fillRect(0, 0, width, height); @@ -2771,9 +3105,10 @@ var methods = { params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale); } - context.drawImage.apply(context, [source].concat(toConsumableArray($.map(params, function (param) { + context.drawImage.apply(context, [source].concat(toConsumableArray(params.map(function (param) { return Math.floor(normalizeDecimalNumber(param)); })))); + return canvas; }, @@ -2781,6 +3116,7 @@ var methods = { /** * Change the aspect ratio of the crop box. * @param {number} aspectRatio - The new aspect ratio. + * @returns {Cropper} this */ setAspectRatio: function setAspectRatio(aspectRatio) { var options = this.options; @@ -2798,34 +3134,47 @@ var methods = { } } } + + return this; }, /** * Change the drag mode. * @param {string} mode - The new drag mode. + * @returns {Cropper} this */ setDragMode: function setDragMode(mode) { - var options = this.options; + var options = this.options, + dragBox = this.dragBox, + face = this.face; + - var croppable = void 0; - var movable = void 0; + if (this.ready && !this.disabled) { + var croppable = mode === DRAG_MODE_CROP; + var movable = options.movable && mode === DRAG_MODE_MOVE; - if (this.loaded && !this.disabled) { - croppable = mode === DRAG_MODE_CROP; - movable = options.movable && mode === DRAG_MODE_MOVE; mode = croppable || movable ? mode : DRAG_MODE_NONE; - this.$dragBox.data(DATA_ACTION, mode).toggleClass(CLASS_CROP, croppable).toggleClass(CLASS_MOVE, movable); + options.dragMode = mode; + setData(dragBox, DATA_ACTION, mode); + toggleClass(dragBox, CLASS_CROP, croppable); + toggleClass(dragBox, CLASS_MOVE, movable); if (!options.cropBoxMovable) { - // Sync drag mode to crop box when it is not movable(#300) - this.$face.data(DATA_ACTION, mode).toggleClass(CLASS_CROP, croppable).toggleClass(CLASS_MOVE, movable); + // Sync drag mode to crop box when it is not movable + setData(face, DATA_ACTION, mode); + toggleClass(face, CLASS_CROP, croppable); + toggleClass(face, CLASS_MOVE, movable); } } + + return this; } }; +var AnotherCropper = WINDOW.Cropper; + var Cropper = function () { /** * Create a new Cropper. @@ -2841,36 +3190,37 @@ var Cropper = function () { } this.element = element; - this.$element = $(element); - this.options = $.extend({}, DEFAULTS, $.isPlainObject(options) && options); - this.completed = false; + this.options = assign({}, DEFAULTS, isPlainObject(options) && options); this.cropped = false; this.disabled = false; - this.isImg = false; - this.limited = false; - this.loaded = false; + this.pointers = {}; this.ready = false; + this.reloading = false; this.replaced = false; - this.wheeling = false; - this.originalUrl = ''; - this.canvas = null; - this.cropBox = null; - this.pointers = {}; + this.sized = false; + this.sizing = false; this.init(); } createClass(Cropper, [{ key: 'init', value: function init() { - var $element = this.$element; + var element = this.element; + var tagName = element.tagName.toLowerCase(); var url = void 0; - if ($element.is('img')) { + if (getData(element, NAMESPACE)) { + return; + } + + setData(element, NAMESPACE, this); + + if (tagName === 'img') { this.isImg = true; - // Should use `$.fn.attr` here. e.g.: "img/picture.jpg" - url = $element.attr('src') || ''; + // e.g.: "img/picture.jpg" + url = element.getAttribute('src') || ''; this.originalUrl = url; // Stop when it's a blank image @@ -2878,26 +3228,14 @@ var Cropper = function () { return; } - // Should use `$.fn.prop` here. e.g.: "http://example.com/img/picture.jpg" - url = $element.prop('src'); - } else if ($element.is('canvas') && window.HTMLCanvasElement) { - url = $element[0].toDataURL(); + // e.g.: "http://example.com/img/picture.jpg" + url = element.src; + } else if (tagName === 'canvas' && window.HTMLCanvasElement) { + url = element.toDataURL(); } this.load(url); } - - // A shortcut for triggering custom events - - }, { - key: 'trigger', - value: function trigger(type, data) { - var e = $.Event(type, data); - - this.$element.trigger(e); - - return e; - } }, { key: 'load', value: function load(url) { @@ -2908,9 +3246,9 @@ var Cropper = function () { } this.url = url; - this.image = {}; + this.imageData = {}; - var $element = this.$element, + var element = this.element, options = this.options; @@ -2932,29 +3270,41 @@ var Cropper = function () { var xhr = new XMLHttpRequest(); + this.reloading = true; + this.xhr = xhr; + + var done = function done() { + _this.reloading = false; + _this.xhr = null; + }; + + xhr.ontimeout = done; + xhr.onabort = done; xhr.onerror = function () { + done(); _this.clone(); }; xhr.onload = function () { + done(); _this.read(xhr.response); }; // Bust cache when there is a "crossOrigin" property - if (options.checkCrossOrigin && isCrossOriginURL(url) && !$element.prop('crossOrigin')) { + if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) { url = addTimestamp(url); } xhr.open('get', url); xhr.responseType = 'arraybuffer'; - xhr.withCredentials = $element.prop('crossOrigin') === 'use-credentials'; + xhr.withCredentials = element.crossOrigin === 'use-credentials'; xhr.send(); } }, { key: 'read', value: function read(arrayBuffer) { var options = this.options, - image = this.image; + imageData = this.imageData; var orientation = getOrientation(arrayBuffer); var rotate = 0; @@ -2972,12 +3322,12 @@ var Cropper = function () { } if (options.rotatable) { - image.rotate = rotate; + imageData.rotate = rotate; } if (options.scalable) { - image.scaleX = scaleX; - image.scaleY = scaleY; + imageData.scaleX = scaleX; + imageData.scaleY = scaleY; } this.clone(); @@ -2985,22 +3335,22 @@ var Cropper = function () { }, { key: 'clone', value: function clone() { - var $element = this.$element, - options = this.options, + var element = this.element, url = this.url; - var crossOrigin = ''; + var crossOrigin = void 0; var crossOriginUrl = void 0; - if (options.checkCrossOrigin && isCrossOriginURL(url)) { - crossOrigin = $element.prop('crossOrigin'); + if (this.options.checkCrossOrigin && isCrossOriginURL(url)) { + crossOrigin = element.crossOrigin; + if (crossOrigin) { crossOriginUrl = url; } else { crossOrigin = 'anonymous'; - // Bust cache (#148) when there is not a "crossOrigin" property + // Bust cache when there is not a "crossOrigin" property crossOriginUrl = addTimestamp(url); } } @@ -3016,88 +3366,136 @@ var Cropper = function () { image.src = crossOriginUrl || url; - var $clone = $(image); + var start = this.start.bind(this); + var stop = this.stop.bind(this); - this.$clone = $clone; + this.image = image; + this.onStart = start; + this.onStop = stop; if (this.isImg) { - if (this.element.complete) { - this.start(); + if (element.complete) { + this.timeout = setTimeout(start, 0); } else { - $element.one(EVENT_LOAD, $.proxy(this.start, this)); + addListener(element, EVENT_LOAD, start, { + once: true + }); } } else { - $clone.one(EVENT_LOAD, $.proxy(this.start, this)).one(EVENT_ERROR, $.proxy(this.stop, this)).addClass(CLASS_HIDE).insertAfter($element); + image.onload = start; + image.onerror = stop; + addClass(image, CLASS_HIDE); + element.parentNode.insertBefore(image, element.nextSibling); } } }, { key: 'start', - value: function start() { + value: function start(event) { var _this2 = this; - var $clone = this.$clone; - - var $image = this.$element; + var image = this.isImg ? this.element : this.image; - if (!this.isImg) { - $clone.off(EVENT_ERROR, this.stop); - $image = $clone; + if (event) { + image.onload = null; + image.onerror = null; } - getImageNaturalSizes($image[0], function (naturalWidth, naturalHeight) { - $.extend(_this2.image, { + this.sizing = true; + + var IS_SAFARI = WINDOW.navigator && /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(WINDOW.navigator.userAgent); + var done = function done(naturalWidth, naturalHeight) { + assign(_this2.imageData, { naturalWidth: naturalWidth, naturalHeight: naturalHeight, aspectRatio: naturalWidth / naturalHeight }); - - _this2.loaded = true; + _this2.sizing = false; + _this2.sized = true; _this2.build(); - }); + }; + + // Modern browsers (except Safari) + if (image.naturalWidth && !IS_SAFARI) { + done(image.naturalWidth, image.naturalHeight); + return; + } + + var sizingImage = document.createElement('img'); + var body = document.body || document.documentElement; + + this.sizingImage = sizingImage; + + sizingImage.onload = function () { + done(sizingImage.width, sizingImage.height); + + if (!IS_SAFARI) { + body.removeChild(sizingImage); + } + }; + + sizingImage.src = image.src; + + // iOS Safari will convert the image automatically + // with its orientation once append it into DOM (#279) + if (!IS_SAFARI) { + 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;'; + body.appendChild(sizingImage); + } } }, { key: 'stop', value: function stop() { - this.$clone.remove(); - this.$clone = null; + var image = this.image; + + + image.onload = null; + image.onerror = null; + image.parentNode.removeChild(image); + this.image = null; } }, { key: 'build', value: function build() { - var _this3 = this; - - if (!this.loaded) { + if (!this.sized || this.ready) { return; } - // Unbuild first when replace - if (this.ready) { - this.unbuild(); - } - - var $element = this.$element, + var element = this.element, options = this.options, - $clone = this.$clone; - - var $cropper = $(TEMPLATE); - var $cropBox = $cropper.find('.' + NAMESPACE + '-crop-box'); - var $face = $cropBox.find('.' + NAMESPACE + '-face'); + image = this.image; // Create cropper elements - this.$container = $element.parent(); - this.$cropper = $cropper; - this.$canvas = $cropper.find('.' + NAMESPACE + '-canvas').append($clone); - this.$dragBox = $cropper.find('.' + NAMESPACE + '-drag-box'); - this.$cropBox = $cropBox; - this.$viewBox = $cropper.find('.' + NAMESPACE + '-view-box'); - this.$face = $face; + + var container = element.parentNode; + var template = document.createElement('div'); + + template.innerHTML = TEMPLATE; + + var cropper = template.querySelector('.' + NAMESPACE + '-container'); + var canvas = cropper.querySelector('.' + NAMESPACE + '-canvas'); + var dragBox = cropper.querySelector('.' + NAMESPACE + '-drag-box'); + var cropBox = cropper.querySelector('.' + NAMESPACE + '-crop-box'); + var face = cropBox.querySelector('.' + NAMESPACE + '-face'); + + this.container = container; + this.cropper = cropper; + this.canvas = canvas; + this.dragBox = dragBox; + this.cropBox = cropBox; + this.viewBox = cropper.querySelector('.' + NAMESPACE + '-view-box'); + this.face = face; + + canvas.appendChild(image); // Hide the original image - $element.addClass(CLASS_HIDDEN).after($cropper); + addClass(element, CLASS_HIDDEN); + + // Inserts the cropper after to the current image + container.insertBefore(cropper, element.nextSibling); - // Show the clone image if is hidden + // Show the image if is hidden if (!this.isImg) { - $clone.removeClass(CLASS_HIDE); + removeClass(image, CLASS_HIDE); } this.initPreview(); @@ -3106,55 +3504,51 @@ var Cropper = function () { options.aspectRatio = Math.max(0, options.aspectRatio) || NaN; options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0; - this.cropped = options.autoCrop; - - if (options.autoCrop) { - if (options.modal) { - this.$dragBox.addClass(CLASS_MODAL); - } - } else { - $cropBox.addClass(CLASS_HIDDEN); - } + addClass(cropBox, CLASS_HIDDEN); if (!options.guides) { - $cropBox.find('.' + NAMESPACE + '-dashed').addClass(CLASS_HIDDEN); + addClass(cropBox.getElementsByClassName(NAMESPACE + '-dashed'), CLASS_HIDDEN); } if (!options.center) { - $cropBox.find('.' + NAMESPACE + '-center').addClass(CLASS_HIDDEN); + addClass(cropBox.getElementsByClassName(NAMESPACE + '-center'), CLASS_HIDDEN); } - if (options.cropBoxMovable) { - $face.addClass(CLASS_MOVE).data(DATA_ACTION, ACTION_ALL); + if (options.background) { + addClass(cropper, NAMESPACE + '-bg'); } if (!options.highlight) { - $face.addClass(CLASS_INVISIBLE); + addClass(face, CLASS_INVISIBLE); } - if (options.background) { - $cropper.addClass(NAMESPACE + '-bg'); + if (options.cropBoxMovable) { + addClass(face, CLASS_MOVE); + setData(face, DATA_ACTION, ACTION_ALL); } if (!options.cropBoxResizable) { - $cropBox.find('.' + NAMESPACE + '-line,.' + NAMESPACE + '-point').addClass(CLASS_HIDDEN); + addClass(cropBox.getElementsByClassName(NAMESPACE + '-line'), CLASS_HIDDEN); + addClass(cropBox.getElementsByClassName(NAMESPACE + '-point'), CLASS_HIDDEN); } - this.setDragMode(options.dragMode); this.render(); this.ready = true; + this.setDragMode(options.dragMode); + + if (options.autoCrop) { + this.crop(); + } + this.setData(options.data); - // Trigger the ready event asynchronously to keep `data('cropper')` is defined - this.completing = setTimeout(function () { - if ($.isFunction(options.ready)) { - $element.one(EVENT_READY, options.ready); - } + if (isFunction(options.ready)) { + addListener(element, EVENT_READY, options.ready, { + once: true + }); + } - _this3.trigger(EVENT_READY); - _this3.trigger(EVENT_CROP, _this3.getData()); - _this3.completed = true; - }, 0); + dispatchEvent(element, EVENT_READY); } }, { key: 'unbuild', @@ -3163,35 +3557,49 @@ var Cropper = function () { return; } - if (!this.completed) { - clearTimeout(this.completing); - } - this.ready = false; - this.completed = false; - this.initialImage = null; - - // Clear `initialCanvas` is necessary when replace - this.initialCanvas = null; - this.initialCropBox = null; - this.container = null; - this.canvas = null; - - // Clear `cropBox` is necessary when replace - this.cropBox = null; this.unbind(); - this.resetPreview(); - this.$preview = null; + this.cropper.parentNode.removeChild(this.cropper); + removeClass(this.element, CLASS_HIDDEN); + } + }, { + key: 'uncreate', + value: function uncreate() { + var element = this.element; + + + if (this.ready) { + this.unbuild(); + this.ready = false; + this.cropped = false; + } else if (this.sizing) { + this.sizingImage.onload = null; + this.sizing = false; + this.sized = false; + } else if (this.reloading) { + this.xhr.abort(); + } else if (this.isImg) { + if (element.complete) { + clearTimeout(this.timeout); + } else { + removeListener(element, EVENT_LOAD, this.onStart); + } + } else if (this.image) { + this.stop(); + } + } - this.$viewBox = null; - this.$cropBox = null; - this.$dragBox = null; - this.$canvas = null; - this.$container = null; + /** + * Get the no conflict cropper class. + * @returns {Cropper} The cropper class. + */ - this.$cropper.remove(); - this.$cropper = null; + }], [{ + key: 'noConflict', + value: function noConflict() { + window.Cropper = AnotherCropper; + return Cropper; } /** @@ -3199,21 +3607,20 @@ var Cropper = function () { * @param {Object} options - The new default options. */ - }], [{ + }, { key: 'setDefaults', value: function setDefaults(options) { - $.extend(DEFAULTS, $.isPlainObject(options) && options); + assign(DEFAULTS, isPlainObject(options) && options); } }]); return Cropper; }(); -if ($.extend) { - $.extend(Cropper.prototype, render, preview, events, handlers, change, methods); -} +assign(Cropper.prototype, render, preview, events, handlers, change, methods); if ($.fn) { - var AnotherCropper = $.fn.cropper; + var AnotherCropper$1 = $.fn.cropper; + var NAMESPACE$1 = 'cropper'; $.fn.cropper = function jQueryCropper(option) { for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { @@ -3224,35 +3631,44 @@ if ($.fn) { this.each(function (i, element) { var $element = $(element); - var data = $element.data(NAMESPACE); + var isDestroy = option === 'destroy'; + var cropper = $element.data(NAMESPACE$1); - if (!data) { - if (/destroy/.test(option)) { + if (!cropper) { + if (isDestroy) { return; } var options = $.extend({}, $element.data(), $.isPlainObject(option) && option); - data = new Cropper(element, options); - $element.data(NAMESPACE, data); + cropper = new Cropper(element, options); + $element.data(NAMESPACE$1, cropper); } - if (isString(option)) { - var fn = data[option]; + if (typeof option === 'string') { + var fn = cropper[option]; if ($.isFunction(fn)) { - result = fn.apply(data, args); + result = fn.apply(cropper, args); + + if (result === cropper) { + result = undefined; + } + + if (isDestroy) { + $element.removeData(NAMESPACE$1); + } } } }); - return isUndefined(result) ? this : result; + return typeof result === 'undefined' ? this : result; }; $.fn.cropper.Constructor = Cropper; $.fn.cropper.setDefaults = Cropper.setDefaults; $.fn.cropper.noConflict = function noConflict() { - $.fn.cropper = AnotherCropper; + $.fn.cropper = AnotherCropper$1; return this; }; } diff --git a/dist/cropper.min.css b/dist/cropper.min.css index edb229b0..16c98962 100644 --- a/dist/cropper.min.css +++ b/dist/cropper.min.css @@ -1,9 +1,9 @@ /*! - * Cropper v3.1.6 + * Cropper v4.0.0-alpha * https://github.com/fengyuanchen/cropper * * Copyright (c) 2014-2018 Chen Fengyuan * Released under the MIT license * - * Date: 2018-03-01T13:33:39.581Z + * Date: 2018-03-01T14:21:03.491Z */.cropper-container{direction:ltr;font-size:0;line-height:0;position:relative;-ms-touch-action:none;touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.cropper-container img{display:block;height:100%;image-orientation:0deg;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;width:100%}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal,.cropper-wrap-box{bottom:0;left:0;position:absolute;right:0;top:0}.cropper-canvas,.cropper-wrap-box{overflow:hidden}.cropper-drag-box{background-color:#fff;opacity:0}.cropper-modal{background-color:#000;opacity:.5}.cropper-view-box{display:block;height:100%;outline-color:rgba(51,153,255,.75);outline:1px solid #39f;overflow:hidden;width:100%}.cropper-dashed{border:0 dashed #eee;display:block;opacity:.5;position:absolute}.cropper-dashed.dashed-h{border-bottom-width:1px;border-top-width:1px;height:33.33333%;left:0;top:33.33333%;width:100%}.cropper-dashed.dashed-v{border-left-width:1px;border-right-width:1px;height:100%;left:33.33333%;top:0;width:33.33333%}.cropper-center{display:block;height:0;left:50%;opacity:.75;position:absolute;top:50%;width:0}.cropper-center:after,.cropper-center:before{background-color:#eee;content:" ";display:block;position:absolute}.cropper-center:before{height:1px;left:-3px;top:0;width:7px}.cropper-center:after{height:7px;left:0;top:-3px;width:1px}.cropper-face,.cropper-line,.cropper-point{display:block;height:100%;opacity:.1;position:absolute;width:100%}.cropper-face{background-color:#fff;left:0;top:0}.cropper-line{background-color:#39f}.cropper-line.line-e{cursor:ew-resize;right:-3px;top:0;width:5px}.cropper-line.line-n{cursor:ns-resize;height:5px;left:0;top:-3px}.cropper-line.line-w{cursor:ew-resize;left:-3px;top:0;width:5px}.cropper-line.line-s{bottom:-3px;cursor:ns-resize;height:5px;left:0}.cropper-point{background-color:#39f;height:5px;opacity:.75;width:5px}.cropper-point.point-e{cursor:ew-resize;margin-top:-3px;right:-3px;top:50%}.cropper-point.point-n{cursor:ns-resize;left:50%;margin-left:-3px;top:-3px}.cropper-point.point-w{cursor:ew-resize;left:-3px;margin-top:-3px;top:50%}.cropper-point.point-s{bottom:-3px;cursor:s-resize;left:50%;margin-left:-3px}.cropper-point.point-ne{cursor:nesw-resize;right:-3px;top:-3px}.cropper-point.point-nw{cursor:nwse-resize;left:-3px;top:-3px}.cropper-point.point-sw{bottom:-3px;cursor:nesw-resize;left:-3px}.cropper-point.point-se{bottom:-3px;cursor:nwse-resize;height:20px;opacity:1;right:-3px;width:20px}@media (min-width:768px){.cropper-point.point-se{height:15px;width:15px}}@media (min-width:992px){.cropper-point.point-se{height:10px;width:10px}}@media (min-width:1200px){.cropper-point.point-se{height:5px;opacity:.75;width:5px}}.cropper-point.point-se:before{background-color:#39f;bottom:-50%;content:" ";display:block;height:200%;opacity:0;position:absolute;right:-50%;width:200%}.cropper-invisible{opacity:0}.cropper-bg{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC")}.cropper-hide{display:block;height:0;position:absolute;width:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed} \ No newline at end of file diff --git a/dist/cropper.min.js b/dist/cropper.min.js index eeb0d70d..13b78377 100644 --- a/dist/cropper.min.js +++ b/dist/cropper.min.js @@ -1,10 +1,10 @@ /*! - * Cropper v3.1.6 + * Cropper v4.0.0-alpha * https://github.com/fengyuanchen/cropper * * Copyright (c) 2014-2018 Chen Fengyuan * Released under the MIT license * - * Date: 2018-03-01T13:33:48.179Z + * Date: 2018-03-01T14:21:13.980Z */ -!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],i):i(t.jQuery)}(this,function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var i="undefined"!=typeof window?window:{},e="cropper",a="all",n="crop",h="move",o="zoom",s="e",r="w",d="s",c="n",l="ne",p="nw",g="se",m="sw",u=e+"-crop",f=e+"-disabled",v=e+"-hidden",w=e+"-hide",x=e+"-modal",b=e+"-move",y="action",C="preview",M="crop",$="move",B="none",k="crop",W="cropend",D="cropmove",T="cropstart",Y="dblclick",H="error",X="load",O=i.PointerEvent?"pointerdown":"touchstart mousedown",E=i.PointerEvent?"pointermove":"touchmove mousemove",N=i.PointerEvent?"pointerup pointercancel":"touchend touchcancel mouseup",R="ready",z="resize",L="wheel mousewheel DOMMouseScroll",P="zoom",I=/^(e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/,U=/^data:/,A=/^data:image\/jpeg;base64,/,F=/^(img|canvas)$/i,j={viewMode:0,dragMode:M,aspectRatio:NaN,data:null,preview:"",responsive:!0,restore:!0,checkCrossOrigin:!0,checkOrientation:!0,modal:!0,guides:!0,center:!0,highlight:!0,background:!0,autoCrop:!0,autoCropArea:.8,movable:!0,rotatable:!0,scalable:!0,zoomable:!0,zoomOnTouch:!0,zoomOnWheel:!0,wheelZoomRatio:.1,cropBoxMovable:!0,cropBoxResizable:!0,toggleDragModeOnDblclick:!0,minCanvasWidth:0,minCanvasHeight:0,minCropBoxWidth:0,minCropBoxHeight:0,minContainerWidth:200,minContainerHeight:100,ready:null,cropstart:null,cropmove:null,cropend:null,crop:null,zoom:null},S=function(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")},q=function(){function t(t,i){for(var e=0;e2?e-2:0),n=2;n1&&void 0!==arguments[1]?arguments[1]:1e11;return _.test(t)?Math.round(t*i)/i:t}var it=i.location,et=/^(https?:)\/\/([^:/?#]+):?(\d*)/i;function at(t){var i=t.match(et);return i&&(i[1]!==it.protocol||i[2]!==it.hostname||i[3]!==it.port)}function nt(t){var i="timestamp="+(new Date).getTime();return t+(-1===t.indexOf("?")?"?":"&")+i}function ht(t){var i=t.rotate,e=t.scaleX,a=t.scaleY,n=t.translateX,h=t.translateY,o=[];return Z(n)&&0!==n&&o.push("translateX("+n+"px)"),Z(h)&&0!==h&&o.push("translateY("+h+"px)"),Z(i)&&0!==i&&o.push("rotate("+i+"deg)"),Z(e)&&1!==e&&o.push("scaleX("+e+")"),Z(a)&&1!==a&&o.push("scaleY("+a+")"),o.length?o.join(" "):"none"}var ot=i.navigator,st=ot&&/(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(ot.userAgent);function rt(i,e){var a=i.pageX,n=i.pageY,h={endX:a,endY:n};return e?h:t.extend({startX:a,startY:n},h)}var dt=Number.isFinite||i.isFinite;function ct(t){var i=t.aspectRatio,e=t.height,a=t.width,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"contain",h=function(t){return dt(t)&&t>0};if(h(a)&&h(e)){var o=e*i;"contain"===n&&o>a||"cover"===n&&o=8&&(h=r+c)}}}if(h){var l=i.getUint16(h,a),p=void 0,g=void 0;for(g=0;gi.width?3===a?r=i.height*s:d=i.width/s:3===a?d=i.width/s:r=i.height*s;var c={aspectRatio:s,naturalWidth:h,naturalHeight:o,width:r,height:d};c.left=(i.width-r)/2,c.top=(i.height-d)/2,c.oldLeft=c.left,c.oldTop=c.top,this.canvas=c,this.limited=1===a||2===a,this.limitCanvas(!0,!0),this.initialImage=t.extend({},e),this.initialCanvas=t.extend({},c)},limitCanvas:function(t,i){var e=this.options,a=this.container,n=this.canvas,h=this.cropBox,o=e.viewMode,s=n.aspectRatio,r=this.cropped&&h;if(t){var d=Number(e.minCanvasWidth)||0,c=Number(e.minCanvasHeight)||0;o>0&&(o>1?(d=Math.max(d,a.width),c=Math.max(c,a.height),3===o&&(c*s>d?d=c*s:c=d/s)):d?d=Math.max(d,r?h.width:0):c?c=Math.max(c,r?h.height:0):r&&(d=h.width,(c=h.height)*s>d?d=c*s:c=d/s));var l=ct({aspectRatio:s,width:d,height:c});d=l.width,c=l.height,n.minWidth=d,n.minHeight=c,n.maxWidth=1/0,n.maxHeight=1/0}if(i)if(o>0){var p=a.width-n.width,g=a.height-n.height;n.minLeft=Math.min(0,p),n.minTop=Math.min(0,g),n.maxLeft=Math.max(0,p),n.maxTop=Math.max(0,g),r&&this.limited&&(n.minLeft=Math.min(h.left,h.left+h.width-n.width),n.minTop=Math.min(h.top,h.top+h.height-n.height),n.maxLeft=h.left,n.maxTop=h.top,2===o&&(n.width>=a.width&&(n.minLeft=Math.min(0,p),n.maxLeft=Math.max(0,p)),n.height>=a.height&&(n.minTop=Math.min(0,g),n.maxTop=Math.max(0,g))))}else n.minLeft=-n.width,n.minTop=-n.height,n.maxLeft=a.width,n.maxTop=a.height},renderCanvas:function(t,i){var e=this.canvas,a=this.image;if(i){var n=function(t){var i=t.width,e=t.height,a=t.degree;if(90==(a=Math.abs(a)%180))return{width:e,height:i};var n=a%90*Math.PI/180,h=Math.sin(n),o=Math.cos(n),s=i*o+e*h,r=i*h+e*o;return a>90?{width:r,height:s}:{width:s,height:r}}({width:a.naturalWidth*Math.abs(a.scaleX||1),height:a.naturalHeight*Math.abs(a.scaleY||1),degree:a.rotate||0}),h=n.width,o=n.height,s=e.width*(h/e.naturalWidth),r=e.height*(o/e.naturalHeight);e.left-=(s-e.width)/2,e.top-=(r-e.height)/2,e.width=s,e.height=r,e.aspectRatio=h/o,e.naturalWidth=h,e.naturalHeight=o,this.limitCanvas(!0,!1)}(e.width>e.maxWidth||e.widthe.maxHeight||e.heighte.width?h.height=h.width/a:h.width=h.height*a),this.cropBox=h,this.limitCropBox(!0,!0),h.width=Math.min(Math.max(h.width,h.minWidth),h.maxWidth),h.height=Math.min(Math.max(h.height,h.minHeight),h.maxHeight),h.width=Math.max(h.minWidth,h.width*n),h.height=Math.max(h.minHeight,h.height*n),h.left=e.left+(e.width-h.width)/2,h.top=e.top+(e.height-h.height)/2,h.oldLeft=h.left,h.oldTop=h.top,this.initialCropBox=t.extend({},h)},limitCropBox:function(t,i){var e=this.options,a=this.container,n=this.canvas,h=this.cropBox,o=this.limited,s=e.aspectRatio;if(t){var r=Number(e.minCropBoxWidth)||0,d=Number(e.minCropBoxHeight)||0,c=Math.min(a.width,o?n.width:a.width),l=Math.min(a.height,o?n.height:a.height);r=Math.min(r,a.width),d=Math.min(d,a.height),s&&(r&&d?d*s>r?d=r/s:r=d*s:r?d=r/s:d&&(r=d*s),l*s>c?l=c/s:c=l*s),h.minWidth=Math.min(r,c),h.minHeight=Math.min(d,l),h.maxWidth=c,h.maxHeight=l}i&&(o?(h.minLeft=Math.max(0,n.left),h.minTop=Math.max(0,n.top),h.maxLeft=Math.min(a.width,n.left+n.width)-h.width,h.maxTop=Math.min(a.height,n.top+n.height)-h.height):(h.minLeft=0,h.minTop=0,h.maxLeft=a.width-h.width,h.maxTop=a.height-h.height))},renderCropBox:function(){var t=this.options,i=this.container,e=this.cropBox;(e.width>e.maxWidth||e.widthe.maxHeight||e.height=i.width&&e.height>=i.height?h:a),this.$cropBox.css({width:e.width,height:e.height,transform:ht({translateX:e.left,translateY:e.top})}),this.cropped&&this.limited&&this.limitCanvas(!0,!0),this.disabled||this.output()},output:function(){this.preview(),this.completed&&this.trigger(k,this.getData())}},ut={initPreview:function(){var i=this.crossOrigin,e=i?this.crossOriginUrl:this.url,a=document.createElement("img");i&&(a.crossOrigin=i),a.src=e;var n=t(a);this.$preview=t(this.options.preview),this.$clone2=n,this.$viewBox.html(n),this.$preview.each(function(a,n){var h=t(n),o=document.createElement("img");h.data(C,{width:h.width(),height:h.height(),html:h.html()}),i&&(o.crossOrigin=i),o.src=e,o.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;"',h.html(o)})},resetPreview:function(){this.$preview.each(function(i,e){var a=t(e),n=a.data(C);a.css({width:n.width,height:n.height}).html(n.html).removeData(C)})},preview:function(){var i=this.image,e=this.canvas,a=this.cropBox,n=a.width,h=a.height,o=i.width,s=i.height,r=a.left-e.left-i.left,d=a.top-e.top-i.top;this.cropped&&!this.disabled&&(this.$clone2.css({width:o,height:s,transform:ht(t.extend({translateX:-r,translateY:-d},i))}),this.$preview.each(function(e,a){var c=t(a),l=c.data(C),p=l.width,g=l.height,m=p,u=g,f=1;n&&(u=h*(f=p/n)),h&&u>g&&(m=n*(f=g/h),u=g),c.css({width:m,height:u}).find("img").css({width:o*f,height:s*f,transform:ht(t.extend({translateX:-r*f,translateY:-d*f},i))})}))}},ft={bind:function(){var i=this.$element,e=this.options,a=this.$cropper;t.isFunction(e.cropstart)&&i.on(T,e.cropstart),t.isFunction(e.cropmove)&&i.on(D,e.cropmove),t.isFunction(e.cropend)&&i.on(W,e.cropend),t.isFunction(e.crop)&&i.on(k,e.crop),t.isFunction(e.zoom)&&i.on(P,e.zoom),a.on(O,G(this.cropStart,this)),e.zoomable&&e.zoomOnWheel&&a.on(L,G(this.wheel,this)),e.toggleDragModeOnDblclick&&a.on(Y,G(this.dblclick,this)),t(this.element.ownerDocument).on(E,this.onCropMove=G(this.cropMove,this)).on(N,this.onCropEnd=G(this.cropEnd,this)),e.responsive&&t(window).on(z,this.onResize=G(this.resize,this))},unbind:function(){var i=this.$element,e=this.options,a=this.$cropper;t.isFunction(e.cropstart)&&i.off(T,e.cropstart),t.isFunction(e.cropmove)&&i.off(D,e.cropmove),t.isFunction(e.cropend)&&i.off(W,e.cropend),t.isFunction(e.crop)&&i.off(k,e.crop),t.isFunction(e.zoom)&&i.off(P,e.zoom),a.off(O,this.cropStart),e.zoomable&&e.zoomOnWheel&&a.off(L,this.wheel),e.toggleDragModeOnDblclick&&a.off(Y,this.dblclick),t(this.element.ownerDocument).off(E,this.onCropMove).off(N,this.onCropEnd),e.responsive&&t(window).off(z,this.onResize)}},vt={resize:function(){var i=this.options,e=this.$container,a=this.container,n=Number(i.minContainerWidth)||200,h=Number(i.minContainerHeight)||100;if(!(this.disabled||a.width<=n||a.height<=h)){var o=e.width()/a.width;if(1!==o||e.height()!==a.height){var s=void 0,r=void 0;i.restore&&(s=this.getCanvasData(),r=this.getCropBoxData()),this.render(),i.restore&&(this.setCanvasData(t.each(s,function(t,i){s[t]=i*o})),this.setCropBoxData(t.each(r,function(t,i){r[t]=i*o})))}}},dblclick:function(){this.disabled||this.options.dragMode===B||this.setDragMode(this.$dragBox.hasClass(u)?$:M)},wheel:function(t){var i=this,e=t.originalEvent||t,a=Number(this.options.wheelZoomRatio)||.1;if(!this.disabled&&(t.preventDefault(),!this.wheeling)){this.wheeling=!0,setTimeout(function(){i.wheeling=!1},50);var n=1;e.deltaY?n=e.deltaY>0?1:-1:e.wheelDelta?n=-e.wheelDelta/120:e.detail&&(n=e.detail>0?1:-1),this.zoom(-n*a,t)}},cropStart:function(i){if(!this.disabled){var e=this.options,a=this.pointers,h=i.originalEvent,s=void 0;h&&h.changedTouches?t.each(h.changedTouches,function(t,i){a[i.identifier]=rt(i)}):a[h&&h.pointerId||0]=rt(h||i),s=J(a).length>1&&e.zoomable&&e.zoomOnTouch?o:t(i.target).data(y),I.test(s)&&(this.trigger(T,{originalEvent:h,action:s}).isDefaultPrevented()||(i.preventDefault(),this.action=s,this.cropping=!1,s===n&&(this.cropping=!0,this.$dragBox.addClass(x))))}},cropMove:function(i){var e=this.action;if(!this.disabled&&e){var a=this.pointers,n=i.originalEvent;i.preventDefault(),this.trigger(D,{originalEvent:n,action:e}).isDefaultPrevented()||(n&&n.changedTouches?t.each(n.changedTouches,function(i,e){t.extend(a[e.identifier],rt(e,!0))}):t.extend(a[n&&n.pointerId||0],rt(n||i,!0)),this.change(i))}},cropEnd:function(i){if(!this.disabled){var e=this.action,a=this.pointers,n=i.originalEvent;n&&n.changedTouches?t.each(n.changedTouches,function(t,i){delete a[i.identifier]}):delete a[n&&n.pointerId||0],e&&(i.preventDefault(),J(a).length||(this.action=""),this.cropping&&(this.cropping=!1,this.$dragBox.toggleClass(x,this.cropped&&this.options.modal)),this.trigger(W,{originalEvent:n,action:e}))}}},wt={change:function(i){var e=this.options,u=this.pointers,f=this.container,w=this.canvas,x=this.cropBox,b=this.action,y=e.aspectRatio,C=x.left,M=x.top,$=x.width,B=x.height,k=C+$,W=M+B,D=0,T=0,Y=f.width,H=f.height,X=!0,O=void 0;!y&&i.shiftKey&&(y=$&&B?$/B:1),this.limited&&(D=x.minLeft,T=x.minTop,Y=D+Math.min(f.width,w.width,w.left+w.width),H=T+Math.min(f.height,w.height,w.top+w.height));var E,N,R,z=u[J(u)[0]],L={x:z.endX-z.startX,y:z.endY-z.startY},P=function(t){switch(t){case s:k+L.x>Y&&(L.x=Y-k);break;case r:C+L.xH&&(L.y=H-W)}};switch(b){case a:C+=L.x,M+=L.y;break;case s:if(L.x>=0&&(k>=Y||y&&(M<=T||W>=H))){X=!1;break}P(s),$+=L.x,y&&(B=$/y,M-=L.x/y/2),$<0&&(b=r,$=0);break;case c:if(L.y<=0&&(M<=T||y&&(C<=D||k>=Y))){X=!1;break}P(c),B-=L.y,M+=L.y,y&&($=B*y,C+=L.y*y/2),B<0&&(b=d,B=0);break;case r:if(L.x<=0&&(C<=D||y&&(M<=T||W>=H))){X=!1;break}P(r),$-=L.x,C+=L.x,y&&(B=$/y,M+=L.x/y/2),$<0&&(b=s,$=0);break;case d:if(L.y>=0&&(W>=H||y&&(C<=D||k>=Y))){X=!1;break}P(d),B+=L.y,y&&($=B*y,C-=L.y*y/2),B<0&&(b=c,B=0);break;case l:if(y){if(L.y<=0&&(M<=T||k>=Y)){X=!1;break}P(c),B-=L.y,M+=L.y,$=B*y}else P(c),P(s),L.x>=0?kT&&(B-=L.y,M+=L.y):(B-=L.y,M+=L.y);$<0&&B<0?(b=m,B=0,$=0):$<0?(b=p,$=0):B<0&&(b=g,B=0);break;case p:if(y){if(L.y<=0&&(M<=T||C<=D)){X=!1;break}P(c),B-=L.y,M+=L.y,$=B*y,C+=L.y*y}else P(c),P(r),L.x<=0?C>D?($-=L.x,C+=L.x):L.y<=0&&M<=T&&(X=!1):($-=L.x,C+=L.x),L.y<=0?M>T&&(B-=L.y,M+=L.y):(B-=L.y,M+=L.y);$<0&&B<0?(b=g,B=0,$=0):$<0?(b=l,$=0):B<0&&(b=m,B=0);break;case m:if(y){if(L.x<=0&&(C<=D||W>=H)){X=!1;break}P(r),$-=L.x,C+=L.x,B=$/y}else P(d),P(r),L.x<=0?C>D?($-=L.x,C+=L.x):L.y>=0&&W>=H&&(X=!1):($-=L.x,C+=L.x),L.y>=0?W=0&&(k>=Y||W>=H)){X=!1;break}P(s),B=($+=L.x)/y}else P(d),P(s),L.x>=0?k=0&&W>=H&&(X=!1):$+=L.x,L.y>=0?W0?b=L.y>0?g:l:L.x<0&&(C-=$,b=L.y>0?m:p),L.y<0&&(M-=B),this.cropped||(this.$cropBox.removeClass(v),this.cropped=!0,this.limited&&this.limitCropBox(!0,!0))}X&&(x.width=$,x.height=B,x.left=C,x.top=M,this.action=b,this.renderCropBox()),t.each(u,function(t,i){i.startX=i.endX,i.startY=i.endY})}},xt={crop:function(){this.ready&&!this.disabled&&(this.cropped||(this.cropped=!0,this.limitCropBox(!0,!0),this.options.modal&&this.$dragBox.addClass(x),this.$cropBox.removeClass(v)),this.setCropBoxData(this.initialCropBox))},reset:function(){this.ready&&!this.disabled&&(this.image=t.extend({},this.initialImage),this.canvas=t.extend({},this.initialCanvas),this.cropBox=t.extend({},this.initialCropBox),this.renderCanvas(),this.cropped&&this.renderCropBox())},clear:function(){this.cropped&&!this.disabled&&(t.extend(this.cropBox,{left:0,top:0,width:0,height:0}),this.cropped=!1,this.renderCropBox(),this.limitCanvas(!0,!0),this.renderCanvas(),this.$dragBox.removeClass(x),this.$cropBox.addClass(v))},replace:function(t,i){!this.disabled&&t&&(this.isImg&&this.$element.attr("src",t),i?(this.url=t,this.$clone.attr("src",t),this.ready&&this.$preview.find("img").add(this.$clone2).attr("src",t)):(this.isImg&&(this.replaced=!0),this.options.data=null,this.load(t)))},enable:function(){this.ready&&(this.disabled=!1,this.$cropper.removeClass(f))},disable:function(){this.ready&&(this.disabled=!0,this.$cropper.addClass(f))},destroy:function(){var t=this.$element;this.loaded?(this.isImg&&this.replaced&&t.attr("src",this.originalUrl),this.unbuild(),t.removeClass(v)):this.isImg?t.off(X,this.start):this.$clone&&this.$clone.remove(),t.removeData(e)},move:function(t,i){var e=this.canvas,a=e.left,n=e.top;this.moveTo(V(t)?t:a+Number(t),V(i)?i:n+Number(i))},moveTo:function(t,i){var e=this.canvas,a=!1;V(i)&&(i=t),t=Number(t),i=Number(i),this.ready&&!this.disabled&&this.options.movable&&(Z(t)&&(e.left=t,a=!0),Z(i)&&(e.top=i,a=!0),a&&this.renderCanvas(!0))},zoom:function(t,i){var e=this.canvas;t=(t=Number(t))<0?1/(1-t):1+t,this.zoomTo(e.width*t/e.naturalWidth,i)},zoomTo:function(i,e){var a,n,h,o,s=this.options,r=this.pointers,d=this.canvas,c=d.width,l=d.height,p=d.naturalWidth,g=d.naturalHeight;if((i=Number(i))>=0&&this.ready&&!this.disabled&&s.zoomable){var m=p*i,u=g*i,f=void 0;if(e&&(f=e.originalEvent),this.trigger(P,{originalEvent:f,oldRatio:c/p,ratio:m/p}).isDefaultPrevented())return;if(f){var v=this.$cropper.offset(),w=r&&J(r).length?(a=r,n=0,h=0,o=0,t.each(a,function(t,i){var e=i.startX,a=i.startY;n+=e,h+=a,o+=1}),{pageX:n/=o,pageY:h/=o}):{pageX:e.pageX||f.pageX||0,pageY:e.pageY||f.pageY||0};d.left-=(m-c)*((w.pageX-v.left-d.left)/c),d.top-=(u-l)*((w.pageY-v.top-d.top)/l)}else d.left-=(m-c)/2,d.top-=(u-l)/2;d.width=m,d.height=u,this.renderCanvas(!0)}},rotate:function(t){this.rotateTo((this.image.rotate||0)+Number(t))},rotateTo:function(t){Z(t=Number(t))&&this.ready&&!this.disabled&&this.options.rotatable&&(this.image.rotate=t%360,this.renderCanvas(!0,!0))},scaleX:function(t){var i=this.image.scaleY;this.scale(t,Z(i)?i:1)},scaleY:function(t){var i=this.image.scaleX;this.scale(Z(i)?i:1,t)},scale:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,e=this.image,a=!1;t=Number(t),i=Number(i),this.ready&&!this.disabled&&this.options.scalable&&(Z(t)&&(e.scaleX=t,a=!0),Z(i)&&(e.scaleY=i,a=!0),a&&this.renderCanvas(!0,!0))},getData:function(){var i=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.options,a=this.image,n=this.canvas,h=this.cropBox,o=void 0;if(this.ready&&this.cropped){o={x:h.left-n.left,y:h.top-n.top,width:h.width,height:h.height};var s=a.width/a.naturalWidth;t.each(o,function(t,e){e/=s,o[t]=i?Math.round(e):e})}else o={x:0,y:0,width:0,height:0};return e.rotatable&&(o.rotate=a.rotate||0),e.scalable&&(o.scaleX=a.scaleX||1,o.scaleY=a.scaleY||1),o},setData:function(i){var e=this.options,a=this.image,n=this.canvas,h={};if(t.isFunction(i)&&(i=i.call(this.element)),this.ready&&!this.disabled&&t.isPlainObject(i)){var o=!1;e.rotatable&&Z(i.rotate)&&i.rotate!==a.rotate&&(a.rotate=i.rotate,o=!0),e.scalable&&(Z(i.scaleX)&&i.scaleX!==a.scaleX&&(a.scaleX=i.scaleX,o=!0),Z(i.scaleY)&&i.scaleY!==a.scaleY&&(a.scaleY=i.scaleY,o=!0)),o&&this.renderCanvas(!0,!0);var s=a.width/a.naturalWidth;Z(i.x)&&(h.left=i.x*s+n.left),Z(i.y)&&(h.top=i.y*s+n.top),Z(i.width)&&(h.width=i.width*s),Z(i.height)&&(h.height=i.height*s),this.setCropBoxData(h)}},getContainerData:function(){return this.ready?t.extend({},this.container):{}},getImageData:function(){return this.loaded?t.extend({},this.image):{}},getCanvasData:function(){var i=this.canvas,e={};return this.ready&&t.each(["left","top","width","height","naturalWidth","naturalHeight"],function(t,a){e[a]=i[a]}),e},setCanvasData:function(i){var e=this.canvas,a=e.aspectRatio;t.isFunction(i)&&(i=i.call(this.$element)),this.ready&&!this.disabled&&t.isPlainObject(i)&&(Z(i.left)&&(e.left=i.left),Z(i.top)&&(e.top=i.top),Z(i.width)?(e.width=i.width,e.height=i.width/a):Z(i.height)&&(e.height=i.height,e.width=i.height*a),this.renderCanvas(!0))},getCropBoxData:function(){var t=this.cropBox;return this.ready&&this.cropped?{left:t.left,top:t.top,width:t.width,height:t.height}:{}},setCropBoxData:function(i){var e=this.cropBox,a=this.options.aspectRatio,n=void 0,h=void 0;t.isFunction(i)&&(i=i.call(this.$element)),this.ready&&this.cropped&&!this.disabled&&t.isPlainObject(i)&&(Z(i.left)&&(e.left=i.left),Z(i.top)&&(e.top=i.top),Z(i.width)&&i.width!==e.width&&(n=!0,e.width=i.width),Z(i.height)&&i.height!==e.height&&(h=!0,e.height=i.height),a&&(n?e.height=e.width/a:h&&(e.width=e.height*a)),this.renderCropBox())},getCroppedCanvas:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.ready||!window.HTMLCanvasElement)return null;var e,a,n,h,o,s,r,d,c,l,p,g,m,u,f,v,w,x,b,y,C,M,$,B,k,W,D,T,Y,H,X,O,E,N,R=this.canvas,z=(e=this.$clone[0],a=this.image,n=R,h=i,o=a.rotate,s=void 0===o?0:o,r=a.scaleX,d=void 0===r?1:r,c=a.scaleY,l=void 0===c?1:c,p=n.aspectRatio,g=n.naturalWidth,m=n.naturalHeight,u=h.fillColor,f=void 0===u?"transparent":u,v=h.imageSmoothingEnabled,w=void 0===v||v,x=h.imageSmoothingQuality,b=void 0===x?"low":x,y=h.maxWidth,C=void 0===y?1/0:y,M=h.maxHeight,$=void 0===M?1/0:M,B=h.minWidth,k=void 0===B?0:B,W=h.minHeight,D=void 0===W?0:W,T=document.createElement("canvas"),Y=T.getContext("2d"),H=ct({aspectRatio:p,width:C,height:$}),X=ct({aspectRatio:p,width:k,height:D},"cover"),O=Math.min(H.width,Math.max(X.width,g)),E=Math.min(H.height,Math.max(X.height,m)),N=[-O/2,-E/2,O,E],T.width=tt(O),T.height=tt(E),Y.fillStyle=f,Y.fillRect(0,0,O,E),Y.save(),Y.translate(O/2,E/2),Y.rotate(s*Math.PI/180),Y.scale(d,l),Y.imageSmoothingEnabled=w,Y.imageSmoothingQuality=b,Y.drawImage.apply(Y,[e].concat(Q(t.map(N,function(t){return Math.floor(tt(t))})))),Y.restore(),T);if(!this.cropped)return z;var L=this.getData(),P=L.x,I=L.y,U=L.width,A=L.height,F=z.width/Math.floor(R.naturalWidth);1!==F&&(P*=F,I*=F,U*=F,A*=F);var j=U/A,S=ct({aspectRatio:j,width:i.maxWidth||1/0,height:i.maxHeight||1/0}),q=ct({aspectRatio:j,width:i.minWidth||0,height:i.minHeight||0},"cover"),K=ct({aspectRatio:j,width:i.width||(1!==F?z.width:U),height:i.height||(1!==F?z.height:A)}),Z=K.width,V=K.height;Z=Math.min(S.width,Math.max(q.width,Z)),V=Math.min(S.height,Math.max(q.height,V));var G=document.createElement("canvas"),J=G.getContext("2d");G.width=tt(Z),G.height=tt(V),J.fillStyle=i.fillColor||"transparent",J.fillRect(0,0,Z,V);var _=i.imageSmoothingEnabled,it=void 0===_||_,et=i.imageSmoothingQuality;J.imageSmoothingEnabled=it,et&&(J.imageSmoothingQuality=et);var at=z.width,nt=z.height,ht=P,ot=I,st=void 0,rt=void 0,dt=void 0,lt=void 0,pt=void 0,gt=void 0;ht<=-U||ht>at?(ht=0,st=0,dt=0,pt=0):ht<=0?(dt=-ht,ht=0,pt=st=Math.min(at,U+ht)):ht<=at&&(dt=0,pt=st=Math.min(U,at-ht)),st<=0||ot<=-A||ot>nt?(ot=0,rt=0,lt=0,gt=0):ot<=0?(lt=-ot,ot=0,gt=rt=Math.min(nt,A+ot)):ot<=nt&&(lt=0,gt=rt=Math.min(A,nt-ot));var mt=[ht,ot,st,rt];if(pt>0&>>0){var ut=Z/U;mt.push(dt*ut,lt*ut,pt*ut,gt*ut)}return J.drawImage.apply(J,[z].concat(Q(t.map(mt,function(t){return Math.floor(tt(t))})))),G},setAspectRatio:function(t){var i=this.options;this.disabled||V(t)||(i.aspectRatio=Math.max(0,t)||NaN,this.ready&&(this.initCropBox(),this.cropped&&this.renderCropBox()))},setDragMode:function(t){var i=this.options,e=void 0,a=void 0;this.loaded&&!this.disabled&&(e=t===M,a=i.movable&&t===$,t=e||a?t:B,this.$dragBox.data(y,t).toggleClass(u,e).toggleClass(b,a),i.cropBoxMovable||this.$face.data(y,t).toggleClass(u,e).toggleClass(b,a))}},bt=function(){function i(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(S(this,i),!e||!F.test(e.tagName))throw new Error("The first argument is required and must be an or element.");this.element=e,this.$element=t(e),this.options=t.extend({},j,t.isPlainObject(a)&&a),this.completed=!1,this.cropped=!1,this.disabled=!1,this.isImg=!1,this.limited=!1,this.loaded=!1,this.ready=!1,this.replaced=!1,this.wheeling=!1,this.originalUrl="",this.canvas=null,this.cropBox=null,this.pointers={},this.init()}return q(i,[{key:"init",value:function(){var t=this.$element,i=void 0;if(t.is("img")){if(this.isImg=!0,i=t.attr("src")||"",this.originalUrl=i,!i)return;i=t.prop("src")}else t.is("canvas")&&window.HTMLCanvasElement&&(i=t[0].toDataURL());this.load(i)}},{key:"trigger",value:function(i,e){var a=t.Event(i,e);return this.$element.trigger(a),a}},{key:"load",value:function(i){var e=this;if(i){this.url=i,this.image={};var a=this.$element,n=this.options;if(n.checkOrientation&&window.ArrayBuffer)if(U.test(i))A.test(i)?this.read((h=i.replace(pt,""),o=atob(h),s=new ArrayBuffer(o.length),r=new Uint8Array(s),t.each(r,function(t){r[t]=o.charCodeAt(t)}),s)):this.clone();else{var h,o,s,r,d=new XMLHttpRequest;d.onerror=function(){e.clone()},d.onload=function(){e.read(d.response)},n.checkCrossOrigin&&at(i)&&!a.prop("crossOrigin")&&(i=nt(i)),d.open("get",i),d.responseType="arraybuffer",d.withCredentials="use-credentials"===a.prop("crossOrigin"),d.send()}else this.clone()}}},{key:"read",value:function(i){var e,a,n,h=this.options,o=this.image,s=gt(i),r=0,d=1,c=1;if(s>1){this.url=(e="image/jpeg",a=new Uint8Array(i),n="",t.each(a,function(t,i){n+=lt(i)}),"data:"+e+";base64,"+btoa(n));var l=function(t){var i=0,e=1,a=1;switch(t){case 2:e=-1;break;case 3:i=-180;break;case 4:a=-1;break;case 5:i=90,a=-1;break;case 6:i=90;break;case 7:i=90,e=-1;break;case 8:i=-90}return{rotate:i,scaleX:e,scaleY:a}}(s);r=l.rotate,d=l.scaleX,c=l.scaleY}h.rotatable&&(o.rotate=r),h.scalable&&(o.scaleX=d,o.scaleY=c),this.clone()}},{key:"clone",value:function(){var i=this.$element,e=this.options,a=this.url,n="",h=void 0;e.checkCrossOrigin&&at(a)&&((n=i.prop("crossOrigin"))?h=a:(n="anonymous",h=nt(a))),this.crossOrigin=n,this.crossOriginUrl=h;var o=document.createElement("img");n&&(o.crossOrigin=n),o.src=h||a;var s=t(o);this.$clone=s,this.isImg?this.element.complete?this.start():i.one(X,t.proxy(this.start,this)):s.one(X,t.proxy(this.start,this)).one(H,t.proxy(this.stop,this)).addClass(w).insertAfter(i)}},{key:"start",value:function(){var i=this,e=this.$clone,a=this.$element;this.isImg||(e.off(H,this.stop),a=e),function(t,i){if(!t.naturalWidth||st){var e=document.createElement("img");e.onload=function(){i(e.width,e.height)},e.src=t.src}else i(t.naturalWidth,t.naturalHeight)}(a[0],function(e,a){t.extend(i.image,{naturalWidth:e,naturalHeight:a,aspectRatio:e/a}),i.loaded=!0,i.build()})}},{key:"stop",value:function(){this.$clone.remove(),this.$clone=null}},{key:"build",value:function(){var i=this;if(this.loaded){this.ready&&this.unbuild();var n=this.$element,h=this.options,o=this.$clone,s=t('
'),r=s.find("."+e+"-crop-box"),d=r.find("."+e+"-face");this.$container=n.parent(),this.$cropper=s,this.$canvas=s.find("."+e+"-canvas").append(o),this.$dragBox=s.find("."+e+"-drag-box"),this.$cropBox=r,this.$viewBox=s.find("."+e+"-view-box"),this.$face=d,n.addClass(v).after(s),this.isImg||o.removeClass(w),this.initPreview(),this.bind(),h.aspectRatio=Math.max(0,h.aspectRatio)||NaN,h.viewMode=Math.max(0,Math.min(3,Math.round(h.viewMode)))||0,this.cropped=h.autoCrop,h.autoCrop?h.modal&&this.$dragBox.addClass(x):r.addClass(v),h.guides||r.find("."+e+"-dashed").addClass(v),h.center||r.find("."+e+"-center").addClass(v),h.cropBoxMovable&&d.addClass(b).data(y,a),h.highlight||d.addClass("cropper-invisible"),h.background&&s.addClass(e+"-bg"),h.cropBoxResizable||r.find("."+e+"-line,."+e+"-point").addClass(v),this.setDragMode(h.dragMode),this.render(),this.ready=!0,this.setData(h.data),this.completing=setTimeout(function(){t.isFunction(h.ready)&&n.one(R,h.ready),i.trigger(R),i.trigger(k,i.getData()),i.completed=!0},0)}}},{key:"unbuild",value:function(){this.ready&&(this.completed||clearTimeout(this.completing),this.ready=!1,this.completed=!1,this.initialImage=null,this.initialCanvas=null,this.initialCropBox=null,this.container=null,this.canvas=null,this.cropBox=null,this.unbind(),this.resetPreview(),this.$preview=null,this.$viewBox=null,this.$cropBox=null,this.$dragBox=null,this.$canvas=null,this.$container=null,this.$cropper.remove(),this.$cropper=null)}}],[{key:"setDefaults",value:function(i){t.extend(j,t.isPlainObject(i)&&i)}}]),i}();if(t.extend&&t.extend(bt.prototype,mt,ut,ft,vt,wt,xt),t.fn){var yt=t.fn.cropper;t.fn.cropper=function(i){for(var a=arguments.length,n=Array(a>1?a-1:0),h=1;h1?i-1:0),a=1;a0&&e.forEach(function(i){G(i)&&Object.keys(i).forEach(function(e){t[e]=i[e]})}),t},at=/\.\d*(?:0|9){12}\d*$/i;function nt(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e11;return at.test(t)?Math.round(t*i)/i:t}var ot=/^(?:width|height|left|top|marginLeft|marginTop)$/;function ht(t,i){var e=t.style;it(i,function(t,i){ot.test(i)&&K(t)&&(t+="px"),e[i]=t})}function rt(t,i){if(i)if(K(t.length))it(t,function(t){rt(t,i)});else if(t.classList)t.classList.add(i);else{var e=t.className.trim();e?e.indexOf(i)<0&&(t.className=e+" "+i):t.className=i}}function st(t,i){i&&(K(t.length)?it(t,function(t){st(t,i)}):t.classList?t.classList.remove(i):t.className.indexOf(i)>=0&&(t.className=t.className.replace(i,"")))}function ct(t,i,e){i&&(K(t.length)?it(t,function(t){ct(t,i,e)}):e?rt(t,i):st(t,i))}var dt=/([a-z\d])([A-Z])/g;function lt(t){return t.replace(dt,"$1-$2").toLowerCase()}function pt(t,i){return G(t[i])?t[i]:t.dataset?t.dataset[i]:t.getAttribute("data-"+lt(i))}function mt(t,i,e){G(e)?t[i]=e:t.dataset?t.dataset[i]=e:t.setAttribute("data-"+lt(i),e)}function ut(t,i){if(G(t[i]))try{delete t[i]}catch(e){t[i]=void 0}else if(t.dataset)try{delete t.dataset[i]}catch(e){t.dataset[i]=void 0}else t.removeAttribute("data-"+lt(i))}var gt=/\s\s*/;function ft(t,i,e){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};it(i.trim().split(gt),function(i){t.removeEventListener(i,e,a)})}function vt(t,i,e){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(a.once){var n=e;e=function(){for(var o=arguments.length,h=Array(o),r=0;r1&&void 0!==arguments[1]?arguments[1]:"contain",o=function(t){return kt(t)&&t>0};if(o(a)&&o(e)){var h=e*i;"contain"===n&&h>a||"cover"===n&&h=8&&(o=s+d)}}}if(o){var l=i.getUint16(o,a),p=void 0,m=void 0;for(m=0;mt.width?3===e?r=t.height*h:s=t.width/h:3===e?s=t.width/h:r=t.height*h;var c={aspectRatio:h,naturalWidth:n,naturalHeight:o,width:r,height:s};c.left=(t.width-r)/2,c.top=(t.height-s)/2,c.oldLeft=c.left,c.oldTop=c.top,this.canvasData=c,this.limited=1===e||2===e,this.limitCanvas(!0,!0),this.initialImageData=et({},i),this.initialCanvasData=et({},c)},limitCanvas:function(t,i){var e=this.options,a=this.containerData,n=this.canvasData,o=this.cropBoxData,h=e.viewMode,r=n.aspectRatio,s=this.cropped&&o;if(t){var c=Number(e.minCanvasWidth)||0,d=Number(e.minCanvasHeight)||0;h>1?(c=Math.max(c,a.width),d=Math.max(d,a.height),3===h&&(d*r>c?c=d*r:d=c/r)):h>0&&(c?c=Math.max(c,s?o.width:0):d?d=Math.max(d,s?o.height:0):s&&(c=o.width,(d=o.height)*r>c?c=d*r:d=c/r));var l=Tt({aspectRatio:r,width:c,height:d});c=l.width,d=l.height,n.minWidth=c,n.minHeight=d,n.maxWidth=1/0,n.maxHeight=1/0}if(i)if(h){var p=a.width-n.width,m=a.height-n.height;n.minLeft=Math.min(0,p),n.minTop=Math.min(0,m),n.maxLeft=Math.max(0,p),n.maxTop=Math.max(0,m),s&&this.limited&&(n.minLeft=Math.min(o.left,o.left+(o.width-n.width)),n.minTop=Math.min(o.top,o.top+(o.height-n.height)),n.maxLeft=o.left,n.maxTop=o.top,2===h&&(n.width>=a.width&&(n.minLeft=Math.min(0,p),n.maxLeft=Math.max(0,p)),n.height>=a.height&&(n.minTop=Math.min(0,m),n.maxTop=Math.max(0,m))))}else n.minLeft=-n.width,n.minTop=-n.height,n.maxLeft=a.width,n.maxTop=a.height},renderCanvas:function(t,i){var e=this.canvasData,a=this.imageData;if(i){var n=function(t){var i=t.width,e=t.height,a=t.degree;if(90==(a=Math.abs(a)%180))return{width:e,height:i};var n=a%90*Math.PI/180,o=Math.sin(n),h=Math.cos(n),r=i*h+e*o,s=i*o+e*h;return a>90?{width:s,height:r}:{width:r,height:s}}({width:a.naturalWidth*Math.abs(a.scaleX||1),height:a.naturalHeight*Math.abs(a.scaleY||1),degree:a.rotate||0}),o=n.width,h=n.height,r=e.width*(o/e.naturalWidth),s=e.height*(h/e.naturalHeight);e.left-=(r-e.width)/2,e.top-=(s-e.height)/2,e.width=r,e.height=s,e.aspectRatio=o/h,e.naturalWidth=o,e.naturalHeight=h,this.limitCanvas(!0,!1)}(e.width>e.maxWidth||e.widthe.maxHeight||e.heighti.width?n.height=n.width/e:n.width=n.height*e),this.cropBoxData=n,this.limitCropBox(!0,!0),n.width=Math.min(Math.max(n.width,n.minWidth),n.maxWidth),n.height=Math.min(Math.max(n.height,n.minHeight),n.maxHeight),n.width=Math.max(n.minWidth,n.width*a),n.height=Math.max(n.minHeight,n.height*a),n.left=i.left+(i.width-n.width)/2,n.top=i.top+(i.height-n.height)/2,n.oldLeft=n.left,n.oldTop=n.top,this.initialCropBoxData=et({},n)},limitCropBox:function(t,i){var e=this.options,a=this.containerData,n=this.canvasData,o=this.cropBoxData,h=this.limited,r=e.aspectRatio;if(t){var s=Number(e.minCropBoxWidth)||0,c=Number(e.minCropBoxHeight)||0,d=Math.min(a.width,h?n.width:a.width),l=Math.min(a.height,h?n.height:a.height);s=Math.min(s,a.width),c=Math.min(c,a.height),r&&(s&&c?c*r>s?c=s/r:s=c*r:s?c=s/r:c&&(s=c*r),l*r>d?l=d/r:d=l*r),o.minWidth=Math.min(s,d),o.minHeight=Math.min(c,l),o.maxWidth=d,o.maxHeight=l}i&&(h?(o.minLeft=Math.max(0,n.left),o.minTop=Math.max(0,n.top),o.maxLeft=Math.min(a.width,n.left+n.width)-o.width,o.maxTop=Math.min(a.height,n.top+n.height)-o.height):(o.minLeft=0,o.minTop=0,o.maxLeft=a.width-o.width,o.maxTop=a.height-o.height))},renderCropBox:function(){var t=this.options,i=this.containerData,e=this.cropBoxData;(e.width>e.maxWidth||e.widthe.maxHeight||e.height=i.width&&e.height>=i.height?o:a),ht(this.cropBox,et({width:e.width,height:e.height},Dt({translateX:e.left,translateY:e.top}))),this.cropped&&this.limited&&this.limitCanvas(!0,!0),this.disabled||this.output()},output:function(){this.preview(),wt(this.element,k,this.getData())}},zt={initPreview:function(){var t=this.crossOrigin,i=this.options.preview,e=t?this.crossOriginUrl:this.url,a=document.createElement("img");if(t&&(a.crossOrigin=t),a.src=e,this.viewBox.appendChild(a),this.viewBoxImage=a,i){var n=i;"string"==typeof i?n=this.element.ownerDocument.querySelectorAll(i):i.querySelector&&(n=[i]),this.previews=n,it(n,function(i){var a=document.createElement("img");mt(i,M,{width:i.offsetWidth,height:i.offsetHeight,html:i.innerHTML}),t&&(a.crossOrigin=t),a.src=e,a.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;"',i.innerHTML="",i.appendChild(a)})}},resetPreview:function(){it(this.previews,function(t){var i=pt(t,M);ht(t,{width:i.width,height:i.height}),t.innerHTML=i.html,ut(t,M)})},preview:function(){var t=this.imageData,i=this.canvasData,e=this.cropBoxData,a=e.width,n=e.height,o=t.width,h=t.height,r=e.left-i.left-t.left,s=e.top-i.top-t.top;this.cropped&&!this.disabled&&(ht(this.viewBoxImage,et({width:o,height:h},Dt(et({translateX:-r,translateY:-s},t)))),it(this.previews,function(i){var e=pt(i,M),c=e.width,d=e.height,l=c,p=d,m=1;a&&(p=n*(m=c/a)),n&&p>d&&(l=a*(m=d/n),p=d),ht(i,{width:l,height:p}),ht(i.getElementsByTagName("img")[0],et({width:o*m,height:h*m},Dt(et({translateX:-r*m,translateY:-s*m},t))))}))}},Lt={bind:function(){var t=this.element,i=this.options,e=this.cropper;tt(i.cropstart)&&vt(t,N,i.cropstart),tt(i.cropmove)&&vt(t,W,i.cropmove),tt(i.cropend)&&vt(t,T,i.cropend),tt(i.crop)&&vt(t,k,i.crop),tt(i.zoom)&&vt(t,S,i.zoom),vt(e,z,this.onCropStart=this.cropStart.bind(this)),i.zoomable&&i.zoomOnWheel&&vt(e,R,this.onWheel=this.wheel.bind(this)),i.toggleDragModeOnDblclick&&vt(e,H,this.onDblclick=this.dblclick.bind(this)),vt(t.ownerDocument,L,this.onCropMove=this.cropMove.bind(this)),vt(t.ownerDocument,Y,this.onCropEnd=this.cropEnd.bind(this)),i.responsive&&vt(window,X,this.onResize=this.resize.bind(this))},unbind:function(){var t=this.element,i=this.options,e=this.cropper;tt(i.cropstart)&&ft(t,N,i.cropstart),tt(i.cropmove)&&ft(t,W,i.cropmove),tt(i.cropend)&&ft(t,T,i.cropend),tt(i.crop)&&ft(t,k,i.crop),tt(i.zoom)&&ft(t,S,i.zoom),ft(e,z,this.onCropStart),i.zoomable&&i.zoomOnWheel&&ft(e,R,this.onWheel),i.toggleDragModeOnDblclick&&ft(e,H,this.onDblclick),ft(t.ownerDocument,L,this.onCropMove),ft(t.ownerDocument,Y,this.onCropEnd),i.responsive&&ft(window,X,this.onResize)}},Yt={resize:function(){var t=this.options,i=this.container,e=this.containerData,a=Number(t.minContainerWidth)||200,n=Number(t.minContainerHeight)||100;if(!(this.disabled||e.width<=a||e.height<=n)){var o=i.offsetWidth/e.width;if(1!==o||i.offsetHeight!==e.height){var h=void 0,r=void 0;t.restore&&(h=this.getCanvasData(),r=this.getCropBoxData()),this.render(),t.restore&&(this.setCanvasData(it(h,function(t,i){h[i]=t*o})),this.setCropBoxData(it(r,function(t,i){r[i]=t*o})))}}},dblclick:function(){var t,i;this.disabled||this.options.dragMode===B||this.setDragMode((t=this.dragBox,i=g,(t.classList?t.classList.contains(i):t.className.indexOf(i)>-1)?D:C))},wheel:function(t){var i=this,e=Number(this.options.wheelZoomRatio)||.1,a=1;this.disabled||(t.preventDefault(),this.wheeling||(this.wheeling=!0,setTimeout(function(){i.wheeling=!1},50),t.deltaY?a=t.deltaY>0?1:-1:t.wheelDelta?a=-t.wheelDelta/120:t.detail&&(a=t.detail>0?1:-1),this.zoom(-a*e,t)))},cropStart:function(t){if(!this.disabled){var i=this.options,e=this.pointers,a=void 0;t.changedTouches?it(t.changedTouches,function(t){e[t.identifier]=Bt(t)}):e[t.pointerId||0]=Bt(t),a=Object.keys(e).length>1&&i.zoomable&&i.zoomOnTouch?h:pt(t.target,y),A.test(a)&&!1!==wt(this.element,N,{originalEvent:t,action:a})&&(t.preventDefault(),this.action=a,this.cropping=!1,a===n&&(this.cropping=!0,rt(this.dragBox,b)))}},cropMove:function(t){var i=this.action;if(!this.disabled&&i){var e=this.pointers;t.preventDefault(),!1!==wt(this.element,W,{originalEvent:t,action:i})&&(t.changedTouches?it(t.changedTouches,function(t){et(e[t.identifier],Bt(t,!0))}):et(e[t.pointerId||0],Bt(t,!0)),this.change(t))}},cropEnd:function(t){if(!this.disabled){var i=this.action,e=this.pointers;t.changedTouches?it(t.changedTouches,function(t){delete e[t.identifier]}):delete e[t.pointerId||0],i&&(t.preventDefault(),Object.keys(e).length||(this.action=""),this.cropping&&(this.cropping=!1,ct(this.dragBox,b,this.cropped&&this.options.modal)),wt(this.element,T,{originalEvent:t,action:i}))}}},Ot={change:function(t){var i=this.options,e=this.canvasData,g=this.containerData,f=this.cropBoxData,w=this.pointers,b=this.action,x=i.aspectRatio,y=f.left,M=f.top,C=f.width,D=f.height,B=y+C,k=M+D,T=0,W=0,N=g.width,H=g.height,E=!0,z=void 0;!x&&t.shiftKey&&(x=C&&D?C/D:1),this.limited&&(T=f.minLeft,W=f.minTop,N=T+Math.min(g.width,e.width,e.left+e.width),H=W+Math.min(g.height,e.height,e.top+e.height));var L,Y,O,X=w[Object.keys(w)[0]],R={x:X.endX-X.startX,y:X.endY-X.startY},S=function(t){switch(t){case r:B+R.x>N&&(R.x=N-B);break;case s:y+R.xH&&(R.y=H-k)}};switch(b){case a:y+=R.x,M+=R.y;break;case r:if(R.x>=0&&(B>=N||x&&(M<=W||k>=H))){E=!1;break}S(r),C+=R.x,x&&(D=C/x,M-=R.x/x/2),C<0&&(b=s,C=0);break;case d:if(R.y<=0&&(M<=W||x&&(y<=T||B>=N))){E=!1;break}S(d),D-=R.y,M+=R.y,x&&(C=D*x,y+=R.y*x/2),D<0&&(b=c,D=0);break;case s:if(R.x<=0&&(y<=T||x&&(M<=W||k>=H))){E=!1;break}S(s),C-=R.x,y+=R.x,x&&(D=C/x,M+=R.x/x/2),C<0&&(b=r,C=0);break;case c:if(R.y>=0&&(k>=H||x&&(y<=T||B>=N))){E=!1;break}S(c),D+=R.y,x&&(C=D*x,y-=R.y*x/2),D<0&&(b=d,D=0);break;case l:if(x){if(R.y<=0&&(M<=W||B>=N)){E=!1;break}S(d),D-=R.y,M+=R.y,C=D*x}else S(d),S(r),R.x>=0?BW&&(D-=R.y,M+=R.y):(D-=R.y,M+=R.y);C<0&&D<0?(b=u,D=0,C=0):C<0?(b=p,C=0):D<0&&(b=m,D=0);break;case p:if(x){if(R.y<=0&&(M<=W||y<=T)){E=!1;break}S(d),D-=R.y,M+=R.y,C=D*x,y+=R.y*x}else S(d),S(s),R.x<=0?y>T?(C-=R.x,y+=R.x):R.y<=0&&M<=W&&(E=!1):(C-=R.x,y+=R.x),R.y<=0?M>W&&(D-=R.y,M+=R.y):(D-=R.y,M+=R.y);C<0&&D<0?(b=m,D=0,C=0):C<0?(b=l,C=0):D<0&&(b=u,D=0);break;case u:if(x){if(R.x<=0&&(y<=T||k>=H)){E=!1;break}S(s),C-=R.x,y+=R.x,D=C/x}else S(c),S(s),R.x<=0?y>T?(C-=R.x,y+=R.x):R.y>=0&&k>=H&&(E=!1):(C-=R.x,y+=R.x),R.y>=0?k=0&&(B>=N||k>=H)){E=!1;break}S(r),D=(C+=R.x)/x}else S(c),S(r),R.x>=0?B=0&&k>=H&&(E=!1):C+=R.x,R.y>=0?k0?b=R.y>0?m:l:R.x<0&&(y-=C,b=R.y>0?u:p),R.y<0&&(M-=D),this.cropped||(st(this.cropBox,v),this.cropped=!0,this.limited&&this.limitCropBox(!0,!0))}E&&(f.width=C,f.height=D,f.left=y,f.top=M,this.action=b,this.renderCropBox()),it(w,function(t){t.startX=t.endX,t.startY=t.endY})}},Xt={crop:function(){return!this.ready||this.cropped||this.disabled||(this.cropped=!0,this.limitCropBox(!0,!0),this.options.modal&&rt(this.dragBox,b),st(this.cropBox,v),this.setCropBoxData(this.initialCropBoxData)),this},reset:function(){return this.ready&&!this.disabled&&(this.imageData=et({},this.initialImageData),this.canvasData=et({},this.initialCanvasData),this.cropBoxData=et({},this.initialCropBoxData),this.renderCanvas(),this.cropped&&this.renderCropBox()),this},clear:function(){return this.cropped&&!this.disabled&&(et(this.cropBoxData,{left:0,top:0,width:0,height:0}),this.cropped=!1,this.renderCropBox(),this.limitCanvas(!0,!0),this.renderCanvas(),st(this.dragBox,b),rt(this.cropBox,v)),this},replace:function(t){var i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!this.disabled&&t&&(this.isImg&&(this.element.src=t),i?(this.url=t,this.image.src=t,this.ready&&(this.viewBoxImage.src=t,it(this.previews,function(i){i.getElementsByTagName("img")[0].src=t}))):(this.isImg&&(this.replaced=!0),this.options.data=null,this.uncreate(),this.load(t))),this},enable:function(){return this.ready&&this.disabled&&(this.disabled=!1,st(this.cropper,f)),this},disable:function(){return this.ready&&!this.disabled&&(this.disabled=!0,rt(this.cropper,f)),this},destroy:function(){var t=this.element;return pt(t,e)?(this.isImg&&this.replaced&&(t.src=this.originalUrl),this.uncreate(),ut(t,e),this):this},move:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,e=this.canvasData,a=e.left,n=e.top;return this.moveTo(V(t)?t:a+Number(t),V(i)?i:n+Number(i))},moveTo:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,e=this.canvasData,a=!1;return t=Number(t),i=Number(i),this.ready&&!this.disabled&&this.options.movable&&(K(t)&&(e.left=t,a=!0),K(i)&&(e.top=i,a=!0),a&&this.renderCanvas(!0)),this},zoom:function(t,i){var e=this.canvasData;return t=(t=Number(t))<0?1/(1-t):1+t,this.zoomTo(e.width*t/e.naturalWidth,null,i)},zoomTo:function(t,i,e){var a,n,o,h=this.options,r=this.canvasData,s=r.width,c=r.height,d=r.naturalWidth,l=r.naturalHeight;if((t=Number(t))>=0&&this.ready&&!this.disabled&&h.zoomable){var p=d*t,m=l*t;if(!1===wt(this.element,S,{originalEvent:e,oldRatio:s/d,ratio:p/d}))return this;if(e){var u=this.pointers,g=bt(this.cropper),f=u&&Object.keys(u).length?(a=0,n=0,o=0,it(u,function(t){var i=t.startX,e=t.startY;a+=i,n+=e,o+=1}),{pageX:a/=o,pageY:n/=o}):{pageX:e.pageX,pageY:e.pageY};r.left-=(p-s)*((f.pageX-g.left-r.left)/s),r.top-=(m-c)*((f.pageY-g.top-r.top)/c)}else _(i)&&K(i.x)&&K(i.y)?(r.left-=(p-s)*((i.x-r.left)/s),r.top-=(m-c)*((i.y-r.top)/c)):(r.left-=(p-s)/2,r.top-=(m-c)/2);r.width=p,r.height=m,this.renderCanvas(!0)}return this},rotate:function(t){return this.rotateTo((this.imageData.rotate||0)+Number(t))},rotateTo:function(t){return K(t=Number(t))&&this.ready&&!this.disabled&&this.options.rotatable&&(this.imageData.rotate=t%360,this.renderCanvas(!0,!0)),this},scaleX:function(t){var i=this.imageData.scaleY;return this.scale(t,K(i)?i:1)},scaleY:function(t){var i=this.imageData.scaleX;return this.scale(K(i)?i:1,t)},scale:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,e=this.imageData,a=!1;return t=Number(t),i=Number(i),this.ready&&!this.disabled&&this.options.scalable&&(K(t)&&(e.scaleX=t,a=!0),K(i)&&(e.scaleY=i,a=!0),a&&this.renderCanvas(!0,!0)),this},getData:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=this.options,e=this.imageData,a=this.canvasData,n=this.cropBoxData,o=void 0;if(this.ready&&this.cropped){o={x:n.left-a.left,y:n.top-a.top,width:n.width,height:n.height};var h=e.width/e.naturalWidth;it(o,function(i,e){i/=h,o[e]=t?Math.round(i):i})}else o={x:0,y:0,width:0,height:0};return i.rotatable&&(o.rotate=e.rotate||0),i.scalable&&(o.scaleX=e.scaleX||1,o.scaleY=e.scaleY||1),o},setData:function(t){var i=this.options,e=this.imageData,a=this.canvasData,n={};if(this.ready&&!this.disabled&&_(t)){var o=!1;i.rotatable&&K(t.rotate)&&t.rotate!==e.rotate&&(e.rotate=t.rotate,o=!0),i.scalable&&(K(t.scaleX)&&t.scaleX!==e.scaleX&&(e.scaleX=t.scaleX,o=!0),K(t.scaleY)&&t.scaleY!==e.scaleY&&(e.scaleY=t.scaleY,o=!0)),o&&this.renderCanvas(!0,!0);var h=e.width/e.naturalWidth;K(t.x)&&(n.left=t.x*h+a.left),K(t.y)&&(n.top=t.y*h+a.top),K(t.width)&&(n.width=t.width*h),K(t.height)&&(n.height=t.height*h),this.setCropBoxData(n)}return this},getContainerData:function(){return this.ready?et({},this.containerData):{}},getImageData:function(){return this.sized?et({},this.imageData):{}},getCanvasData:function(){var t=this.canvasData,i={};return this.ready&&it(["left","top","width","height","naturalWidth","naturalHeight"],function(e){i[e]=t[e]}),i},setCanvasData:function(t){var i=this.canvasData,e=i.aspectRatio;return this.ready&&!this.disabled&&_(t)&&(K(t.left)&&(i.left=t.left),K(t.top)&&(i.top=t.top),K(t.width)?(i.width=t.width,i.height=t.width/e):K(t.height)&&(i.height=t.height,i.width=t.height*e),this.renderCanvas(!0)),this},getCropBoxData:function(){var t=this.cropBoxData,i=void 0;return this.ready&&this.cropped&&(i={left:t.left,top:t.top,width:t.width,height:t.height}),i||{}},setCropBoxData:function(t){var i=this.cropBoxData,e=this.options.aspectRatio,a=void 0,n=void 0;return this.ready&&this.cropped&&!this.disabled&&_(t)&&(K(t.left)&&(i.left=t.left),K(t.top)&&(i.top=t.top),K(t.width)&&t.width!==i.width&&(a=!0,i.width=t.width),K(t.height)&&t.height!==i.height&&(n=!0,i.height=t.height),e&&(a?i.height=i.width/e:n&&(i.width=i.height*e)),this.renderCropBox()),this},getCroppedCanvas:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.ready||!window.HTMLCanvasElement)return null;var i,e,a,n,o,h,r,s,c,d,l,p,m,u,g,f,v,w,b,x,y,M,C,D,B,k,T,W,N,H,E,z,L,Y,O=this.canvasData,X=(i=this.image,e=this.imageData,a=O,n=t,o=e.rotate,h=void 0===o?0:o,r=e.scaleX,s=void 0===r?1:r,c=e.scaleY,d=void 0===c?1:c,l=a.aspectRatio,p=a.naturalWidth,m=a.naturalHeight,u=n.fillColor,g=void 0===u?"transparent":u,f=n.imageSmoothingEnabled,v=void 0===f||f,w=n.imageSmoothingQuality,b=void 0===w?"low":w,x=n.maxWidth,y=void 0===x?1/0:x,M=n.maxHeight,C=void 0===M?1/0:M,D=n.minWidth,B=void 0===D?0:D,k=n.minHeight,T=void 0===k?0:k,W=document.createElement("canvas"),N=W.getContext("2d"),H=Tt({aspectRatio:l,width:y,height:C}),E=Tt({aspectRatio:l,width:B,height:T},"cover"),z=Math.min(H.width,Math.max(E.width,p)),L=Math.min(H.height,Math.max(E.height,m)),Y=[-z/2,-L/2,z,L],W.width=nt(z),W.height=nt(L),N.fillStyle=g,N.fillRect(0,0,z,L),N.save(),N.translate(z/2,L/2),N.rotate(h*Math.PI/180),N.scale(s,d),N.imageSmoothingEnabled=v,N.imageSmoothingQuality=b,N.drawImage.apply(N,[i].concat(F(Y.map(function(t){return Math.floor(nt(t))})))),N.restore(),W);if(!this.cropped)return X;var R=this.getData(),S=R.x,A=R.y,I=R.width,U=R.height,j=X.width/Math.floor(O.naturalWidth);1!==j&&(S*=j,A*=j,I*=j,U*=j);var P=I/U,q=Tt({aspectRatio:P,width:t.maxWidth||1/0,height:t.maxHeight||1/0}),$=Tt({aspectRatio:P,width:t.minWidth||0,height:t.minHeight||0},"cover"),Q=Tt({aspectRatio:P,width:t.width||(1!==j?X.width:I),height:t.height||(1!==j?X.height:U)}),Z=Q.width,K=Q.height;Z=Math.min(q.width,Math.max($.width,Z)),K=Math.min(q.height,Math.max($.height,K));var V=document.createElement("canvas"),G=V.getContext("2d");V.width=nt(Z),V.height=nt(K),G.fillStyle=t.fillColor||"transparent",G.fillRect(0,0,Z,K);var J=t.imageSmoothingEnabled,_=void 0===J||J,tt=t.imageSmoothingQuality;G.imageSmoothingEnabled=_,tt&&(G.imageSmoothingQuality=tt);var it=X.width,et=X.height,at=S,ot=A,ht=void 0,rt=void 0,st=void 0,ct=void 0,dt=void 0,lt=void 0;at<=-I||at>it?(at=0,ht=0,st=0,dt=0):at<=0?(st=-at,at=0,dt=ht=Math.min(it,I+at)):at<=it&&(st=0,dt=ht=Math.min(I,it-at)),ht<=0||ot<=-U||ot>et?(ot=0,rt=0,ct=0,lt=0):ot<=0?(ct=-ot,ot=0,lt=rt=Math.min(et,U+ot)):ot<=et&&(ct=0,lt=rt=Math.min(U,et-ot));var pt=[at,ot,ht,rt];if(dt>0&<>0){var mt=Z/I;pt.push(st*mt,ct*mt,dt*mt,lt*mt)}return G.drawImage.apply(G,[X].concat(F(pt.map(function(t){return Math.floor(nt(t))})))),V},setAspectRatio:function(t){var i=this.options;return this.disabled||V(t)||(i.aspectRatio=Math.max(0,t)||NaN,this.ready&&(this.initCropBox(),this.cropped&&this.renderCropBox())),this},setDragMode:function(t){var i=this.options,e=this.dragBox,a=this.face;if(this.ready&&!this.disabled){var n=t===C,o=i.movable&&t===D;t=n||o?t:B,i.dragMode=t,mt(e,y,t),ct(e,g,n),ct(e,x,o),i.cropBoxMovable||(mt(a,y,t),ct(a,g,n),ct(a,x,o))}return this}},Rt=i.Cropper,St=function(){function t(i){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if($(this,t),!i||!j.test(i.tagName))throw new Error("The first argument is required and must be an or element.");this.element=i,this.options=et({},P,_(e)&&e),this.cropped=!1,this.disabled=!1,this.pointers={},this.ready=!1,this.reloading=!1,this.replaced=!1,this.sized=!1,this.sizing=!1,this.init()}return Q(t,[{key:"init",value:function(){var t=this.element,i=t.tagName.toLowerCase(),a=void 0;if(!pt(t,e)){if(mt(t,e,this),"img"===i){if(this.isImg=!0,a=t.getAttribute("src")||"",this.originalUrl=a,!a)return;a=t.src}else"canvas"===i&&window.HTMLCanvasElement&&(a=t.toDataURL());this.load(a)}}},{key:"load",value:function(t){var i=this;if(t){this.url=t,this.imageData={};var e=this.element,a=this.options;if(a.checkOrientation&&window.ArrayBuffer)if(I.test(t))U.test(t)?this.read((n=t.replace(Nt,""),o=atob(n),h=new ArrayBuffer(o.length),it(r=new Uint8Array(h),function(t,i){r[i]=o.charCodeAt(i)}),h)):this.clone();else{var n,o,h,r,s=new XMLHttpRequest;this.reloading=!0,this.xhr=s;var c=function(){i.reloading=!1,i.xhr=null};s.ontimeout=c,s.onabort=c,s.onerror=function(){c(),i.clone()},s.onload=function(){c(),i.read(s.response)},a.checkCrossOrigin&&Mt(t)&&e.crossOrigin&&(t=Ct(t)),s.open("get",t),s.responseType="arraybuffer",s.withCredentials="use-credentials"===e.crossOrigin,s.send()}else this.clone()}}},{key:"read",value:function(t){var i,e,a,n=this.options,o=this.imageData,h=Ht(t),r=0,s=1,c=1;if(h>1){this.url=(i="image/jpeg",e=new Uint8Array(t),a="",it(e,function(t){a+=Wt(t)}),"data:"+i+";base64,"+btoa(a));var d=function(t){var i=0,e=1,a=1;switch(t){case 2:e=-1;break;case 3:i=-180;break;case 4:a=-1;break;case 5:i=90,a=-1;break;case 6:i=90;break;case 7:i=90,e=-1;break;case 8:i=-90}return{rotate:i,scaleX:e,scaleY:a}}(h);r=d.rotate,s=d.scaleX,c=d.scaleY}n.rotatable&&(o.rotate=r),n.scalable&&(o.scaleX=s,o.scaleY=c),this.clone()}},{key:"clone",value:function(){var t=this.element,i=this.url,e=void 0,a=void 0;this.options.checkCrossOrigin&&Mt(i)&&((e=t.crossOrigin)?a=i:(e="anonymous",a=Ct(i))),this.crossOrigin=e,this.crossOriginUrl=a;var n=document.createElement("img");e&&(n.crossOrigin=e),n.src=a||i;var o=this.start.bind(this),h=this.stop.bind(this);this.image=n,this.onStart=o,this.onStop=h,this.isImg?t.complete?this.timeout=setTimeout(o,0):vt(t,E,o,{once:!0}):(n.onload=o,n.onerror=h,rt(n,w),t.parentNode.insertBefore(n,t.nextSibling))}},{key:"start",value:function(t){var e=this,a=this.isImg?this.element:this.image;t&&(a.onload=null,a.onerror=null),this.sizing=!0;var n=i.navigator&&/(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(i.navigator.userAgent),o=function(t,i){et(e.imageData,{naturalWidth:t,naturalHeight:i,aspectRatio:t/i}),e.sizing=!1,e.sized=!0,e.build()};if(!a.naturalWidth||n){var h=document.createElement("img"),r=document.body||document.documentElement;this.sizingImage=h,h.onload=function(){o(h.width,h.height),n||r.removeChild(h)},h.src=a.src,n||(h.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;",r.appendChild(h))}else o(a.naturalWidth,a.naturalHeight)}},{key:"stop",value:function(){var t=this.image;t.onload=null,t.onerror=null,t.parentNode.removeChild(t),this.image=null}},{key:"build",value:function(){if(this.sized&&!this.ready){var t=this.element,i=this.options,n=this.image,o=t.parentNode,h=document.createElement("div");h.innerHTML='
';var r=h.querySelector("."+e+"-container"),s=r.querySelector("."+e+"-canvas"),c=r.querySelector("."+e+"-drag-box"),d=r.querySelector("."+e+"-crop-box"),l=d.querySelector("."+e+"-face");this.container=o,this.cropper=r,this.canvas=s,this.dragBox=c,this.cropBox=d,this.viewBox=r.querySelector("."+e+"-view-box"),this.face=l,s.appendChild(n),rt(t,v),o.insertBefore(r,t.nextSibling),this.isImg||st(n,w),this.initPreview(),this.bind(),i.aspectRatio=Math.max(0,i.aspectRatio)||NaN,i.viewMode=Math.max(0,Math.min(3,Math.round(i.viewMode)))||0,rt(d,v),i.guides||rt(d.getElementsByClassName(e+"-dashed"),v),i.center||rt(d.getElementsByClassName(e+"-center"),v),i.background&&rt(r,e+"-bg"),i.highlight||rt(l,"cropper-invisible"),i.cropBoxMovable&&(rt(l,x),mt(l,y,a)),i.cropBoxResizable||(rt(d.getElementsByClassName(e+"-line"),v),rt(d.getElementsByClassName(e+"-point"),v)),this.render(),this.ready=!0,this.setDragMode(i.dragMode),i.autoCrop&&this.crop(),this.setData(i.data),tt(i.ready)&&vt(t,O,i.ready,{once:!0}),wt(t,O)}}},{key:"unbuild",value:function(){this.ready&&(this.ready=!1,this.unbind(),this.resetPreview(),this.cropper.parentNode.removeChild(this.cropper),st(this.element,v))}},{key:"uncreate",value:function(){var t=this.element;this.ready?(this.unbuild(),this.ready=!1,this.cropped=!1):this.sizing?(this.sizingImage.onload=null,this.sizing=!1,this.sized=!1):this.reloading?this.xhr.abort():this.isImg?t.complete?clearTimeout(this.timeout):ft(t,E,this.onStart):this.image&&this.stop()}}],[{key:"noConflict",value:function(){return window.Cropper=Rt,t}},{key:"setDefaults",value:function(t){et(P,_(t)&&t)}}]),t}();if(et(St.prototype,Et,zt,Lt,Yt,Ot,Xt),t.fn){var At=t.fn.cropper,It="cropper";t.fn.cropper=function(i){for(var e=arguments.length,a=Array(e>1?e-1:0),n=1;njnTuKT6l$OgV&-E8005*1xd}UA^*@7= z{$y6`rI$YelPAR72LM<&{~1(3RyHpHFyD37)`mizJbXQToIE^*^|ZBxJ-s~~oZTJ* zK;S6GIKV80%%eU}>8uoTKKmSc^E5``6Zm#*03L29eg*4t^Ze6SIkjeW-r6h|?V6$&2|efHExl zy2`Lnq9LU93qFFH8!}BR%)Z#&>`2!J02?%@z%bv+8;4YHJpgLJlOTPbqhscGR2@{@ z6cA1ZrbRf2EL2G_pi}x@Cl}Dk3sf3cJzxe>0l*Cvq9p>9f`HW>J#{)@xFls93=HR= zEnx)WsesIjy634iJ^{8Sk6@D2P0c_qRzpOZwyAA7$Y4@wFRC#KrlUMF*lAX{Rm!*mc80ME%_6)N%cD zYFdEZpr15qv#>BkDTC5VhN1G0jDX7mBJWPt_AbgAW9tS+M$MEP9C)Ly1-dx z7M3+J`#iktT%7uEg&B|OxUjvG)#I_C4Ztf)BeT4zAnM4=&fUKPmO$*L)sk~36Ge|Z zqQj38E)C2ozPm5U{cO|hDGn-fw*&PNmVEQvm$X@qrEvL8q4XoBlmHNbePY;TP{Z({ z+pQ^Vor*e+)ojoo&dd|m^46r*Y%A?2tkkUv=)R3S8dNT^=0HFRS@BQLbuzouu z0Nl)dbh%QK;nZg?Y!hqtXMy@AFtr{1O^s9Mo368K(a%SmWzOSG*F1BtNoAP!LnRGg z?&+)<_Ug}a*FeN+j{A>RJi+v~ygALh^-q{+H9HwO?aryhp0-aI7U^RIXC}~!*g+Iu zL=*}y#c~;mv~_wHQkQ7CBwIm5x1_wel;iJf>?e(N3d=t`d{(b3m-^_v5zTjMKaG#Y zLVVBKbA1MU71^vJ((_#h_^JifB5LxB2JZay^94emB_JXOd(#Jlw(I?JWm}L!MVz4{g}PkEix%d*G%6`yI5>hw3?%i(Ud9b zv0U>7k(6S?YOx>=N^79K%DW^p9jy5JIl*%|V%8T}Ic-uP=UKnJm^WZPCzd3y$D-#7 z8G}d_8W*Y$vO8z%i?1Xhzf8_EzK_5PXC&7qu_YP4IQY^sU(2P^7CWoYlz$#pn96Zm z>EVq9+Sjk-wK8){je1LRzB87_s=Tt$L+1KJWsGA=I2HY}#Cp*@+TDdx1%$6z&W_Gx zCz&PRI;M#z!CM($GX`CMGAt37qILpKfu4Y(Iw1BJ&$ylmK2yY7dqyTx{|()@jLgn^ zvOnbcGaX;Dz4S0KyS#Tfggd#5BTXd@o)(ryEWKyqV{(IlDrLD>X2Mox4G(>zV^Rg3 zD`EQ1Q${EeF!@w+rJ@fO0851S8`%^z*c?UfBS7z;MC;@}ffU?B)V80AKgZK9|8Ubx zYsec;vm)vG@~*w*d&;W5KivVpzf7>cv9?dC1J)tg0ki1UOU2s$ZhAv`B>Q&Xxjs-| zuoR8d4XJlSF69p8VdYmxgGL)h?bp25c-B@%Nq(Lf4U8maR|Tm;_G7BMQfE{bT{q^} zzpVZZv4UD++U?q9U78rs-9_#c?1Gm`L!<$rtFnrWSCY=S$z4Ni^dupEy1sPA4QxD~ zDL&opRF~Z9R4|}dZ~-U29^*Kt6bM##zCl1n{Q7~r{p+x82e>4L79;4nq${6Qa^SWAN~4PcH8Z^D{&p^qv;{tbm@1~$=H{0 zbvO#X3;%)D8@j(Dxq=)rb%XMoqEDe!(A_n~<>>NOe>8H6YnChV(%_|CWA{czimBJatmXg+zmL*e1e#bl?%(fEv z&7Gufjtu_{uradeS&{pzpzgE zvE=zj)iIYEZ+}OuiyO=hv5Lk;;7W0i0%LyN+RWhak(FQQ^$JpUtjajCC6C*Zodl6g|dwdj`|8Sif_L0+S(30+oE`#YfTYyYQPsli2kkxE!z!SxJo+-l z5`mVymVr139%AubVanlnnIg&($rFN4s)XVytA=rb=9|+ZjkiAWh{hR%1El4wV08}y zoi_$UyPdk5E~xRX1X$GI>(|;6k*11iC8=M!-79u1J|ej7(jJ(QTrvoj z@bJsvG#jiZwz%R~r4DX!*3`g;5VDIxj*d>=uI*Y|fvgm+xMRuYjc;$`T{H<_pKO52 z`8VSi_-&B4Cw=pRTy_(Bt9!e8X_V}g)+~E!uwz?!R|@umFyU6+@T2mw+J+JF(V@nP zfZ%P`C;@KONmA-+{RfFaQ&;@0&|UYz^~i}tK70PU#>KD+oNj<&TTWu|>tKexTci~i zUk|tOw~dYOnUJt6@q!Q)&joaZ$0&L&E8v5t#bwrJ&4tewrrv}E&q06Y^|g$*^iE}l z*X}Z|Ku{8cDvf?vsRCrKS{|PC^LYVAz*<1Jq4sweNp23|*P)bXnv;vUsJ2O&k4%{> zdQg;uF}R`jJ#!pI)<4X2wKB58J8Jjm+yMKo>(|w{AU60);pDd|jDW!I0zi-$07OIq0Oj`ymjJ*|766uQ0YK#?0DwJS*tF>Y04K6N${sDe{t#7YMcr1l&+yayxpXw4q^a75xbC-9k;;LQT;rl0 zkRmygxvswsEJ@+6j`ZI!moq~5`Ud2L;%&`&1?l$`NR+LfkXIukmBjh-hd^0gyiIazVUC)###`d8*EY;Hc#mMA=9uCN?1R^s zw%Ndrj54;i9?nXH+uGLft&mEl@R6bA z)#3T(+fkGELyZNLbcbFRAkb(>P*9$Vv4EoLP;nHZfTfByv|i3nrOf$9i>?5!cmitoOWp4&B?MMXLmA$*I)hizCYgn{Bfg?)~UxsVX}I zyz-Th3qKJA9UnUbP6Wl^}fr ze-Poy32HzDo_}!aqtmOUVa1nJ#v)F%ph$YnsNB=v^~vJR)=@m%Dcd{ZPwC&5b~*|qE`x^`obgBa6=cUZ z=6^T(WB5 zG5m4*_t6{_GcnD(dn3x&|4fkB8ZLyvncvV>PQ$<@6b+O${#?O-d;d+|q8()|PcLro zTwH;s;q(eEuE;zAvRFFn1YX5q@(kj$%}|WO3C5vEW>#`6i{oj_htLVE0h+;Q-Pg|t zg;=;bndlHE6%U#kxl|7eb(iibkx4g1UtLv3xl-EO+#927oz#1hr%J8nNa6RpH!XK_ zD6)>~W(kzZ+_FCSh2B_YuhRYHb^a#|T))fB-?fKY;=@VtEi~40f)x!{6^4pQ?K&9_ zOm)ls%VI@BSj`J%867%krJtqzgn`Y>jWXr;U18gYp=BHSf3D{@8vpj4k5U^O911qbYwk*FVs2^eAV7Zl zy_1~O+Dw34i$j4~!AZ>A%39hRWUl6|sBY?QYszCrE+k0G@5$?F?__W8YE0^BZ|C5` z>nT9~7jxdX^FNoF$VvYqakUj77x^QVR9iurRLl`%PRhZ^#$d|K!a~Z)$;iUa!O6)& zPs+;7!pg+_HaHnr*m*fPd0Dwg|8pwjH-CAx*Nl6K27Is!P7FHG(2@Y-!b{-MQw^LS0NiHsK$$!?$IJmeP zJD8gPBiH&(?!VTu{l~SuVjy#4S4WV#qodtF2vD|ibaiyGa&#gUQ{yD1(Xw_hbM$ce z@aOjYZLPRD$lBf9OcLa1Px_aCd9DAAd>#=tNe&4KNfDlZ+5L9oB_%kyIXGD*M8()d z$^W(1?ElASOmE6C{Q<}S29|#=y&>?=>3>20?ZbZskGaEJ#DLyHW6@TG=T6thc}f(>iJ1oX*eqZY`HeRgh|g!3-3Kuj%IobpWvNC-$sXhc{j zz}xyienNwUB4a^^7I98sRWYuaAXfzyOk%KM27M7tRDo)hRd6SU}8u z$UvI^$5EZf6O3$~c21j-2q`XW%t-8LqH7^M+Hvzz{=!Y*pCSgt~z?XeWB;da; zghy%@NDiWm&R{bQ!>mseLt`#|Dm!ehnW|dvFNw%c#AgHQIVkrm6d9PCd#cckhOV>F zD#^wDF0TlWg_W$f? z>9)R{K0Fp%_8s~9G6{Z*iq-$n&F?diyzJKt)?{XDzE9WAN9*2#6B)p&r0@@Z$#&#D z=TDz4oT=zborRyJ&5REmNSVr<&z9q1_F+dIvAJ2ieM~9*Dh~tDe!k?cbV@+z3_>0k zcVKC4(TCQMdMsRv3!iKu2EAp>Ft418%-$!fp=9Q@!74Tj1NGtE+S&m zTFtq2D76Fs!tLMa{lEODaax6RyBlxu+87f1mjh(e!#p_*%DLo}!vkYcxoV;L?~ z1<8=sr8@20ez8{|NdQ||LVbe%!6FrVB%UCeDK$X0XeV7R*jTQa$usM;>RUi`1ear zP@8irS~@x?_)G)b#_p4IR((28XM<7Whvm2eWUJ?Eu-kuE{&U< z!KOruqSHGB7r`{4nUbDxB5mv`gXL-%8)xfjSS40W*ZFB1CBW19yaIHwy z?Avvs#J4}M@u|?mJ@wQYF(($3_5&7C`VPv4vzYk*d(Re)5Kt1R0d7y(wTl$=L z?V2%(>zn@7tb{7`PI%d*sV15n4Ef8#wg`8N`DH>(-MijUQk3+u2l=Oa$2zZm?lPyX6K4? zPYPBZ4w}b5qeTc#Y3kqzyV`=j^lf|*B23!$3PeY{UN!OmqDCJfp1xeWp;&i*HW0z; zkC)`a-5JixHvbq{g7P_*;(O2~SL-=0Mk;H(e)`?4QYwCP~*Ebr`Bm8@uPrc_m+u}If;%Z-&*@!wx)UGJ5^LicV zba|lyJdlIsJar4;<5!s~Px#xc$>AJva2{=z#f3wv7X3JMsGwUkfO<;2?|{$%CN)aj zP?2?7qKFNA^8h4)87+5NFc02S8d@*i2!%xSBteY?#7b<51dgeArKyB^g9So!hv^X2 zz7vE5FCNOK;5s{rz3WyNL2{#`de1fpkL^2K4Q0$wM{%nvi}#5p{i+*K7~xlf81olY z*(!zi_5Ao)4C|ofJmS7@pxr(OlhveJ!_|*y0mbn$;4OdKTSb;enJ^AUro((qfG2F+ z$A>O(Yk_CRzF+m~#HFV~3KhX7?Vzbzvvj3#8SJ3zttMA(d9aPjf=qrC9ln}bg3LvG z+_Y6ix~o-Yh5Fx_L0!s_#rC%M#pq*CS~RS!q)cZQ$o&_h{_mNL68#A16Z*+8`)%tl zwrkyiABS>Ct;DNHO8tT3C zP@?e9T@9JfNo{DfJ-Z^J72e3puHzKl9;S9~*g@_ZoD!Yu3@l58Ma&L@GL6s|-aSP% zLCxWyoBE+HLpj>)qT$531CIyLP>E0UR&^v3g*H*Q)8N9g^IZ82ZgSw0Zb(sc%>T9H zTYsvbT?R5jC%xp8-Y}2-QPa{ee?PlMO>&`D`wD=_8*Ku=0+@JEUeY`w+H1ZxzXJN> z9&H3Qg|z+|oF5{U-h%bJnn=st#6iGn)QI%bscRo!05&gBHUCyTyjrvWp zmvU!GG;zN7kWXB39@D>6GvrfpUp>vHxVKz|8MN~pam7x7cvQe*c?B@Mu}9#Oa(?VY z-McqkS!!%#*E*^g6tb5ah`Rr<5D*w*`_OpnyQQ_`=n?O})$cfWH{@7#ZIl*uZ~Zo# z=Hnf=au-HDTy>(igwGbh^YvxXx6NosapVb_zcHZbvBOz!C%_ZA`TP~IC-vNbLd>*N z@@6pB?^l4_t?v%8Sk3*3AZ!+m2(&EY&r2Gp!**X1z_I^&tuZY_n~h zxTyy<1GyCNv)gS422Sd@cjw4Y*Jh<;{#O7G`gs5D<~YyWJAXJD zDzWzzeYZX*VkCJ5IO>O*m5@_l&ePg4o>bY-K28V@m$y?K{)LdD7QKn1*p>Rb7|c$} z?N3Y!o=;d%at-OvJ~CiNxL1JgjnO)L72PWU<5rLYVbzH4>(+S|xqLJ|phW8x5KeJ` zCjJU=bK4xy3z)3FeWK>#ik()wI5t{(p*O*4x?7(m>KQm>6hwRlIKKj}eUAc~s;iBB zHn@qk4&O}Yddb;_b+NQRRL0&{aNj*pkF2>XqAbV zOHHfGNz;dCAfsm5@T>OQO|Yp3u%*YDN57g38=3iTduFLr+(2h(UhtW=sTQ0#Q&G3b zT_uDQ*A<39^j-q;Snry5CE_NPi(_}8ar;yj`|~j_&`TXXgH?{*@(#oro8{yKha{m)Vhy7U#*LrNyS`u%h-q(em~5(5j~6J`>`R8dabTcb>f zQIxI6q)Tfylk$sJiJ#xTXHa*zr4`1Sd`TYl( zYYbyAi-3?~24stpZLAGkNe74QA5Hb5;-ash@9}@mo#CtD$4EVVQgJtk7D8@nK2T#7 zm+Y1zWJL7wI40|$OPE`dEu>$ZmdO{R;K4DTkUlu!z^N)obBZr(2xRmZj51xfLG>ri z$dr-&vMBuIPa0>=WNiY*tQA)-=n=V{k>vy?!C*E-R02mm96g+uv7yX&hbe^V3*G=i z-1+W&@+&cy$GgK~_T=`s48f02BRf7(RN{!n-79CJ__t8P+K+9#TGe5Y1?Sld_hI(f z18Lh;7QWrw>JRp_n$2og_gW@Xn$8SLD!&aUjui=z2~X6BypYv^ag$raTnJVU6uc;2 zurob*0=bJ63p-xAz?_D<`5S)1oC$HD1bR|i{)GCKN>i6sb)FLb#mTh*cosV}5971H zD2EghF&bZ?%U7O#`&*;#y5KA()|%tW*wNmm;}#HF=PYD+-#G%Ly~ z3PIEEmaWhG$%BJl6gu znhpdlHz^@8?QE&&HvSydR?6-$0r3wwT_}-<+S!4++&EiquQ{vrU^LLu*z|O|7l?fl zdWEhzwl4Ig@E0x%)%+snrkbCQZ?rV*3$vMUin?C`=!DsW6ho{MsM^UP{R1i=Q8DVA zTBg_56m*fwlI!<544S9%mxt-nW9MlK$h|zOgD&&&3q^8NZWUr78*_TkzTPy;jSJv8!$_ z*NyKCs006Zs}gIhkkNfHbTUaJBN-ucPLwwffTj;1!TH zP^6dj&~%fRJdWe+M!^A0<0J`f8B?WTr^keo3fik{*1sC*H*LJhqZ zvsuJD&Q_v}88sHm3K#1kt)n2Yr<+FGrTaAP=JYeg99{pelS!qxbq4;!b{Cm)6HM$^ zBUE4TL7IF>fYCcq4Y{?mcz?3fxsuQZUX~V@*nYd^y9-vQUMa$~n4#}P^ny$H9Rh?@ z=82>evwPgiSVTR8vuB(S<&1A}0_itRDyA$$Sh{T>gws@HX;XV`TWD~De_-SMju6-N zyu4WBi@mA{C-u{`&>wJ@Cq7)=l<%k+P>Io=MzINAXN43>*TA~GFYUhaDYB;PnV8)a43^L@y$wgg1*s?dU+dFkx zy3bH;>s6<<*1LZ;N7u5Zhws$g+2qjRSx9QA;Jw#S%ywga8f9RYV6uJU`t`yfE!1vgE*RkfsvMG|3MTa6q{0ex#x+I_^1PP~iUG4*zWaVtJv3Q#lYL zAyIw-6eEqOkh*;rd92tOw5?-w?j5&zSEff!Md2=%Wh!x3H6RzrVR6x*de6?)6*L}~ zf6J66L|HqNlzfu@-n0z8ub+otF9}?~Za5LQe11M9w!6E_i?*0q6*1PTcsu%Xwejdf zaGkO2y)FM64LBG*3U+&shMeh1)6}MZ(M+`ZK(O7~6Bp6WZ?t`${rhC|&&FV4Xcb)LsMM?bF%%z!1TZwYZv?PuT0ot^6Z>^!1$-W&HJ*LF1 zt%0Hb35(?X-wtU{3rGl2CExonj0&0R>#kxuf?ykSW z1Zs44I~1=QRqHZmtenWOV6^jWr4h)W9NuGT75sa%Xjmq^Z=AJmkhe zRT`R+QnH3ax}Z|tCNj?*Hegemtb;_Ae{1p;!zNKm>M7I%MCw}1g7mi=!y{#1wkNww+h-Qoxw{@TIP1y%vEwPd3EFKn~a9UilSJ+UZ&KQ|?G@sXDnw z2=tboI5fvVTQ-RVxQW$#c;_~EgayEzC%F3Rgr@Ta9e0R86vJnZucE8A2{Gy;ynx7A zyF5G|BRBV?B#;KzYOnIt&xRXQgrl=Co6t*9U(7ZtVUw4{s!B@R(#_Mb4>3BF{C8o( z^JmY;LshOyM6FT(v$!Tt_*&Jm9A*|1vbimx%z-XP?#YN)=r* z>l4%a>a_OGA-T7-3EuTiI-){F_KFr|ts^4r%e-dA8jL*OKAVu@g7qTEhm4Q zp?lgjEg8Bv_(~3wn!vWsXL+vHff>7H?A(dq@zFFr_OYs^mpXoZ-6UyKY`o;qoDU)W z`HZ>J5m{bGsR3|J6AypH9=EQn>G8J)68CoiHxfb#k39J02dKG>$x?2{oA zzB+-C+3t-hBg#x^nf8?4p@C(skF22ceM4N%_){N074tRAoi;=~6?hV@ZE?k)hcnO3 zZT*UlesO5mnxTm~j@SrpG}oHi*Dl&b6FW*0E$EvhY#u`K=eL4QIb9V7wN&h~WBzSk zvceA!AxF8Ke%?*9z?$7H2OU<@bepAM+nUxd*l=r3{4b_NWmY~!jW1(58bz})U!BS# z_@t3`O%Qkh*Z=@hm}1I!ALYU5In6#Vv#cGH22Zu>mD+(#Yt4uaQi}SK@`O!oVeH&g zK9-vISH6Vhh54zSLGBEk$e!Avp=}xb!f4^mdEpwCLeo-PWNH@OMd<=`AJkpLzZfdAXA!g+t~sz~Rt;ExS2 zMPB;RiZc0FcqO&BLRpQ^a#6uVbvUQxvwOTaQKE^9slad$PTaJlghe5CGrHyWBENj~AP1m_tV`spxa6 z+GHbIEW%S;5pzh60JW|rs_?iZ`ycMs^k!M+ZCR$un1O3@q}X#+DFsi_YrF3t?&1{O ziqsED0!;vYk@^IO+E!AvWx7B6vSPZF+k3Q|r;HdG6BZz)txXG^D; zXc9DLCFo(p)b_k<6*wsMls)^2IXU5cZk5=N>bJyF*lM6xmKeQI6JDU-Ydxpn+0){D zzILjX@Fxn3@$DJzcZ^|YJcM)u*sa{W|Gi@wUUH-0be$UzJaXY{#1xg)yE7h=T8Ybp zTg%Rh`cuSUP)~e>F8n0`;Fww>HV%yBZtl)#!1yznXg+W3^beGib zP3C=*Wz7|5n_gJ{?_TxF0Wl4h8g_eAG0uqIOx;AwZZ;bXn@{HHCwHg0qg!XYTebHz zS!^4|aTu_!W*>)jSLn6Y3~;~c9J+(j?fd#1B|F&m9Mg$j0YO8z$eI>H1W9q&x`BS; z_I1z%9tc6s&W3XgA+t5qdE@4?i_}euiC&h#!+R3QV>#^i?2TLAN0upK<;&w?B;GCq ztelAyX@f8tzaq4U$sEcHhBe~8dH$2Q=o9r#$7q?|j-&P57-99x4GJ>q3#^5Vn0H5U zJw>C2Sj&;8*jEW5-TKgFe02$68e8q7i^~bl8`#`FyL9P@*3tHDn^MfUR~y4Hm533f zB0vn^QFl(MFC*53Bqj2vPUt;dHITC3wb(K_f4W5(k{Rg=&b_;&62gdzqDP@u!3tSV zBf8Em&}njL;Dp1;yf0r+Sb6dZ&_Z`kZ}V_5-i3+vh??21WzB@C{YoE2;~Bftdet%+ zkMiNZY|N=`jiv9xSJ7sN!kN&WQ=T|`Vkl0K3g{$5m|H;3vVuq2KiYU+PHJ)}E#R^9 zE8)AJ1uxZRVBX2S7B%ZNFSCb29zmRM0tJ*Sbnpg<;n9{~FLlHox!pB;Ls;F#gZgK! zPY`S}P_ijbHWUrx8!`ZH(U#A_fB_DYX|f1)z+Tnnm!?ERY;q9UmayDgsg(=mA?h~r zaJ!@ZPl2cIna_>w0Q7KZZ*%F{z$Gox(1qxDOhk*GGvsZ@*`tiVb?ZGXB|=I;F7Umg zaCz;dY$F6JN(W!fCPxshGBgd$+f5xQz5Ec4hFOrq{t7U+Si@e#ktM9T+aD~_se%n^ z^KWg(lu!Ada9WNKT%@~{qKC{ytzxX{ox)$T%ZOk+o|A-Hub;~|Kn5i||NAG-&y(7u z6II`%%xa_FTQ50hP5yWHmTfI!@h=5=pIZn5y3X=$>E?INyLMc>Jg+J4{T6ke=f?V? z056z!)d^(#6lx%)72UnjnpvGNx)J`SklN)($IyOhXNqu}Ajy$?y&~T!(70Yk{i67= zWH;ys1{9G%?r<$b>*Ub2ivMALHB(ce3ej98{o1soS$$JEawWA~HQ1o>i=gP2Pen%` zfV}S^8iChSKQumOK;|Dw!-qCNhr{I-2PW7_7+{%b2hA2hCz`BXI|cm7z;oq}rrt8} zaiOWVvP!&1LvJ9_ZkO-TkYl%7(K;&7`N`z)t15h{41{!yHxv`)^@0sty3^qBff<6-leluANJrx|7OB< z`i!(#YR)wcrOl-_vwdz}S>jOF|`T_CxcvM(S@Yakka|xSXA01dKsX&M6tv3H?YakW7Fn5Bvw#I+=taTu? z=|y$zXnTAeS2Pol<*4+uDnR?RHq%-ERJd`XRfaeG;}_GPAEzk+Un)c{W&>|emPUiA zLwiyIXvCOga6yev%n6GPTp}Y&yh@{9H9eSxgV5$p&pni7m?AW$BhR%|eEn z1!w`T4FKI|Yk)K4Y#A*(by$ej=la;QaxBz_)@d1LneZRG!f;9|{^th#N&gh2tFM>J z@?^}sUkd$mKH0V{8JT-|QMvM#p>8`vq#oV3KKi$E@L^Grgn85*R;ox!F6l>=@hNoe z!#C-Eovuwr4tF%i5#+!I!`HN~oh8{r+-k@nrdp9jkI)^9cN)l?eZMVA~27lP@o}Wnn#t0^Tu_l3rl&XR^e=+<_@*YohQY?;F z9>2-Zs6q-gMI7)O9$~o>0=rquoJ|V(p6<22-FW6!?Tmxl{ZFCqez+)fgWLRSdXxHP zE7ks~h%ygh9W%16SLF9h3AanfJQFw7TvVJEx~A;u^Y5!OSQ8qVw;`GnIk*m_668JQ zXY8h|?bK;B;Oeh#Y_(XJJm@y4eO!(+2xQPkwjsgS=rzfrD_RoCpK!^}JI0>v>fiP~uSRM;~P0 zxV<#c-!`4ve;n&(uBz@J2zgUx!$~F}`Kb>=2;L$88VkRRrIfl`nxXXtHszOq#G?0e za##zx)BVfN<{cqM*5J0CSj)$LJ?|v$rpNFh-}!e2o9(RPt2kNn$p@z7j8=tb zTMUlv4NLs&b@#sz8rnwQ;kKD8Dfgo3YK{@5pXwd7>^%2Ga1q2?#!U}ICn_3ZrAi2b zBPXNrLY}1u;*R@{M2x4!~Bj>BwuG?t@32FZv$7Wry+|VQaF~xam3E zy(2+wZrzv6)c#~iP22i@6zbW4F2431Xt}9&T1Bww z=AD~L-_YrnqquUSZ91F=zYGTjg4*ohNR{`a^oo{!#Nk=p_(X4MN{UVFIuO&SModhk zv(wf&>NKn=g-3z z8+o81_DWSjk4m+$od>{0a4cx;5AEvk1W)+HGr=u=t^a85+ttLBmram59MBcb;QWM1 zf>XcrV~$9G&bhPar`vWDlA!LB_ox&PEV3XpEMIn#3mHBF!D6fPh$ZEu3N-(AM%kKQ zx6_1K@-`@Pcm-O%4n7NfSc7eRe0iXE8KC(xb&>L?B*DfJl&|{-$hv?Ah*J`VyX8?v zC_Gk3fax`cqn@k>LLQ$MXY6t2OOk;W4JM3bs6t=sYMmQMKAxM_pUm{QV!@T_m=-8( z)c*-)*=h6dJTk3x8{!HwGR$4^E!LTPIG%nAn>^fn zlnT?mOxowgKLAc7m+jjsOk>W=J@Lj!XjSAUgeYz~`>_i?lh zk+W?Xry`tHZ>DNK#h2_l7L;If-a4x;HS1*{!!_|RN~IDFEi;06blkf8jLrJuz`oRH z4XsSu=iirSz3!_hFAj=)OAHC$=cY7R93sA>m zl#iU^n-BD0+J)_Z8Nsi}oWV6bJI>`3!ZuQJKsIP%6fLuoY1&BS3!xaT%vzhQ@4x0P z&%M?a;I|wT=+E%Q5nv)1mU^(F{y@QRe<)GetK-B>f*&LD3;lciu|sZ^fXenxo8AxY zjqe*y_h@lLLRT+Rgy|o5$?J17)J&0OOM3XBqcApRZ0Xb4e;xIV+hR}L`MzM<@WhHG z4fPv(M3{#qZDmN2g;uu1ZnWrV`_mLDMRE~|T(%qQ0`Ck*uRyyEM*~s^TCNseO6eCD z+*1xNn5B##P0t~jocQ}()zYLd>jKPeiyK)cWrob1dH92XCf&n{L%SCwA#jbYl+y^HzFlMIcOa4Y0AIuP z+#K8L^as0(dnIt|Nc&^Yc$WvZzHTz(D3pyDMu~wm_+t~13jeN9ng;={q8yc7gp6&T z0Q*B*h#L?z*X`lOh>^PexYgVbsbp2#f&u&`dFr^w91*Fz+PJ2)6hNHf;CQ&U=&uso zVpwRl6KZAdSu7cAHD8#}OglVmrx7%bY6~S&52*~Z50j5VChSMOl>QQi5J5bd8Ufog z4aoN&-UF{>Y9Gu*h5(e|X9G=5d)HD|k7=vIbE(AV!!Edf*~F0qHlbmNu;%qR?{a`! zYt0c`V0&%1lu04ZOHpY|Rl|c2qTccZrqc3r!`Xdbu*O$aZnOQ1_jfH9rUQdGB6LL~ zvhv2dYrS_8uYe)%gU98gm$c{6@om#>ss7Dh6iGK%Z#?KO_){h6J&%yJv#9CB z<6OU(KrZE)Hl0ykF9nzzw(a_@oIYk~eaZ#@=D8!O^etu@;}h=el~47JPyCJ~E&M$N z=68AHs-Q-y(r>n=qT|Pmb}xNv4=od3=JAvV&5XKq!F6o($x{jii6Esn*(H3rf<>l>Q{G&Es$C%qm%pP7-=>kk*H>HZ z)a4aG`6iG0`23;ax0H}jN-pjO-3Uu42ueOq=nTH;(&6hDp)@yZLq|Tp$Cq8Pu1LOy z-;yZJUaPJkRnrm|nHW@vP}T8FGK+5$kQCCqS0C&JI~vB!W1qk4jM%B?9{y&tUJ;m_ z2Pv+MrzU;{G>1{M%{Z6z7D8b)oIAPR8g_bQ%{AGQQ02nR>-U}tZujKD=e1A{N1EDw zX0sp>7yRWXI>`8zucLT~?NtccvOT*$kG8W+2p;>OW)O{y%MFbn8Z7Z^|8R(-*|vO8 z@bRSuhsqso23nuAJ+C?%u2h7DCaoBRn4hd3I`B#fj3p-0tvKsZ(9QXOI^2-8pZgN; zdN6s~I(D?w5SOH+;Z9K`_xV`#tMdJATg~P!~yWlBTwZp8= z<^aNkLHM_vzMolJO|G(0s6yw(c2fk25Z`L?92f)8Axc`mxOkOxIxdg+X8Q`v%!hj- zZ=T?N9k%vK`cRAd3P6ClV2w_sMU|t_?&rN?WHR9gJN~qg>vWi90o^UdV$H|Sag4bn zI^WfbEn`Rl1L;o@7i`E6&SlPGBwk3fI*#@XJ=kyG@YHCiM}p$!P7%~|(LRu|+}x(V zvXJ&*T^z}lM6CD`9iB+NP%p_TAbh?Rruj(kdDZC6CENGxXN)~~z(na|V6>qWWzPI^ zq8l)2_Bz<51uXW~pA9+^g-frR#r(t_TLQm?_tatLIsd5UH4HA#z(&}+46oRGz1YE67+2Ab%yrrL7oL9&Ju z$AH>!mi6V;mxn}By+C+sCHzEWjp(!b@v@)x-7mO|8CcG79Qicv~}a>Q^D^HIBuQOUAMyPxP ziWrVS3+Sf9QzkvnJay(GPxgt&0LC?W7Sp>x*hX3J(UtGWl9nTRDVOfxy}}G0s0W;* zFC%Eomf4^l%=!ev%F^>PR4h&N#@#1bD7)XIs*-HGx5KMT8=&u5$;ZBX-1;O8I0PBJ zLkOe;cr5h^xFBNdTsJj5$z`zPE=Q?+I)Cy^IDxYCS52IQEn&TkTh@XX726qQyL~z_ zDi+l)xp}B#sDWefRpzi&R1`HyyfeqIW2e>Ujx~FQ1_|q;2Hp%EQQUQi*aee2b1trr zc4DqKn!Z%C9Z{v@J6{PJ(_nj%=mTmSrI=)t`YWXWbh#1{(_vc|t|rujQ`f%fmkLr9 zVb%%+G&U<8{G!i?;vW`5=>@k7cQ*CTA=_muB9FRiNco@<)o!VkX!3dc^3Jf7nO8ky z)EP)I|98*q-_5f~Rui4*!N;X;^2vh)uuQ|U&jqFDZl@^Z0|FZo#T<3e=PF+ef^x#KY2s6UibdHV$;fH8B1 zeh5tU%*Q!dB38AUc|R?~PeB=Ri$>WS3DdrcMN^sfxxOx=`8wvIx9{uOAVNQt=uhn7wtzUVWN%rmj5M2M#GM zBnf@ztpO66t<>@y=X~mCb1hZ9rGar7JE6RAThgHeXRv=0mr!kW2;Pn#oMI#MpO<|8 z&jCr@H{jwf@_p3Gf4IDWzG4{UG+{58lwvWHekgMrrD4cALZ+z56(3CiLHfKi{VX}7 zC23$Lff&Il+k79cEFBQS+#2s2Co1qvQ$87NZp=p5w8f@W-on*K;kLAMd^_Dxf=(vj zsWYA-1a@8ygA(fFXUTBdaVS!sx802~J|VBVvKc8XzEm6aQk1CcR7xIrp|cnbo;>;N zYqWdl*DzJf?2|pq0rMFXavFjLCfvcV-O&fd9xTK7$+Wk<(m(7;v}_VB0QDqA{YuaJ zq(QYmdD(+TfKe0=7lLq5V<1Vg4`szW(~gb7ERu^jIv%4SD~=DXNRFm4I4^;QUP{^5 zW`7iHBL^=k8tC2oJ9-_x{Nupz6}k93?Rgt3;8k9#4)-@;^8$M7h|d5T3H;^Rk+ut# zQ;gH1IdRE=I7P1<()SK>foH+tDvoz%pb-vG(7%84;LkfnPzGqz<)!8VA~=|ELTrIs zti`eJ(E|x67dz3%q{Iblp#v)t^%%TEgIRSJhCT$zy(91AD-oWS~2LHRAbbUL+@S)1{g>tJ%@Ea4^2`r=c_4fl28{m~!@O#@SD%L>USjrj8vm zC?<4Y89i{JO_#M>ar6Q_p?3DFf`K!B`S05`j1Ge|6QoeOtb50{_!^pYf!HGe|1`Bn?V& ztXIHquij}U@WX^vOT3p_)bZY`m}fG5%0T!)-CObfC0{}>A^}z{;ht%<$Nk4x7=v)f z0z}Br1=N;NWr&VGyV-s2_=zH&i~0E!kQRy^+)-$Q5-dZ!J+-Dr^VxaRV9b$JX_`q@ zretgYp}T(KN+V`SkbK?fDDj)pBrk)Ja5+BI;6g~M4krq!SW07uR=F$QK%v->4E0gX zq`fA}M!at@!Sl6EK?ZSa@UfLMhXMRl>%^Cc#j2$A|Ky_1$yJaaBkcSG_qCs{#69$4_MEokbcIH*LPATsKaP|R&J z@Ag~AEX_zN8_wDnMiEI|l~4ctsh>S+!i5P0%+?VHKHBKOctO#{yOI|sQv#A9f4!$y zfD*vjQ8eYVSSP@glg)*8xYJ!TcX6Q;AN#iCGTq$V*nd2`XC>J6R?Sp ze~-7fko$YU*)}*cQxE?1U3N|(W<Aa`+H*IfXNm>HB%*4Dtw3IdNBxnM>&1 z^J;ORU7HXJ>xS`I9QxMz{Bm@{sa@PAE^8(wy0^sYT23Rw)ntz>6xj-{zB{J{+ef4t zGgB!xaK#a-JAKIn4{c(-rPW7;hs6hFOdbWc!l;WbEA@b4&gac57)cFt+85Igo(khJUl%I^dXeO7NrylIlq}lVTRha!L1%r5L0yjL#baNe ziYxoyrt;_>djM>Vq@xiMqv;hS`|sQb{X@z&MG=2$QfUJF2}{ieG6FDF%Or`fKO$*= z!iV^Q5U5Zs>>#MUWzIyFk$`|fXoaBwmFR%Ix1zmggXHwVvd$RlK|2CQj>e>oFPFEOcnJAG%ig682rs zyR&fR`zwI)v11YPFktQ`&GK5$UdhPuFaV}AtYeiR0BQdn#!KzB@xrsz%(Hk$NW0%! z+1%{H)}h;)z3={e!jfyF*`a5xxo7v>>cggocJ`G+UjrJbl)3nvHiM>b=ZIU*YTF{5 zp^ON>7nVZ^HIvV^IA`U?#^iX&MGK!htGCL(0>9h-Eui#m{twWbmy%*C@0n;;^N~ovm3$r jZlt-B4D?AvmVMZ%Ztdu7qIIa7fNo*_Unv^I>%#v651O*U diff --git a/docs/images/layers.jpg b/docs/images/layers.jpg deleted file mode 100644 index 02b77e7b2afcef789be940e444af43f522f3ca31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26921 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 bVib53gW0r$l$2a@a#+hz=dPahhv9z!%1KK! diff --git a/docs/images/picture-2.jpg b/docs/images/picture-2.jpg deleted file mode 100644 index 05df6dc31819a058455e49bdbfa9d47a47ab5f06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182998 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 VzfHY`6pSp=s_#+?w^XEW|JfH>e4PLQ diff --git a/docs/images/picture-3.jpg b/docs/images/picture-3.jpg deleted file mode 100644 index 472d721b6edd5334e48235a13e0675ea9fa1e7a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224777 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 L0yU&*HO#Mfh3zw+3V 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�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 Cropper - @@ -50,7 +49,7 @@
-

Cropper v3.1.6

+

Cropper v4.0.0-alpha

A simple jQuery image cropping plugin.

@@ -64,6 +63,12 @@

Cropper v3.1.6

+
@@ -562,16 +567,16 @@

- + diff --git a/docs/js/cropper.js b/docs/js/cropper.js index 3757403d..c82e8516 100644 --- a/docs/js/cropper.js +++ b/docs/js/cropper.js @@ -1,11 +1,11 @@ /*! - * Cropper v3.1.6 + * Cropper v4.0.0-alpha * https://github.com/fengyuanchen/cropper * * Copyright (c) 2014-2018 Chen Fengyuan * Released under the MIT license * - * Date: 2018-03-01T13:33:48.179Z + * Date: 2018-03-01T14:21:13.980Z */ (function (global, factory) { @@ -57,7 +57,6 @@ var EVENT_CROP_END = 'cropend'; var EVENT_CROP_MOVE = 'cropmove'; var EVENT_CROP_START = 'cropstart'; var EVENT_DBLCLICK = 'dblclick'; -var EVENT_ERROR = 'error'; var EVENT_LOAD = 'load'; var EVENT_POINTER_DOWN = WINDOW.PointerEvent ? 'pointerdown' : 'touchstart mousedown'; var EVENT_POINTER_MOVE = WINDOW.PointerEvent ? 'pointermove' : 'touchmove mousemove'; @@ -68,10 +67,10 @@ var EVENT_WHEEL = 'wheel mousewheel DOMMouseScroll'; var EVENT_ZOOM = 'zoom'; // RegExps -var REGEXP_ACTIONS = /^(e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/; +var REGEXP_ACTIONS = /^(?:e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/; var REGEXP_DATA_URL = /^data:/; var REGEXP_DATA_URL_JPEG = /^data:image\/jpeg;base64,/; -var REGEXP_TAG_NAME = /^(img|canvas)$/i; +var REGEXP_TAG_NAME = /^(?:img|canvas)$/i; var DEFAULTS = { // Define the view mode of the cropper @@ -169,7 +168,13 @@ var DEFAULTS = { zoom: null }; -var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
'; +var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; var classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { @@ -205,15 +210,6 @@ var toConsumableArray = function (arr) { } }; -/** - * Check if the given value is a string. - * @param {*} value - The value to check. - * @returns {boolean} Returns `true` if the given value is a string, else `false`. - */ -function isString(value) { - return typeof value === 'string'; -} - /** * Check if the given value is not a number. */ @@ -238,39 +234,97 @@ function isUndefined(value) { } /** - * Takes a function and returns a new one that will always have a particular context. - * Custom proxy to avoid jQuery's guid. - * @param {Function} fn - The target function. - * @param {Object} context - The new context for the function. - * @returns {Function} The new function. + * Check if the given value is an object. + * @param {*} value - The value to check. + * @returns {boolean} Returns `true` if the given value is an object, else `false`. */ -function proxy(fn, context) { - for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - args[_key - 2] = arguments[_key]; +function isObject(value) { + return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value !== null; +} + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +/** + * Check if the given value is a plain object. + * @param {*} value - The value to check. + * @returns {boolean} Returns `true` if the given value is a plain object, else `false`. + */ + +function isPlainObject(value) { + if (!isObject(value)) { + return false; + } + + try { + var _constructor = value.constructor; + var prototype = _constructor.prototype; + + + return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf'); + } catch (e) { + return false; } +} + +/** + * Check if the given value is a function. + * @param {*} value - The value to check. + * @returns {boolean} Returns `true` if the given value is a function, else `false`. + */ +function isFunction(value) { + return typeof value === 'function'; +} - return function () { - for (var _len2 = arguments.length, args2 = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args2[_key2] = arguments[_key2]; +/** + * Iterate the given data. + * @param {*} data - The data to iterate. + * @param {Function} callback - The process function for each element. + * @returns {*} The original data. + */ +function forEach(data, callback) { + if (data && isFunction(callback)) { + if (Array.isArray(data) || isNumber(data.length) /* array-like */) { + var length = data.length; + + var i = void 0; + + for (i = 0; i < length; i += 1) { + if (callback.call(data, data[i], i, data) === false) { + break; + } + } + } else if (isObject(data)) { + Object.keys(data).forEach(function (key) { + callback.call(data, data[key], key, data); + }); } + } - return fn.apply(context, args.concat(args2)); - }; + return data; } /** - * Get the own enumerable properties of a given object. - * @param {Object} obj - The target object. - * @returns {Array} All the own enumerable properties of the given object. + * Extend the given object. + * @param {*} obj - The object to be extended. + * @param {*} args - The rest objects which will be merged to the first object. + * @returns {Object} The extended object. */ -var objectKeys = Object.keys || function objectKeys(obj) { - var keys = []; +var assign = Object.assign || function assign(obj) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } - $.each(obj, function (key) { - keys.push(key); - }); + if (isObject(obj) && args.length > 0) { + args.forEach(function (arg) { + if (isObject(arg)) { + Object.keys(arg).forEach(function (key) { + obj[key] = arg[key]; + }); + } + }); + } - return keys; + return obj; }; var REGEXP_DECIMALS = /\.\d*(?:0|9){12}\d*$/i; @@ -288,6 +342,271 @@ function normalizeDecimalNumber(value) { return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value; } +var REGEXP_SUFFIX = /^(?:width|height|left|top|marginLeft|marginTop)$/; + +/** + * Apply styles to the given element. + * @param {Element} element - The target element. + * @param {Object} styles - The styles for applying. + */ +function setStyle(element, styles) { + var style = element.style; + + + forEach(styles, function (value, property) { + if (REGEXP_SUFFIX.test(property) && isNumber(value)) { + value += 'px'; + } + + style[property] = value; + }); +} + +/** + * Check if the given element has a special class. + * @param {Element} element - The element to check. + * @param {string} value - The class to search. + * @returns {boolean} Returns `true` if the special class was found. + */ +function hasClass(element, value) { + return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1; +} + +/** + * Add classes to the given element. + * @param {Element} element - The target element. + * @param {string} value - The classes to be added. + */ +function addClass(element, value) { + if (!value) { + return; + } + + if (isNumber(element.length)) { + forEach(element, function (elem) { + addClass(elem, value); + }); + return; + } + + if (element.classList) { + element.classList.add(value); + return; + } + + var className = element.className.trim(); + + if (!className) { + element.className = value; + } else if (className.indexOf(value) < 0) { + element.className = className + ' ' + value; + } +} + +/** + * Remove classes from the given element. + * @param {Element} element - The target element. + * @param {string} value - The classes to be removed. + */ +function removeClass(element, value) { + if (!value) { + return; + } + + if (isNumber(element.length)) { + forEach(element, function (elem) { + removeClass(elem, value); + }); + return; + } + + if (element.classList) { + element.classList.remove(value); + return; + } + + if (element.className.indexOf(value) >= 0) { + element.className = element.className.replace(value, ''); + } +} + +/** + * Add or remove classes from the given element. + * @param {Element} element - The target element. + * @param {string} value - The classes to be toggled. + * @param {boolean} added - Add only. + */ +function toggleClass(element, value, added) { + if (!value) { + return; + } + + if (isNumber(element.length)) { + forEach(element, function (elem) { + toggleClass(elem, value, added); + }); + return; + } + + // IE10-11 doesn't support the second parameter of `classList.toggle` + if (added) { + addClass(element, value); + } else { + removeClass(element, value); + } +} + +var REGEXP_HYPHENATE = /([a-z\d])([A-Z])/g; + +/** + * Transform the given string from camelCase to kebab-case + * @param {string} value - The value to transform. + * @returns {string} The transformed value. + */ +function hyphenate(value) { + return value.replace(REGEXP_HYPHENATE, '$1-$2').toLowerCase(); +} + +/** + * Get data from the given element. + * @param {Element} element - The target element. + * @param {string} name - The data key to get. + * @returns {string} The data value. + */ +function getData(element, name) { + if (isObject(element[name])) { + return element[name]; + } else if (element.dataset) { + return element.dataset[name]; + } + + return element.getAttribute('data-' + hyphenate(name)); +} + +/** + * Set data to the given element. + * @param {Element} element - The target element. + * @param {string} name - The data key to set. + * @param {string} data - The data value. + */ +function setData(element, name, data) { + if (isObject(data)) { + element[name] = data; + } else if (element.dataset) { + element.dataset[name] = data; + } else { + element.setAttribute('data-' + hyphenate(name), data); + } +} + +/** + * Remove data from the given element. + * @param {Element} element - The target element. + * @param {string} name - The data key to remove. + */ +function removeData(element, name) { + if (isObject(element[name])) { + try { + delete element[name]; + } catch (e) { + element[name] = undefined; + } + } else if (element.dataset) { + // #128 Safari not allows to delete dataset property + try { + delete element.dataset[name]; + } catch (e) { + element.dataset[name] = undefined; + } + } else { + element.removeAttribute('data-' + hyphenate(name)); + } +} + +var REGEXP_SPACES = /\s\s*/; + +/** + * Remove event listener from the target element. + * @param {Element} element - The event target. + * @param {string} type - The event type(s). + * @param {Function} listener - The event listener. + * @param {Object} options - The event options. + */ +function removeListener(element, type, listener) { + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + + forEach(type.trim().split(REGEXP_SPACES), function (t) { + element.removeEventListener(t, listener, options); + }); +} + +/** + * Add event listener to the target element. + * @param {Element} element - The event target. + * @param {string} type - The event type(s). + * @param {Function} listener - The event listener. + * @param {Object} options - The event options. + */ +function addListener(element, type, _listener) { + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + + if (options.once) { + var originalListener = _listener; + + _listener = function listener() { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + removeListener(element, type, _listener, options); + return originalListener.apply(element, args); + }; + } + + forEach(type.trim().split(REGEXP_SPACES), function (t) { + element.addEventListener(t, _listener, options); + }); +} + +/** + * Dispatch event on the target element. + * @param {Element} element - The event target. + * @param {string} type - The event type(s). + * @param {Object} data - The additional event data. + * @returns {boolean} Indicate if the event is default prevented or not. + */ +function dispatchEvent(element, type, data) { + var event = void 0; + + // Event and CustomEvent on IE9-11 are global objects, not constructors + if (isFunction(Event) && isFunction(CustomEvent)) { + event = new CustomEvent(type, { + detail: data, + bubbles: true, + cancelable: true + }); + } else { + event = document.createEvent('CustomEvent'); + event.initCustomEvent(type, true, true, data); + } + + return element.dispatchEvent(event); +} + +/** + * Get the offset base on the document. + * @param {Element} element - The target element. + * @returns {Object} The offset data. + */ +function getOffset(element) { + var box = element.getBoundingClientRect(); + + return { + left: box.left + (window.pageXOffset - document.documentElement.clientLeft), + top: box.top + (window.pageYOffset - document.documentElement.clientTop) + }; +} + var location = WINDOW.location; var REGEXP_ORIGINS = /^(https?:)\/\/([^:/?#]+):?(\d*)/i; @@ -315,11 +634,11 @@ function addTimestamp(url) { } /** - * Get transform values base on the given object. + * Get transforms base on the given object. * @param {Object} obj - The target object. * @returns {string} A string contains transform values. */ -function getTransformValues(_ref) { +function getTransforms(_ref) { var rotate = _ref.rotate, scaleX = _ref.scaleX, scaleY = _ref.scaleY, @@ -349,32 +668,13 @@ function getTransformValues(_ref) { values.push('scaleY(' + scaleY + ')'); } - return values.length ? values.join(' ') : 'none'; -} - -var navigator = WINDOW.navigator; + var transform = values.length ? values.join(' ') : 'none'; -var IS_SAFARI_OR_UIWEBVIEW = navigator && /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(navigator.userAgent); - -/** - * Get an image's natural sizes. - * @param {string} image - The target image. - * @param {Function} callback - The callback function. - */ -function getImageNaturalSizes(image, callback) { - // Modern browsers (except Safari) - if (image.naturalWidth && !IS_SAFARI_OR_UIWEBVIEW) { - callback(image.naturalWidth, image.naturalHeight); - return; - } - - var newImage = document.createElement('img'); - - newImage.onload = function () { - callback(newImage.width, newImage.height); + return { + WebkitTransform: transform, + msTransform: transform, + transform: transform }; - - newImage.src = image.src; } /** @@ -383,13 +683,13 @@ function getImageNaturalSizes(image, callback) { * @returns {number} The result ratio. */ function getMaxZoomRatio(pointers) { - var pointers2 = $.extend({}, pointers); + var pointers2 = assign({}, pointers); var ratios = []; - $.each(pointers, function (pointerId, pointer) { + forEach(pointers, function (pointer, pointerId) { delete pointers2[pointerId]; - $.each(pointers2, function (pointerId2, pointer2) { + forEach(pointers2, function (pointer2) { var x1 = Math.abs(pointer.startX - pointer2.startX); var y1 = Math.abs(pointer.startY - pointer2.startY); var x2 = Math.abs(pointer.endX - pointer2.endX); @@ -424,11 +724,7 @@ function getPointer(_ref2, endOnly) { endY: pageY }; - if (endOnly) { - return end; - } - - return $.extend({ + return endOnly ? end : assign({ startX: pageX, startY: pageY }, end); @@ -444,7 +740,7 @@ function getPointersCenter(pointers) { var pageY = 0; var count = 0; - $.each(pointers, function (pointerId, _ref3) { + forEach(pointers, function (_ref3) { var startX = _ref3.startX, startY = _ref3.startY; @@ -597,7 +893,7 @@ function getSourceCanvas(image, _ref6, _ref7, _ref8) { context.scale(scaleX, scaleY); context.imageSmoothingEnabled = imageSmoothingEnabled; context.imageSmoothingQuality = imageSmoothingQuality; - context.drawImage.apply(context, [image].concat(toConsumableArray($.map(params, function (param) { + context.drawImage.apply(context, [image].concat(toConsumableArray(params.map(function (param) { return Math.floor(normalizeDecimalNumber(param)); })))); context.restore(); @@ -640,7 +936,7 @@ function dataURLToArrayBuffer(dataURL) { var arrayBuffer = new ArrayBuffer(binary.length); var uint8 = new Uint8Array(arrayBuffer); - $.each(uint8, function (i) { + forEach(uint8, function (value, i) { uint8[i] = binary.charCodeAt(i); }); @@ -658,7 +954,7 @@ function arrayBufferToDataURL(arrayBuffer, mimeType) { var data = ''; // TypedArray.prototype.forEach is not supported in some browsers. - $.each(uint8, function (i, value) { + forEach(uint8, function (value) { data += fromCharCode(value); }); @@ -808,51 +1104,58 @@ var render = { } }, initContainer: function initContainer() { - var $element = this.$element, + var element = this.element, options = this.options, - $container = this.$container, - $cropper = this.$cropper; + container = this.container, + cropper = this.cropper; - $cropper.addClass(CLASS_HIDDEN); - $element.removeClass(CLASS_HIDDEN); + addClass(cropper, CLASS_HIDDEN); + removeClass(element, CLASS_HIDDEN); + + var containerData = { + width: Math.max(container.offsetWidth, Number(options.minContainerWidth) || 200), + height: Math.max(container.offsetHeight, Number(options.minContainerHeight) || 100) + }; + + this.containerData = containerData; - $cropper.css(this.container = { - width: Math.max($container.width(), Number(options.minContainerWidth) || 200), - height: Math.max($container.height(), Number(options.minContainerHeight) || 100) + setStyle(cropper, { + width: containerData.width, + height: containerData.height }); - $element.addClass(CLASS_HIDDEN); - $cropper.removeClass(CLASS_HIDDEN); + addClass(element, CLASS_HIDDEN); + removeClass(cropper, CLASS_HIDDEN); }, // Canvas (image wrapper) initCanvas: function initCanvas() { - var container = this.container, - image = this.image; + var containerData = this.containerData, + imageData = this.imageData; var viewMode = this.options.viewMode; - var rotated = Math.abs(image.rotate) % 180 === 90; - var naturalWidth = rotated ? image.naturalHeight : image.naturalWidth; - var naturalHeight = rotated ? image.naturalWidth : image.naturalHeight; + var rotated = Math.abs(imageData.rotate) % 180 === 90; + var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth; + var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight; var aspectRatio = naturalWidth / naturalHeight; - var canvasWidth = container.width; - var canvasHeight = container.height; + var canvasWidth = containerData.width; + var canvasHeight = containerData.height; - if (container.height * aspectRatio > container.width) { + if (containerData.height * aspectRatio > containerData.width) { if (viewMode === 3) { - canvasWidth = container.height * aspectRatio; + canvasWidth = containerData.height * aspectRatio; } else { - canvasHeight = container.width / aspectRatio; + canvasHeight = containerData.width / aspectRatio; } } else if (viewMode === 3) { - canvasHeight = container.width / aspectRatio; + canvasHeight = containerData.width / aspectRatio; } else { - canvasWidth = container.height * aspectRatio; + canvasWidth = containerData.height * aspectRatio; } - var canvas = { + var canvasData = { aspectRatio: aspectRatio, naturalWidth: naturalWidth, naturalHeight: naturalHeight, @@ -860,50 +1163,50 @@ var render = { height: canvasHeight }; - canvas.left = (container.width - canvasWidth) / 2; - canvas.top = (container.height - canvasHeight) / 2; - canvas.oldLeft = canvas.left; - canvas.oldTop = canvas.top; + canvasData.left = (containerData.width - canvasWidth) / 2; + canvasData.top = (containerData.height - canvasHeight) / 2; + canvasData.oldLeft = canvasData.left; + canvasData.oldTop = canvasData.top; - this.canvas = canvas; + this.canvasData = canvasData; this.limited = viewMode === 1 || viewMode === 2; this.limitCanvas(true, true); - this.initialImage = $.extend({}, image); - this.initialCanvas = $.extend({}, canvas); + this.initialImageData = assign({}, imageData); + this.initialCanvasData = assign({}, canvasData); }, - limitCanvas: function limitCanvas(isSizeLimited, isPositionLimited) { + limitCanvas: function limitCanvas(sizeLimited, positionLimited) { var options = this.options, - container = this.container, - canvas = this.canvas, - cropBox = this.cropBox; + containerData = this.containerData, + canvasData = this.canvasData, + cropBoxData = this.cropBoxData; var viewMode = options.viewMode; - var aspectRatio = canvas.aspectRatio; + var aspectRatio = canvasData.aspectRatio; - var cropped = this.cropped && cropBox; + var cropped = this.cropped && cropBoxData; - if (isSizeLimited) { + if (sizeLimited) { var minCanvasWidth = Number(options.minCanvasWidth) || 0; var minCanvasHeight = Number(options.minCanvasHeight) || 0; - if (viewMode > 0) { - if (viewMode > 1) { - minCanvasWidth = Math.max(minCanvasWidth, container.width); - minCanvasHeight = Math.max(minCanvasHeight, container.height); + if (viewMode > 1) { + minCanvasWidth = Math.max(minCanvasWidth, containerData.width); + minCanvasHeight = Math.max(minCanvasHeight, containerData.height); - if (viewMode === 3) { - if (minCanvasHeight * aspectRatio > minCanvasWidth) { - minCanvasWidth = minCanvasHeight * aspectRatio; - } else { - minCanvasHeight = minCanvasWidth / aspectRatio; - } + if (viewMode === 3) { + if (minCanvasHeight * aspectRatio > minCanvasWidth) { + minCanvasWidth = minCanvasHeight * aspectRatio; + } else { + minCanvasHeight = minCanvasWidth / aspectRatio; } - } else if (minCanvasWidth) { - minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBox.width : 0); + } + } else if (viewMode > 0) { + if (minCanvasWidth) { + minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0); } else if (minCanvasHeight) { - minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBox.height : 0); + minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0); } else if (cropped) { - minCanvasWidth = cropBox.width; - minCanvasHeight = cropBox.height; + minCanvasWidth = cropBoxData.width; + minCanvasHeight = cropBoxData.height; if (minCanvasHeight * aspectRatio > minCanvasWidth) { minCanvasWidth = minCanvasHeight * aspectRatio; @@ -923,101 +1226,100 @@ var render = { minCanvasHeight = _getAdjustedSizes.height; - canvas.minWidth = minCanvasWidth; - canvas.minHeight = minCanvasHeight; - canvas.maxWidth = Infinity; - canvas.maxHeight = Infinity; + canvasData.minWidth = minCanvasWidth; + canvasData.minHeight = minCanvasHeight; + canvasData.maxWidth = Infinity; + canvasData.maxHeight = Infinity; } - if (isPositionLimited) { - if (viewMode > 0) { - var newCanvasLeft = container.width - canvas.width; - var newCanvasTop = container.height - canvas.height; + if (positionLimited) { + if (viewMode) { + var newCanvasLeft = containerData.width - canvasData.width; + var newCanvasTop = containerData.height - canvasData.height; - canvas.minLeft = Math.min(0, newCanvasLeft); - canvas.minTop = Math.min(0, newCanvasTop); - canvas.maxLeft = Math.max(0, newCanvasLeft); - canvas.maxTop = Math.max(0, newCanvasTop); + canvasData.minLeft = Math.min(0, newCanvasLeft); + canvasData.minTop = Math.min(0, newCanvasTop); + canvasData.maxLeft = Math.max(0, newCanvasLeft); + canvasData.maxTop = Math.max(0, newCanvasTop); if (cropped && this.limited) { - canvas.minLeft = Math.min(cropBox.left, cropBox.left + cropBox.width - canvas.width); - canvas.minTop = Math.min(cropBox.top, cropBox.top + cropBox.height - canvas.height); - canvas.maxLeft = cropBox.left; - canvas.maxTop = cropBox.top; + canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width)); + canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height)); + canvasData.maxLeft = cropBoxData.left; + canvasData.maxTop = cropBoxData.top; if (viewMode === 2) { - if (canvas.width >= container.width) { - canvas.minLeft = Math.min(0, newCanvasLeft); - canvas.maxLeft = Math.max(0, newCanvasLeft); + if (canvasData.width >= containerData.width) { + canvasData.minLeft = Math.min(0, newCanvasLeft); + canvasData.maxLeft = Math.max(0, newCanvasLeft); } - if (canvas.height >= container.height) { - canvas.minTop = Math.min(0, newCanvasTop); - canvas.maxTop = Math.max(0, newCanvasTop); + if (canvasData.height >= containerData.height) { + canvasData.minTop = Math.min(0, newCanvasTop); + canvasData.maxTop = Math.max(0, newCanvasTop); } } } } else { - canvas.minLeft = -canvas.width; - canvas.minTop = -canvas.height; - canvas.maxLeft = container.width; - canvas.maxTop = container.height; + canvasData.minLeft = -canvasData.width; + canvasData.minTop = -canvasData.height; + canvasData.maxLeft = containerData.width; + canvasData.maxTop = containerData.height; } } }, renderCanvas: function renderCanvas(changed, transformed) { - var canvas = this.canvas, - image = this.image; + var canvasData = this.canvasData, + imageData = this.imageData; if (transformed) { var _getRotatedSizes = getRotatedSizes({ - width: image.naturalWidth * Math.abs(image.scaleX || 1), - height: image.naturalHeight * Math.abs(image.scaleY || 1), - degree: image.rotate || 0 + width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1), + height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1), + degree: imageData.rotate || 0 }), naturalWidth = _getRotatedSizes.width, naturalHeight = _getRotatedSizes.height; - var width = canvas.width * (naturalWidth / canvas.naturalWidth); - var height = canvas.height * (naturalHeight / canvas.naturalHeight); + var width = canvasData.width * (naturalWidth / canvasData.naturalWidth); + var height = canvasData.height * (naturalHeight / canvasData.naturalHeight); - canvas.left -= (width - canvas.width) / 2; - canvas.top -= (height - canvas.height) / 2; - canvas.width = width; - canvas.height = height; - canvas.aspectRatio = naturalWidth / naturalHeight; - canvas.naturalWidth = naturalWidth; - canvas.naturalHeight = naturalHeight; + canvasData.left -= (width - canvasData.width) / 2; + canvasData.top -= (height - canvasData.height) / 2; + canvasData.width = width; + canvasData.height = height; + canvasData.aspectRatio = naturalWidth / naturalHeight; + canvasData.naturalWidth = naturalWidth; + canvasData.naturalHeight = naturalHeight; this.limitCanvas(true, false); } - if (canvas.width > canvas.maxWidth || canvas.width < canvas.minWidth) { - canvas.left = canvas.oldLeft; + if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) { + canvasData.left = canvasData.oldLeft; } - if (canvas.height > canvas.maxHeight || canvas.height < canvas.minHeight) { - canvas.top = canvas.oldTop; + if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) { + canvasData.top = canvasData.oldTop; } - canvas.width = Math.min(Math.max(canvas.width, canvas.minWidth), canvas.maxWidth); - canvas.height = Math.min(Math.max(canvas.height, canvas.minHeight), canvas.maxHeight); + canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth); + canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight); this.limitCanvas(false, true); - canvas.left = Math.min(Math.max(canvas.left, canvas.minLeft), canvas.maxLeft); - canvas.top = Math.min(Math.max(canvas.top, canvas.minTop), canvas.maxTop); - canvas.oldLeft = canvas.left; - canvas.oldTop = canvas.top; - - this.$canvas.css({ - width: canvas.width, - height: canvas.height, - transform: getTransformValues({ - translateX: canvas.left, - translateY: canvas.top - }) - }); + canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft); + canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop); + canvasData.oldLeft = canvasData.left; + canvasData.oldTop = canvasData.top; + + setStyle(this.canvas, assign({ + width: canvasData.width, + height: canvasData.height + }, getTransforms({ + translateX: canvasData.left, + translateY: canvasData.top + }))); this.renderImage(changed); @@ -1026,27 +1328,25 @@ var render = { } }, renderImage: function renderImage(changed) { - var canvas = this.canvas, - image = this.image; + var canvasData = this.canvasData, + imageData = this.imageData; - var width = image.naturalWidth * (canvas.width / canvas.naturalWidth); - var height = image.naturalHeight * (canvas.height / canvas.naturalHeight); + var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth); + var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight); - $.extend(image, { + assign(imageData, { width: width, height: height, - left: (canvas.width - width) / 2, - top: (canvas.height - height) / 2 - }); - - this.$clone.css({ - width: image.width, - height: image.height, - transform: getTransformValues($.extend({ - translateX: image.left, - translateY: image.top - }, image)) + left: (canvasData.width - width) / 2, + top: (canvasData.height - height) / 2 }); + setStyle(this.image, assign({ + width: imageData.width, + height: imageData.height + }, getTransforms(assign({ + translateX: imageData.left, + translateY: imageData.top + }, imageData)))); if (changed) { this.output(); @@ -1054,58 +1354,58 @@ var render = { }, initCropBox: function initCropBox() { var options = this.options, - canvas = this.canvas; + canvasData = this.canvasData; var aspectRatio = options.aspectRatio; var autoCropArea = Number(options.autoCropArea) || 0.8; - var cropBox = { - width: canvas.width, - height: canvas.height + var cropBoxData = { + width: canvasData.width, + height: canvasData.height }; if (aspectRatio) { - if (canvas.height * aspectRatio > canvas.width) { - cropBox.height = cropBox.width / aspectRatio; + if (canvasData.height * aspectRatio > canvasData.width) { + cropBoxData.height = cropBoxData.width / aspectRatio; } else { - cropBox.width = cropBox.height * aspectRatio; + cropBoxData.width = cropBoxData.height * aspectRatio; } } - this.cropBox = cropBox; + this.cropBoxData = cropBoxData; this.limitCropBox(true, true); // Initialize auto crop area - cropBox.width = Math.min(Math.max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); - cropBox.height = Math.min(Math.max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); - - // The width of auto crop area must large than "minWidth", and the height too. (#164) - cropBox.width = Math.max(cropBox.minWidth, cropBox.width * autoCropArea); - cropBox.height = Math.max(cropBox.minHeight, cropBox.height * autoCropArea); - cropBox.left = canvas.left + (canvas.width - cropBox.width) / 2; - cropBox.top = canvas.top + (canvas.height - cropBox.height) / 2; - cropBox.oldLeft = cropBox.left; - cropBox.oldTop = cropBox.top; - - this.initialCropBox = $.extend({}, cropBox); + cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth); + cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight); + + // The width/height of auto crop area must large than "minWidth/Height" + cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea); + cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea); + cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2; + cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2; + cropBoxData.oldLeft = cropBoxData.left; + cropBoxData.oldTop = cropBoxData.top; + + this.initialCropBoxData = assign({}, cropBoxData); }, - limitCropBox: function limitCropBox(isSizeLimited, isPositionLimited) { + limitCropBox: function limitCropBox(sizeLimited, positionLimited) { var options = this.options, - container = this.container, - canvas = this.canvas, - cropBox = this.cropBox, + containerData = this.containerData, + canvasData = this.canvasData, + cropBoxData = this.cropBoxData, limited = this.limited; var aspectRatio = options.aspectRatio; - if (isSizeLimited) { + if (sizeLimited) { var minCropBoxWidth = Number(options.minCropBoxWidth) || 0; var minCropBoxHeight = Number(options.minCropBoxHeight) || 0; - var maxCropBoxWidth = Math.min(container.width, limited ? canvas.width : container.width); - var maxCropBoxHeight = Math.min(container.height, limited ? canvas.height : container.height); + var maxCropBoxWidth = Math.min(containerData.width, limited ? canvasData.width : containerData.width); + var maxCropBoxHeight = Math.min(containerData.height, limited ? canvasData.height : containerData.height); - // The min/maxCropBoxWidth/Height must be less than container's width/Height - minCropBoxWidth = Math.min(minCropBoxWidth, container.width); - minCropBoxHeight = Math.min(minCropBoxHeight, container.height); + // The min/maxCropBoxWidth/Height must be less than container's width/height + minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width); + minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height); if (aspectRatio) { if (minCropBoxWidth && minCropBoxHeight) { @@ -1128,63 +1428,62 @@ var render = { } // The minWidth/Height must be less than maxWidth/Height - cropBox.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth); - cropBox.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight); - cropBox.maxWidth = maxCropBoxWidth; - cropBox.maxHeight = maxCropBoxHeight; + cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth); + cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight); + cropBoxData.maxWidth = maxCropBoxWidth; + cropBoxData.maxHeight = maxCropBoxHeight; } - if (isPositionLimited) { + if (positionLimited) { if (limited) { - cropBox.minLeft = Math.max(0, canvas.left); - cropBox.minTop = Math.max(0, canvas.top); - cropBox.maxLeft = Math.min(container.width, canvas.left + canvas.width) - cropBox.width; - cropBox.maxTop = Math.min(container.height, canvas.top + canvas.height) - cropBox.height; + cropBoxData.minLeft = Math.max(0, canvasData.left); + cropBoxData.minTop = Math.max(0, canvasData.top); + cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width; + cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height; } else { - cropBox.minLeft = 0; - cropBox.minTop = 0; - cropBox.maxLeft = container.width - cropBox.width; - cropBox.maxTop = container.height - cropBox.height; + cropBoxData.minLeft = 0; + cropBoxData.minTop = 0; + cropBoxData.maxLeft = containerData.width - cropBoxData.width; + cropBoxData.maxTop = containerData.height - cropBoxData.height; } } }, renderCropBox: function renderCropBox() { var options = this.options, - container = this.container, - cropBox = this.cropBox; + containerData = this.containerData, + cropBoxData = this.cropBoxData; - if (cropBox.width > cropBox.maxWidth || cropBox.width < cropBox.minWidth) { - cropBox.left = cropBox.oldLeft; + if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) { + cropBoxData.left = cropBoxData.oldLeft; } - if (cropBox.height > cropBox.maxHeight || cropBox.height < cropBox.minHeight) { - cropBox.top = cropBox.oldTop; + if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) { + cropBoxData.top = cropBoxData.oldTop; } - cropBox.width = Math.min(Math.max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); - cropBox.height = Math.min(Math.max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); + cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth); + cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight); this.limitCropBox(false, true); - cropBox.left = Math.min(Math.max(cropBox.left, cropBox.minLeft), cropBox.maxLeft); - cropBox.top = Math.min(Math.max(cropBox.top, cropBox.minTop), cropBox.maxTop); - cropBox.oldLeft = cropBox.left; - cropBox.oldTop = cropBox.top; + cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft); + cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop); + cropBoxData.oldLeft = cropBoxData.left; + cropBoxData.oldTop = cropBoxData.top; if (options.movable && options.cropBoxMovable) { // Turn to move the canvas when the crop box is equal to the container - this.$face.data(DATA_ACTION, cropBox.width >= container.width && cropBox.height >= container.height ? ACTION_MOVE : ACTION_ALL); + setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL); } - this.$cropBox.css({ - width: cropBox.width, - height: cropBox.height, - transform: getTransformValues({ - translateX: cropBox.left, - translateY: cropBox.top - }) - }); + setStyle(this.cropBox, assign({ + width: cropBoxData.width, + height: cropBoxData.height + }, getTransforms({ + translateX: cropBoxData.left, + translateY: cropBoxData.top + }))); if (this.cropped && this.limited) { this.limitCanvas(true, true); @@ -1196,16 +1495,14 @@ var render = { }, output: function output() { this.preview(); - - if (this.completed) { - this.trigger(EVENT_CROP, this.getData()); - } + dispatchEvent(this.element, EVENT_CROP, this.getData()); } }; var preview = { initPreview: function initPreview() { var crossOrigin = this.crossOrigin; + var preview = this.options.preview; var url = crossOrigin ? this.crossOriginUrl : this.url; var image = document.createElement('img'); @@ -1215,21 +1512,31 @@ var preview = { } image.src = url; + this.viewBox.appendChild(image); + this.viewBoxImage = image; - var $clone2 = $(image); + if (!preview) { + return; + } - this.$preview = $(this.options.preview); - this.$clone2 = $clone2; - this.$viewBox.html($clone2); - this.$preview.each(function (i, element) { - var $element = $(element); + var previews = preview; + + if (typeof preview === 'string') { + previews = this.element.ownerDocument.querySelectorAll(preview); + } else if (preview.querySelector) { + previews = [preview]; + } + + this.previews = previews; + + forEach(previews, function (el) { var img = document.createElement('img'); // Save the original size for recover - $element.data(DATA_PREVIEW, { - width: $element.width(), - height: $element.height(), - html: $element.html() + setData(el, DATA_PREVIEW, { + width: el.offsetWidth, + height: el.offsetHeight, + html: el.innerHTML }); if (crossOrigin) { @@ -1246,48 +1553,49 @@ var preview = { */ 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;"'; - $element.html(img); + el.innerHTML = ''; + el.appendChild(img); }); }, resetPreview: function resetPreview() { - this.$preview.each(function (i, element) { - var $element = $(element); - var data = $element.data(DATA_PREVIEW); + forEach(this.previews, function (element) { + var data = getData(element, DATA_PREVIEW); - $element.css({ + setStyle(element, { width: data.width, height: data.height - }).html(data.html).removeData(DATA_PREVIEW); + }); + + element.innerHTML = data.html; + removeData(element, DATA_PREVIEW); }); }, preview: function preview() { - var image = this.image, - canvas = this.canvas, - cropBox = this.cropBox; - var cropBoxWidth = cropBox.width, - cropBoxHeight = cropBox.height; - var width = image.width, - height = image.height; + var imageData = this.imageData, + canvasData = this.canvasData, + cropBoxData = this.cropBoxData; + var cropBoxWidth = cropBoxData.width, + cropBoxHeight = cropBoxData.height; + var width = imageData.width, + height = imageData.height; - var left = cropBox.left - canvas.left - image.left; - var top = cropBox.top - canvas.top - image.top; + var left = cropBoxData.left - canvasData.left - imageData.left; + var top = cropBoxData.top - canvasData.top - imageData.top; if (!this.cropped || this.disabled) { return; } - this.$clone2.css({ + setStyle(this.viewBoxImage, assign({ width: width, - height: height, - transform: getTransformValues($.extend({ - translateX: -left, - translateY: -top - }, image)) - }); - - this.$preview.each(function (i, element) { - var $element = $(element); - var data = $element.data(DATA_PREVIEW); + height: height + }, getTransforms(assign({ + translateX: -left, + translateY: -top + }, imageData)))); + + forEach(this.previews, function (element) { + var data = getData(element, DATA_PREVIEW); var originalWidth = data.width; var originalHeight = data.height; var newWidth = originalWidth; @@ -1305,104 +1613,107 @@ var preview = { newHeight = originalHeight; } - $element.css({ + setStyle(element, { width: newWidth, height: newHeight - }).find('img').css({ - width: width * ratio, - height: height * ratio, - transform: getTransformValues($.extend({ - translateX: -left * ratio, - translateY: -top * ratio - }, image)) }); + + setStyle(element.getElementsByTagName('img')[0], assign({ + width: width * ratio, + height: height * ratio + }, getTransforms(assign({ + translateX: -left * ratio, + translateY: -top * ratio + }, imageData)))); }); } }; var events = { bind: function bind() { - var $element = this.$element, + var element = this.element, options = this.options, - $cropper = this.$cropper; + cropper = this.cropper; - if ($.isFunction(options.cropstart)) { - $element.on(EVENT_CROP_START, options.cropstart); + if (isFunction(options.cropstart)) { + addListener(element, EVENT_CROP_START, options.cropstart); } - if ($.isFunction(options.cropmove)) { - $element.on(EVENT_CROP_MOVE, options.cropmove); + if (isFunction(options.cropmove)) { + addListener(element, EVENT_CROP_MOVE, options.cropmove); } - if ($.isFunction(options.cropend)) { - $element.on(EVENT_CROP_END, options.cropend); + if (isFunction(options.cropend)) { + addListener(element, EVENT_CROP_END, options.cropend); } - if ($.isFunction(options.crop)) { - $element.on(EVENT_CROP, options.crop); + if (isFunction(options.crop)) { + addListener(element, EVENT_CROP, options.crop); } - if ($.isFunction(options.zoom)) { - $element.on(EVENT_ZOOM, options.zoom); + if (isFunction(options.zoom)) { + addListener(element, EVENT_ZOOM, options.zoom); } - $cropper.on(EVENT_POINTER_DOWN, proxy(this.cropStart, this)); + addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this)); if (options.zoomable && options.zoomOnWheel) { - $cropper.on(EVENT_WHEEL, proxy(this.wheel, this)); + addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this)); } if (options.toggleDragModeOnDblclick) { - $cropper.on(EVENT_DBLCLICK, proxy(this.dblclick, this)); + addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this)); } - $(this.element.ownerDocument).on(EVENT_POINTER_MOVE, this.onCropMove = proxy(this.cropMove, this)).on(EVENT_POINTER_UP, this.onCropEnd = proxy(this.cropEnd, this)); + addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this)); + addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this)); if (options.responsive) { - $(window).on(EVENT_RESIZE, this.onResize = proxy(this.resize, this)); + addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this)); } }, unbind: function unbind() { - var $element = this.$element, + var element = this.element, options = this.options, - $cropper = this.$cropper; + cropper = this.cropper; - if ($.isFunction(options.cropstart)) { - $element.off(EVENT_CROP_START, options.cropstart); + if (isFunction(options.cropstart)) { + removeListener(element, EVENT_CROP_START, options.cropstart); } - if ($.isFunction(options.cropmove)) { - $element.off(EVENT_CROP_MOVE, options.cropmove); + if (isFunction(options.cropmove)) { + removeListener(element, EVENT_CROP_MOVE, options.cropmove); } - if ($.isFunction(options.cropend)) { - $element.off(EVENT_CROP_END, options.cropend); + if (isFunction(options.cropend)) { + removeListener(element, EVENT_CROP_END, options.cropend); } - if ($.isFunction(options.crop)) { - $element.off(EVENT_CROP, options.crop); + if (isFunction(options.crop)) { + removeListener(element, EVENT_CROP, options.crop); } - if ($.isFunction(options.zoom)) { - $element.off(EVENT_ZOOM, options.zoom); + if (isFunction(options.zoom)) { + removeListener(element, EVENT_ZOOM, options.zoom); } - $cropper.off(EVENT_POINTER_DOWN, this.cropStart); + removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart); if (options.zoomable && options.zoomOnWheel) { - $cropper.off(EVENT_WHEEL, this.wheel); + removeListener(cropper, EVENT_WHEEL, this.onWheel); } if (options.toggleDragModeOnDblclick) { - $cropper.off(EVENT_DBLCLICK, this.dblclick); + removeListener(cropper, EVENT_DBLCLICK, this.onDblclick); } - $(this.element.ownerDocument).off(EVENT_POINTER_MOVE, this.onCropMove).off(EVENT_POINTER_UP, this.onCropEnd); + removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove); + removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd); if (options.responsive) { - $(window).off(EVENT_RESIZE, this.onResize); + removeListener(window, EVENT_RESIZE, this.onResize); } } }; @@ -1410,20 +1721,20 @@ var events = { var handlers = { resize: function resize() { var options = this.options, - $container = this.$container, - container = this.container; + container = this.container, + containerData = this.containerData; var minContainerWidth = Number(options.minContainerWidth) || 200; var minContainerHeight = Number(options.minContainerHeight) || 100; - if (this.disabled || container.width <= minContainerWidth || container.height <= minContainerHeight) { + if (this.disabled || containerData.width <= minContainerWidth || containerData.height <= minContainerHeight) { return; } - var ratio = $container.width() / container.width; + var ratio = container.offsetWidth / containerData.width; // Resize when width changed or height changed - if (ratio !== 1 || $container.height() !== container.height) { + if (ratio !== 1 || container.offsetHeight !== containerData.height) { var canvasData = void 0; var cropBoxData = void 0; @@ -1435,10 +1746,10 @@ var handlers = { this.render(); if (options.restore) { - this.setCanvasData($.each(canvasData, function (i, n) { + this.setCanvasData(forEach(canvasData, function (n, i) { canvasData[i] = n * ratio; })); - this.setCropBoxData($.each(cropBoxData, function (i, n) { + this.setCropBoxData(forEach(cropBoxData, function (n, i) { cropBoxData[i] = n * ratio; })); } @@ -1449,21 +1760,21 @@ var handlers = { return; } - this.setDragMode(this.$dragBox.hasClass(CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP); + this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP); }, - wheel: function wheel(event) { + wheel: function wheel(e) { var _this = this; - var e = event.originalEvent || event; var ratio = Number(this.options.wheelZoomRatio) || 0.1; + var delta = 1; if (this.disabled) { return; } - event.preventDefault(); + e.preventDefault(); - // Limit wheel speed to prevent zoom too fast + // Limit wheel speed to prevent zoom too fast (#21) if (this.wheeling) { return; } @@ -1474,8 +1785,6 @@ var handlers = { _this.wheeling = false; }, 50); - var delta = 1; - if (e.deltaY) { delta = e.deltaY > 0 ? 1 : -1; } else if (e.wheelDelta) { @@ -1484,7 +1793,7 @@ var handlers = { delta = e.detail > 0 ? 1 : -1; } - this.zoom(-delta * ratio, event); + this.zoom(-delta * ratio, e); }, cropStart: function cropStart(e) { if (this.disabled) { @@ -1493,34 +1802,33 @@ var handlers = { var options = this.options, pointers = this.pointers; - var originalEvent = e.originalEvent; var action = void 0; - if (originalEvent && originalEvent.changedTouches) { + if (e.changedTouches) { // Handle touch event - $.each(originalEvent.changedTouches, function (i, touch) { + forEach(e.changedTouches, function (touch) { pointers[touch.identifier] = getPointer(touch); }); } else { // Handle mouse event and pointer event - pointers[originalEvent && originalEvent.pointerId || 0] = getPointer(originalEvent || e); + pointers[e.pointerId || 0] = getPointer(e); } - if (objectKeys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) { + if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) { action = ACTION_ZOOM; } else { - action = $(e.target).data(DATA_ACTION); + action = getData(e.target, DATA_ACTION); } if (!REGEXP_ACTIONS.test(action)) { return; } - if (this.trigger(EVENT_CROP_START, { - originalEvent: originalEvent, + if (dispatchEvent(this.element, EVENT_CROP_START, { + originalEvent: e, action: action - }).isDefaultPrevented()) { + }) === false) { return; } @@ -1531,7 +1839,7 @@ var handlers = { if (action === ACTION_CROP) { this.cropping = true; - this.$dragBox.addClass(CLASS_MODAL); + addClass(this.dragBox, CLASS_MODAL); } }, cropMove: function cropMove(e) { @@ -1543,24 +1851,23 @@ var handlers = { } var pointers = this.pointers; - var originalEvent = e.originalEvent; e.preventDefault(); - if (this.trigger(EVENT_CROP_MOVE, { - originalEvent: originalEvent, + if (dispatchEvent(this.element, EVENT_CROP_MOVE, { + originalEvent: e, action: action - }).isDefaultPrevented()) { + }) === false) { return; } - if (originalEvent && originalEvent.changedTouches) { - $.each(originalEvent.changedTouches, function (i, touch) { - $.extend(pointers[touch.identifier], getPointer(touch, true)); + if (e.changedTouches) { + forEach(e.changedTouches, function (touch) { + assign(pointers[touch.identifier], getPointer(touch, true)); }); } else { - $.extend(pointers[originalEvent && originalEvent.pointerId || 0], getPointer(originalEvent || e, true)); + assign(pointers[e.pointerId || 0], getPointer(e, true)); } this.change(e); @@ -1570,17 +1877,16 @@ var handlers = { return; } - var action = this.action; - var pointers = this.pointers; - var originalEvent = e.originalEvent; + var action = this.action, + pointers = this.pointers; - if (originalEvent && originalEvent.changedTouches) { - $.each(originalEvent.changedTouches, function (i, touch) { + if (e.changedTouches) { + forEach(e.changedTouches, function (touch) { delete pointers[touch.identifier]; }); } else { - delete pointers[originalEvent && originalEvent.pointerId || 0]; + delete pointers[e.pointerId || 0]; } if (!action) { @@ -1589,17 +1895,17 @@ var handlers = { e.preventDefault(); - if (!objectKeys(pointers).length) { + if (!Object.keys(pointers).length) { this.action = ''; } if (this.cropping) { this.cropping = false; - this.$dragBox.toggleClass(CLASS_MODAL, this.cropped && this.options.modal); + toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal); } - this.trigger(EVENT_CROP_END, { - originalEvent: originalEvent, + dispatchEvent(this.element, EVENT_CROP_END, { + originalEvent: e, action: action }); } @@ -1608,40 +1914,40 @@ var handlers = { var change = { change: function change(e) { var options = this.options, - pointers = this.pointers, - container = this.container, - canvas = this.canvas, - cropBox = this.cropBox; + canvasData = this.canvasData, + containerData = this.containerData, + cropBoxData = this.cropBoxData, + pointers = this.pointers; var action = this.action; var aspectRatio = options.aspectRatio; - var left = cropBox.left, - top = cropBox.top, - width = cropBox.width, - height = cropBox.height; + var left = cropBoxData.left, + top = cropBoxData.top, + width = cropBoxData.width, + height = cropBoxData.height; var right = left + width; var bottom = top + height; var minLeft = 0; var minTop = 0; - var maxWidth = container.width; - var maxHeight = container.height; + var maxWidth = containerData.width; + var maxHeight = containerData.height; var renderable = true; var offset = void 0; - // Locking aspect ratio in "free mode" by holding shift key (#259) + // Locking aspect ratio in "free mode" by holding shift key if (!aspectRatio && e.shiftKey) { aspectRatio = width && height ? width / height : 1; } if (this.limited) { - minLeft = cropBox.minLeft; - minTop = cropBox.minTop; + minLeft = cropBoxData.minLeft; + minTop = cropBoxData.minTop; - maxWidth = minLeft + Math.min(container.width, canvas.width, canvas.left + canvas.width); - maxHeight = minTop + Math.min(container.height, canvas.height, canvas.top + canvas.height); + maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width); + maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height); } - var pointer = pointers[objectKeys(pointers)[0]]; + var pointer = pointers[Object.keys(pointers)[0]]; var range = { x: pointer.endX - pointer.startX, y: pointer.endY - pointer.startY @@ -1982,7 +2288,7 @@ var change = { // Zoom canvas case ACTION_ZOOM: - this.zoom(getMaxZoomRatio(pointers), e.originalEvent); + this.zoom(getMaxZoomRatio(pointers), e); renderable = false; break; @@ -1993,11 +2299,11 @@ var change = { break; } - offset = this.$cropper.offset(); + offset = getOffset(this.cropper); left = pointer.startX - offset.left; top = pointer.startY - offset.top; - width = cropBox.minWidth; - height = cropBox.minHeight; + width = cropBoxData.minWidth; + height = cropBoxData.minHeight; if (range.x > 0) { action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST; @@ -2012,7 +2318,7 @@ var change = { // Show the crop box if is hidden if (!this.cropped) { - this.$cropBox.removeClass(CLASS_HIDDEN); + removeClass(this.cropBox, CLASS_HIDDEN); this.cropped = true; if (this.limited) { @@ -2026,16 +2332,16 @@ var change = { } if (renderable) { - cropBox.width = width; - cropBox.height = height; - cropBox.left = left; - cropBox.top = top; + cropBoxData.width = width; + cropBoxData.height = height; + cropBoxData.left = left; + cropBoxData.top = top; this.action = action; this.renderCropBox(); } // Override - $.each(pointers, function (i, p) { + forEach(pointers, function (p) { p.startX = p.endX; p.startY = p.endY; }); @@ -2045,149 +2351,162 @@ var change = { var methods = { // Show the crop box manually crop: function crop() { - if (!this.ready || this.disabled) { - return; - } - - if (!this.cropped) { + if (this.ready && !this.cropped && !this.disabled) { this.cropped = true; this.limitCropBox(true, true); if (this.options.modal) { - this.$dragBox.addClass(CLASS_MODAL); + addClass(this.dragBox, CLASS_MODAL); } - this.$cropBox.removeClass(CLASS_HIDDEN); + removeClass(this.cropBox, CLASS_HIDDEN); + this.setCropBoxData(this.initialCropBoxData); } - this.setCropBoxData(this.initialCropBox); + return this; }, // Reset the image and crop box to their initial states reset: function reset() { - if (!this.ready || this.disabled) { - return; - } + if (this.ready && !this.disabled) { + this.imageData = assign({}, this.initialImageData); + this.canvasData = assign({}, this.initialCanvasData); + this.cropBoxData = assign({}, this.initialCropBoxData); + this.renderCanvas(); - this.image = $.extend({}, this.initialImage); - this.canvas = $.extend({}, this.initialCanvas); - this.cropBox = $.extend({}, this.initialCropBox); - this.renderCanvas(); - - if (this.cropped) { - this.renderCropBox(); + if (this.cropped) { + this.renderCropBox(); + } } + + return this; }, // Clear the crop box clear: function clear() { - if (!this.cropped || this.disabled) { - return; - } + if (this.cropped && !this.disabled) { + assign(this.cropBoxData, { + left: 0, + top: 0, + width: 0, + height: 0 + }); - $.extend(this.cropBox, { - left: 0, - top: 0, - width: 0, - height: 0 - }); + this.cropped = false; + this.renderCropBox(); + this.limitCanvas(true, true); - this.cropped = false; - this.renderCropBox(); - this.limitCanvas(true, true); + // Render canvas after crop box rendered + this.renderCanvas(); + removeClass(this.dragBox, CLASS_MODAL); + addClass(this.cropBox, CLASS_HIDDEN); + } - // Render canvas after crop box rendered - this.renderCanvas(); - this.$dragBox.removeClass(CLASS_MODAL); - this.$cropBox.addClass(CLASS_HIDDEN); + return this; }, /** * Replace the image's src and rebuild the cropper * @param {string} url - The new URL. - * @param {boolean} [onlyColorChanged] - Indicate if the new image only changed color. + * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one. + * @returns {Cropper} this */ - replace: function replace(url, onlyColorChanged) { + replace: function replace(url) { + var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + if (!this.disabled && url) { if (this.isImg) { - this.$element.attr('src', url); + this.element.src = url; } - if (onlyColorChanged) { + if (hasSameSize) { this.url = url; - this.$clone.attr('src', url); + this.image.src = url; if (this.ready) { - this.$preview.find('img').add(this.$clone2).attr('src', url); + this.viewBoxImage.src = url; + + forEach(this.previews, function (element) { + element.getElementsByTagName('img')[0].src = url; + }); } } else { if (this.isImg) { this.replaced = true; } - // Clear previous data this.options.data = null; + this.uncreate(); this.load(url); } } + + return this; }, // Enable (unfreeze) the cropper enable: function enable() { - if (this.ready) { + if (this.ready && this.disabled) { this.disabled = false; - this.$cropper.removeClass(CLASS_DISABLED); + removeClass(this.cropper, CLASS_DISABLED); } + + return this; }, // Disable (freeze) the cropper disable: function disable() { - if (this.ready) { + if (this.ready && !this.disabled) { this.disabled = true; - this.$cropper.addClass(CLASS_DISABLED); + addClass(this.cropper, CLASS_DISABLED); } + + return this; }, - // Destroy the cropper and remove the instance from the image + /** + * Destroy the cropper and remove the instance from the image + * @returns {Cropper} this + */ destroy: function destroy() { - var $element = this.$element; + var element = this.element; - if (this.loaded) { - if (this.isImg && this.replaced) { - $element.attr('src', this.originalUrl); - } + if (!getData(element, NAMESPACE)) { + return this; + } - this.unbuild(); - $element.removeClass(CLASS_HIDDEN); - } else if (this.isImg) { - $element.off(EVENT_LOAD, this.start); - } else if (this.$clone) { - this.$clone.remove(); + if (this.isImg && this.replaced) { + element.src = this.originalUrl; } - $element.removeData(NAMESPACE); + this.uncreate(); + removeData(element, NAMESPACE); + + return this; }, /** * Move the canvas with relative offsets * @param {number} offsetX - The relative offset distance on the x-axis. - * @param {number} offsetY - The relative offset distance on the y-axis. + * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis. + * @returns {Cropper} this */ - move: function move(offsetX, offsetY) { - var _canvas = this.canvas, - left = _canvas.left, - top = _canvas.top; + move: function move(offsetX) { + var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX; + var _canvasData = this.canvasData, + left = _canvasData.left, + top = _canvasData.top; - this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY)); + return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY)); }, @@ -2195,28 +2514,25 @@ var methods = { * Move the canvas to an absolute point * @param {number} x - The x-axis coordinate. * @param {number} [y=x] - The y-axis coordinate. + * @returns {Cropper} this */ - moveTo: function moveTo(x, y) { - var canvas = this.canvas; + moveTo: function moveTo(x) { + var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x; + var canvasData = this.canvasData; var changed = false; - // If "y" is not present, its default value is "x" - if (isUndefined(y)) { - y = x; - } - x = Number(x); y = Number(y); if (this.ready && !this.disabled && this.options.movable) { if (isNumber(x)) { - canvas.left = x; + canvasData.left = x; changed = true; } if (isNumber(y)) { - canvas.top = y; + canvasData.top = y; changed = true; } @@ -2224,16 +2540,19 @@ var methods = { this.renderCanvas(true); } } + + return this; }, /** * Zoom the canvas with a relative ratio - * @param {Number} ratio - The target ratio. - * @param {Event} _event - The related event if any. + * @param {number} ratio - The target ratio. + * @param {Event} _originalEvent - The original event if any. + * @returns {Cropper} this */ - zoom: function zoom(ratio, _event) { - var canvas = this.canvas; + zoom: function zoom(ratio, _originalEvent) { + var canvasData = this.canvasData; ratio = Number(ratio); @@ -2244,23 +2563,24 @@ var methods = { ratio = 1 + ratio; } - this.zoomTo(canvas.width * ratio / canvas.naturalWidth, _event); + return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent); }, /** * Zoom the canvas to an absolute ratio * @param {number} ratio - The target ratio. - * @param {Event} _event - The related event if any. + * @param {Object} pivot - The zoom pivot point coordinate. + * @param {Event} _originalEvent - The original event if any. + * @returns {Cropper} this */ - zoomTo: function zoomTo(ratio, _event) { + zoomTo: function zoomTo(ratio, pivot, _originalEvent) { var options = this.options, - pointers = this.pointers, - canvas = this.canvas; - var width = canvas.width, - height = canvas.height, - naturalWidth = canvas.naturalWidth, - naturalHeight = canvas.naturalHeight; + canvasData = this.canvasData; + var width = canvasData.width, + height = canvasData.height, + naturalWidth = canvasData.naturalWidth, + naturalHeight = canvasData.naturalHeight; ratio = Number(ratio); @@ -2268,87 +2588,95 @@ var methods = { if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) { var newWidth = naturalWidth * ratio; var newHeight = naturalHeight * ratio; - var originalEvent = void 0; - - if (_event) { - originalEvent = _event.originalEvent; - } - if (this.trigger(EVENT_ZOOM, { - originalEvent: originalEvent, + if (dispatchEvent(this.element, EVENT_ZOOM, { + originalEvent: _originalEvent, oldRatio: width / naturalWidth, ratio: newWidth / naturalWidth - }).isDefaultPrevented()) { - return; + }) === false) { + return this; } - if (originalEvent) { - var offset = this.$cropper.offset(); - var center = pointers && objectKeys(pointers).length ? getPointersCenter(pointers) : { - pageX: _event.pageX || originalEvent.pageX || 0, - pageY: _event.pageY || originalEvent.pageY || 0 + if (_originalEvent) { + var pointers = this.pointers; + + var offset = getOffset(this.cropper); + var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : { + pageX: _originalEvent.pageX, + pageY: _originalEvent.pageY }; // Zoom from the triggering point of the event - canvas.left -= (newWidth - width) * ((center.pageX - offset.left - canvas.left) / width); - canvas.top -= (newHeight - height) * ((center.pageY - offset.top - canvas.top) / height); + canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width); + canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height); + } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) { + canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width); + canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height); } else { // Zoom from the center of the canvas - canvas.left -= (newWidth - width) / 2; - canvas.top -= (newHeight - height) / 2; + canvasData.left -= (newWidth - width) / 2; + canvasData.top -= (newHeight - height) / 2; } - canvas.width = newWidth; - canvas.height = newHeight; + canvasData.width = newWidth; + canvasData.height = newHeight; this.renderCanvas(true); } + + return this; }, /** * Rotate the canvas with a relative degree * @param {number} degree - The rotate degree. + * @returns {Cropper} this */ rotate: function rotate(degree) { - this.rotateTo((this.image.rotate || 0) + Number(degree)); + return this.rotateTo((this.imageData.rotate || 0) + Number(degree)); }, /** * Rotate the canvas to an absolute degree * @param {number} degree - The rotate degree. + * @returns {Cropper} this */ rotateTo: function rotateTo(degree) { degree = Number(degree); if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) { - this.image.rotate = degree % 360; + this.imageData.rotate = degree % 360; this.renderCanvas(true, true); } + + return this; }, /** * Scale the image on the x-axis. * @param {number} scaleX - The scale ratio on the x-axis. + * @returns {Cropper} this */ scaleX: function scaleX(_scaleX) { - var scaleY = this.image.scaleY; + var scaleY = this.imageData.scaleY; - this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1); + return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1); }, /** * Scale the image on the y-axis. * @param {number} scaleY - The scale ratio on the y-axis. + * @returns {Cropper} this */ scaleY: function scaleY(_scaleY) { - var scaleX = this.image.scaleX; + var scaleX = this.imageData.scaleX; - this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY); + return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY); }, @@ -2356,10 +2684,11 @@ var methods = { * Scale the image * @param {number} scaleX - The scale ratio on the x-axis. * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis. + * @returns {Cropper} this */ scale: function scale(scaleX) { var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX; - var image = this.image; + var imageData = this.imageData; var transformed = false; @@ -2368,12 +2697,12 @@ var methods = { if (this.ready && !this.disabled && this.options.scalable) { if (isNumber(scaleX)) { - image.scaleX = scaleX; + imageData.scaleX = scaleX; transformed = true; } if (isNumber(scaleY)) { - image.scaleY = scaleY; + imageData.scaleY = scaleY; transformed = true; } @@ -2381,6 +2710,8 @@ var methods = { this.renderCanvas(true, true); } } + + return this; }, @@ -2389,26 +2720,26 @@ var methods = { * @param {boolean} [rounded=false] - Indicate if round the data values or not. * @returns {Object} The result cropped data. */ - getData: function getData() { + getData: function getData$$1() { var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var options = this.options, - image = this.image, - canvas = this.canvas, - cropBox = this.cropBox; + imageData = this.imageData, + canvasData = this.canvasData, + cropBoxData = this.cropBoxData; var data = void 0; if (this.ready && this.cropped) { data = { - x: cropBox.left - canvas.left, - y: cropBox.top - canvas.top, - width: cropBox.width, - height: cropBox.height + x: cropBoxData.left - canvasData.left, + y: cropBoxData.top - canvasData.top, + width: cropBoxData.width, + height: cropBoxData.height }; - var ratio = image.width / image.naturalWidth; + var ratio = imageData.width / imageData.naturalWidth; - $.each(data, function (i, n) { + forEach(data, function (n, i) { n /= ratio; data[i] = rounded ? Math.round(n) : n; }); @@ -2422,12 +2753,12 @@ var methods = { } if (options.rotatable) { - data.rotate = image.rotate || 0; + data.rotate = imageData.rotate || 0; } if (options.scalable) { - data.scaleX = image.scaleX || 1; - data.scaleY = image.scaleY || 1; + data.scaleX = imageData.scaleX || 1; + data.scaleY = imageData.scaleY || 1; } return data; @@ -2437,36 +2768,33 @@ var methods = { /** * Set the cropped area position and size with new data * @param {Object} data - The new data. + * @returns {Cropper} this */ - setData: function setData(data) { + setData: function setData$$1(data) { var options = this.options, - image = this.image, - canvas = this.canvas; + imageData = this.imageData, + canvasData = this.canvasData; var cropBoxData = {}; - if ($.isFunction(data)) { - data = data.call(this.element); - } - - if (this.ready && !this.disabled && $.isPlainObject(data)) { + if (this.ready && !this.disabled && isPlainObject(data)) { var transformed = false; if (options.rotatable) { - if (isNumber(data.rotate) && data.rotate !== image.rotate) { - image.rotate = data.rotate; + if (isNumber(data.rotate) && data.rotate !== imageData.rotate) { + imageData.rotate = data.rotate; transformed = true; } } if (options.scalable) { - if (isNumber(data.scaleX) && data.scaleX !== image.scaleX) { - image.scaleX = data.scaleX; + if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) { + imageData.scaleX = data.scaleX; transformed = true; } - if (isNumber(data.scaleY) && data.scaleY !== image.scaleY) { - image.scaleY = data.scaleY; + if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) { + imageData.scaleY = data.scaleY; transformed = true; } } @@ -2475,14 +2803,14 @@ var methods = { this.renderCanvas(true, true); } - var ratio = image.width / image.naturalWidth; + var ratio = imageData.width / imageData.naturalWidth; if (isNumber(data.x)) { - cropBoxData.left = data.x * ratio + canvas.left; + cropBoxData.left = data.x * ratio + canvasData.left; } if (isNumber(data.y)) { - cropBoxData.top = data.y * ratio + canvas.top; + cropBoxData.top = data.y * ratio + canvasData.top; } if (isNumber(data.width)) { @@ -2495,6 +2823,8 @@ var methods = { this.setCropBoxData(cropBoxData); } + + return this; }, @@ -2503,7 +2833,7 @@ var methods = { * @returns {Object} The result container data. */ getContainerData: function getContainerData() { - return this.ready ? $.extend({}, this.container) : {}; + return this.ready ? assign({}, this.containerData) : {}; }, @@ -2512,7 +2842,7 @@ var methods = { * @returns {Object} The result image data. */ getImageData: function getImageData() { - return this.loaded ? $.extend({}, this.image) : {}; + return this.sized ? assign({}, this.imageData) : {}; }, @@ -2521,13 +2851,13 @@ var methods = { * @returns {Object} The result canvas data. */ getCanvasData: function getCanvasData() { - var canvas = this.canvas; + var canvasData = this.canvasData; var data = {}; if (this.ready) { - $.each(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (i, n) { - data[n] = canvas[n]; + forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) { + data[n] = canvasData[n]; }); } @@ -2538,35 +2868,34 @@ var methods = { /** * Set the canvas position and size with new data. * @param {Object} data - The new canvas data. + * @returns {Cropper} this */ setCanvasData: function setCanvasData(data) { - var canvas = this.canvas; - var aspectRatio = canvas.aspectRatio; + var canvasData = this.canvasData; + var aspectRatio = canvasData.aspectRatio; - if ($.isFunction(data)) { - data = data.call(this.$element); - } - - if (this.ready && !this.disabled && $.isPlainObject(data)) { + if (this.ready && !this.disabled && isPlainObject(data)) { if (isNumber(data.left)) { - canvas.left = data.left; + canvasData.left = data.left; } if (isNumber(data.top)) { - canvas.top = data.top; + canvasData.top = data.top; } if (isNumber(data.width)) { - canvas.width = data.width; - canvas.height = data.width / aspectRatio; + canvasData.width = data.width; + canvasData.height = data.width / aspectRatio; } else if (isNumber(data.height)) { - canvas.height = data.height; - canvas.width = data.height * aspectRatio; + canvasData.height = data.height; + canvasData.width = data.height * aspectRatio; } this.renderCanvas(true); } + + return this; }, @@ -2575,62 +2904,66 @@ var methods = { * @returns {Object} The result crop box data. */ getCropBoxData: function getCropBoxData() { - var cropBox = this.cropBox; + var cropBoxData = this.cropBoxData; + var data = void 0; - return this.ready && this.cropped ? { - left: cropBox.left, - top: cropBox.top, - width: cropBox.width, - height: cropBox.height - } : {}; + if (this.ready && this.cropped) { + data = { + left: cropBoxData.left, + top: cropBoxData.top, + width: cropBoxData.width, + height: cropBoxData.height + }; + } + + return data || {}; }, /** * Set the crop box position and size with new data. * @param {Object} data - The new crop box data. + * @returns {Cropper} this */ setCropBoxData: function setCropBoxData(data) { - var cropBox = this.cropBox; + var cropBoxData = this.cropBoxData; var aspectRatio = this.options.aspectRatio; var widthChanged = void 0; var heightChanged = void 0; - if ($.isFunction(data)) { - data = data.call(this.$element); - } - - if (this.ready && this.cropped && !this.disabled && $.isPlainObject(data)) { + if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) { if (isNumber(data.left)) { - cropBox.left = data.left; + cropBoxData.left = data.left; } if (isNumber(data.top)) { - cropBox.top = data.top; + cropBoxData.top = data.top; } - if (isNumber(data.width) && data.width !== cropBox.width) { + if (isNumber(data.width) && data.width !== cropBoxData.width) { widthChanged = true; - cropBox.width = data.width; + cropBoxData.width = data.width; } - if (isNumber(data.height) && data.height !== cropBox.height) { + if (isNumber(data.height) && data.height !== cropBoxData.height) { heightChanged = true; - cropBox.height = data.height; + cropBoxData.height = data.height; } if (aspectRatio) { if (widthChanged) { - cropBox.height = cropBox.width / aspectRatio; + cropBoxData.height = cropBoxData.width / aspectRatio; } else if (heightChanged) { - cropBox.width = cropBox.height * aspectRatio; + cropBoxData.width = cropBoxData.height * aspectRatio; } } this.renderCropBox(); } + + return this; }, @@ -2646,9 +2979,9 @@ var methods = { return null; } - var canvasData = this.canvas; + var canvasData = this.canvasData; - var source = getSourceCanvas(this.$clone[0], this.image, canvasData, options); + var source = getSourceCanvas(this.image, this.imageData, canvasData, options); // Returns the source canvas if it is not cropped. if (!this.cropped) { @@ -2698,6 +3031,7 @@ var methods = { canvas.width = normalizeDecimalNumber(width); canvas.height = normalizeDecimalNumber(height); + context.fillStyle = options.fillColor || 'transparent'; context.fillRect(0, 0, width, height); @@ -2771,9 +3105,10 @@ var methods = { params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale); } - context.drawImage.apply(context, [source].concat(toConsumableArray($.map(params, function (param) { + context.drawImage.apply(context, [source].concat(toConsumableArray(params.map(function (param) { return Math.floor(normalizeDecimalNumber(param)); })))); + return canvas; }, @@ -2781,6 +3116,7 @@ var methods = { /** * Change the aspect ratio of the crop box. * @param {number} aspectRatio - The new aspect ratio. + * @returns {Cropper} this */ setAspectRatio: function setAspectRatio(aspectRatio) { var options = this.options; @@ -2798,34 +3134,47 @@ var methods = { } } } + + return this; }, /** * Change the drag mode. * @param {string} mode - The new drag mode. + * @returns {Cropper} this */ setDragMode: function setDragMode(mode) { - var options = this.options; + var options = this.options, + dragBox = this.dragBox, + face = this.face; + - var croppable = void 0; - var movable = void 0; + if (this.ready && !this.disabled) { + var croppable = mode === DRAG_MODE_CROP; + var movable = options.movable && mode === DRAG_MODE_MOVE; - if (this.loaded && !this.disabled) { - croppable = mode === DRAG_MODE_CROP; - movable = options.movable && mode === DRAG_MODE_MOVE; mode = croppable || movable ? mode : DRAG_MODE_NONE; - this.$dragBox.data(DATA_ACTION, mode).toggleClass(CLASS_CROP, croppable).toggleClass(CLASS_MOVE, movable); + options.dragMode = mode; + setData(dragBox, DATA_ACTION, mode); + toggleClass(dragBox, CLASS_CROP, croppable); + toggleClass(dragBox, CLASS_MOVE, movable); if (!options.cropBoxMovable) { - // Sync drag mode to crop box when it is not movable(#300) - this.$face.data(DATA_ACTION, mode).toggleClass(CLASS_CROP, croppable).toggleClass(CLASS_MOVE, movable); + // Sync drag mode to crop box when it is not movable + setData(face, DATA_ACTION, mode); + toggleClass(face, CLASS_CROP, croppable); + toggleClass(face, CLASS_MOVE, movable); } } + + return this; } }; +var AnotherCropper = WINDOW.Cropper; + var Cropper = function () { /** * Create a new Cropper. @@ -2841,36 +3190,37 @@ var Cropper = function () { } this.element = element; - this.$element = $(element); - this.options = $.extend({}, DEFAULTS, $.isPlainObject(options) && options); - this.completed = false; + this.options = assign({}, DEFAULTS, isPlainObject(options) && options); this.cropped = false; this.disabled = false; - this.isImg = false; - this.limited = false; - this.loaded = false; + this.pointers = {}; this.ready = false; + this.reloading = false; this.replaced = false; - this.wheeling = false; - this.originalUrl = ''; - this.canvas = null; - this.cropBox = null; - this.pointers = {}; + this.sized = false; + this.sizing = false; this.init(); } createClass(Cropper, [{ key: 'init', value: function init() { - var $element = this.$element; + var element = this.element; + var tagName = element.tagName.toLowerCase(); var url = void 0; - if ($element.is('img')) { + if (getData(element, NAMESPACE)) { + return; + } + + setData(element, NAMESPACE, this); + + if (tagName === 'img') { this.isImg = true; - // Should use `$.fn.attr` here. e.g.: "img/picture.jpg" - url = $element.attr('src') || ''; + // e.g.: "img/picture.jpg" + url = element.getAttribute('src') || ''; this.originalUrl = url; // Stop when it's a blank image @@ -2878,26 +3228,14 @@ var Cropper = function () { return; } - // Should use `$.fn.prop` here. e.g.: "http://example.com/img/picture.jpg" - url = $element.prop('src'); - } else if ($element.is('canvas') && window.HTMLCanvasElement) { - url = $element[0].toDataURL(); + // e.g.: "http://example.com/img/picture.jpg" + url = element.src; + } else if (tagName === 'canvas' && window.HTMLCanvasElement) { + url = element.toDataURL(); } this.load(url); } - - // A shortcut for triggering custom events - - }, { - key: 'trigger', - value: function trigger(type, data) { - var e = $.Event(type, data); - - this.$element.trigger(e); - - return e; - } }, { key: 'load', value: function load(url) { @@ -2908,9 +3246,9 @@ var Cropper = function () { } this.url = url; - this.image = {}; + this.imageData = {}; - var $element = this.$element, + var element = this.element, options = this.options; @@ -2932,29 +3270,41 @@ var Cropper = function () { var xhr = new XMLHttpRequest(); + this.reloading = true; + this.xhr = xhr; + + var done = function done() { + _this.reloading = false; + _this.xhr = null; + }; + + xhr.ontimeout = done; + xhr.onabort = done; xhr.onerror = function () { + done(); _this.clone(); }; xhr.onload = function () { + done(); _this.read(xhr.response); }; // Bust cache when there is a "crossOrigin" property - if (options.checkCrossOrigin && isCrossOriginURL(url) && !$element.prop('crossOrigin')) { + if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) { url = addTimestamp(url); } xhr.open('get', url); xhr.responseType = 'arraybuffer'; - xhr.withCredentials = $element.prop('crossOrigin') === 'use-credentials'; + xhr.withCredentials = element.crossOrigin === 'use-credentials'; xhr.send(); } }, { key: 'read', value: function read(arrayBuffer) { var options = this.options, - image = this.image; + imageData = this.imageData; var orientation = getOrientation(arrayBuffer); var rotate = 0; @@ -2972,12 +3322,12 @@ var Cropper = function () { } if (options.rotatable) { - image.rotate = rotate; + imageData.rotate = rotate; } if (options.scalable) { - image.scaleX = scaleX; - image.scaleY = scaleY; + imageData.scaleX = scaleX; + imageData.scaleY = scaleY; } this.clone(); @@ -2985,22 +3335,22 @@ var Cropper = function () { }, { key: 'clone', value: function clone() { - var $element = this.$element, - options = this.options, + var element = this.element, url = this.url; - var crossOrigin = ''; + var crossOrigin = void 0; var crossOriginUrl = void 0; - if (options.checkCrossOrigin && isCrossOriginURL(url)) { - crossOrigin = $element.prop('crossOrigin'); + if (this.options.checkCrossOrigin && isCrossOriginURL(url)) { + crossOrigin = element.crossOrigin; + if (crossOrigin) { crossOriginUrl = url; } else { crossOrigin = 'anonymous'; - // Bust cache (#148) when there is not a "crossOrigin" property + // Bust cache when there is not a "crossOrigin" property crossOriginUrl = addTimestamp(url); } } @@ -3016,88 +3366,136 @@ var Cropper = function () { image.src = crossOriginUrl || url; - var $clone = $(image); + var start = this.start.bind(this); + var stop = this.stop.bind(this); - this.$clone = $clone; + this.image = image; + this.onStart = start; + this.onStop = stop; if (this.isImg) { - if (this.element.complete) { - this.start(); + if (element.complete) { + this.timeout = setTimeout(start, 0); } else { - $element.one(EVENT_LOAD, $.proxy(this.start, this)); + addListener(element, EVENT_LOAD, start, { + once: true + }); } } else { - $clone.one(EVENT_LOAD, $.proxy(this.start, this)).one(EVENT_ERROR, $.proxy(this.stop, this)).addClass(CLASS_HIDE).insertAfter($element); + image.onload = start; + image.onerror = stop; + addClass(image, CLASS_HIDE); + element.parentNode.insertBefore(image, element.nextSibling); } } }, { key: 'start', - value: function start() { + value: function start(event) { var _this2 = this; - var $clone = this.$clone; - - var $image = this.$element; + var image = this.isImg ? this.element : this.image; - if (!this.isImg) { - $clone.off(EVENT_ERROR, this.stop); - $image = $clone; + if (event) { + image.onload = null; + image.onerror = null; } - getImageNaturalSizes($image[0], function (naturalWidth, naturalHeight) { - $.extend(_this2.image, { + this.sizing = true; + + var IS_SAFARI = WINDOW.navigator && /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(WINDOW.navigator.userAgent); + var done = function done(naturalWidth, naturalHeight) { + assign(_this2.imageData, { naturalWidth: naturalWidth, naturalHeight: naturalHeight, aspectRatio: naturalWidth / naturalHeight }); - - _this2.loaded = true; + _this2.sizing = false; + _this2.sized = true; _this2.build(); - }); + }; + + // Modern browsers (except Safari) + if (image.naturalWidth && !IS_SAFARI) { + done(image.naturalWidth, image.naturalHeight); + return; + } + + var sizingImage = document.createElement('img'); + var body = document.body || document.documentElement; + + this.sizingImage = sizingImage; + + sizingImage.onload = function () { + done(sizingImage.width, sizingImage.height); + + if (!IS_SAFARI) { + body.removeChild(sizingImage); + } + }; + + sizingImage.src = image.src; + + // iOS Safari will convert the image automatically + // with its orientation once append it into DOM (#279) + if (!IS_SAFARI) { + 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;'; + body.appendChild(sizingImage); + } } }, { key: 'stop', value: function stop() { - this.$clone.remove(); - this.$clone = null; + var image = this.image; + + + image.onload = null; + image.onerror = null; + image.parentNode.removeChild(image); + this.image = null; } }, { key: 'build', value: function build() { - var _this3 = this; - - if (!this.loaded) { + if (!this.sized || this.ready) { return; } - // Unbuild first when replace - if (this.ready) { - this.unbuild(); - } - - var $element = this.$element, + var element = this.element, options = this.options, - $clone = this.$clone; - - var $cropper = $(TEMPLATE); - var $cropBox = $cropper.find('.' + NAMESPACE + '-crop-box'); - var $face = $cropBox.find('.' + NAMESPACE + '-face'); + image = this.image; // Create cropper elements - this.$container = $element.parent(); - this.$cropper = $cropper; - this.$canvas = $cropper.find('.' + NAMESPACE + '-canvas').append($clone); - this.$dragBox = $cropper.find('.' + NAMESPACE + '-drag-box'); - this.$cropBox = $cropBox; - this.$viewBox = $cropper.find('.' + NAMESPACE + '-view-box'); - this.$face = $face; + + var container = element.parentNode; + var template = document.createElement('div'); + + template.innerHTML = TEMPLATE; + + var cropper = template.querySelector('.' + NAMESPACE + '-container'); + var canvas = cropper.querySelector('.' + NAMESPACE + '-canvas'); + var dragBox = cropper.querySelector('.' + NAMESPACE + '-drag-box'); + var cropBox = cropper.querySelector('.' + NAMESPACE + '-crop-box'); + var face = cropBox.querySelector('.' + NAMESPACE + '-face'); + + this.container = container; + this.cropper = cropper; + this.canvas = canvas; + this.dragBox = dragBox; + this.cropBox = cropBox; + this.viewBox = cropper.querySelector('.' + NAMESPACE + '-view-box'); + this.face = face; + + canvas.appendChild(image); // Hide the original image - $element.addClass(CLASS_HIDDEN).after($cropper); + addClass(element, CLASS_HIDDEN); + + // Inserts the cropper after to the current image + container.insertBefore(cropper, element.nextSibling); - // Show the clone image if is hidden + // Show the image if is hidden if (!this.isImg) { - $clone.removeClass(CLASS_HIDE); + removeClass(image, CLASS_HIDE); } this.initPreview(); @@ -3106,55 +3504,51 @@ var Cropper = function () { options.aspectRatio = Math.max(0, options.aspectRatio) || NaN; options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0; - this.cropped = options.autoCrop; - - if (options.autoCrop) { - if (options.modal) { - this.$dragBox.addClass(CLASS_MODAL); - } - } else { - $cropBox.addClass(CLASS_HIDDEN); - } + addClass(cropBox, CLASS_HIDDEN); if (!options.guides) { - $cropBox.find('.' + NAMESPACE + '-dashed').addClass(CLASS_HIDDEN); + addClass(cropBox.getElementsByClassName(NAMESPACE + '-dashed'), CLASS_HIDDEN); } if (!options.center) { - $cropBox.find('.' + NAMESPACE + '-center').addClass(CLASS_HIDDEN); + addClass(cropBox.getElementsByClassName(NAMESPACE + '-center'), CLASS_HIDDEN); } - if (options.cropBoxMovable) { - $face.addClass(CLASS_MOVE).data(DATA_ACTION, ACTION_ALL); + if (options.background) { + addClass(cropper, NAMESPACE + '-bg'); } if (!options.highlight) { - $face.addClass(CLASS_INVISIBLE); + addClass(face, CLASS_INVISIBLE); } - if (options.background) { - $cropper.addClass(NAMESPACE + '-bg'); + if (options.cropBoxMovable) { + addClass(face, CLASS_MOVE); + setData(face, DATA_ACTION, ACTION_ALL); } if (!options.cropBoxResizable) { - $cropBox.find('.' + NAMESPACE + '-line,.' + NAMESPACE + '-point').addClass(CLASS_HIDDEN); + addClass(cropBox.getElementsByClassName(NAMESPACE + '-line'), CLASS_HIDDEN); + addClass(cropBox.getElementsByClassName(NAMESPACE + '-point'), CLASS_HIDDEN); } - this.setDragMode(options.dragMode); this.render(); this.ready = true; + this.setDragMode(options.dragMode); + + if (options.autoCrop) { + this.crop(); + } + this.setData(options.data); - // Trigger the ready event asynchronously to keep `data('cropper')` is defined - this.completing = setTimeout(function () { - if ($.isFunction(options.ready)) { - $element.one(EVENT_READY, options.ready); - } + if (isFunction(options.ready)) { + addListener(element, EVENT_READY, options.ready, { + once: true + }); + } - _this3.trigger(EVENT_READY); - _this3.trigger(EVENT_CROP, _this3.getData()); - _this3.completed = true; - }, 0); + dispatchEvent(element, EVENT_READY); } }, { key: 'unbuild', @@ -3163,35 +3557,49 @@ var Cropper = function () { return; } - if (!this.completed) { - clearTimeout(this.completing); - } - this.ready = false; - this.completed = false; - this.initialImage = null; - - // Clear `initialCanvas` is necessary when replace - this.initialCanvas = null; - this.initialCropBox = null; - this.container = null; - this.canvas = null; - - // Clear `cropBox` is necessary when replace - this.cropBox = null; this.unbind(); - this.resetPreview(); - this.$preview = null; + this.cropper.parentNode.removeChild(this.cropper); + removeClass(this.element, CLASS_HIDDEN); + } + }, { + key: 'uncreate', + value: function uncreate() { + var element = this.element; + + + if (this.ready) { + this.unbuild(); + this.ready = false; + this.cropped = false; + } else if (this.sizing) { + this.sizingImage.onload = null; + this.sizing = false; + this.sized = false; + } else if (this.reloading) { + this.xhr.abort(); + } else if (this.isImg) { + if (element.complete) { + clearTimeout(this.timeout); + } else { + removeListener(element, EVENT_LOAD, this.onStart); + } + } else if (this.image) { + this.stop(); + } + } - this.$viewBox = null; - this.$cropBox = null; - this.$dragBox = null; - this.$canvas = null; - this.$container = null; + /** + * Get the no conflict cropper class. + * @returns {Cropper} The cropper class. + */ - this.$cropper.remove(); - this.$cropper = null; + }], [{ + key: 'noConflict', + value: function noConflict() { + window.Cropper = AnotherCropper; + return Cropper; } /** @@ -3199,21 +3607,20 @@ var Cropper = function () { * @param {Object} options - The new default options. */ - }], [{ + }, { key: 'setDefaults', value: function setDefaults(options) { - $.extend(DEFAULTS, $.isPlainObject(options) && options); + assign(DEFAULTS, isPlainObject(options) && options); } }]); return Cropper; }(); -if ($.extend) { - $.extend(Cropper.prototype, render, preview, events, handlers, change, methods); -} +assign(Cropper.prototype, render, preview, events, handlers, change, methods); if ($.fn) { - var AnotherCropper = $.fn.cropper; + var AnotherCropper$1 = $.fn.cropper; + var NAMESPACE$1 = 'cropper'; $.fn.cropper = function jQueryCropper(option) { for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { @@ -3224,35 +3631,44 @@ if ($.fn) { this.each(function (i, element) { var $element = $(element); - var data = $element.data(NAMESPACE); + var isDestroy = option === 'destroy'; + var cropper = $element.data(NAMESPACE$1); - if (!data) { - if (/destroy/.test(option)) { + if (!cropper) { + if (isDestroy) { return; } var options = $.extend({}, $element.data(), $.isPlainObject(option) && option); - data = new Cropper(element, options); - $element.data(NAMESPACE, data); + cropper = new Cropper(element, options); + $element.data(NAMESPACE$1, cropper); } - if (isString(option)) { - var fn = data[option]; + if (typeof option === 'string') { + var fn = cropper[option]; if ($.isFunction(fn)) { - result = fn.apply(data, args); + result = fn.apply(cropper, args); + + if (result === cropper) { + result = undefined; + } + + if (isDestroy) { + $element.removeData(NAMESPACE$1); + } } } }); - return isUndefined(result) ? this : result; + return typeof result === 'undefined' ? this : result; }; $.fn.cropper.Constructor = Cropper; $.fn.cropper.setDefaults = Cropper.setDefaults; $.fn.cropper.noConflict = function noConflict() { - $.fn.cropper = AnotherCropper; + $.fn.cropper = AnotherCropper$1; return this; }; } diff --git a/docs/js/main.js b/docs/js/main.js index f384f785..6dda1d8c 100644 --- a/docs/js/main.js +++ b/docs/js/main.js @@ -17,13 +17,13 @@ $(function () { aspectRatio: 16 / 9, preview: '.img-preview', crop: function (e) { - $dataX.val(Math.round(e.x)); - $dataY.val(Math.round(e.y)); - $dataHeight.val(Math.round(e.height)); - $dataWidth.val(Math.round(e.width)); - $dataRotate.val(e.rotate); - $dataScaleX.val(e.scaleX); - $dataScaleY.val(e.scaleY); + $dataX.val(Math.round(e.detail.x)); + $dataY.val(Math.round(e.detail.y)); + $dataHeight.val(Math.round(e.detail.height)); + $dataWidth.val(Math.round(e.detail.width)); + $dataRotate.val(e.detail.rotate); + $dataScaleX.val(e.detail.scaleX); + $dataScaleY.val(e.detail.scaleY); } }; var originalImageURL = $image.attr('src'); @@ -42,19 +42,19 @@ $(function () { console.log(e.type); }, cropstart: function (e) { - console.log(e.type, e.action); + console.log(e.type, e.detail.action); }, cropmove: function (e) { - console.log(e.type, e.action); + console.log(e.type, e.detail.action); }, cropend: function (e) { - console.log(e.type, e.action); + console.log(e.type, e.detail.action); }, crop: function (e) { - console.log(e.type, e.x, e.y, e.width, e.height, e.rotate, e.scaleX, e.scaleY); + console.log(e.type); }, zoom: function (e) { - console.log(e.type, e.ratio); + console.log(e.type, e.detail.ratio); } }).cropper(options); diff --git a/docs/v0.7.9/css/cropper.css b/docs/v0.7.9/css/cropper.css deleted file mode 100644 index 96770115..00000000 --- a/docs/v0.7.9/css/cropper.css +++ /dev/null @@ -1,278 +0,0 @@ -/*! - * Cropper v0.7.9 - * https://github.com/fengyuanchen/cropper - * - * Copyright 2014-2015 Fengyuan Chen - * Released under the MIT license - */ - -.cropper-container { - position: relative; - overflow: hidden; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; -} - -.cropper-container img { - width: 100%; - min-width: 0 !important; - max-width: none !important; - height: 100%; - min-height: 0 !important; - max-height: none !important; -} - -.cropper-modal, -.cropper-canvas { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; -} - -.cropper-canvas { - background-color: #fff; - filter: alpha(opacity=0); - opacity: 0; -} - -.cropper-modal { - background-color: #000; - filter: alpha(opacity=50); - opacity: .5; -} - -.cropper-dragger { - position: absolute; - top: 10%; - left: 10%; - width: 80%; - height: 80%; -} - -.cropper-viewer { - display: block; - width: 100%; - height: 100%; - overflow: hidden; - outline-width: 1px; - outline-style: solid; - outline-color: #69f; - outline-color: rgba(51, 102, 255, .75); -} - -.cropper-dashed { - position: absolute; - display: block; - filter: alpha(opacity=50); - border: 0 dashed #fff; - opacity: .5; -} - -.cropper-dashed.dashed-h { - top: 33.3%; - left: 0; - width: 100%; - height: 33.3%; - border-top-width: 1px; - border-bottom-width: 1px; -} - -.cropper-dashed.dashed-v { - top: 0; - left: 33.3%; - width: 33.3%; - height: 100%; - border-right-width: 1px; - border-left-width: 1px; -} - -.cropper-face, -.cropper-line, -.cropper-point { - position: absolute; - display: block; - width: 100%; - height: 100%; - filter: alpha(opacity=10); - opacity: .1; -} - -.cropper-face { - top: 0; - left: 0; - cursor: move; - background-color: #fff; -} - -.cropper-line { - background-color: #69f; -} - -.cropper-line.line-e { - top: 0; - right: -3px; - width: 5px; - cursor: e-resize; -} - -.cropper-line.line-n { - top: -3px; - left: 0; - height: 5px; - cursor: n-resize; -} - -.cropper-line.line-w { - top: 0; - left: -3px; - width: 5px; - cursor: w-resize; -} - -.cropper-line.line-s { - bottom: -3px; - left: 0; - height: 5px; - cursor: s-resize; -} - -.cropper-point { - width: 5px; - height: 5px; - background-color: #69f; - filter: alpha(opacity=75); - opacity: .75; -} - -.cropper-point.point-e { - top: 50%; - right: -3px; - margin-top: -3px; - cursor: e-resize; -} - -.cropper-point.point-n { - top: -3px; - left: 50%; - margin-left: -3px; - cursor: n-resize; -} - -.cropper-point.point-w { - top: 50%; - left: -3px; - margin-top: -3px; - cursor: w-resize; -} - -.cropper-point.point-s { - bottom: -3px; - left: 50%; - margin-left: -3px; - cursor: s-resize; -} - -.cropper-point.point-ne { - top: -3px; - right: -3px; - cursor: ne-resize; -} - -.cropper-point.point-nw { - top: -3px; - left: -3px; - cursor: nw-resize; -} - -.cropper-point.point-sw { - bottom: -3px; - left: -3px; - cursor: sw-resize; -} - -.cropper-point.point-se { - right: -3px; - bottom: -3px; - width: 20px; - height: 20px; - cursor: se-resize; - filter: alpha(opacity=100); - opacity: 1; -} - -.cropper-point.point-se:before { - position: absolute; - right: -50%; - bottom: -50%; - display: block; - width: 200%; - height: 200%; - content: " "; - background-color: #69f; - filter: alpha(opacity=0); - opacity: 0; -} - -@media (min-width: 768px) { - .cropper-point.point-se { - width: 15px; - height: 15px; - } -} - -@media (min-width: 992px) { - .cropper-point.point-se { - width: 10px; - height: 10px; - } -} - -@media (min-width: 1200px) { - .cropper-point.point-se { - width: 5px; - height: 5px; - filter: alpha(opacity=75); - opacity: .75; - } -} - -/* Helper classes for JavaScript */ - -.cropper-hidden { - display: none !important; -} - -.cropper-invisible { - position: fixed; - top: 0; - left: 0; - z-index: -1; - width: auto !important; - max-width: none !important; - height: auto !important; - max-height: none !important; - filter: alpha(opacity=0); - opacity: 0; -} - -.cropper-move { - cursor: move; -} - -.cropper-crop { - cursor: crosshair; -} - -.cropper-disabled .cropper-canvas, -.cropper-disabled .cropper-face, -.cropper-disabled .cropper-line, -.cropper-disabled .cropper-point { - cursor: not-allowed; -} diff --git a/docs/v0.7.9/css/cropper.min.css b/docs/v0.7.9/css/cropper.min.css deleted file mode 100644 index 4cf08201..00000000 --- a/docs/v0.7.9/css/cropper.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Cropper v0.7.9 - * https://github.com/fengyuanchen/cropper - * - * Copyright 2014-2015 Fengyuan Chen - * Released under the MIT license - */ - -.cropper-container{position:relative;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}.cropper-container img{width:100%;height:100%;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important}.cropper-canvas,.cropper-modal{position:absolute;top:0;right:0;bottom:0;left:0}.cropper-canvas{background-color:#fff;opacity:0;filter:alpha(opacity=0)}.cropper-modal{background-color:#000;opacity:.5;filter:alpha(opacity=50)}.cropper-dragger{position:absolute;top:10%;left:10%;width:80%;height:80%}.cropper-viewer{display:block;width:100%;height:100%;overflow:hidden;outline:#69f solid 1px;outline-color:rgba(51,102,255,.75)}.cropper-dashed{position:absolute;display:block;border:0 dashed #fff;opacity:.5;filter:alpha(opacity=50)}.cropper-dashed.dashed-h{top:33.3%;left:0;width:100%;height:33.3%;border-top-width:1px;border-bottom-width:1px}.cropper-dashed.dashed-v{top:0;left:33.3%;width:33.3%;height:100%;border-right-width:1px;border-left-width:1px}.cropper-face,.cropper-line,.cropper-point{position:absolute;display:block;width:100%;height:100%;opacity:.1;filter:alpha(opacity=10)}.cropper-face{top:0;left:0;cursor:move;background-color:#fff}.cropper-line{background-color:#69f}.cropper-line.line-e{top:0;right:-3px;width:5px;cursor:e-resize}.cropper-line.line-n{top:-3px;left:0;height:5px;cursor:n-resize}.cropper-line.line-w{top:0;left:-3px;width:5px;cursor:w-resize}.cropper-line.line-s{bottom:-3px;left:0;height:5px;cursor:s-resize}.cropper-point{width:5px;height:5px;background-color:#69f;opacity:.75;filter:alpha(opacity=75)}.cropper-point.point-e{top:50%;right:-3px;margin-top:-3px;cursor:e-resize}.cropper-point.point-n{top:-3px;left:50%;margin-left:-3px;cursor:n-resize}.cropper-point.point-w{top:50%;left:-3px;margin-top:-3px;cursor:w-resize}.cropper-point.point-s{bottom:-3px;left:50%;margin-left:-3px;cursor:s-resize}.cropper-point.point-ne{top:-3px;right:-3px;cursor:ne-resize}.cropper-point.point-nw{top:-3px;left:-3px;cursor:nw-resize}.cropper-point.point-sw{bottom:-3px;left:-3px;cursor:sw-resize}.cropper-point.point-se{right:-3px;bottom:-3px;width:20px;height:20px;cursor:se-resize;opacity:1;filter:alpha(opacity=100)}.cropper-point.point-se:before{position:absolute;right:-50%;bottom:-50%;display:block;width:200%;height:200%;content:" ";background-color:#69f;opacity:0;filter:alpha(opacity=0)}@media (min-width:768px){.cropper-point.point-se{width:15px;height:15px}}@media (min-width:992px){.cropper-point.point-se{width:10px;height:10px}}@media (min-width:1200px){.cropper-point.point-se{width:5px;height:5px;opacity:.75;filter:alpha(opacity=75)}}.cropper-hidden{display:none!important}.cropper-invisible{position:fixed;top:0;left:0;z-index:-1;width:auto!important;max-width:none!important;height:auto!important;max-height:none!important;opacity:0;filter:alpha(opacity=0)}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-canvas,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed} \ No newline at end of file diff --git a/docs/v0.7.9/css/main.css b/docs/v0.7.9/css/main.css deleted file mode 100644 index 9921f24d..00000000 --- a/docs/v0.7.9/css/main.css +++ /dev/null @@ -1,248 +0,0 @@ -/* Main - * ========================================================================== */ - -/* Basic style - * -------------------------------------------------------------------------- */ - -/* Overview */ - -.docs-overview h3, -.docs-getting-started h4 { - border-left: 1px solid #69f; - padding-left: 10px; -} - -.docs-getting-started h4 { - padding-left: 8px; -} - -.img-container, -.img-preview { - background-color: #f7f7f7; - overflow: hidden; - width: 100%; - text-align: center; -} - -.img-container { - box-shadow: inset 0 0 5px #eee; - height: 344px; -} - -.img-container > img { - max-width: 100%; - max-height: inherit; -} - -.img-preview { - margin-bottom: 10px; -} - -.img-preview-sm { - height: 90px; - width: 160px; -} - -.img-preview-xs { - height: 36px; - width: 64px; -} - -.docs-btn-group .input-group { - margin-bottom: 10px; -} - -.docs-btn-group .button-group > .btn { - margin-right: 10px; - margin-bottom: 10px; -} - -.docs-toolbar { - margin-top: 10px; - margin-bottom: -10px; - text-align: center; -} - -.docs-toolbar .docs-tooltip { - display: block; - margin: -6px -12px; - padding: 6px 12px; -} - -.docs-data-url .btn { - margin-right: 10px; - margin-bottom: 10px; -} - -.docs-data-url textarea { - margin-bottom: 10px; -} - -.docs-data-url img { - max-height: 174px; -} - -.docs-flip-horizontal { - -ms-transform: scale(-1, 1); - -webkit-transform: scale(-1, 1); - transform: scale(-1, 1); -} - -.docs-data > .input-group { - margin-bottom: 10px; -} - -.docs-data > .input-group > label { - min-width: 80px; -} - -.docs-data > .input-group > span { - min-width: 50px; -} - - -/* Examples */ - -.bootstrap-modal-cropper img { - width: 100%; -} - -/* Footer */ - -.docs-footer { - border-top: 1px solid #eee; - margin-top: 100px; - padding-top: 30px; - padding-bottom: 30px; -} - - -/* Reset Bootstrap - * -------------------------------------------------------------------------- */ - -code { - white-space: normal; -} - -/* Top navbar */ - -.docs-navbar-top { - margin-bottom: 0; -} - -.docs-navbar-top .nav > li > a { - border-top: 1px solid transparent; -} - -.docs-navbar-top .nav > li > a:hover { - border-color: #85c9de; - background-color: #fcfcfc; -} - -@media (max-width: 767px) { - .docs-navbar-top .nav > li > a { - border-top: 0; - border-left: 1px solid transparent; - } -} - -.docs-navbar-top .navbar-toggle { - border-color: #85c9de; -} - -.docs-navbar-top .navbar-toggle .icon-bar { - background-color: #85c9de; -} - -/* Banner */ - -.docs-jumbotron { - background-color: #85c9de; - color: #fff; -} - -/* Sidebar fixed */ - -@media (min-width: 992px) { - .docs-sidebar.fixed { - position: fixed; - top: 20px; - } -} - -.docs-sidebar .back-to-top { - margin-top: 5px; - padding-left: 11px; - font-size: 12px; -} - -/* Sidebar nav */ - -.docs-sidebar .nav > li > a { - border-left: 1px solid transparent; - padding: 4px 10px; -} - -.docs-sidebar .nav > li > a:hover { - border-color: #85c9de; - background-color: #fcfcfc; -} - -/* Alerts - * -------------------------------------------------------------------------- */ -.docs-alert { - display: none; - position: fixed; - top: 20px; - left: 0; - right: 0; - height: 0; - text-align: center; - opacity: 0.9; -} - -.docs-alert .message { - display: inline-block; - padding: 5px 10px; - border-radius: 2px; - background-color: #aaa; - color: #fff; -} - -.docs-alert .primary { - background-color: #0074d9; -} - -.docs-alert .success { - background-color: #2ecc40; -} - -.docs-alert .info { - background-color: #39cccc; -} - -.docs-alert .warning { - background-color: #ff851b; -} - -.docs-alert .danger { - background-color: #ff4136; -} - -/* Examples - * -------------------------------------------------------------------------- */ -.fixed-dragger-cropper { - max-height: 354px; - overflow: hidden; -} - -.fixed-dragger-cropper > img { - width: 100%; -} - -/* Google code prettify - * -------------------------------------------------------------------------- */ -.prettyprint { - border: 1px solid #ddd !important; - padding: 10px 15px !important; -} diff --git a/docs/v0.7.9/img/picture-1.jpg b/docs/v0.7.9/img/picture-1.jpg deleted file mode 100644 index b60f1dbbb6ed0f43e39e07f21a3553fbddf0c5b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157370 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

|rrk>) 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 OTTu#z7Vk{;@c-E)-%BU} diff --git a/docs/v0.7.9/index.html b/docs/v0.7.9/index.html deleted file mode 100644 index 55932824..00000000 --- a/docs/v0.7.9/index.html +++ /dev/null @@ -1,914 +0,0 @@ - - - - - - - - - - Cropper - - - - - - - - - -

- - -
-
-

Cropper

-

A simple jQuery image cropping plugin.

-

- Download - View on GitHub -

-
-
- - - - -
-

Overview

-
-
-

Image:

-
-
-
- - - - - - - - - -
-
-
-
-

Preview:

-
-
-
-
-
-
-
-
-
-

Data:

-
-
- - - px -
-
- - - px -
-
- - - px -
-
- - - px -
- -
-
-
-
-
-
-

Methods:

-
- - - - - - - - -
- -
-
-
- X - - px -
-
-
-
- Y - - px -
-
-
-
- Width - - px -
-
-
-
- Height - - px -
-
-
- -
-
-
- - - - -
-
-
-
- - - - - deg -
-
-
- -
-
-
- - - - -
-
-
-
- - - - -
-
-
- -
-
-
- - - - -
-
-
-
- - - - -
-
-
- -
-
- - - - -
-
- -
-
-
-
-
-
-
-
-

Options:

-
-
- -
-
- - -
-
-
-
- -
-
- - -
-
-
-
- -
-
- - -
-
-
-
- -
-
- - -
-
-
-
- -
-
- - -
-
-
-
- -
-
- - -
-
-
-
- -
-
- - -
-
-
-
- -
-
- - -
-
-
-
- -
-
- - -
-
-
-
-
-
-
-

Sources:

-

HTML:

-
...
-<div class="img-container">
-  <img src="img/picture-1.jpg">
-</div>
-...
-<div class="img-preview"></div>
-...
-

Javascript:

-
var $image = $(".img-container img"),
-    $dataX = $("#dataX"),
-    $dataY = $("#dataY"),
-    $dataHeight = $("#dataHeight"),
-    $dataWidth = $("#dataWidth");
-
-$image.cropper({
-  aspectRatio: 16 / 9,
-  data: {
-    x: 480,
-    y: 60,
-    width: 640,
-    height: 360
-  },
-  preview: ".img-preview",
-  done: function(data) {
-    $dataX.val(Math.round(data.x));
-    $dataY.val(Math.round(data.y));
-    $dataHeight.val(Math.round(data.height));
-    $dataWidth.val(Math.round(data.width));
-  }
-});
-
-...
-
-$("#reset").click(function() {
-  $image.cropper("reset");
-});
-
-...
-
-
- - -
-

Features

-
    -
  • Supports touch
  • -
  • Supports zoom
  • -
  • Supports rotation
  • -
  • Supports canvas
  • -
  • Supports options
  • -
  • Supports methods
  • -
  • Supports events
  • -
  • Cross-browser support
  • -
-
- - -
-

Getting started

-
-
- -

Installation

-

Include files:

-
<script src="/path/to/jquery.js"></script><!-- jQuery is required -->
-<link  href="/path/to/cropper.css" rel="stylesheet">
-<script src="/path/to/cropper.js"></script>
- - -

Usage

-

Initialize with $.fn.cropper method.

-

HTML:

-
<!-- Wrap the image with a block element -->
-<div class="container">
-  <img src="picture.jpg">
-</div>
-

Javascript:

-
$(".container > img").cropper({
-  aspectRatio: 1.618,
-  done: function(data) {
-    // Output the result data for cropping image.
-  }
-});
-
-

Notes:

-

- The size of the cropper inherits from the size of the image's parent element, so be sure to wrap the image with a visible block element.

-

- The values of the result data was computed with the original size of the image, so you can use them to crop the image directly.

-
- - -

Options

-

You may set cropper options with $().cropper(options).

-

If you want to change the global default options, You may use $.fn.cropper.setDefaults(options).

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
aspectRatiostring / number"auto"The aspect ratio of the cropping zone.
By default, the cropping zone is free ratio.
dataobject{}Only supports four properties: "x", "y", "width" and "height". By default, the cropping zone will appear in the center of the image.
donefunctionfunction (data) {}This function will be executed when the cropping zone changes by a move, resize or crop.
previewselector""A jquery selector, add extra elements for preview.
multiplebooleanfalseBy default, the plugin only supports one cropper per page. If you intend to use more than one, just initialize them with this option set to true.
modalbooleantrueShow (true) or hide (false) the black modal layer above the cropper.
dashedbooleantrueShow (true) or hide (false) the dashed lines above the cropping zone.
autoCropbooleantrueRender the cropping zone automatically when initialize.
autoCropAreanumber0.8A number between 0 and 1. Define the automatic cropping area size (percentage).
dragCropbooleantrueEnable to remove the current cropping zone and create a new one by dragging over the image.
movablebooleantrueEnable to move the cropping zone.
resizablebooleantrueEnable to resize the cropping zone.
zoomablebooleantrueEnable to zoom the image.
rotatablebooleantrueEnable to rotate the image.
checkImageOriginbooleantrueBy default, the plugin will check the image origin, and if it is a cross-origin image, a "crossOrigin" attribute will be added to the image element to enable "rotate" and "getDataURL".
minWidthnumber0The minimum width (px of original image) of the cropping zone.
Use this option only when you are sure that the image has this minimum width.
minHeightnumber0The minimum height (px of original image) of the cropping zone.
Use this option only when you are sure that the image has this minimum height.
maxWidthnumberInfinityThe maximum width (px of original image) of the cropping zone.
Use this option only when you are sure that the image has this maximum width.
maxHeightnumberInfinityThe maximum height (px of original image) of the cropping zone.
Use this option only when you are sure that the image has this maximum height.
minContainerWidthnumber300The minimum width of the cropper container.
minContainerHeightnumber150The minimum height of the cropper container.
buildfunctionnullAn event handler of the "build.cropper" event.
builtfunctionnullAn event handler of the "built.cropper" event.
dragstartfunctionnullAn event handler of the "dragstart.cropper" event.
dragmovefunctionnullAn event handler of the "dragmove.cropper" event.
dragendfunctionnullAn event handler of the "dragend.cropper" event.
-
- - -

Methods

-

zoom

-
    -
  • Zoom the image.
  • -
  • Param: a number (positive number for zoom in, negative number for zoom out).
  • -
  • Usage: $().cropper("zoom", 0.1) or $().cropper("zoom", -0.1)
  • -
-

rotate

-
    -
  • Rotate the image (Replace the original image with a new rotated image which was generated by canvas)
  • -
  • Param: a number (positive number for rotate right, negative number for rotate left)..
  • -
  • Usage: $().cropper("rotate", 180) or $().cropper("rotate", -180)
  • -
  • Note: Be sure the browser supports canvas before call this method.
  • -
-

enable

-
    -
  • Enable (unfreeze) the cropper
  • -
  • Usage: $().cropper("enable")
  • -
-

disable

-
    -
  • Disable (freeze) the cropper
  • -
  • Usage: $().cropper("disable")
  • -
-

reset

-
    -
  • Reset the cropping zone to the start state.
  • -
  • Add a true param to reset the cropping zone to the default state.
  • -
  • Usage: $().cropper("reset") or $().cropper("reset", true)
  • -
-

clear

-
    -
  • Clear the cropping zone.
  • -
  • Usage: $().cropper("clear").
  • -
-

replace

-
    -
  • Replace the image.
  • -
  • Usage: $().cropper("replace", "example.jpg").
  • -
-

destroy

-
    -
  • Destroy the cropper and remove the instance from the image.
  • -
  • Usage: $().cropper("destroy").
  • -
-

getData

-
    -
  • Get the cropped zone data. Add a true parameter to get rounded data.
  • -
  • Usage: $().cropper("getData") or $().cropper("getData", true).
  • -
-

setData

-
    -
  • Reset the cropped zone with new data.
  • -
  • Param: an object containing "x1", "y1", "width", "height".
  • -
  • Usage: $().cropper("setData", {width: 480, height: 270}).
  • -
  • Tip: If you want to remove the current data, just pass an empty object or null. For example: $().cropper("setData", {}) or $().cropper("setData", null).
  • -
-

setAspectRatio

-
    -
  • Enable to reset the aspect ratio after built.
  • -
  • Param: "auto" or a positive number ("auto" for free ratio).
  • -
  • Usage: $().cropper("setAspectRatio", 1.618).
  • -
-

getImageData

-
    -
  • Get an object containing image data, contains: "naturalWidth", "naturalHeight", "width", "height", "aspectRatio", "ratio" and "rotate".
  • -
  • The "aspectRatio" is the value of "naturalWidth / naturalHeight".
  • -
  • The "ratio" is the value of "width / naturalWidth".
  • -
  • The "rotate" is the rotated degree of the current image.
  • -
  • Usage: $().cropper("getImageData").
  • -
-

setDragMode

-
    -
  • Change the drag mode.
  • -
  • Params: "crop", "move" and "none".
  • -
  • Usage: $().cropper("setDragMode", "crop").
  • -
  • Tips: You can toggle the "crop" and "move" mode by double click on the image.
  • -
-

getDataURL([options[, type[, quality]]])

-
    -
  • Get the data url (base64 image) of the cropped zone.
  • -
  • Param @options: A Object contains: "width", "height". Define the sizes of the result image.
  • -
  • Param @type: A String indicating the image format. The default type is image/png. Other types: "image/jpeg", "image/webp".
  • -
  • Param @quality: A Number between 0 and 1 indicating image quality if the requested type is image/jpeg or image/webp.
  • -
  • Usage: $().cropper("getDataURL") or $().cropper("getDataURL", {width:100, height: 100}, "image/jpeg", 0.6) or $().cropper("getDataURL", "image/jpeg") or $().cropper("getDataURL", "image/jpeg", 0.6).
  • -
  • Note: Be sure the browser supports canvas before call this method.
  • -
- - -

Events

-

build.cropper

-

This event will be fired when the Cropper starts to build.

-

built.cropper

-

This event will be fired when the Cropper has been built.

-

dragstart.cropper

-

This event will be fired before the cropping zone start to move.

-

dragmove.cropper

-

This event will be fired when the cropping zone was moving.

-

dragend.cropper

-

This event will be fired after the cropping zone stop to move.

-
- -
-
- - -
-

Examples

-

Cropper with fixed dragger.

-
-
-

Demo:

-
- Picture -
-
-
-

HTML:

-
<div class="fixed-dragger-cropper">
-  <img src="img/picture-1.jpg">
-</div>
-

JavaScript:

-
$(".fixed-dragger-cropper > img").cropper({
-  aspectRatio: 640 / 320,
-  autoCropArea: 0.6, // Center 60%
-  multiple: false,
-  dragCrop: false,
-  dashed: false,
-  movable: false,
-  resizable: false,
-  built: function () {
-    $(this).cropper("zoom", 0.5);
-  }
-});
-
-
- -
- -

Cropper in a Bootstrap modal

-
-
-

HTML:

-
<div class="modal" id="bootstrap-modal">
-  <div class="modal-dialog">
-    ...
-    <div class="modal-body">
-      <div class="bootstrap-modal-cropper">
-        <img src="img/picture-1.jpg">
-      </div>
-    </div>
-    ...
-  </div>
-</div>
- -

Demo:

-

- -
-
-

JavaScript:

-
var $image = $(".bootstrap-modal-cropper > img"),
-    originalData = {};
-
-$("#bootstrap-modal").on("shown.bs.modal", function() {
-  $image.cropper({
-    multiple: true,
-    data: originalData,
-    done: function(data) {
-      console.log(data);
-    }
-  });
-}).on("hidden.bs.modal", function() {
-  originalData = $image.cropper("getData");
-  $image.cropper("destroy");
-});
-
-
-
- -
- -

Crop avatar A complete example

-

This example require a PHP server, please download and test it.

-

- Download - View the sources -

-
- - - - - -
- - - - - - - - - diff --git a/docs/v0.7.9/js/cropper.js b/docs/v0.7.9/js/cropper.js deleted file mode 100644 index 8c416a39..00000000 --- a/docs/v0.7.9/js/cropper.js +++ /dev/null @@ -1,1641 +0,0 @@ -/*! - * Cropper v0.7.9 - * https://github.com/fengyuanchen/cropper - * - * Copyright 2014-2015 Fengyuan Chen - * Released under the MIT license - */ - -(function (factory) { - if (typeof define === "function" && define.amd) { - // AMD. Register as anonymous module. - define(["jquery"], factory); - } else if (typeof exports === "object") { - // Node / CommonJS - factory(require("jquery")); - } else { - // Browser globals. - factory(jQuery); - } -})(function ($) { - - "use strict"; - - var $window = $(window), - $document = $(document), - location = window.location, - - // Constants - TRUE = true, - FALSE = false, - NULL = null, - NAN = NaN, - INFINITY = Infinity, - STRING_UNDEFINED = "undefined", - STRING_DIRECTIVE = "directive", - CROPPER_NAMESPACE = ".cropper", - - // RegExps - REGEXP_DIRECTIVES = /^(e|n|w|s|ne|nw|sw|se|all|crop|move|zoom)$/, - REGEXP_OPTIONS = /^(x|y|width|height)$/, - REGEXP_PROPERTIES = /^(naturalWidth|naturalHeight|width|height|aspectRatio|ratio|rotate)$/, - - // Classes - CLASS_MODAL = "cropper-modal", - CLASS_HIDDEN = "cropper-hidden", - CLASS_INVISIBLE = "cropper-invisible", - CLASS_MOVE = "cropper-move", - CLASS_CROP = "cropper-crop", - CLASS_DISABLED = "cropper-disabled", - - // Events - EVENT_MOUSE_DOWN = "mousedown touchstart", - EVENT_MOUSE_MOVE = "mousemove touchmove", - EVENT_MOUSE_UP = "mouseup mouseleave touchend touchleave touchcancel", - EVENT_WHEEL = "wheel mousewheel DOMMouseScroll", - EVENT_RESIZE = "resize" + CROPPER_NAMESPACE, // Bind to window with namespace - EVENT_DBLCLICK = "dblclick", - EVENT_BUILD = "build" + CROPPER_NAMESPACE, - EVENT_BUILT = "built" + CROPPER_NAMESPACE, - EVENT_DRAG_START = "dragstart" + CROPPER_NAMESPACE, - EVENT_DRAG_MOVE = "dragmove" + CROPPER_NAMESPACE, - EVENT_DRAG_END = "dragend" + CROPPER_NAMESPACE, - - // Functions - isNumber = function (n) { - return typeof n === "number"; - }, - - toArray = function (obj, offset) { - var args = []; - - if (isNumber(offset)) { // It's necessary for IE8 - args.push(offset); - } - - return args.slice.apply(obj, args); - }, - - // Custom proxy to avoid jQuery's guid - proxy = function (fn, context) { - var args = toArray(arguments, 2); - - return function () { - return fn.apply(context, args.concat(toArray(arguments))); - }; - }, - - addTimestamp = function (url) { - var timestamp = "timestamp=" + (new Date()).getTime(); - - return (url + (url.indexOf("?") === -1 ? "?" : "&") + timestamp); - }, - - // Constructor - Cropper = function (element, options) { - this.element = element; - this.$element = $(element); - this.defaults = $.extend({}, Cropper.DEFAULTS, $.isPlainObject(options) ? options : {}); - this.$original = NULL; - this.ready = FALSE; - this.built = FALSE; - this.cropped = FALSE; - this.rotated = FALSE; - this.disabled = FALSE; - this.replaced = FALSE; - this.init(); - }, - - // Others - sqrt = Math.sqrt, - min = Math.min, - max = Math.max, - abs = Math.abs, - sin = Math.sin, - cos = Math.cos, - num = parseFloat; - - Cropper.prototype = { - constructor: Cropper, - - support: { - canvas: $.isFunction($("")[0].getContext) - }, - - init: function () { - var defaults = this.defaults; - - $.each(defaults, function (i, n) { - switch (i) { - case "aspectRatio": - defaults[i] = abs(num(n)) || NAN; // 0 -> NaN - break; - - case "autoCropArea": - defaults[i] = abs(num(n)) || 0.8; // 0 | NaN -> 0.8 - break; - - case "minWidth": - case "minHeight": - defaults[i] = abs(num(n)) || 0; // NaN -> 0 - break; - - case "maxWidth": - case "maxHeight": - defaults[i] = abs(num(n)) || INFINITY; // 0 | NaN -> Infinity - break; - - // No default - } - }); - - // Set default image data - this.image = { - rotate: 0 - }; - - this.load(); - }, - - load: function () { - var _this = this, - $this = this.$element, - element = this.element, - image = this.image, - crossOrigin = "", - $clone, - url; - - if ($this.is("img")) { - url = $this.prop("src"); - } else if ($this.is("canvas") && this.support.canvas) { - url = element.toDataURL(); - } - - if (!url) { - return; - } - - // Reset image rotate degree - if (this.replaced) { - image.rotate = 0; - } - - if (this.defaults.checkImageOrigin && this.isCrossOriginURL(url)) { - crossOrigin = " crossOrigin"; - url = addTimestamp(url); // Bust cache (#119, #148) - } - - this.$clone = ($clone = $("')); - - $clone.one("load", function () { - image.naturalWidth = this.naturalWidth || $clone.width(); - image.naturalHeight = this.naturalHeight || $clone.height(); - image.aspectRatio = image.naturalWidth / image.naturalHeight; - - _this.url = url; - _this.ready = TRUE; - _this.build(); - }); - - // Hide and prepend the clone iamge to the document body (Don't append to). - $clone.addClass(CLASS_INVISIBLE).prependTo("body"); - }, - - isCrossOriginURL: function (url) { - var parts = url.match(/^(https?:)\/\/([^\:\/\?#]+):?(\d*)/i); - - if (parts && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port)) { - return TRUE; - } - - return FALSE; - }, - - build: function () { - var $this = this.$element, - defaults = this.defaults, - buildEvent, - $cropper; - - if (!this.ready) { - return; - } - - if (this.built) { - this.unbuild(); - } - - $this.one(EVENT_BUILD, defaults.build); // Only trigger once - buildEvent = $.Event(EVENT_BUILD); - $this.trigger(buildEvent); - - if (buildEvent.isDefaultPrevented()) { - return; - } - - // Create cropper elements - this.$cropper = ($cropper = $(Cropper.TEMPLATE)); - - // Hide the original image - $this.addClass(CLASS_HIDDEN); - - // Show and prepend the clone iamge to the cropper - this.$clone.removeClass(CLASS_INVISIBLE).prependTo($cropper); - - // Save original image for rotation - if (!this.rotated) { - this.$original = this.$clone.clone(); - - // Append the image to document to avoid "NS_ERROR_NOT_AVAILABLE" error on Firefox when call the "drawImage" method. - this.$original.addClass(CLASS_HIDDEN).prependTo(this.$cropper); - - this.originalImage = $.extend({}, this.image); - } - - this.$container = $this.parent(); - this.$container.append($cropper); - - this.$canvas = $cropper.find(".cropper-canvas"); - this.$dragger = $cropper.find(".cropper-dragger"); - this.$viewer = $cropper.find(".cropper-viewer"); - - defaults.autoCrop ? (this.cropped = TRUE) : this.$dragger.addClass(CLASS_HIDDEN); - defaults.modal && this.$canvas.addClass(CLASS_MODAL); - !defaults.dashed && this.$dragger.find(".cropper-dashed").addClass(CLASS_HIDDEN); - !defaults.movable && this.$dragger.find(".cropper-face").data(STRING_DIRECTIVE, "move"); - !defaults.resizable && this.$dragger.find(".cropper-line, .cropper-point").addClass(CLASS_HIDDEN); - - this.addListeners(); - this.initPreview(); - - this.built = TRUE; // Set `true` before update - defaults.dragCrop && this.setDragMode("crop"); // Set after built - this.update(); - this.replaced = FALSE; // Reset to `false` after update - - $this.one(EVENT_BUILT, defaults.built); // Only trigger once - $this.trigger(EVENT_BUILT); - }, - - unbuild: function () { - if (!this.built) { - return; - } - - this.built = FALSE; - this.removeListeners(); - - this.$preview.empty(); - this.$preview = NULL; - - this.$dragger = NULL; - this.$canvas = NULL; - this.$container = NULL; - - this.$cropper.remove(); - this.$cropper = NULL; - }, - - update: function (data) { - this.initContainer(); - this.initCropper(); - this.initImage(); - this.initDragger(); - - if (data) { - this.setData(data, TRUE); - this.setDragMode("crop"); - } else { - this.setData(this.defaults.data); - } - }, - - resize: function () { - clearTimeout(this.resizing); - this.resizing = setTimeout($.proxy(this.update, this, this.getData()), 200); - }, - - preview: function () { - var image = this.image, - dragger = this.dragger, - width = image.width, - height = image.height, - left = dragger.left - image.left, - top = dragger.top - image.top; - - this.$viewer.find("img").css({ - width: width, - height: height, - marginLeft: -left, - marginTop: -top - }); - - this.$preview.each(function () { - var $this = $(this), - data = $this.data(), - ratio = data.width / dragger.width, - newWidth = data.width, - newHeight = dragger.height * ratio; - - if (newHeight > data.height) { - ratio = data.height / dragger.height, - newWidth = dragger.width * ratio; - newHeight = data.height; - } - - $this.width(newWidth).height(newHeight).find("img").css({ - width: width * ratio, - height: height * ratio, - marginLeft: -left * ratio, - marginTop: -top * ratio - }); - }); - }, - - addListeners: function () { - var defaults = this.defaults; - - this.$element.on(EVENT_DRAG_START, defaults.dragstart).on(EVENT_DRAG_MOVE, defaults.dragmove).on(EVENT_DRAG_END, defaults.dragend); - this.$cropper.on(EVENT_MOUSE_DOWN, $.proxy(this.dragstart, this)).on(EVENT_DBLCLICK, $.proxy(this.dblclick, this)); - - if (defaults.zoomable) { - this.$cropper.on(EVENT_WHEEL, $.proxy(this.wheel, this)); - } - - if (defaults.multiple) { - this.$cropper.on(EVENT_MOUSE_MOVE, $.proxy(this.dragmove, this)).on(EVENT_MOUSE_UP, $.proxy(this.dragend, this)); - } else { - $document.on(EVENT_MOUSE_MOVE, (this._dragmove = proxy(this.dragmove, this))).on(EVENT_MOUSE_UP, (this._dragend = proxy(this.dragend, this))); - } - - $window.on(EVENT_RESIZE, (this._resize = proxy(this.resize, this))); - }, - - removeListeners: function () { - var defaults = this.defaults; - - this.$element.off(EVENT_DRAG_START, defaults.dragstart).off(EVENT_DRAG_MOVE, defaults.dragmove).off(EVENT_DRAG_END, defaults.dragend); - this.$cropper.off(EVENT_MOUSE_DOWN, this.dragstart).off(EVENT_DBLCLICK, this.dblclick); - - if (defaults.zoomable) { - this.$cropper.off(EVENT_WHEEL, this.wheel); - } - - if (defaults.multiple) { - this.$cropper.off(EVENT_MOUSE_MOVE, this.dragmove).off(EVENT_MOUSE_UP, this.dragend); - } else { - $document.off(EVENT_MOUSE_MOVE, this._dragmove).off(EVENT_MOUSE_UP, this._dragend); - } - - $window.off(EVENT_RESIZE, this._resize); - }, - - initPreview: function () { - var url = this.url; - - this.$preview = $(this.defaults.preview); - this.$viewer.html(''); - - this.$preview.each(function () { - var $this = $(this); - - $this.data({ - width: $this.width(), - height: $this.height() - }).html(''); - }); - }, - - initContainer: function () { - var $this = this.$element, - $container = this.$container, - $cropper = this.$cropper, - defaults = this.defaults; - - $cropper.addClass(CLASS_HIDDEN); - $this.removeClass(CLASS_HIDDEN); - - this.container = { - width: max($container.width(), defaults.minContainerWidth), - height: max($container.height(), defaults.minContainerHeight) - }; - - $this.addClass(CLASS_HIDDEN); - $cropper.removeClass(CLASS_HIDDEN); - }, - - initCropper: function () { - var container = this.container, - image = this.image, - cropper; - - if (((image.naturalWidth * container.height / image.naturalHeight) - container.width) >= 0) { - cropper = { - width: container.width, - height: container.width / image.aspectRatio, - left: 0 - }; - - cropper.top = (container.height - cropper.height) / 2; - } else { - cropper = { - width: container.height * image.aspectRatio, - height: container.height, - top: 0 - }; - - cropper.left = (container.width - cropper.width) / 2; - } - - this.$cropper.css({ - width: cropper.width, - height: cropper.height, - left: cropper.left, - top: cropper.top - }); - - this.cropper = cropper; - }, - - initImage: function () { - var image = this.image, - cropper = this.cropper, - defaultImage = { - _width: cropper.width, - _height: cropper.height, - width: cropper.width, - height: cropper.height, - left: 0, - top: 0, - ratio: cropper.width / image.naturalWidth - }; - - this.defaultImage = $.extend({}, image, defaultImage); - - if (image._width !== cropper.width || image._height !== cropper.height) { - $.extend(image, defaultImage); - } else { - image = $.extend({}, defaultImage, image); - - // Reset image ratio - if (this.replaced) { - image.ratio = defaultImage.ratio; - } - } - - this.image = image; - this.renderImage(); - }, - - renderImage: function (mode) { - var image = this.image; - - if (mode === "zoom") { - image.left -= (image.width - image.oldWidth) / 2; - image.top -= (image.height - image.oldHeight) / 2; - } - - image.left = min(max(image.left, image._width - image.width), 0); - image.top = min(max(image.top, image._height - image.height), 0); - - this.$clone.css({ - width: image.width, - height: image.height, - marginLeft: image.left, - marginTop: image.top - }); - - if (mode) { - this.defaults.done(this.getData()); - this.preview(); - } - }, - - initDragger: function () { - var defaults = this.defaults, - cropper = this.cropper, - // If not set, use the original aspect ratio of the image. - aspectRatio = defaults.aspectRatio || this.image.aspectRatio, - ratio = this.image.ratio, - autoCropDragger, - dragger; - - if (((cropper.height * aspectRatio) - cropper.width) >= 0) { - dragger = { - height: cropper.width / aspectRatio, - width: cropper.width, - left: 0, - top: (cropper.height - (cropper.width / aspectRatio)) / 2, - maxWidth: cropper.width, - maxHeight: cropper.width / aspectRatio - }; - } else { - dragger = { - height: cropper.height, - width: cropper.height * aspectRatio, - left: (cropper.width - (cropper.height * aspectRatio)) / 2, - top: 0, - maxWidth: cropper.height * aspectRatio, - maxHeight: cropper.height - }; - } - - dragger.minWidth = 0; - dragger.minHeight = 0; - - if (defaults.aspectRatio) { - if (isFinite(defaults.maxWidth)) { - dragger.maxWidth = min(dragger.maxWidth, defaults.maxWidth * ratio); - dragger.maxHeight = dragger.maxWidth / aspectRatio; - } else if (isFinite(defaults.maxHeight)) { - dragger.maxHeight = min(dragger.maxHeight, defaults.maxHeight * ratio); - dragger.maxWidth = dragger.maxHeight * aspectRatio; - } - - if (defaults.minWidth > 0) { - dragger.minWidth = max(0, defaults.minWidth * ratio); - dragger.minHeight = dragger.minWidth / aspectRatio; - } else if (defaults.minHeight > 0) { - dragger.minHeight = max(0, defaults.minHeight * ratio); - dragger.minWidth = dragger.minHeight * aspectRatio; - } - } else { - dragger.maxWidth = min(dragger.maxWidth, defaults.maxWidth * ratio); - dragger.maxHeight = min(dragger.maxHeight, defaults.maxHeight * ratio); - dragger.minWidth = max(0, defaults.minWidth * ratio); - dragger.minHeight = max(0, defaults.minHeight * ratio); - } - - // minWidth can't be greater than maxWidth, and minHeight too. - dragger.minWidth = min(dragger.maxWidth, dragger.minWidth); - dragger.minHeight = min(dragger.maxHeight, dragger.minHeight); - - // Center the dragger by default - autoCropDragger = $.extend({}, dragger); - - // The width of auto crop area must large than minWidth, and the height too. (#164) - autoCropDragger.width = max(dragger.minWidth, dragger.width * defaults.autoCropArea); - autoCropDragger.height = max(dragger.minHeight, dragger.height * defaults.autoCropArea); - autoCropDragger.left = (cropper.width - autoCropDragger.width) / 2; - autoCropDragger.top = (cropper.height - autoCropDragger.height) / 2; - - autoCropDragger.oldLeft = dragger.oldLeft = dragger.left; - autoCropDragger.oldTop = dragger.oldTop = dragger.top; - - this.autoCropDragger = autoCropDragger; - this.defaultDragger = $.extend({}, dragger); - this.dragger = dragger; - }, - - renderDragger: function () { - var dragger = this.dragger, - cropper = this.cropper; - - if (dragger.width > dragger.maxWidth) { - dragger.width = dragger.maxWidth; - dragger.left = dragger.oldLeft; - } else if (dragger.width < dragger.minWidth) { - dragger.width = dragger.minWidth; - dragger.left = dragger.oldLeft; - } - - if (dragger.height > dragger.maxHeight) { - dragger.height = dragger.maxHeight; - dragger.top = dragger.oldTop; - } else if (dragger.height < dragger.minHeight) { - dragger.height = dragger.minHeight; - dragger.top = dragger.oldTop; - } - - dragger.left = min(max(dragger.left, 0), cropper.width - dragger.width); - dragger.top = min(max(dragger.top, 0), cropper.height - dragger.height); - dragger.oldLeft = dragger.left; - dragger.oldTop = dragger.top; - - // Re-render the dragger - this.dragger = dragger; - - // #186 - if (this.defaults.movable) { - this.$dragger.find(".cropper-face").data(STRING_DIRECTIVE, (dragger.width === cropper.width && dragger.height === cropper.height) ? "move" : "all"); - } - - if (!this.disabled) { - this.defaults.done(this.getData()); - } - - this.$dragger.css({ - width: dragger.width, - height: dragger.height, - left: dragger.left, - top: dragger.top - }); - - this.preview(); - }, - - reset: function (deep) { - if (!this.cropped || this.disabled) { - return; - } - - if (deep) { - this.defaults.data = {}; - } - - this.image = $.extend({}, this.defaultImage); - this.renderImage(); - this.dragger = $.extend({}, this.defaultDragger); - this.setData(this.defaults.data); - }, - - clear: function () { - if (!this.cropped || this.disabled) { - return; - } - - this.cropped = FALSE; - - this.setData({ - x: 0, - y: 0, - width: 0, - height: 0 - }); - - this.$canvas.removeClass(CLASS_MODAL); - this.$dragger.addClass(CLASS_HIDDEN); - }, - - destroy: function () { - var $this = this.$element; - - if (!this.ready) { - this.$clone.off("load").remove(); - } - - this.unbuild(); - $this.removeClass(CLASS_HIDDEN).removeData("cropper"); - - if (this.rotated) { - $this.attr("src", this.$original.attr("src")); - } - }, - - replace: function (url, /*INTERNAL*/ rotated) { - var _this = this, - $this = this.$element, - element = this.element, - context; - - if (!this.disabled && url && url !== this.url && url !== $this.attr("src")) { - if (!rotated) { - this.rotated = FALSE; - this.replaced = TRUE; - } - - if ($this.is("img")) { - $this.attr("src", url); - this.load(); - } else if ($this.is("canvas") && this.support.canvas) { - context = element.getContext("2d"); - - $('').one("load", function () { - element.width = this.width; - element.height = this.height; - context.clearRect(0, 0, element.width, element.height); - context.drawImage(this, 0, 0); - _this.load(); - }); - } - } - }, - - setData: function (data, /*INTERNAL*/ once) { - var cropper = this.cropper, - dragger = this.dragger, - image = this.image, - aspectRatio = this.defaults.aspectRatio; - - if (!this.built || this.disabled || typeof data === STRING_UNDEFINED) { - return; - } - - if (data === NULL || $.isEmptyObject(data)) { - dragger = $.extend({}, this.autoCropDragger); - } - - if ($.isPlainObject(data) && !$.isEmptyObject(data)) { - - if (!once) { - this.defaults.data = data; - } - - data = this.transformData(data); - - if (isNumber(data.x) && data.x <= cropper.width - image.left) { - dragger.left = data.x + image.left; - } - - if (isNumber(data.y) && data.y <= cropper.height - image.top) { - dragger.top = data.y + image.top; - } - - if (aspectRatio) { - if (isNumber(data.width) && data.width <= dragger.maxWidth && data.width >= dragger.minWidth) { - dragger.width = data.width; - dragger.height = dragger.width / aspectRatio; - } else if (isNumber(data.height) && data.height <= dragger.maxHeight && data.height >= dragger.minHeight) { - dragger.height = data.height; - dragger.width = dragger.height * aspectRatio; - } - } else { - if (isNumber(data.width) && data.width <= dragger.maxWidth && data.width >= dragger.minWidth) { - dragger.width = data.width; - } - - if (isNumber(data.height) && data.height <= dragger.maxHeight && data.height >= dragger.minHeight) { - dragger.height = data.height; - } - } - } - - this.dragger = dragger; - this.renderDragger(); - }, - - getData: function (rounded) { - var dragger = this.dragger, - image = this.image, - data = {}; - - if (this.built) { - data = { - x: dragger.left - image.left, - y: dragger.top - image.top, - width: dragger.width, - height: dragger.height - }; - - data = this.transformData(data, TRUE, rounded); - } - - return data; - }, - - transformData: function (data, reversed, rounded) { - var ratio = this.image.ratio, - result = {}; - - $.each(data, function (i, n) { - n = num(n); - - if (REGEXP_OPTIONS.test(i) && !isNaN(n)) { - result[i] = reversed ? (rounded ? Math.round(n / ratio) : n / ratio) : n * ratio; - } - }); - - return result; - }, - - setAspectRatio: function (aspectRatio) { - var freeRatio = aspectRatio === "auto"; - - if (this.disabled) { - return; - } - - aspectRatio = num(aspectRatio); - - if (freeRatio || (!isNaN(aspectRatio) && aspectRatio > 0)) { - this.defaults.aspectRatio = freeRatio ? NAN : aspectRatio; - - if (this.built) { - this.initDragger(); - this.renderDragger(); - this.setData(this.defaults.data); // Reset to initial state - } - } - }, - - getImageData: function () { - var data = {}; - - if (this.ready) { - $.each(this.image, function (name, value) { - if (REGEXP_PROPERTIES.test(name)) { - data[name] = value; - } - }); - } - - return data; - }, - - getDataURL: function (options, type, quality) { - var canvas = $("")[0], - data = this.getData(), - dataURL = "", - context; - - if (!$.isPlainObject(options)) { - quality = type; - type = options; - options = {}; - } - - options = $.extend({ - width: data.width, - height: data.height - }, options); - - if (this.cropped && this.support.canvas) { - canvas.width = options.width; - canvas.height = options.height; - context = canvas.getContext("2d"); - - if (type === "image/jpeg") { - context.fillStyle = "#fff"; - context.fillRect(0, 0, options.width, options.height); - } - - context.drawImage(this.$clone[0], data.x, data.y, data.width, data.height, 0, 0, options.width, options.height); - dataURL = canvas.toDataURL(type, quality); - } - - return dataURL; - }, - - setDragMode: function (mode) { - var $canvas = this.$canvas, - defaults = this.defaults, - cropable = FALSE, - movable = FALSE; - - if (!this.built || this.disabled) { - return; - } - - switch (mode) { - case "crop": - if (defaults.dragCrop) { - cropable = TRUE; - $canvas.data(STRING_DIRECTIVE, mode); - } - - break; - - case "move": - movable = TRUE; - $canvas.data(STRING_DIRECTIVE, mode); - - break; - - default: - $canvas.removeData(STRING_DIRECTIVE); - } - - $canvas.toggleClass(CLASS_CROP, cropable).toggleClass(CLASS_MOVE, movable); - }, - - enable: function () { - if (this.built) { - this.disabled = FALSE; - this.$cropper.removeClass(CLASS_DISABLED); - } - }, - - disable: function () { - if (this.built) { - this.disabled = TRUE; - this.$cropper.addClass(CLASS_DISABLED); - } - }, - - rotate: function (degree) { - var image = this.image; - - degree = num(degree) || 0; - - if (!this.built || degree === 0 || this.disabled || !this.defaults.rotatable || !this.support.canvas) { - return; - } - - this.rotated = TRUE; - degree = (image.rotate = (image.rotate + degree) % 360); - - // replace with "true" to prevent to override the original image - this.replace(this.getRotatedDataURL(degree), true); - }, - - getRotatedDataURL: function (degree) { - var canvas = $("")[0], - context = canvas.getContext("2d"), - originalImage = this.originalImage, - naturalWidth = originalImage.naturalWidth, - naturalHeight = originalImage.naturalHeight, - deg = abs(degree) % 180, - arc = (deg > 90 ? (180 - deg) : deg) * Math.PI / 180, - width = naturalWidth * cos(arc) + naturalHeight * sin(arc), - height = naturalWidth * sin(arc) + naturalHeight * cos(arc); - - canvas.width = width; - canvas.height = height; - context.save(); - context.translate(width / 2, height / 2); - context.rotate(degree * Math.PI / 180); - context.drawImage(this.$original[0], -naturalWidth / 2, -naturalHeight / 2, naturalWidth, naturalHeight); - context.restore(); - - return canvas.toDataURL(); - }, - - zoom: function (delta) { - var image = this.image, - width, - height, - range; - - delta = num(delta); - - if (!this.built || !delta || this.disabled || !this.defaults.zoomable) { - return; - } - - width = image.width * (1 + delta); - height = image.height * (1 + delta); - range = width / image._width; - - if (range > 10) { - return; - } - - if (range < 1) { - width = image._width; - height = image._height; - } - - if (range <= 1) { - this.setDragMode("crop"); - } else { - this.setDragMode("move"); - } - - image.oldWidth = image.width; - image.oldHeight = image.height; - - image.width = width; - image.height = height; - image.ratio = image.width / image.naturalWidth; - - this.renderImage("zoom"); - }, - - dblclick: function () { - if (this.disabled) { - return; - } - - if (this.$canvas.hasClass(CLASS_CROP)) { - this.setDragMode("move"); - } else { - this.setDragMode("crop"); - } - }, - - wheel: function (event) { - var e = event.originalEvent, - delta = 1; - - if (this.disabled) { - return; - } - - event.preventDefault(); - - if (e.deltaY) { - delta = e.deltaY > 0 ? 1 : -1; - } else if (e.wheelDelta) { - delta = -e.wheelDelta / 120; - } else if (e.detail) { - delta = e.detail > 0 ? 1 : -1; - } - - this.zoom(delta * 0.1); - }, - - dragstart: function (event) { - var touches = event.originalEvent.touches, - e = event, - directive, - dragStartEvent, - touchesLength; - - if (this.disabled) { - return; - } - - if (touches) { - touchesLength = touches.length; - - if (touchesLength > 1) { - if (this.defaults.zoomable && touchesLength === 2) { - e = touches[1]; - this.startX2 = e.pageX; - this.startY2 = e.pageY; - directive = "zoom"; - } else { - return; - } - } - - e = touches[0]; - } - - directive = directive || $(e.target).data(STRING_DIRECTIVE); - - if (REGEXP_DIRECTIVES.test(directive)) { - event.preventDefault(); - - dragStartEvent = $.Event(EVENT_DRAG_START); - this.$element.trigger(dragStartEvent); - - if (dragStartEvent.isDefaultPrevented()) { - return; - } - - this.directive = directive; - this.cropping = FALSE; - this.startX = e.pageX; - this.startY = e.pageY; - - if (directive === "crop") { - this.cropping = TRUE; - this.$canvas.addClass(CLASS_MODAL); - } - } - }, - - dragmove: function (event) { - var touches = event.originalEvent.touches, - e = event, - dragMoveEvent, - touchesLength; - - if (this.disabled) { - return; - } - - if (touches) { - touchesLength = touches.length; - - if (touchesLength > 1) { - if (this.defaults.zoomable && touchesLength === 2) { - e = touches[1]; - this.endX2 = e.pageX; - this.endY2 = e.pageY; - } else { - return; - } - } - - e = touches[0]; - } - - if (this.directive) { - event.preventDefault(); - - dragMoveEvent = $.Event(EVENT_DRAG_MOVE); - this.$element.trigger(dragMoveEvent); - - if (dragMoveEvent.isDefaultPrevented()) { - return; - } - - this.endX = e.pageX; - this.endY = e.pageY; - - this.dragging(); - } - }, - - dragend: function (event) { - var dragEndEvent; - - if (this.disabled) { - return; - } - - if (this.directive) { - event.preventDefault(); - - dragEndEvent = $.Event(EVENT_DRAG_END); - this.$element.trigger(dragEndEvent); - - if (dragEndEvent.isDefaultPrevented()) { - return; - } - - if (this.cropping) { - this.cropping = FALSE; - this.$canvas.toggleClass(CLASS_MODAL, this.cropped && this.defaults.modal); - } - - this.directive = ""; - } - }, - - dragging: function () { - var directive = this.directive, - image = this.image, - cropper = this.cropper, - maxWidth = cropper.width, - maxHeight = cropper.height, - dragger = this.dragger, - width = dragger.width, - height = dragger.height, - left = dragger.left, - top = dragger.top, - right = left + width, - bottom = top + height, - renderable = TRUE, - aspectRatio = this.defaults.aspectRatio, - range = { - x: this.endX - this.startX, - y: this.endY - this.startY - }, - offset; - - if (aspectRatio) { - range.X = range.y * aspectRatio; - range.Y = range.x / aspectRatio; - } - - switch (directive) { - // Move dragger - case "all": - left += range.x; - top += range.y; - - break; - - // Resize dragger - case "e": - if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= 0 || bottom >= maxHeight))) { - renderable = FALSE; - break; - } - - width += range.x; - - if (aspectRatio) { - height = width / aspectRatio; - top -= range.Y / 2; - } - - if (width < 0) { - directive = "w"; - width = 0; - } - - break; - - case "n": - if (range.y <= 0 && (top <= 0 || aspectRatio && (left <= 0 || right >= maxWidth))) { - renderable = FALSE; - break; - } - - height -= range.y; - top += range.y; - - if (aspectRatio) { - width = height * aspectRatio; - left += range.X / 2; - } - - if (height < 0) { - directive = "s"; - height = 0; - } - - break; - - case "w": - if (range.x <= 0 && (left <= 0 || aspectRatio && (top <= 0 || bottom >= maxHeight))) { - renderable = FALSE; - break; - } - - width -= range.x; - left += range.x; - - if (aspectRatio) { - height = width / aspectRatio; - top += range.Y / 2; - } - - if (width < 0) { - directive = "e"; - width = 0; - } - - break; - - case "s": - if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= 0 || right >= maxWidth))) { - renderable = FALSE; - break; - } - - height += range.y; - - if (aspectRatio) { - width = height * aspectRatio; - left -= range.X / 2; - } - - if (height < 0) { - directive = "n"; - height = 0; - } - - break; - - case "ne": - if (aspectRatio) { - if (range.y <= 0 && (top <= 0 || right >= maxWidth)) { - renderable = FALSE; - break; - } - - height -= range.y; - top += range.y; - width = height * aspectRatio; - } else { - if (range.x >= 0) { - if (right < maxWidth) { - width += range.x; - } else if (range.y <= 0 && top <= 0) { - renderable = FALSE; - } - } else { - width += range.x; - } - - if (range.y <= 0) { - if (top > 0) { - height -= range.y; - top += range.y; - } - } else { - height -= range.y; - top += range.y; - } - } - - if (width < 0 && height < 0) { - directive = "sw"; - height = 0; - width = 0; - } else if (width < 0) { - directive = "nw"; - width = 0; - } else if (height < 0) { - directive = "se"; - height = 0; - } - - break; - - case "nw": - if (aspectRatio) { - if (range.y <= 0 && (top <= 0 || left <= 0)) { - renderable = FALSE; - break; - } - - height -= range.y; - top += range.y; - width = height * aspectRatio; - left += range.X; - } else { - if (range.x <= 0) { - if (left > 0) { - width -= range.x; - left += range.x; - } else if (range.y <= 0 && top <= 0) { - renderable = FALSE; - } - } else { - width -= range.x; - left += range.x; - } - - if (range.y <= 0) { - if (top > 0) { - height -= range.y; - top += range.y; - } - } else { - height -= range.y; - top += range.y; - } - } - - if (width < 0 && height < 0) { - directive = "se"; - height = 0; - width = 0; - } else if (width < 0) { - directive = "ne"; - width = 0; - } else if (height < 0) { - directive = "sw"; - height = 0; - } - - break; - - case "sw": - if (aspectRatio) { - if (range.x <= 0 && (left <= 0 || bottom >= maxHeight)) { - renderable = FALSE; - break; - } - - width -= range.x; - left += range.x; - height = width / aspectRatio; - } else { - if (range.x <= 0) { - if (left > 0) { - width -= range.x; - left += range.x; - } else if (range.y >= 0 && bottom >= maxHeight) { - renderable = FALSE; - } - } else { - width -= range.x; - left += range.x; - } - - if (range.y >= 0) { - if (bottom < maxHeight) { - height += range.y; - } - } else { - height += range.y; - } - } - - if (width < 0 && height < 0) { - directive = "ne"; - height = 0; - width = 0; - } else if (width < 0) { - directive = "se"; - width = 0; - } else if (height < 0) { - directive = "nw"; - height = 0; - } - - break; - - case "se": - if (aspectRatio) { - if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) { - renderable = FALSE; - break; - } - - width += range.x; - height = width / aspectRatio; - } else { - if (range.x >= 0) { - if (right < maxWidth) { - width += range.x; - } else if (range.y >= 0 && bottom >= maxHeight) { - renderable = FALSE; - } - } else { - width += range.x; - } - - if (range.y >= 0) { - if (bottom < maxHeight) { - height += range.y; - } - } else { - height += range.y; - } - } - - if (width < 0 && height < 0) { - directive = "nw"; - height = 0; - width = 0; - } else if (width < 0) { - directive = "sw"; - width = 0; - } else if (height < 0) { - directive = "ne"; - height = 0; - } - - break; - - // Move image - case "move": - image.left += range.x; - image.top += range.y; - this.renderImage("move"); - renderable = FALSE; - break; - - // Scale image - case "zoom": - this.zoom(function (x, y, x1, y1, x2, y2) { - return (sqrt(x2 * x2 + y2 * y2) - sqrt(x1 * x1 + y1 * y1)) / sqrt(x * x + y * y); - }( - image.width, - image.height, - abs(this.startX - this.startX2), - abs(this.startY - this.startY2), - abs(this.endX - this.endX2), - abs(this.endY - this.endY2) - )); - - this.endX2 = this.startX2; - this.endY2 = this.startY2; - renderable = FALSE; - break; - - // Crop image - case "crop": - if (range.x && range.y) { - offset = this.$cropper.offset(); - left = this.startX - offset.left; - top = this.startY - offset.top; - width = dragger.minWidth; - height = dragger.minHeight; - - if (range.x > 0) { - if (range.y > 0) { - directive = "se"; - } else { - directive = "ne"; - top -= height; - } - } else { - if (range.y > 0) { - directive = "sw"; - left -= width; - } else { - directive = "nw"; - left -= width; - top -= height; - } - } - - // Show the dragger if is hidden - if (!this.cropped) { - this.cropped = TRUE; - this.$dragger.removeClass(CLASS_HIDDEN); - } - } - - break; - - // No default - } - - if (renderable) { - dragger.width = width; - dragger.height = height; - dragger.left = left; - dragger.top = top; - this.directive = directive; - - this.renderDragger(); - } - - // Override - this.startX = this.endX; - this.startY = this.endY; - } - }; - - // Use the string compressor: Strmin (https://github.com/fengyuanchen/strmin) - Cropper.TEMPLATE = (function (source, words) { - words = words.split(","); - return source.replace(/\d+/g, function (i) { - return words[i]; - }); - })('<0 6="5-container"><0 6="5-canvas"><0 6="5-dragger"><1 6="5-viewer"><1 6="5-8 8-h"><1 6="5-8 8-v"><1 6="5-face" 3-2="all"><1 6="5-7 7-e" 3-2="e"><1 6="5-7 7-n" 3-2="n"><1 6="5-7 7-w" 3-2="w"><1 6="5-7 7-s" 3-2="s"><1 6="5-4 4-e" 3-2="e"><1 6="5-4 4-n" 3-2="n"><1 6="5-4 4-w" 3-2="w"><1 6="5-4 4-s" 3-2="s"><1 6="5-4 4-ne" 3-2="ne"><1 6="5-4 4-nw" 3-2="nw"><1 6="5-4 4-sw" 3-2="sw"><1 6="5-4 4-se" 3-2="se">', "div,span,directive,data,point,cropper,class,line,dashed"); - - /* Template source: -
-
-
- - - - - - - - - - - - - - - - -
-
- */ - - Cropper.DEFAULTS = { - // Basic - aspectRatio: "auto", - autoCropArea: 0.8, // 80% - data: { - // x: 0, - // y: 0, - // width: 300, - // height: 150 - }, - done: $.noop, - preview: "", - - // Toggles - multiple: FALSE, - autoCrop: TRUE, - dragCrop: TRUE, - dashed: TRUE, - modal: TRUE, - movable: TRUE, - resizable: TRUE, - zoomable: TRUE, - rotatable: TRUE, - checkImageOrigin: TRUE, - - // Dimensions - minWidth: 0, - minHeight: 0, - maxWidth: INFINITY, - maxHeight: INFINITY, - minContainerWidth: 300, - minContainerHeight: 150, - - // Events - build: NULL, - built: NULL, - dragstart: NULL, - dragmove: NULL, - dragend: NULL - }; - - Cropper.setDefaults = function (options) { - $.extend(Cropper.DEFAULTS, options); - }; - - // Save the other cropper - Cropper.other = $.fn.cropper; - - // Register as jQuery plugin - $.fn.cropper = function (options) { - var args = toArray(arguments, 1), - result; - - this.each(function () { - var $this = $(this), - data = $this.data("cropper"), - fn; - - if (!data) { - $this.data("cropper", (data = new Cropper(this, options))); - } - - if (typeof options === "string" && $.isFunction((fn = data[options]))) { - result = fn.apply(data, args); - } - }); - - return (typeof result !== STRING_UNDEFINED ? result : this); - }; - - $.fn.cropper.Constructor = Cropper; - $.fn.cropper.setDefaults = Cropper.setDefaults; - - // No conflict - $.fn.cropper.noConflict = function () { - $.fn.cropper = Cropper.other; - return this; - }; -}); diff --git a/docs/v0.7.9/js/cropper.min.js b/docs/v0.7.9/js/cropper.min.js deleted file mode 100644 index 51e1362a..00000000 --- a/docs/v0.7.9/js/cropper.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Cropper v0.7.9 - * https://github.com/fengyuanchen/cropper - * - * Copyright 2014-2015 Fengyuan Chen - * Released under the MIT license - */ - -!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){"use strict";var b=a(window),c=a(document),d=window.location,e=!0,f=!1,g=null,h=0/0,i=1/0,j="undefined",k="directive",l=".cropper",m=/^(e|n|w|s|ne|nw|sw|se|all|crop|move|zoom)$/,n=/^(x|y|width|height)$/,o=/^(naturalWidth|naturalHeight|width|height|aspectRatio|ratio|rotate)$/,p="cropper-modal",q="cropper-hidden",r="cropper-invisible",s="cropper-move",t="cropper-crop",u="cropper-disabled",v="mousedown touchstart",w="mousemove touchmove",x="mouseup mouseleave touchend touchleave touchcancel",y="wheel mousewheel DOMMouseScroll",z="resize"+l,A="dblclick",B="build"+l,C="built"+l,D="dragstart"+l,E="dragmove"+l,F="dragend"+l,G=function(a){return"number"==typeof a},H=function(a,b){var c=[];return G(b)&&c.push(b),c.slice.apply(a,c)},I=function(a,b){var c=H(arguments,2);return function(){return a.apply(b,c.concat(H(arguments)))}},J=function(a){var b="timestamp="+(new Date).getTime();return a+(-1===a.indexOf("?")?"?":"&")+b},K=function(b,c){this.element=b,this.$element=a(b),this.defaults=a.extend({},K.DEFAULTS,a.isPlainObject(c)?c:{}),this.$original=g,this.ready=f,this.built=f,this.cropped=f,this.rotated=f,this.disabled=f,this.replaced=f,this.init()},L=Math.sqrt,M=Math.min,N=Math.max,O=Math.abs,P=Math.sin,Q=Math.cos,R=parseFloat;K.prototype={constructor:K,support:{canvas:a.isFunction(a("")[0].getContext)},init:function(){var b=this.defaults;a.each(b,function(a,c){switch(a){case"aspectRatio":b[a]=O(R(c))||h;break;case"autoCropArea":b[a]=O(R(c))||.8;break;case"minWidth":case"minHeight":b[a]=O(R(c))||0;break;case"maxWidth":case"maxHeight":b[a]=O(R(c))||i}}),this.image={rotate:0},this.load()},load:function(){var b,c,d=this,f=this.$element,g=this.element,h=this.image,i="";f.is("img")?c=f.prop("src"):f.is("canvas")&&this.support.canvas&&(c=g.toDataURL()),c&&(this.replaced&&(h.rotate=0),this.defaults.checkImageOrigin&&this.isCrossOriginURL(c)&&(i=" crossOrigin",c=J(c)),this.$clone=b=a("'),b.one("load",function(){h.naturalWidth=this.naturalWidth||b.width(),h.naturalHeight=this.naturalHeight||b.height(),h.aspectRatio=h.naturalWidth/h.naturalHeight,d.url=c,d.ready=e,d.build()}),b.addClass(r).prependTo("body"))},isCrossOriginURL:function(a){var b=a.match(/^(https?:)\/\/([^\:\/\?#]+):?(\d*)/i);return!b||b[1]===d.protocol&&b[2]===d.hostname&&b[3]===d.port?f:e},build:function(){var b,c,d=this.$element,g=this.defaults;this.ready&&(this.built&&this.unbuild(),d.one(B,g.build),b=a.Event(B),d.trigger(b),b.isDefaultPrevented()||(this.$cropper=c=a(K.TEMPLATE),d.addClass(q),this.$clone.removeClass(r).prependTo(c),this.rotated||(this.$original=this.$clone.clone(),this.$original.addClass(q).prependTo(this.$cropper),this.originalImage=a.extend({},this.image)),this.$container=d.parent(),this.$container.append(c),this.$canvas=c.find(".cropper-canvas"),this.$dragger=c.find(".cropper-dragger"),this.$viewer=c.find(".cropper-viewer"),g.autoCrop?this.cropped=e:this.$dragger.addClass(q),g.modal&&this.$canvas.addClass(p),!g.dashed&&this.$dragger.find(".cropper-dashed").addClass(q),!g.movable&&this.$dragger.find(".cropper-face").data(k,"move"),!g.resizable&&this.$dragger.find(".cropper-line, .cropper-point").addClass(q),this.addListeners(),this.initPreview(),this.built=e,g.dragCrop&&this.setDragMode("crop"),this.update(),this.replaced=f,d.one(C,g.built),d.trigger(C)))},unbuild:function(){this.built&&(this.built=f,this.removeListeners(),this.$preview.empty(),this.$preview=g,this.$dragger=g,this.$canvas=g,this.$container=g,this.$cropper.remove(),this.$cropper=g)},update:function(a){this.initContainer(),this.initCropper(),this.initImage(),this.initDragger(),a?(this.setData(a,e),this.setDragMode("crop")):this.setData(this.defaults.data)},resize:function(){clearTimeout(this.resizing),this.resizing=setTimeout(a.proxy(this.update,this,this.getData()),200)},preview:function(){var b=this.image,c=this.dragger,d=b.width,e=b.height,f=c.left-b.left,g=c.top-b.top;this.$viewer.find("img").css({width:d,height:e,marginLeft:-f,marginTop:-g}),this.$preview.each(function(){var b=a(this),h=b.data(),i=h.width/c.width,j=h.width,k=c.height*i;k>h.height&&(i=h.height/c.height,j=c.width*i,k=h.height),b.width(j).height(k).find("img").css({width:d*i,height:e*i,marginLeft:-f*i,marginTop:-g*i})})},addListeners:function(){var d=this.defaults;this.$element.on(D,d.dragstart).on(E,d.dragmove).on(F,d.dragend),this.$cropper.on(v,a.proxy(this.dragstart,this)).on(A,a.proxy(this.dblclick,this)),d.zoomable&&this.$cropper.on(y,a.proxy(this.wheel,this)),d.multiple?this.$cropper.on(w,a.proxy(this.dragmove,this)).on(x,a.proxy(this.dragend,this)):c.on(w,this._dragmove=I(this.dragmove,this)).on(x,this._dragend=I(this.dragend,this)),b.on(z,this._resize=I(this.resize,this))},removeListeners:function(){var a=this.defaults;this.$element.off(D,a.dragstart).off(E,a.dragmove).off(F,a.dragend),this.$cropper.off(v,this.dragstart).off(A,this.dblclick),a.zoomable&&this.$cropper.off(y,this.wheel),a.multiple?this.$cropper.off(w,this.dragmove).off(x,this.dragend):c.off(w,this._dragmove).off(x,this._dragend),b.off(z,this._resize)},initPreview:function(){var b=this.url;this.$preview=a(this.defaults.preview),this.$viewer.html(''),this.$preview.each(function(){var c=a(this);c.data({width:c.width(),height:c.height()}).html('')})},initContainer:function(){var a=this.$element,b=this.$container,c=this.$cropper,d=this.defaults;c.addClass(q),a.removeClass(q),this.container={width:N(b.width(),d.minContainerWidth),height:N(b.height(),d.minContainerHeight)},a.addClass(q),c.removeClass(q)},initCropper:function(){var a,b=this.container,c=this.image;c.naturalWidth*b.height/c.naturalHeight-b.width>=0?(a={width:b.width,height:b.width/c.aspectRatio,left:0},a.top=(b.height-a.height)/2):(a={width:b.height*c.aspectRatio,height:b.height,top:0},a.left=(b.width-a.width)/2),this.$cropper.css({width:a.width,height:a.height,left:a.left,top:a.top}),this.cropper=a},initImage:function(){var b=this.image,c=this.cropper,d={_width:c.width,_height:c.height,width:c.width,height:c.height,left:0,top:0,ratio:c.width/b.naturalWidth};this.defaultImage=a.extend({},b,d),b._width!==c.width||b._height!==c.height?a.extend(b,d):(b=a.extend({},d,b),this.replaced&&(b.ratio=d.ratio)),this.image=b,this.renderImage()},renderImage:function(a){var b=this.image;"zoom"===a&&(b.left-=(b.width-b.oldWidth)/2,b.top-=(b.height-b.oldHeight)/2),b.left=M(N(b.left,b._width-b.width),0),b.top=M(N(b.top,b._height-b.height),0),this.$clone.css({width:b.width,height:b.height,marginLeft:b.left,marginTop:b.top}),a&&(this.defaults.done(this.getData()),this.preview())},initDragger:function(){var b,c,d=this.defaults,e=this.cropper,f=d.aspectRatio||this.image.aspectRatio,g=this.image.ratio;c=e.height*f-e.width>=0?{height:e.width/f,width:e.width,left:0,top:(e.height-e.width/f)/2,maxWidth:e.width,maxHeight:e.width/f}:{height:e.height,width:e.height*f,left:(e.width-e.height*f)/2,top:0,maxWidth:e.height*f,maxHeight:e.height},c.minWidth=0,c.minHeight=0,d.aspectRatio?(isFinite(d.maxWidth)?(c.maxWidth=M(c.maxWidth,d.maxWidth*g),c.maxHeight=c.maxWidth/f):isFinite(d.maxHeight)&&(c.maxHeight=M(c.maxHeight,d.maxHeight*g),c.maxWidth=c.maxHeight*f),d.minWidth>0?(c.minWidth=N(0,d.minWidth*g),c.minHeight=c.minWidth/f):d.minHeight>0&&(c.minHeight=N(0,d.minHeight*g),c.minWidth=c.minHeight*f)):(c.maxWidth=M(c.maxWidth,d.maxWidth*g),c.maxHeight=M(c.maxHeight,d.maxHeight*g),c.minWidth=N(0,d.minWidth*g),c.minHeight=N(0,d.minHeight*g)),c.minWidth=M(c.maxWidth,c.minWidth),c.minHeight=M(c.maxHeight,c.minHeight),b=a.extend({},c),b.width=N(c.minWidth,c.width*d.autoCropArea),b.height=N(c.minHeight,c.height*d.autoCropArea),b.left=(e.width-b.width)/2,b.top=(e.height-b.height)/2,b.oldLeft=c.oldLeft=c.left,b.oldTop=c.oldTop=c.top,this.autoCropDragger=b,this.defaultDragger=a.extend({},c),this.dragger=c},renderDragger:function(){var a=this.dragger,b=this.cropper;a.width>a.maxWidth?(a.width=a.maxWidth,a.left=a.oldLeft):a.widtha.maxHeight?(a.height=a.maxHeight,a.top=a.oldTop):a.height').one("load",function(){i.width=this.width,i.height=this.height,d.clearRect(0,0,i.width,i.height),d.drawImage(this,0,0),g.load()})))},setData:function(b,c){var d=this.cropper,e=this.dragger,f=this.image,h=this.defaults.aspectRatio;this.built&&!this.disabled&&typeof b!==j&&((b===g||a.isEmptyObject(b))&&(e=a.extend({},this.autoCropDragger)),a.isPlainObject(b)&&!a.isEmptyObject(b)&&(c||(this.defaults.data=b),b=this.transformData(b),G(b.x)&&b.x<=d.width-f.left&&(e.left=b.x+f.left),G(b.y)&&b.y<=d.height-f.top&&(e.top=b.y+f.top),h?G(b.width)&&b.width<=e.maxWidth&&b.width>=e.minWidth?(e.width=b.width,e.height=e.width/h):G(b.height)&&b.height<=e.maxHeight&&b.height>=e.minHeight&&(e.height=b.height,e.width=e.height*h):(G(b.width)&&b.width<=e.maxWidth&&b.width>=e.minWidth&&(e.width=b.width),G(b.height)&&b.height<=e.maxHeight&&b.height>=e.minHeight&&(e.height=b.height))),this.dragger=e,this.renderDragger())},getData:function(a){var b=this.dragger,c=this.image,d={};return this.built&&(d={x:b.left-c.left,y:b.top-c.top,width:b.width,height:b.height},d=this.transformData(d,e,a)),d},transformData:function(b,c,d){var e=this.image.ratio,f={};return a.each(b,function(a,b){b=R(b),n.test(a)&&!isNaN(b)&&(f[a]=c?d?Math.round(b/e):b/e:b*e)}),f},setAspectRatio:function(a){var b="auto"===a;this.disabled||(a=R(a),(b||!isNaN(a)&&a>0)&&(this.defaults.aspectRatio=b?h:a,this.built&&(this.initDragger(),this.renderDragger(),this.setData(this.defaults.data))))},getImageData:function(){var b={};return this.ready&&a.each(this.image,function(a,c){o.test(a)&&(b[a]=c)}),b},getDataURL:function(b,c,d){var e,f=a("")[0],g=this.getData(),h="";return a.isPlainObject(b)||(d=c,c=b,b={}),b=a.extend({width:g.width,height:g.height},b),this.cropped&&this.support.canvas&&(f.width=b.width,f.height=b.height,e=f.getContext("2d"),"image/jpeg"===c&&(e.fillStyle="#fff",e.fillRect(0,0,b.width,b.height)),e.drawImage(this.$clone[0],g.x,g.y,g.width,g.height,0,0,b.width,b.height),h=f.toDataURL(c,d)),h},setDragMode:function(a){var b=this.$canvas,c=this.defaults,d=f,g=f;if(this.built&&!this.disabled){switch(a){case"crop":c.dragCrop&&(d=e,b.data(k,a));break;case"move":g=e,b.data(k,a);break;default:b.removeData(k)}b.toggleClass(t,d).toggleClass(s,g)}},enable:function(){this.built&&(this.disabled=f,this.$cropper.removeClass(u))},disable:function(){this.built&&(this.disabled=e,this.$cropper.addClass(u))},rotate:function(a){var b=this.image;a=R(a)||0,this.built&&0!==a&&!this.disabled&&this.defaults.rotatable&&this.support.canvas&&(this.rotated=e,a=b.rotate=(b.rotate+a)%360,this.replace(this.getRotatedDataURL(a),!0))},getRotatedDataURL:function(b){var c=a("")[0],d=c.getContext("2d"),e=this.originalImage,f=e.naturalWidth,g=e.naturalHeight,h=O(b)%180,i=(h>90?180-h:h)*Math.PI/180,j=f*Q(i)+g*P(i),k=f*P(i)+g*Q(i);return c.width=j,c.height=k,d.save(),d.translate(j/2,k/2),d.rotate(b*Math.PI/180),d.drawImage(this.$original[0],-f/2,-g/2,f,g),d.restore(),c.toDataURL()},zoom:function(a){var b,c,d,e=this.image;a=R(a),this.built&&a&&!this.disabled&&this.defaults.zoomable&&(b=e.width*(1+a),c=e.height*(1+a),d=b/e._width,d>10||(1>d&&(b=e._width,c=e._height),this.setDragMode(1>=d?"crop":"move"),e.oldWidth=e.width,e.oldHeight=e.height,e.width=b,e.height=c,e.ratio=e.width/e.naturalWidth,this.renderImage("zoom")))},dblclick:function(){this.disabled||this.setDragMode(this.$canvas.hasClass(t)?"move":"crop")},wheel:function(a){var b=a.originalEvent,c=1;this.disabled||(a.preventDefault(),b.deltaY?c=b.deltaY>0?1:-1:b.wheelDelta?c=-b.wheelDelta/120:b.detail&&(c=b.detail>0?1:-1),this.zoom(.1*c))},dragstart:function(b){var c,d,g,h=b.originalEvent.touches,i=b;if(!this.disabled){if(h){if(g=h.length,g>1){if(!this.defaults.zoomable||2!==g)return;i=h[1],this.startX2=i.pageX,this.startY2=i.pageY,c="zoom"}i=h[0]}if(c=c||a(i.target).data(k),m.test(c)){if(b.preventDefault(),d=a.Event(D),this.$element.trigger(d),d.isDefaultPrevented())return;this.directive=c,this.cropping=f,this.startX=i.pageX,this.startY=i.pageY,"crop"===c&&(this.cropping=e,this.$canvas.addClass(p))}}},dragmove:function(b){var c,d,e=b.originalEvent.touches,f=b;if(!this.disabled){if(e){if(d=e.length,d>1){if(!this.defaults.zoomable||2!==d)return;f=e[1],this.endX2=f.pageX,this.endY2=f.pageY}f=e[0]}if(this.directive){if(b.preventDefault(),c=a.Event(E),this.$element.trigger(c),c.isDefaultPrevented())return;this.endX=f.pageX,this.endY=f.pageY,this.dragging()}}},dragend:function(b){var c;if(!this.disabled&&this.directive){if(b.preventDefault(),c=a.Event(F),this.$element.trigger(c),c.isDefaultPrevented())return;this.cropping&&(this.cropping=f,this.$canvas.toggleClass(p,this.cropped&&this.defaults.modal)),this.directive=""}},dragging:function(){var a,b=this.directive,c=this.image,d=this.cropper,g=d.width,h=d.height,i=this.dragger,j=i.width,k=i.height,l=i.left,m=i.top,n=l+j,o=m+k,p=e,r=this.defaults.aspectRatio,s={x:this.endX-this.startX,y:this.endY-this.startY};switch(r&&(s.X=s.y*r,s.Y=s.x/r),b){case"all":l+=s.x,m+=s.y;break;case"e":if(s.x>=0&&(n>=g||r&&(0>=m||o>=h))){p=f;break}j+=s.x,r&&(k=j/r,m-=s.Y/2),0>j&&(b="w",j=0);break;case"n":if(s.y<=0&&(0>=m||r&&(0>=l||n>=g))){p=f;break}k-=s.y,m+=s.y,r&&(j=k*r,l+=s.X/2),0>k&&(b="s",k=0);break;case"w":if(s.x<=0&&(0>=l||r&&(0>=m||o>=h))){p=f;break}j-=s.x,l+=s.x,r&&(k=j/r,m+=s.Y/2),0>j&&(b="e",j=0);break;case"s":if(s.y>=0&&(o>=h||r&&(0>=l||n>=g))){p=f;break}k+=s.y,r&&(j=k*r,l-=s.X/2),0>k&&(b="n",k=0);break;case"ne":if(r){if(s.y<=0&&(0>=m||n>=g)){p=f;break}k-=s.y,m+=s.y,j=k*r}else s.x>=0?g>n?j+=s.x:s.y<=0&&0>=m&&(p=f):j+=s.x,s.y<=0?m>0&&(k-=s.y,m+=s.y):(k-=s.y,m+=s.y);0>j&&0>k?(b="sw",k=0,j=0):0>j?(b="nw",j=0):0>k&&(b="se",k=0);break;case"nw":if(r){if(s.y<=0&&(0>=m||0>=l)){p=f;break}k-=s.y,m+=s.y,j=k*r,l+=s.X}else s.x<=0?l>0?(j-=s.x,l+=s.x):s.y<=0&&0>=m&&(p=f):(j-=s.x,l+=s.x),s.y<=0?m>0&&(k-=s.y,m+=s.y):(k-=s.y,m+=s.y);0>j&&0>k?(b="se",k=0,j=0):0>j?(b="ne",j=0):0>k&&(b="sw",k=0);break;case"sw":if(r){if(s.x<=0&&(0>=l||o>=h)){p=f;break}j-=s.x,l+=s.x,k=j/r}else s.x<=0?l>0?(j-=s.x,l+=s.x):s.y>=0&&o>=h&&(p=f):(j-=s.x,l+=s.x),s.y>=0?h>o&&(k+=s.y):k+=s.y;0>j&&0>k?(b="ne",k=0,j=0):0>j?(b="se",j=0):0>k&&(b="nw",k=0);break;case"se":if(r){if(s.x>=0&&(n>=g||o>=h)){p=f;break}j+=s.x,k=j/r}else s.x>=0?g>n?j+=s.x:s.y>=0&&o>=h&&(p=f):j+=s.x,s.y>=0?h>o&&(k+=s.y):k+=s.y;0>j&&0>k?(b="nw",k=0,j=0):0>j?(b="sw",j=0):0>k&&(b="ne",k=0);break;case"move":c.left+=s.x,c.top+=s.y,this.renderImage("move"),p=f;break;case"zoom":this.zoom(function(a,b,c,d,e,f){return(L(e*e+f*f)-L(c*c+d*d))/L(a*a+b*b)}(c.width,c.height,O(this.startX-this.startX2),O(this.startY-this.startY2),O(this.endX-this.endX2),O(this.endY-this.endY2))),this.endX2=this.startX2,this.endY2=this.startY2,p=f;break;case"crop":s.x&&s.y&&(a=this.$cropper.offset(),l=this.startX-a.left,m=this.startY-a.top,j=i.minWidth,k=i.minHeight,s.x>0?s.y>0?b="se":(b="ne",m-=k):s.y>0?(b="sw",l-=j):(b="nw",l-=j,m-=k),this.cropped||(this.cropped=e,this.$dragger.removeClass(q)))}p&&(i.width=j,i.height=k,i.left=l,i.top=m,this.directive=b,this.renderDragger()),this.startX=this.endX,this.startY=this.endY}},K.TEMPLATE=function(a,b){return b=b.split(","),a.replace(/\d+/g,function(a){return b[a]})}('<0 6="5-container"><0 6="5-canvas"><0 6="5-dragger"><1 6="5-viewer"><1 6="5-8 8-h"><1 6="5-8 8-v"><1 6="5-face" 3-2="all"><1 6="5-7 7-e" 3-2="e"><1 6="5-7 7-n" 3-2="n"><1 6="5-7 7-w" 3-2="w"><1 6="5-7 7-s" 3-2="s"><1 6="5-4 4-e" 3-2="e"><1 6="5-4 4-n" 3-2="n"><1 6="5-4 4-w" 3-2="w"><1 6="5-4 4-s" 3-2="s"><1 6="5-4 4-ne" 3-2="ne"><1 6="5-4 4-nw" 3-2="nw"><1 6="5-4 4-sw" 3-2="sw"><1 6="5-4 4-se" 3-2="se">',"div,span,directive,data,point,cropper,class,line,dashed"),K.DEFAULTS={aspectRatio:"auto",autoCropArea:.8,data:{},done:a.noop,preview:"",multiple:f,autoCrop:e,dragCrop:e,dashed:e,modal:e,movable:e,resizable:e,zoomable:e,rotatable:e,checkImageOrigin:e,minWidth:0,minHeight:0,maxWidth:i,maxHeight:i,minContainerWidth:300,minContainerHeight:150,build:g,built:g,dragstart:g,dragmove:g,dragend:g},K.setDefaults=function(b){a.extend(K.DEFAULTS,b)},K.other=a.fn.cropper,a.fn.cropper=function(b){var c,d=H(arguments,1);return this.each(function(){var e,f=a(this),g=f.data("cropper");g||f.data("cropper",g=new K(this,b)),"string"==typeof b&&a.isFunction(e=g[b])&&(c=e.apply(g,d))}),typeof c!==j?c:this},a.fn.cropper.Constructor=K,a.fn.cropper.setDefaults=K.setDefaults,a.fn.cropper.noConflict=function(){return a.fn.cropper=K.other,this}}); \ No newline at end of file diff --git a/docs/v0.7.9/js/main.js b/docs/v0.7.9/js/main.js deleted file mode 100644 index dd2c8084..00000000 --- a/docs/v0.7.9/js/main.js +++ /dev/null @@ -1,278 +0,0 @@ -$(function () { - - "use strict"; - - var console = window.console || { log: function () {} }, - $alert = $(".docs-alert"), - $message = $alert.find(".message"), - showMessage = function (message, type) { - $message.text(message); - - if (type) { - $message.addClass(type); - } - - $alert.fadeIn(); - - setTimeout(function () { - $alert.fadeOut(); - }, 3000); - }; - - // Overview - // ------------------------------------------------------------------------- - - (function () { - var $image = $(".img-container > img"), - $dataX = $("#dataX"), - $dataY = $("#dataY"), - $dataHeight = $("#dataHeight"), - $dataWidth = $("#dataWidth"), - options = { - aspectRatio: 16 / 9, - data: { - x: 480, - y: 60, - width: 640, - height: 360 - }, - preview: ".img-preview", - done: function (data) { - $dataX.val(Math.round(data.x)); - $dataY.val(Math.round(data.y)); - $dataHeight.val(Math.round(data.height)); - $dataWidth.val(Math.round(data.width)); - } - }; - - $image.cropper(options).on({ - "build.cropper": function (e) { - console.log(e.type); - }, - "built.cropper": function (e) { - console.log(e.type); - } - }); - - $(document).on("click", "[data-method]", function () { - var data = $(this).data(); - - if (data.method) { - $image.cropper(data.method, data.option); - } - }); - - var $inputImage = $("#inputImage"), - blobURL; - - if (window.URL) { - $inputImage.change(function () { - var files = this.files, - file; - - if (files && files.length) { - file = files[0]; - - if (/^image\/\w+$/.test(file.type)) { - if (blobURL) { - URL.revokeObjectURL(blobURL); // Revoke the old one - } - - blobURL = URL.createObjectURL(file); - $image.cropper("reset", true).cropper("replace", blobURL); - $inputImage.val(""); - } else { - showMessage("Please choose an image file."); - } - } - }); - } else { - $inputImage.parent().remove(); - } - - $("#download").click(function () { - window.open($image.cropper("getDataURL")); - }); - - var $zoomWith = $("#zoomWith"); - - $("#zoom").click(function () { - $image.cropper("zoom", $zoomWith.val()); - }); - - - var $rotateWith = $("#rotateWith"); - - $("#rotate").click(function () { - $image.cropper("rotate", $rotateWith.val()); - }); - - - var $getDataInto = $("#getDataInto"); - - $("#getData").click(function () { - var data = $image.cropper("getData"), - val = ""; - - try { - val = JSON.stringify(data); - } catch (e) { - console.log(data); - } - - $getDataInto.val(val); - }); - - - var $setDataX = $("#setDataX"), - $setDataY = $("#setDataY"), - $setDataWidth = $("#setDataWidth"), - $setDataHeight = $("#setDataHeight"); - - $("#setData").click(function () { - var data = { - x: $setDataX.val(), - y: $setDataY.val(), - width: $setDataWidth.val(), - height: $setDataHeight.val() - }; - - $image.cropper("setData", data); - }); - - - var $setAspectRatioWith = $("#setAspectRatioWith"); - - $("#setAspectRatio").click(function () { - $image.cropper("setAspectRatio", $setAspectRatioWith.val()); - }); - - - var $replaceWith = $("#replaceWith"); - - $("#replace").click(function () { - $image.cropper("replace", $replaceWith.val()); - }); - - - var $getImageDataInto = $("#getImageDataInto"); - - $("#getImageData").click(function () { - var data = $image.cropper("getImageData"), - val = ""; - - try { - val = JSON.stringify(data); - } catch (e) { - console.log(data); - } - - $getImageDataInto.val(val); - }); - - - var $dataURLInto = $("#dataURLInto"), - $dataURLView = $("#dataURLView"); - - $("#getDataURL").click(function () { - var dataURL = $image.cropper("getDataURL"); - - $dataURLInto.text(dataURL); - $dataURLView.html(''); - }); - - $("#getDataURL2").click(function () { - var dataURL = $image.cropper("getDataURL", "image/jpeg"); - - $dataURLInto.text(dataURL); - $dataURLView.html(''); - }); - - $("#getDataURL3").click(function () { - var dataURL = $image.cropper("getDataURL", { - width: 160, - height: 90 - }); - - $dataURLInto.text(dataURL); - $dataURLView.html(''); - }); - - $("#getDataURL4").click(function () { - var dataURL = $image.cropper("getDataURL", { - width: 320, - height: 180 - }, "image/jpeg", 0.8); - - $dataURLInto.text(dataURL); - $dataURLView.html(''); - }); - - $(".docs-options :radio").on("change", function () { - var $this = $(this); - - if ($this.is(":checked")) { - options[$this.attr("name")] = $this.val() === "true" ? true : false; - $image.cropper("destroy").cropper(options); - } - }); - - $("[data-toggle='tooltip']").tooltip(); - }()); - - // Sidebar - // ------------------------------------------------------------------------- - - (function () { - var $sidebar = $(".docs-sidebar"), - offset = $sidebar.offset(), - offsetTop = offset.top, - mainHeight = $sidebar.parents(".row").height() - $sidebar.height(); - - $(window).bind("scroll", function () { - var st = $(this).scrollTop(); - - if (st > offsetTop && (st - offsetTop) < mainHeight) { - $sidebar.addClass("fixed"); - } else { - $sidebar.removeClass("fixed"); - } - }); - }()); - - // Examples - // ------------------------------------------------------------------------- - - // Example 1 - $(".fixed-dragger-cropper > img").cropper({ - aspectRatio: 640 / 320, // 2 / 1 - autoCropArea: 0.6, // Center 60% - multiple: false, - dragCrop: false, - dashed: false, - movable: false, - resizable: false, - built: function () { - $(this).cropper("zoom", 0.5); - } - }); - - - // Example 2 - var $image = $(".bootstrap-modal-cropper > img"), - originalData = {}; - - $("#bootstrap-modal").on("shown.bs.modal", function () { - $image.cropper({ - multiple: true, - data: originalData, - done: function (data) { - console.log(data); - } - }); - }).on("hidden.bs.modal", function () { - originalData = $image.cropper("getData"); // Saves the data on hide - $image.cropper("destroy"); - }); - -}); diff --git a/docs/v1.0.0/css/cropper.min.css b/docs/v1.0.0/css/cropper.min.css deleted file mode 100644 index cf3d0504..00000000 --- a/docs/v1.0.0/css/cropper.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Cropper v1.0.0 - * https://github.com/fengyuanchen/cropper - * - * Copyright (c) 2014-2015 Fengyuan Chen and contributors - * Released under the MIT license - * - * Date: 2015-10-10T02:10:06.999Z - */.cropper-container{position:relative;overflow:hidden;font-size:0;line-height:0;-ms-touch-action:none;touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;direction:ltr!important;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}.cropper-container img{display:block;width:100%;min-width:0!important;max-width:none!important;height:100%;min-height:0!important;max-height:none!important;image-orientation:0deg!important}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal{position:absolute;top:0;right:0;bottom:0;left:0}.cropper-drag-box{background-color:#fff;filter:alpha(opacity=0);opacity:0}.cropper-dashed,.cropper-modal{filter:alpha(opacity=50);opacity:.5}.cropper-modal{background-color:#000}.cropper-view-box{display:block;width:100%;height:100%;overflow:hidden;outline:#39f solid 1px;outline-color:rgba(51,153,255,.75)}.cropper-dashed{position:absolute;display:block;border:0 dashed #eee}.cropper-dashed.dashed-h{top:33.33333%;left:0;width:100%;height:33.33333%;border-top-width:1px;border-bottom-width:1px}.cropper-dashed.dashed-v{top:0;left:33.33333%;width:33.33333%;height:100%;border-right-width:1px;border-left-width:1px}.cropper-center{position:absolute;top:50%;left:50%;display:block;width:0;height:0;filter:alpha(opacity=75);opacity:.75}.cropper-center:after,.cropper-center:before{position:absolute;display:block;content:" ";background-color:#eee}.cropper-center:before{top:0;left:-3px;width:7px;height:1px}.cropper-center:after{top:-3px;left:0;width:1px;height:7px}.cropper-face,.cropper-line,.cropper-point{position:absolute;display:block;width:100%;height:100%;filter:alpha(opacity=10);opacity:.1}.cropper-face{top:0;left:0;background-color:#fff}.cropper-line,.cropper-point{background-color:#39f}.cropper-line.line-e{top:0;right:-3px;width:5px;cursor:e-resize}.cropper-line.line-n{top:-3px;left:0;height:5px;cursor:n-resize}.cropper-line.line-w{top:0;left:-3px;width:5px;cursor:w-resize}.cropper-line.line-s{bottom:-3px;left:0;height:5px;cursor:s-resize}.cropper-point{width:5px;height:5px;filter:alpha(opacity=75);opacity:.75}.cropper-point.point-e{top:50%;right:-3px;margin-top:-3px;cursor:e-resize}.cropper-point.point-n{top:-3px;left:50%;margin-left:-3px;cursor:n-resize}.cropper-point.point-w{top:50%;left:-3px;margin-top:-3px;cursor:w-resize}.cropper-point.point-s{bottom:-3px;left:50%;margin-left:-3px;cursor:s-resize}.cropper-point.point-ne{top:-3px;right:-3px;cursor:ne-resize}.cropper-point.point-nw{top:-3px;left:-3px;cursor:nw-resize}.cropper-point.point-sw{bottom:-3px;left:-3px;cursor:sw-resize}.cropper-point.point-se{right:-3px;bottom:-3px;width:20px;height:20px;cursor:se-resize;filter:alpha(opacity=100);opacity:1}.cropper-point.point-se:before{position:absolute;right:-50%;bottom:-50%;display:block;width:200%;height:200%;content:" ";background-color:#39f;filter:alpha(opacity=0);opacity:0}@media (min-width:768px){.cropper-point.point-se{width:15px;height:15px}}@media (min-width:992px){.cropper-point.point-se{width:10px;height:10px}}@media (min-width:1200px){.cropper-point.point-se{width:5px;height:5px;filter:alpha(opacity=75);opacity:.75}}.cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC)}.cropper-invisible{filter:alpha(opacity=0);opacity:0}.cropper-hide{position:absolute;display:block;width:0;height:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed} \ No newline at end of file diff --git a/docs/v1.0.0/css/main.css b/docs/v1.0.0/css/main.css deleted file mode 100644 index 3fc7f7a9..00000000 --- a/docs/v1.0.0/css/main.css +++ /dev/null @@ -1,304 +0,0 @@ -/* Main - * ========================================================================== */ - -/* Button - * -------------------------------------------------------------------------- */ - -.btn-primary { - border-color: #0066bf; - background-color: #0074d9; -} - -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.btn-primary.active:focus, -.btn-primary.active:hover { - border-color: #005299; - background-color: #005fb3; -} - - -/* Basic style - * -------------------------------------------------------------------------- */ - -body { - overflow-x: hidden; -} - - -/* Header */ - -.docs-header { - margin-bottom: 0; - border-color: #0066bf; - background-color: #0074d9; - color: #fff; -} - -.docs-header .navbar-brand { - color: #eee; -} - -.docs-header .navbar-toggle { - border-color: transparent; - background-color: #0074d9; -} - -.docs-header .navbar-toggle:hover, -.docs-header .navbar-toggle:focus { - border-color: transparent; - background-color: #005fb3; -} - -.docs-header .navbar-collapse { - border-color: #0066bf; -} - -.docs-header .navbar-text { - color: #ddd; -} - -.docs-header .navbar-nav > li > a { - color: #eee; -} - - -/* Jumbotron */ - -.docs-jumbotron { - background-color: #fcfcfc; -} - -.docs-jumbotron .version { - font-size: 14px; - color: #ccc; -} - - -/* Content */ - -.img-container, -.img-preview { - background-color: #f7f7f7; - width: 100%; - text-align: center; - overflow: hidden; -} - -.img-container { - min-height: 200px; - max-height: 516px; - margin-bottom: 20px; -} - -@media (min-width: 768px) { - .img-container { - min-height: 516px; - } -} - -.img-container > img { - max-width: 100%; -} - -.docs-preview { - margin-right: -15px; -} - -.img-preview { - float: left; - margin-right: 10px; - margin-bottom: 10px; -} - -.img-preview > img { - max-width: 100%; -} - -.preview-lg { - width: 263px; - height: 148px; -} - -.preview-md { - width: 139px; - height: 78px; -} - -.preview-sm { - width: 69px; - height: 39px; -} - -.preview-xs { - width: 35px; - height: 20px; - margin-right: 0; -} - -.docs-data > .input-group { - margin-bottom: 10px; -} - -.docs-data > .input-group > label { - min-width: 80px; -} - -.docs-data > .input-group > span { - min-width: 50px; -} - -.docs-buttons > .btn, -.docs-buttons > .btn-group, -.docs-buttons > .form-control { - margin-right: 5px; - margin-bottom: 10px; -} - -.docs-toggles > .btn, -.docs-toggles > .btn-group, -.docs-toggles > .dropdown { - margin-bottom: 10px; -} - -.docs-tooltip { - display: block; - margin: -6px -12px; - padding: 6px 12px; -} - -.docs-tooltip > .icon { - margin: 0 -3px; - vertical-align: top; -} - -.tooltip-inner { - white-space: normal; -} - -.btn-upload .tooltip-inner, -.btn-toggle .tooltip-inner { - white-space: nowrap; -} - -.btn-toggle { - padding: 6px; -} - -.btn-toggle > .docs-tooltip { - margin: -6px; - padding: 6px; -} - -@media (max-width: 400px) { - .btn-group-crop { - margin-right: -15px!important; - } - - .btn-group-crop > .btn { - padding-left: 5px; - padding-right: 5px; - } - - .btn-group-crop .docs-tooltip { - margin-left: -5px; - margin-right: -5px; - padding-left: 5px; - padding-right: 5px; - } -} - -.docs-options .dropdown-menu { - width: 100%; -} - -.docs-options .dropdown-menu > li { - padding: 3px 20px; -} - -.docs-options .dropdown-menu > li:hover { - background-color: #f7f7f7; -} - -.docs-options .dropdown-menu > li > label { - display: block; -} - -.docs-cropped .modal-body { - text-align: center; -} - -.docs-cropped .modal-body > img, -.docs-cropped .modal-body > canvas { - max-width: 100%; -} - -.docs-diagram .modal-dialog { - max-width: 352px; -} - - -/* Footer */ - -.docs-footer { - margin-top: 100px; - padding-top: 10px; - padding-bottom: 10px; - border-top: 1px solid #0066bf; - background-color: #0074d9; - color: #ddd; -} - -.docs-footer a { - color: #eee; -} - -.docs-footer a:hover, -.docs-footer a:focus { - color: #fff; -} - -.docs-footer a + a { - margin-left: 10px; -} - -@media (min-width: 768px) { - .back-to-top { - float: right; - } -} - - -/* Examples - * -------------------------------------------------------------------------- */ - -.cropper-example-1 { - max-height: 331px; -} - -@media (min-width: 768px) { - .cropper-example-1 { - min-height: 305px; - } -} - -.cropper-example-1 > img, -.cropper-example-3 > img { - max-width: 100%; -} - -.cropper-example-3 { - width: 100%; - margin-top: 15px; -} - - -/* Google code prettify - * -------------------------------------------------------------------------- */ - -.prettyprint { - padding: 10px 15px !important; - border: 1px solid #ddd !important; -} diff --git a/docs/v1.0.0/img/picture-2.jpg b/docs/v1.0.0/img/picture-2.jpg deleted file mode 100644 index 05df6dc31819a058455e49bdbfa9d47a47ab5f06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182998 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 VzfHY`6pSp=s_#+?w^XEW|JfH>e4PLQ diff --git a/docs/v1.0.0/index.html b/docs/v1.0.0/index.html deleted file mode 100644 index c7f471d4..00000000 --- a/docs/v1.0.0/index.html +++ /dev/null @@ -1,697 +0,0 @@ - - - - - - - - - - Cropper - - - - - - - - - - - - - - -
-
-

Cropper v1.0.0

-

A simple jQuery image cropping plugin.

-
-
- - -
-
-
- -
- Picture -
-
-
- -
-
-
-
-
-
- - -
-
- - - px -
-
- - - px -
-
- - - px -
-
- - - px -
-
- - - deg -
-
- - -
-
- - -
-
-
-
-
-
- -
- - -
- -
- - -
- -
- - - - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - - -
- -
- - - -
- - - - - - - - - - - - - -
- -
- -
- - - - - -
- - - - - - Go to CropperJS - -
- -
-
- -
-
-
HTML:
-
...
-<div class="img-container">
-  <img src="img/picture.jpg">
-</div>
-...
-...
-<div class="img-preview preview-lg"></div>
-<div class="img-preview preview-md"></div>
-<div class="img-preview preview-sm"></div>
-<div class="img-preview preview-xs"></div>
-...
-
- -
-
Javascript:
-
$(".img-container > img").cropper({
-  aspectRatio: 16 / 9,
-  preview: ".img-preview",
-  crop: function(e) {
-    $("#dataX").val(Math.round(e.x));
-    $("#dataY").val(Math.round(e.y));
-    $("#dataHeight").val(Math.round(e.height));
-    $("#dataWidth").val(Math.round(e.width));
-    $("#dataRotate").val(e.rotate);
-    $("#dataScaleX").val(e.scaleX);
-    $("#dataScaleY").val(e.scaleY);
-  }
-});
-
- -
-
-
- - -
-

Examples

- - -

Cropper with fixed crop box.

-
-
-
Demo:
-
- Picture -
-
-
-
HTML:
-
<div class="cropper-example-1">
-  <img src="img/picture.jpg" alt="Picture">
-</div>
-
JavaScript:
-
$('.cropper-example-1 > img').cropper({
-  aspectRatio: 16 / 9,
-  autoCropArea: 0.65,
-  strict: false,
-  guides: false,
-  highlight: false,
-  dragCrop: false,
-  cropBoxMovable: false,
-  cropBoxResizable: false
-});
-
-
- - -

Cropper in a Bootstrap modal

-
-
-

Demo:

-

-

HTML:

-
<div class="modal fade" id="cropper-example-2-modal">
-  <div class="modal-dialog">
-    <div class="modal-content">
-      ...
-      <div class="modal-body">
-        <div id="cropper-example-2">
-          <img src="img/picture.jpg" alt="Picture">
-        </div>
-      </div>
-      ...
-    </div>
-  </div>
-</div>
- - - - -
-
-

JavaScript:

-
var $image = $('#cropper-example-2 > img'),
-    cropBoxData,
-    canvasData;
-
-$('#cropper-example-2-modal').on('shown.bs.modal', function () {
-  $image.cropper({
-    autoCropArea: 0.5,
-    built: function () {
-      // Strict mode: set crop box data first
-      $image.cropper('setCropBoxData', cropBoxData);
-      $image.cropper('setCanvasData', canvasData);
-    }
-  });
-}).on('hidden.bs.modal', function () {
-  cropBoxData = $image.cropper('getCropBoxData');
-  canvasData = $image.cropper('getCanvasData');
-  $image.cropper('destroy');
-});
-
-
- - -

Cropper with responsive container.

-
-
-
Demo:
- -
- Picture -
-
-
-
HTML:
-
<button class="btn btn-primary" id="replace-toggle" type="button">Toggle</button>
-
-<div class="cropper-example-3">
-  <img src="img/picture.jpg" alt="Picture">
-</div>
-
CSS:
-
.cropper-example-3 {
-  width: 100%;
-}
-
-.cropper-example-3 > img {
-  max-width: 100%;
-}
-
-
-
JavaScript:
-
var $image = $('.cropper-example-3 > img'),
-    replaced;
-
-$image.cropper({
-  movable: false,
-  zoomable: false,
-  rotatable: false,
-  scalable: false
-});
-
-$('#replace-toggle').click(function () {
-  var url = 'img/picture-2.jpg';
-
-  if (replaced) {
-    url = 'img/picture.jpg';
-  }
-
-  $image.cropper('replace', url);
-  replaced = !replaced;
-});
-
-
- - -

Crop avatar A complete example

-

This example requires a PHP server to upload and crop image. Please download and test it.

- - -
- - - - - - - - - - - - - - diff --git a/docs/v1.0.0/js/cropper.js b/docs/v1.0.0/js/cropper.js deleted file mode 100644 index 124fc639..00000000 --- a/docs/v1.0.0/js/cropper.js +++ /dev/null @@ -1,2519 +0,0 @@ -/*! - * Cropper v1.0.0 - * https://github.com/fengyuanchen/cropper - * - * Copyright (c) 2014-2015 Fengyuan Chen and contributors - * Released under the MIT license - * - * Date: 2015-10-10T02:10:08.624Z - */ - -(function (factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as anonymous module. - define(['jquery'], factory); - } else if (typeof exports === 'object') { - // Node / CommonJS - factory(require('jquery')); - } else { - // Browser globals. - factory(jQuery); - } -})(function ($) { - - 'use strict'; - - // Globals - var $window = $(window); - var $document = $(document); - var location = window.location; - - // Constants - var NAMESPACE = 'cropper'; - - // Classes - var CLASS_MODAL = 'cropper-modal'; - var CLASS_HIDE = 'cropper-hide'; - var CLASS_HIDDEN = 'cropper-hidden'; - var CLASS_INVISIBLE = 'cropper-invisible'; - var CLASS_MOVE = 'cropper-move'; - var CLASS_CROP = 'cropper-crop'; - var CLASS_DISABLED = 'cropper-disabled'; - var CLASS_BG = 'cropper-bg'; - - // Events - var EVENT_MOUSE_DOWN = 'mousedown touchstart pointerdown MSPointerDown'; - var EVENT_MOUSE_MOVE = 'mousemove touchmove pointermove MSPointerMove'; - var EVENT_MOUSE_UP = 'mouseup touchend touchcancel pointerup pointercancel MSPointerUp MSPointerCancel'; - var EVENT_WHEEL = 'wheel mousewheel DOMMouseScroll'; - var EVENT_DBLCLICK = 'dblclick'; - var EVENT_LOAD = 'load.' + NAMESPACE; - var EVENT_ERROR = 'error.' + NAMESPACE; - var EVENT_RESIZE = 'resize.' + NAMESPACE; // Bind to window with namespace - var EVENT_BUILD = 'build.' + NAMESPACE; - var EVENT_BUILT = 'built.' + NAMESPACE; - var EVENT_CROP_START = 'cropstart.' + NAMESPACE; - var EVENT_CROP_MOVE = 'cropmove.' + NAMESPACE; - var EVENT_CROP_END = 'cropend.' + NAMESPACE; - var EVENT_CROP = 'crop.' + NAMESPACE; - var EVENT_ZOOM = 'zoom.' + NAMESPACE; - - // RegExps - var REGEXP_ACTIONS = /^(e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/; - - // Data keys - var DATA_PREVIEW = 'preview'; - var DATA_ACTION = 'action'; - - // Actions - var ACTION_EAST = 'e'; - var ACTION_WEST = 'w'; - var ACTION_SOUTH = 's'; - var ACTION_NORTH = 'n'; - var ACTION_SOUTH_EAST = 'se'; - var ACTION_SOUTH_WEST = 'sw'; - var ACTION_NORTH_EAST = 'ne'; - var ACTION_NORTH_WEST = 'nw'; - var ACTION_ALL = 'all'; - var ACTION_CROP = 'crop'; - var ACTION_MOVE = 'move'; - var ACTION_ZOOM = 'zoom'; - var ACTION_NONE = 'none'; - - // Supports - var SUPPORT_CANVAS = $.isFunction($('')[0].getContext); - - // Maths - var sqrt = Math.sqrt; - var min = Math.min; - var max = Math.max; - var abs = Math.abs; - var sin = Math.sin; - var cos = Math.cos; - var num = parseFloat; - - // Prototype - var prototype = { - version: '1.0.0' - }; - - function isNumber(n) { - return typeof n === 'number' && !isNaN(n); - } - - function isUndefined(n) { - return typeof n === 'undefined'; - } - - function toArray(obj, offset) { - var args = []; - - // This is necessary for IE8 - if (isNumber(offset)) { - args.push(offset); - } - - return args.slice.apply(obj, args); - } - - // Custom proxy to avoid jQuery's guid - function proxy(fn, context) { - var args = toArray(arguments, 2); - - return function () { - return fn.apply(context, args.concat(toArray(arguments))); - }; - } - - function isCrossOriginURL(url) { - var parts = url.match(/^(https?:)\/\/([^\:\/\?#]+):?(\d*)/i); - - return parts && ( - parts[1] !== location.protocol || - parts[2] !== location.hostname || - parts[3] !== location.port - ); - } - - function addTimestamp(url) { - var timestamp = 'timestamp=' + (new Date()).getTime(); - - return (url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp); - } - - function getCrossOrigin(crossOrigin) { - return crossOrigin ? ' crossOrigin="' + crossOrigin + '"' : ''; - } - - function getImageSize(image, callback) { - var newImage; - - // Modern browsers - if (image.naturalWidth) { - return callback(image.naturalWidth, image.naturalHeight); - } - - // IE8: Don't use `new Image()` here (#319) - newImage = document.createElement('img'); - - newImage.onload = function () { - callback(this.width, this.height); - }; - - newImage.src = image.src; - } - - function getTransform(options) { - var transforms = []; - var rotate = options.rotate; - var scaleX = options.scaleX; - var scaleY = options.scaleY; - - if (isNumber(rotate)) { - transforms.push('rotate(' + rotate + 'deg)'); - } - - if (isNumber(scaleX) && isNumber(scaleY)) { - transforms.push('scale(' + scaleX + ',' + scaleY + ')'); - } - - return transforms.length ? transforms.join(' ') : 'none'; - } - - function getRotatedSizes(data, reverse) { - var deg = abs(data.degree) % 180; - var arc = (deg > 90 ? (180 - deg) : deg) * Math.PI / 180; - var sinArc = sin(arc); - var cosArc = cos(arc); - var width = data.width; - var height = data.height; - var aspectRatio = data.aspectRatio; - var newWidth; - var newHeight; - - if (!reverse) { - newWidth = width * cosArc + height * sinArc; - newHeight = width * sinArc + height * cosArc; - } else { - newWidth = width / (cosArc + sinArc / aspectRatio); - newHeight = newWidth / aspectRatio; - } - - return { - width: newWidth, - height: newHeight - }; - } - - function getSourceCanvas(image, data) { - var canvas = $('')[0]; - var context = canvas.getContext('2d'); - var x = 0; - var y = 0; - var width = data.naturalWidth; - var height = data.naturalHeight; - var rotate = data.rotate; - var scaleX = data.scaleX; - var scaleY = data.scaleY; - var scalable = isNumber(scaleX) && isNumber(scaleY) && (scaleX !== 1 || scaleY !== 1); - var rotatable = isNumber(rotate) && rotate !== 0; - var advanced = rotatable || scalable; - var canvasWidth = width; - var canvasHeight = height; - var translateX; - var translateY; - var rotated; - - if (scalable) { - translateX = width / 2; - translateY = height / 2; - } - - if (rotatable) { - rotated = getRotatedSizes({ - width: width, - height: height, - degree: rotate - }); - - canvasWidth = rotated.width; - canvasHeight = rotated.height; - translateX = rotated.width / 2; - translateY = rotated.height / 2; - } - - canvas.width = canvasWidth; - canvas.height = canvasHeight; - - if (advanced) { - x = -width / 2; - y = -height / 2; - - context.save(); - context.translate(translateX, translateY); - } - - if (rotatable) { - context.rotate(rotate * Math.PI / 180); - } - - // Should call `scale` after rotated - if (scalable) { - context.scale(scaleX, scaleY); - } - - context.drawImage(image, x, y, width, height); - - if (advanced) { - context.restore(); - } - - return canvas; - } - - function Cropper(element, options) { - this.$element = $(element); - this.options = $.extend({}, Cropper.DEFAULTS, $.isPlainObject(options) && options); - this.ready = false; - this.built = false; - this.complete = false; - this.rotated = false; - this.cropped = false; - this.disabled = false; - this.replaced = false; - this.isImg = false; - this.originalUrl = ''; - this.crossOrigin = ''; - this.canvas = null; - this.cropBox = null; - this.init(); - } - - $.extend(prototype, { - init: function () { - var $this = this.$element; - var url; - - if ($this.is('img')) { - this.isImg = true; - - // Should use `$.fn.attr` here. e.g.: "img/picture.jpg" - this.originalUrl = url = $this.attr('src'); - - // Stop when it's a blank image - if (!url) { - return; - } - - // Should use `$.fn.prop` here. e.g.: "http://example.com/img/picture.jpg" - url = $this.prop('src'); - } else if ($this.is('canvas') && SUPPORT_CANVAS) { - url = $this[0].toDataURL(); - } - - this.load(url); - }, - - // A shortcut for triggering custom events - trigger: function (type, data) { - var e = $.Event(type, data); - - this.$element.trigger(e); - - return e; - }, - - load: function (url) { - var options = this.options; - var $this = this.$element; - var crossOrigin = ''; - var bustCacheUrl; - var $clone; - - if (!url) { - return; - } - - this.url = url; - - // Trigger build event first - $this.one(EVENT_BUILD, options.build); - - if (this.trigger(EVENT_BUILD).isDefaultPrevented()) { - return; - } - - if (options.checkImageOrigin && isCrossOriginURL(url)) { - crossOrigin = $this.prop('crossOrigin'); - - // Bust cache (#148), only when there was not a "crossOrigin" property - if (!crossOrigin) { - crossOrigin = 'anonymous'; - bustCacheUrl = addTimestamp(url); - } - - this.crossOrigin = crossOrigin; - } - - this.$clone = $clone = $(''); - - if (this.isImg) { - if ($this[0].complete) { - this.start(); - } else { - $this.one(EVENT_LOAD, $.proxy(this.start, this)); - } - } else { - $clone. - one(EVENT_LOAD, $.proxy(this.start, this)). - one(EVENT_ERROR, $.proxy(this.stop, this)). - addClass(CLASS_HIDE). - insertAfter($this); - } - }, - - start: function () { - var $image = this.$element; - var $clone = this.$clone; - - if (!this.isImg) { - $clone.off(EVENT_ERROR, this.stop); - $image = $clone; - } - - getImageSize($image[0], $.proxy(function (naturalWidth, naturalHeight) { - this.image = { - naturalWidth: naturalWidth, - naturalHeight: naturalHeight, - aspectRatio: naturalWidth / naturalHeight - }; - - this.ready = true; - this.build(); - }, this)); - }, - - stop: function () { - this.$clone.remove(); - this.$clone = null; - } - }); - - $.extend(prototype, { - build: function () { - var options = this.options; - var $this = this.$element; - var $clone = this.$clone; - var $cropper; - var $cropBox; - var $face; - - if (!this.ready) { - return; - } - - // Unbuild first when replace - if (this.built) { - this.unbuild(); - } - - // Create cropper elements - this.$container = $this.parent(); - this.$cropper = $cropper = $(Cropper.TEMPLATE); - this.$canvas = $cropper.find('.cropper-canvas').append($clone); - this.$dragBox = $cropper.find('.cropper-drag-box'); - this.$cropBox = $cropBox = $cropper.find('.cropper-crop-box'); - this.$viewBox = $cropper.find('.cropper-view-box'); - this.$face = $face = $cropBox.find('.cropper-face'); - - // Hide the original image - $this.addClass(CLASS_HIDDEN).after($cropper); - - // Show the clone image if is hidden - if (!this.isImg) { - $clone.removeClass(CLASS_HIDE); - } - - this.initPreview(); - this.bind(); - - // Format aspect ratio (0 -> NaN) - options.aspectRatio = num(options.aspectRatio) || NaN; - - if (options.autoCrop) { - this.cropped = true; - - if (options.modal) { - this.$dragBox.addClass(CLASS_MODAL); - } - } else { - $cropBox.addClass(CLASS_HIDDEN); - } - - if (!options.guides) { - $cropBox.find('.cropper-dashed').addClass(CLASS_HIDDEN); - } - - if (!options.center) { - $cropBox.find('.cropper-center').addClass(CLASS_HIDDEN); - } - - if (options.cropBoxMovable) { - $face.addClass(CLASS_MOVE).data(DATA_ACTION, ACTION_ALL); - } - - if (!options.highlight) { - $face.addClass(CLASS_INVISIBLE); - } - - if (options.background) { - $cropper.addClass(CLASS_BG); - } - - if (!options.cropBoxResizable) { - $cropBox.find('.cropper-line, .cropper-point').addClass(CLASS_HIDDEN); - } - - this.setDragMode(options.dragCrop ? ACTION_CROP : (options.movable ? ACTION_MOVE : ACTION_NONE)); - - this.render(); - this.built = true; - this.setData(options.data); - $this.one(EVENT_BUILT, options.built); - - // Trigger the built event asynchronously to keep `data('cropper')` is defined - setTimeout($.proxy(function () { - this.trigger(EVENT_BUILT); - this.complete = true; - }, this), 0); - }, - - unbuild: function () { - if (!this.built) { - return; - } - - this.built = false; - this.initialImage = null; - - // Clear `initialCanvas` is necessary when replace - this.initialCanvas = null; - this.initialCropBox = null; - this.container = null; - this.canvas = null; - - // Clear `cropBox` is necessary when replace - this.cropBox = null; - this.unbind(); - - this.resetPreview(); - this.$preview = null; - - this.$viewBox = null; - this.$cropBox = null; - this.$dragBox = null; - this.$canvas = null; - this.$container = null; - - this.$cropper.remove(); - this.$cropper = null; - } - }); - - $.extend(prototype, { - render: function () { - this.initContainer(); - this.initCanvas(); - this.initCropBox(); - - this.renderCanvas(); - - if (this.cropped) { - this.renderCropBox(); - } - }, - - initContainer: function () { - var options = this.options; - var $this = this.$element; - var $container = this.$container; - var $cropper = this.$cropper; - - $cropper.addClass(CLASS_HIDDEN); - $this.removeClass(CLASS_HIDDEN); - - $cropper.css((this.container = { - width: max($container.width(), num(options.minContainerWidth) || 200), - height: max($container.height(), num(options.minContainerHeight) || 100) - })); - - $this.addClass(CLASS_HIDDEN); - $cropper.removeClass(CLASS_HIDDEN); - }, - - // Canvas (image wrapper) - initCanvas: function () { - var container = this.container; - var containerWidth = container.width; - var containerHeight = container.height; - var image = this.image; - var aspectRatio = image.aspectRatio; - var canvas = { - aspectRatio: aspectRatio, - width: containerWidth, - height: containerHeight - }; - - if (containerHeight * aspectRatio > containerWidth) { - canvas.height = containerWidth / aspectRatio; - } else { - canvas.width = containerHeight * aspectRatio; - } - - canvas.oldLeft = canvas.left = (containerWidth - canvas.width) / 2; - canvas.oldTop = canvas.top = (containerHeight - canvas.height) / 2; - - this.canvas = canvas; - this.limitCanvas(true, true); - this.initialImage = $.extend({}, image); - this.initialCanvas = $.extend({}, canvas); - }, - - limitCanvas: function (size, position) { - var options = this.options; - var strict = options.strict; - var container = this.container; - var containerWidth = container.width; - var containerHeight = container.height; - var canvas = this.canvas; - var aspectRatio = canvas.aspectRatio; - var cropBox = this.cropBox; - var cropped = this.cropped && cropBox; - var initialCanvas = this.initialCanvas || canvas; - var minCanvasWidth; - var minCanvasHeight; - - if (size) { - minCanvasWidth = num(options.minCanvasWidth) || 0; - minCanvasHeight = num(options.minCanvasHeight) || 0; - - if (strict) { - if (minCanvasWidth) { - minCanvasWidth = max(minCanvasWidth, cropped ? cropBox.width : initialCanvas.width); - } else if (minCanvasHeight) { - minCanvasHeight = max(minCanvasHeight, cropped ? cropBox.height : initialCanvas.height); - } else if (cropped) { - minCanvasWidth = cropBox.width; - minCanvasHeight = cropBox.height; - - if (minCanvasHeight * aspectRatio > minCanvasWidth) { - minCanvasWidth = minCanvasHeight * aspectRatio; - } else { - minCanvasHeight = minCanvasWidth / aspectRatio; - } - } - } - - if (minCanvasWidth && minCanvasHeight) { - if (minCanvasHeight * aspectRatio > minCanvasWidth) { - minCanvasHeight = minCanvasWidth / aspectRatio; - } else { - minCanvasWidth = minCanvasHeight * aspectRatio; - } - } else if (minCanvasWidth) { - minCanvasHeight = minCanvasWidth / aspectRatio; - } else if (minCanvasHeight) { - minCanvasWidth = minCanvasHeight * aspectRatio; - } - - canvas.minWidth = minCanvasWidth; - canvas.minHeight = minCanvasHeight; - canvas.maxWidth = Infinity; - canvas.maxHeight = Infinity; - } - - if (position) { - if (strict) { - canvas.minLeft = cropped ? - min(cropBox.left, (cropBox.left + cropBox.width) - canvas.width) : - min(0, containerWidth - canvas.width); - canvas.minTop = cropped ? - min(cropBox.top, (cropBox.top + cropBox.height) - canvas.height) : - min(0, containerHeight - canvas.height); - canvas.maxLeft = cropped ? cropBox.left : max(0, containerWidth - canvas.width); - canvas.maxTop = cropped ? cropBox.top : max(0, containerHeight - canvas.height); - } else { - canvas.minLeft = -canvas.width; - canvas.minTop = -canvas.height; - canvas.maxLeft = containerWidth; - canvas.maxTop = containerHeight; - } - } - }, - - renderCanvas: function (changed) { - var options = this.options; - var canvas = this.canvas; - var image = this.image; - var aspectRatio; - var rotated; - - if (this.rotated) { - this.rotated = false; - - // Computes rotated sizes with image sizes - rotated = getRotatedSizes({ - width: image.width, - height: image.height, - degree: image.rotate - }); - - aspectRatio = rotated.width / rotated.height; - - if (aspectRatio !== canvas.aspectRatio) { - canvas.left -= (rotated.width - canvas.width) / 2; - canvas.top -= (rotated.height - canvas.height) / 2; - canvas.width = rotated.width; - canvas.height = rotated.height; - canvas.aspectRatio = aspectRatio; - this.limitCanvas(true, false); - } - } - - if (canvas.width > canvas.maxWidth || canvas.width < canvas.minWidth) { - canvas.left = canvas.oldLeft; - } - - if (canvas.height > canvas.maxHeight || canvas.height < canvas.minHeight) { - canvas.top = canvas.oldTop; - } - - canvas.width = min(max(canvas.width, canvas.minWidth), canvas.maxWidth); - canvas.height = min(max(canvas.height, canvas.minHeight), canvas.maxHeight); - - this.limitCanvas(false, true); - - canvas.oldLeft = canvas.left = min(max(canvas.left, canvas.minLeft), canvas.maxLeft); - canvas.oldTop = canvas.top = min(max(canvas.top, canvas.minTop), canvas.maxTop); - - this.$canvas.css({ - width: canvas.width, - height: canvas.height, - left: canvas.left, - top: canvas.top - }); - - this.renderImage(); - - if (this.cropped && options.strict) { - this.limitCropBox(true, true); - } - - if (changed) { - this.output(); - } - }, - - renderImage: function (changed) { - var canvas = this.canvas; - var image = this.image; - var reversed; - - if (image.rotate) { - reversed = getRotatedSizes({ - width: canvas.width, - height: canvas.height, - degree: image.rotate, - aspectRatio: image.aspectRatio - }, true); - } - - $.extend(image, reversed ? { - width: reversed.width, - height: reversed.height, - left: (canvas.width - reversed.width) / 2, - top: (canvas.height - reversed.height) / 2 - } : { - width: canvas.width, - height: canvas.height, - left: 0, - top: 0 - }); - - this.$clone.css({ - width: image.width, - height: image.height, - marginLeft: image.left, - marginTop: image.top, - transform: getTransform(image) - }); - - if (changed) { - this.output(); - } - }, - - initCropBox: function () { - var options = this.options; - var canvas = this.canvas; - var aspectRatio = options.aspectRatio; - var autoCropArea = num(options.autoCropArea) || 0.8; - var cropBox = { - width: canvas.width, - height: canvas.height - }; - - if (aspectRatio) { - if (canvas.height * aspectRatio > canvas.width) { - cropBox.height = cropBox.width / aspectRatio; - } else { - cropBox.width = cropBox.height * aspectRatio; - } - } - - this.cropBox = cropBox; - this.limitCropBox(true, true); - - // Initialize auto crop area - cropBox.width = min(max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); - cropBox.height = min(max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); - - // The width of auto crop area must large than "minWidth", and the height too. (#164) - cropBox.width = max(cropBox.minWidth, cropBox.width * autoCropArea); - cropBox.height = max(cropBox.minHeight, cropBox.height * autoCropArea); - cropBox.oldLeft = cropBox.left = canvas.left + (canvas.width - cropBox.width) / 2; - cropBox.oldTop = cropBox.top = canvas.top + (canvas.height - cropBox.height) / 2; - - this.initialCropBox = $.extend({}, cropBox); - }, - - limitCropBox: function (size, position) { - var options = this.options; - var strict = options.strict; - var container = this.container; - var containerWidth = container.width; - var containerHeight = container.height; - var canvas = this.canvas; - var cropBox = this.cropBox; - var aspectRatio = options.aspectRatio; - var minCropBoxWidth; - var minCropBoxHeight; - var maxCropBoxWidth; - var maxCropBoxHeight; - - if (size) { - minCropBoxWidth = num(options.minCropBoxWidth) || 0; - minCropBoxHeight = num(options.minCropBoxHeight) || 0; - - // The min/maxCropBoxWidth/Height must be less than containerWidth/Height - minCropBoxWidth = min(minCropBoxWidth, containerWidth); - minCropBoxHeight = min(minCropBoxHeight, containerHeight); - maxCropBoxWidth = min(containerWidth, strict ? canvas.width : containerWidth); - maxCropBoxHeight = min(containerHeight, strict ? canvas.height : containerHeight); - - if (aspectRatio) { - if (minCropBoxWidth && minCropBoxHeight) { - if (minCropBoxHeight * aspectRatio > minCropBoxWidth) { - minCropBoxHeight = minCropBoxWidth / aspectRatio; - } else { - minCropBoxWidth = minCropBoxHeight * aspectRatio; - } - } else if (minCropBoxWidth) { - minCropBoxHeight = minCropBoxWidth / aspectRatio; - } else if (minCropBoxHeight) { - minCropBoxWidth = minCropBoxHeight * aspectRatio; - } - - if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) { - maxCropBoxHeight = maxCropBoxWidth / aspectRatio; - } else { - maxCropBoxWidth = maxCropBoxHeight * aspectRatio; - } - } - - // The minWidth/Height must be less than maxWidth/Height - cropBox.minWidth = min(minCropBoxWidth, maxCropBoxWidth); - cropBox.minHeight = min(minCropBoxHeight, maxCropBoxHeight); - cropBox.maxWidth = maxCropBoxWidth; - cropBox.maxHeight = maxCropBoxHeight; - } - - if (position) { - if (strict) { - cropBox.minLeft = max(0, canvas.left); - cropBox.minTop = max(0, canvas.top); - cropBox.maxLeft = min(containerWidth, canvas.left + canvas.width) - cropBox.width; - cropBox.maxTop = min(containerHeight, canvas.top + canvas.height) - cropBox.height; - } else { - cropBox.minLeft = 0; - cropBox.minTop = 0; - cropBox.maxLeft = containerWidth - cropBox.width; - cropBox.maxTop = containerHeight - cropBox.height; - } - } - }, - - renderCropBox: function () { - var options = this.options; - var container = this.container; - var containerWidth = container.width; - var containerHeight = container.height; - var cropBox = this.cropBox; - - if (cropBox.width > cropBox.maxWidth || cropBox.width < cropBox.minWidth) { - cropBox.left = cropBox.oldLeft; - } - - if (cropBox.height > cropBox.maxHeight || cropBox.height < cropBox.minHeight) { - cropBox.top = cropBox.oldTop; - } - - cropBox.width = min(max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); - cropBox.height = min(max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); - - this.limitCropBox(false, true); - - cropBox.oldLeft = cropBox.left = min(max(cropBox.left, cropBox.minLeft), cropBox.maxLeft); - cropBox.oldTop = cropBox.top = min(max(cropBox.top, cropBox.minTop), cropBox.maxTop); - - if (options.movable && options.cropBoxMovable) { - - // Turn to move the canvas when the crop box is equal to the container - this.$face.data(DATA_ACTION, (cropBox.width === containerWidth && cropBox.height === containerHeight) ? ACTION_MOVE : ACTION_ALL); - } - - this.$cropBox.css({ - width: cropBox.width, - height: cropBox.height, - left: cropBox.left, - top: cropBox.top - }); - - if (this.cropped && options.strict) { - this.limitCanvas(true, true); - } - - if (!this.disabled) { - this.output(); - } - }, - - output: function () { - this.preview(); - - if (this.complete) { - this.trigger(EVENT_CROP, this.getData()); - } else if (!this.built) { - - // Only trigger one crop event before complete - this.$element.one(EVENT_BUILT, $.proxy(function () { - this.trigger(EVENT_CROP, this.getData()); - }, this)); - } - } - }); - - $.extend(prototype, { - initPreview: function () { - var crossOrigin = getCrossOrigin(this.crossOrigin); - var url = this.url; - - this.$preview = $(this.options.preview); - this.$viewBox.html(''); - this.$preview.each(function () { - var $this = $(this); - - // Save the original size for recover - $this.data(DATA_PREVIEW, { - width: $this.width(), - height: $this.height(), - original: $this.html() - }); - - /** - * Override img element styles - * Add `display:block` to avoid margin top issue - * (Occur only when margin-top <= -height) - */ - $this.html( - '' - ); - }); - }, - - resetPreview: function () { - this.$preview.each(function () { - var $this = $(this); - - $this.html($this.data(DATA_PREVIEW).original).removeData(DATA_PREVIEW); - }); - }, - - preview: function () { - var image = this.image; - var canvas = this.canvas; - var cropBox = this.cropBox; - var cropBoxWidth = cropBox.width; - var cropBoxHeight = cropBox.height; - var width = image.width; - var height = image.height; - var left = cropBox.left - canvas.left - image.left; - var top = cropBox.top - canvas.top - image.top; - - if (!this.cropped || this.disabled) { - return; - } - - this.$viewBox.find('img').css({ - width: width, - height: height, - marginLeft: -left, - marginTop: -top, - transform: getTransform(image) - }); - - this.$preview.each(function () { - var $this = $(this); - var data = $this.data(DATA_PREVIEW); - var originalWidth = data.width; - var originalHeight = data.height; - var newWidth = originalWidth; - var newHeight = originalHeight; - var ratio = 1; - - if (cropBoxWidth) { - ratio = originalWidth / cropBoxWidth; - newHeight = cropBoxHeight * ratio; - } - - if (cropBoxHeight && newHeight > originalHeight) { - ratio = originalHeight / cropBoxHeight; - newWidth = cropBoxWidth * ratio; - newHeight = originalHeight; - } - - $this.width(newWidth).height(newHeight).find('img').css({ - width: width * ratio, - height: height * ratio, - marginLeft: -left * ratio, - marginTop: -top * ratio, - transform: getTransform(image) - }); - }); - } - }); - - $.extend(prototype, { - bind: function () { - var options = this.options; - var $this = this.$element; - var $cropper = this.$cropper; - - if ($.isFunction(options.cropstart)) { - $this.on(EVENT_CROP_START, options.cropstart); - } - - if ($.isFunction(options.cropmove)) { - $this.on(EVENT_CROP_MOVE, options.cropmove); - } - - if ($.isFunction(options.cropend)) { - $this.on(EVENT_CROP_END, options.cropend); - } - - if ($.isFunction(options.crop)) { - $this.on(EVENT_CROP, options.crop); - } - - if ($.isFunction(options.zoom)) { - $this.on(EVENT_ZOOM, options.zoom); - } - - $cropper.on(EVENT_MOUSE_DOWN, $.proxy(this.cropStart, this)); - - if (options.zoomable && options.mouseWheelZoom) { - $cropper.on(EVENT_WHEEL, $.proxy(this.wheel, this)); - } - - if (options.doubleClickToggle) { - $cropper.on(EVENT_DBLCLICK, $.proxy(this.dblclick, this)); - } - - $document. - on(EVENT_MOUSE_MOVE, (this._cropMove = proxy(this.cropMove, this))). - on(EVENT_MOUSE_UP, (this._cropEnd = proxy(this.cropEnd, this))); - - if (options.responsive) { - $window.on(EVENT_RESIZE, (this._resize = proxy(this.resize, this))); - } - }, - - unbind: function () { - var options = this.options; - var $this = this.$element; - var $cropper = this.$cropper; - - if ($.isFunction(options.cropstart)) { - $this.off(EVENT_CROP_START, options.cropstart); - } - - if ($.isFunction(options.cropmove)) { - $this.off(EVENT_CROP_MOVE, options.cropmove); - } - - if ($.isFunction(options.cropend)) { - $this.off(EVENT_CROP_END, options.cropend); - } - - if ($.isFunction(options.crop)) { - $this.off(EVENT_CROP, options.crop); - } - - if ($.isFunction(options.zoom)) { - $this.off(EVENT_ZOOM, options.zoom); - } - - $cropper.off(EVENT_MOUSE_DOWN, this.cropStart); - - if (options.zoomable && options.mouseWheelZoom) { - $cropper.off(EVENT_WHEEL, this.wheel); - } - - if (options.doubleClickToggle) { - $cropper.off(EVENT_DBLCLICK, this.dblclick); - } - - $document. - off(EVENT_MOUSE_MOVE, this._cropMove). - off(EVENT_MOUSE_UP, this._cropEnd); - - if (options.responsive) { - $window.off(EVENT_RESIZE, this._resize); - } - } - }); - - $.extend(prototype, { - resize: function () { - var $container = this.$container; - var container = this.container; - var canvasData; - var cropBoxData; - var ratio; - - // Check `container` is necessary for IE8 - if (this.disabled || !container) { - return; - } - - ratio = $container.width() / container.width; - - // Resize when width changed or height changed - if (ratio !== 1 || $container.height() !== container.height) { - canvasData = this.getCanvasData(); - cropBoxData = this.getCropBoxData(); - - this.render(); - this.setCanvasData($.each(canvasData, function (i, n) { - canvasData[i] = n * ratio; - })); - this.setCropBoxData($.each(cropBoxData, function (i, n) { - cropBoxData[i] = n * ratio; - })); - } - }, - - dblclick: function () { - if (this.disabled) { - return; - } - - if (this.$dragBox.hasClass(CLASS_CROP)) { - this.setDragMode(ACTION_MOVE); - } else { - this.setDragMode(ACTION_CROP); - } - }, - - wheel: function (event) { - var originalEvent = event.originalEvent; - var e = originalEvent; - var ratio = num(this.options.wheelZoomRatio) || 0.1; - var delta = 1; - - if (this.disabled) { - return; - } - - event.preventDefault(); - - if (e.deltaY) { - delta = e.deltaY > 0 ? 1 : -1; - } else if (e.wheelDelta) { - delta = -e.wheelDelta / 120; - } else if (e.detail) { - delta = e.detail > 0 ? 1 : -1; - } - - this.zoom(-delta * ratio, originalEvent); - }, - - cropStart: function (event) { - var options = this.options; - var originalEvent = event.originalEvent; - var touches = originalEvent && originalEvent.touches; - var e = event; - var touchesLength; - var action; - - if (this.disabled) { - return; - } - - if (touches) { - touchesLength = touches.length; - - if (touchesLength > 1) { - if (options.zoomable && options.touchDragZoom && touchesLength === 2) { - e = touches[1]; - this.startX2 = e.pageX; - this.startY2 = e.pageY; - action = ACTION_ZOOM; - } else { - return; - } - } - - e = touches[0]; - } - - action = action || $(e.target).data(DATA_ACTION); - - if (REGEXP_ACTIONS.test(action)) { - if (this.trigger(EVENT_CROP_START, { - originalEvent: originalEvent, - action: action - }).isDefaultPrevented()) { - return; - } - - event.preventDefault(); - - this.action = action; - this.cropping = false; - - // IE8 has `event.pageX/Y`, but not `event.originalEvent.pageX/Y` - // IE10 has `event.originalEvent.pageX/Y`, but not `event.pageX/Y` - this.startX = e.pageX || originalEvent && originalEvent.pageX; - this.startY = e.pageY || originalEvent && originalEvent.pageY; - - if (action === ACTION_CROP) { - this.cropping = true; - this.$dragBox.addClass(CLASS_MODAL); - } - } - }, - - cropMove: function (event) { - var options = this.options; - var originalEvent = event.originalEvent; - var touches = originalEvent && originalEvent.touches; - var e = event; - var action = this.action; - var touchesLength; - - if (this.disabled) { - return; - } - - if (touches) { - touchesLength = touches.length; - - if (touchesLength > 1) { - if (options.zoomable && options.touchDragZoom && touchesLength === 2) { - e = touches[1]; - this.endX2 = e.pageX; - this.endY2 = e.pageY; - } else { - return; - } - } - - e = touches[0]; - } - - if (action) { - if (this.trigger(EVENT_CROP_MOVE, { - originalEvent: originalEvent, - action: action - }).isDefaultPrevented()) { - return; - } - - event.preventDefault(); - - this.endX = e.pageX || originalEvent && originalEvent.pageX; - this.endY = e.pageY || originalEvent && originalEvent.pageY; - - this.change(e.shiftKey, action === ACTION_ZOOM ? originalEvent : null); - } - }, - - cropEnd: function (event) { - var originalEvent = event.originalEvent; - var action = this.action; - - if (this.disabled) { - return; - } - - if (action) { - event.preventDefault(); - - if (this.cropping) { - this.cropping = false; - this.$dragBox.toggleClass(CLASS_MODAL, this.cropped && this.options.modal); - } - - this.action = ''; - - this.trigger(EVENT_CROP_END, { - originalEvent: originalEvent, - action: action - }); - } - } - }); - - $.extend(prototype, { - change: function (shiftKey, originalEvent) { - var options = this.options; - var aspectRatio = options.aspectRatio; - var action = this.action; - var container = this.container; - var canvas = this.canvas; - var cropBox = this.cropBox; - var width = cropBox.width; - var height = cropBox.height; - var left = cropBox.left; - var top = cropBox.top; - var right = left + width; - var bottom = top + height; - var minLeft = 0; - var minTop = 0; - var maxWidth = container.width; - var maxHeight = container.height; - var renderable = true; - var offset; - var range; - - // Locking aspect ratio in "free mode" by holding shift key (#259) - if (!aspectRatio && shiftKey) { - aspectRatio = width && height ? width / height : 1; - } - - if (options.strict) { - minLeft = cropBox.minLeft; - minTop = cropBox.minTop; - maxWidth = minLeft + min(container.width, canvas.width); - maxHeight = minTop + min(container.height, canvas.height); - } - - range = { - x: this.endX - this.startX, - y: this.endY - this.startY - }; - - if (aspectRatio) { - range.X = range.y * aspectRatio; - range.Y = range.x / aspectRatio; - } - - switch (action) { - // Move crop box - case ACTION_ALL: - left += range.x; - top += range.y; - break; - - // Resize crop box - case ACTION_EAST: - if (range.x >= 0 && (right >= maxWidth || aspectRatio && - (top <= minTop || bottom >= maxHeight))) { - - renderable = false; - break; - } - - width += range.x; - - if (aspectRatio) { - height = width / aspectRatio; - top -= range.Y / 2; - } - - if (width < 0) { - action = ACTION_WEST; - width = 0; - } - - break; - - case ACTION_NORTH: - if (range.y <= 0 && (top <= minTop || aspectRatio && - (left <= minLeft || right >= maxWidth))) { - - renderable = false; - break; - } - - height -= range.y; - top += range.y; - - if (aspectRatio) { - width = height * aspectRatio; - left += range.X / 2; - } - - if (height < 0) { - action = ACTION_SOUTH; - height = 0; - } - - break; - - case ACTION_WEST: - if (range.x <= 0 && (left <= minLeft || aspectRatio && - (top <= minTop || bottom >= maxHeight))) { - - renderable = false; - break; - } - - width -= range.x; - left += range.x; - - if (aspectRatio) { - height = width / aspectRatio; - top += range.Y / 2; - } - - if (width < 0) { - action = ACTION_EAST; - width = 0; - } - - break; - - case ACTION_SOUTH: - if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && - (left <= minLeft || right >= maxWidth))) { - - renderable = false; - break; - } - - height += range.y; - - if (aspectRatio) { - width = height * aspectRatio; - left -= range.X / 2; - } - - if (height < 0) { - action = ACTION_NORTH; - height = 0; - } - - break; - - case ACTION_NORTH_EAST: - if (aspectRatio) { - if (range.y <= 0 && (top <= minTop || right >= maxWidth)) { - renderable = false; - break; - } - - height -= range.y; - top += range.y; - width = height * aspectRatio; - } else { - if (range.x >= 0) { - if (right < maxWidth) { - width += range.x; - } else if (range.y <= 0 && top <= minTop) { - renderable = false; - } - } else { - width += range.x; - } - - if (range.y <= 0) { - if (top > minTop) { - height -= range.y; - top += range.y; - } - } else { - height -= range.y; - top += range.y; - } - } - - if (width < 0 && height < 0) { - action = ACTION_SOUTH_WEST; - height = 0; - width = 0; - } else if (width < 0) { - action = ACTION_NORTH_WEST; - width = 0; - } else if (height < 0) { - action = ACTION_SOUTH_EAST; - height = 0; - } - - break; - - case ACTION_NORTH_WEST: - if (aspectRatio) { - if (range.y <= 0 && (top <= minTop || left <= minLeft)) { - renderable = false; - break; - } - - height -= range.y; - top += range.y; - width = height * aspectRatio; - left += range.X; - } else { - if (range.x <= 0) { - if (left > minLeft) { - width -= range.x; - left += range.x; - } else if (range.y <= 0 && top <= minTop) { - renderable = false; - } - } else { - width -= range.x; - left += range.x; - } - - if (range.y <= 0) { - if (top > minTop) { - height -= range.y; - top += range.y; - } - } else { - height -= range.y; - top += range.y; - } - } - - if (width < 0 && height < 0) { - action = ACTION_SOUTH_EAST; - height = 0; - width = 0; - } else if (width < 0) { - action = ACTION_NORTH_EAST; - width = 0; - } else if (height < 0) { - action = ACTION_SOUTH_WEST; - height = 0; - } - - break; - - case ACTION_SOUTH_WEST: - if (aspectRatio) { - if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) { - renderable = false; - break; - } - - width -= range.x; - left += range.x; - height = width / aspectRatio; - } else { - if (range.x <= 0) { - if (left > minLeft) { - width -= range.x; - left += range.x; - } else if (range.y >= 0 && bottom >= maxHeight) { - renderable = false; - } - } else { - width -= range.x; - left += range.x; - } - - if (range.y >= 0) { - if (bottom < maxHeight) { - height += range.y; - } - } else { - height += range.y; - } - } - - if (width < 0 && height < 0) { - action = ACTION_NORTH_EAST; - height = 0; - width = 0; - } else if (width < 0) { - action = ACTION_SOUTH_EAST; - width = 0; - } else if (height < 0) { - action = ACTION_NORTH_WEST; - height = 0; - } - - break; - - case ACTION_SOUTH_EAST: - if (aspectRatio) { - if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) { - renderable = false; - break; - } - - width += range.x; - height = width / aspectRatio; - } else { - if (range.x >= 0) { - if (right < maxWidth) { - width += range.x; - } else if (range.y >= 0 && bottom >= maxHeight) { - renderable = false; - } - } else { - width += range.x; - } - - if (range.y >= 0) { - if (bottom < maxHeight) { - height += range.y; - } - } else { - height += range.y; - } - } - - if (width < 0 && height < 0) { - action = ACTION_NORTH_WEST; - height = 0; - width = 0; - } else if (width < 0) { - action = ACTION_SOUTH_WEST; - width = 0; - } else if (height < 0) { - action = ACTION_NORTH_EAST; - height = 0; - } - - break; - - // Move canvas - case ACTION_MOVE: - this.move(range.x, range.y); - renderable = false; - break; - - // Zoom canvas - case ACTION_ZOOM: - this.zoom((function (x1, y1, x2, y2) { - var z1 = sqrt(x1 * x1 + y1 * y1); - var z2 = sqrt(x2 * x2 + y2 * y2); - - return (z2 - z1) / z1; - })( - abs(this.startX - this.startX2), - abs(this.startY - this.startY2), - abs(this.endX - this.endX2), - abs(this.endY - this.endY2) - ), originalEvent); - this.startX2 = this.endX2; - this.startY2 = this.endY2; - renderable = false; - break; - - // Create crop box - case ACTION_CROP: - if (range.x && range.y) { - offset = this.$cropper.offset(); - left = this.startX - offset.left; - top = this.startY - offset.top; - width = cropBox.minWidth; - height = cropBox.minHeight; - - if (range.x > 0) { - if (range.y > 0) { - action = ACTION_SOUTH_EAST; - } else { - action = ACTION_NORTH_EAST; - top -= height; - } - } else { - if (range.y > 0) { - action = ACTION_SOUTH_WEST; - left -= width; - } else { - action = ACTION_NORTH_WEST; - left -= width; - top -= height; - } - } - - // Show the crop box if is hidden - if (!this.cropped) { - this.cropped = true; - this.$cropBox.removeClass(CLASS_HIDDEN); - } - } - - break; - - // No default - } - - if (renderable) { - cropBox.width = width; - cropBox.height = height; - cropBox.left = left; - cropBox.top = top; - this.action = action; - - this.renderCropBox(); - } - - // Override - this.startX = this.endX; - this.startY = this.endY; - } - }); - - $.extend(prototype, { - - // Show the crop box manually - crop: function () { - if (!this.built || this.disabled) { - return; - } - - if (!this.cropped) { - this.cropped = true; - this.limitCropBox(true, true); - - if (this.options.modal) { - this.$dragBox.addClass(CLASS_MODAL); - } - - this.$cropBox.removeClass(CLASS_HIDDEN); - } - - this.setCropBoxData(this.initialCropBox); - }, - - // Reset the image and crop box to their initial states - reset: function () { - if (!this.built || this.disabled) { - return; - } - - this.image = $.extend({}, this.initialImage); - this.canvas = $.extend({}, this.initialCanvas); - - // Required for strict mode - this.cropBox = $.extend({}, this.initialCropBox); - - this.renderCanvas(); - - if (this.cropped) { - this.renderCropBox(); - } - }, - - // Clear the crop box - clear: function () { - if (!this.cropped || this.disabled) { - return; - } - - $.extend(this.cropBox, { - left: 0, - top: 0, - width: 0, - height: 0 - }); - - this.cropped = false; - this.renderCropBox(); - - this.limitCanvas(true, true); - - // Render canvas after crop box rendered - this.renderCanvas(); - - this.$dragBox.removeClass(CLASS_MODAL); - this.$cropBox.addClass(CLASS_HIDDEN); - }, - - /** - * Replace the image's src and rebuild the cropper - * - * @param {String} url - */ - replace: function (url) { - if (!this.disabled && url) { - if (this.isImg) { - this.replaced = true; - this.$element.attr('src', url); - } - - // Clear previous data - this.options.data = null; - this.load(url); - } - }, - - // Enable (unfreeze) the cropper - enable: function () { - if (this.built) { - this.disabled = false; - this.$cropper.removeClass(CLASS_DISABLED); - } - }, - - // Disable (freeze) the cropper - disable: function () { - if (this.built) { - this.disabled = true; - this.$cropper.addClass(CLASS_DISABLED); - } - }, - - // Destroy the cropper and remove the instance from the image - destroy: function () { - var $this = this.$element; - - if (this.ready) { - if (this.isImg && this.replaced) { - $this.attr('src', this.originalUrl); - } - - this.unbuild(); - $this.removeClass(CLASS_HIDDEN); - } else { - if (this.isImg) { - $this.off(EVENT_LOAD, this.start); - } else if (this.$clone) { - this.$clone.remove(); - } - } - - $this.removeData(NAMESPACE); - }, - - /** - * Move the canvas - * - * @param {Number} offsetX - * @param {Number} offsetY (optional) - */ - move: function (offsetX, offsetY) { - var canvas = this.canvas; - - // If "offsetY" is not present, its default value is "offsetX" - if (isUndefined(offsetY)) { - offsetY = offsetX; - } - - offsetX = num(offsetX); - offsetY = num(offsetY); - - if (this.built && !this.disabled && this.options.movable) { - canvas.left += isNumber(offsetX) ? offsetX : 0; - canvas.top += isNumber(offsetY) ? offsetY : 0; - this.renderCanvas(true); - } - }, - - /** - * Zoom the canvas - * - * @param {Number} ratio - * @param {Event} _originalEvent (private) - */ - zoom: function (ratio, _originalEvent) { - var canvas = this.canvas; - var width; - var height; - - ratio = num(ratio); - - if (ratio && this.built && !this.disabled && this.options.zoomable) { - if (this.trigger(EVENT_ZOOM, { - originalEvent: _originalEvent, - ratio: ratio - }).isDefaultPrevented()) { - return; - } - - if (ratio < 0) { - ratio = 1 / (1 - ratio); - } else { - ratio = 1 + ratio; - } - - width = canvas.width * ratio; - height = canvas.height * ratio; - canvas.left -= (width - canvas.width) / 2; - canvas.top -= (height - canvas.height) / 2; - canvas.width = width; - canvas.height = height; - this.renderCanvas(true); - this.setDragMode(ACTION_MOVE); - } - }, - - /** - * Rotate the canvas - * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#rotate() - * - * @param {Number} degree - */ - rotate: function (degree) { - var image = this.image; - var rotate = image.rotate || 0; - - degree = num(degree) || 0; - - if (this.built && !this.disabled && this.options.rotatable) { - image.rotate = (rotate + degree) % 360; - this.rotated = true; - this.renderCanvas(true); - } - }, - - /** - * Scale the image - * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#scale() - * - * @param {Number} scaleX - * @param {Number} scaleY (optional) - */ - scale: function (scaleX, scaleY) { - var image = this.image; - - // If "scaleY" is not present, its default value is "scaleX" - if (isUndefined(scaleY)) { - scaleY = scaleX; - } - - scaleX = num(scaleX); - scaleY = num(scaleY); - - if (this.built && !this.disabled && this.options.scalable) { - image.scaleX = isNumber(scaleX) ? scaleX : 1; - image.scaleY = isNumber(scaleY) ? scaleY : 1; - this.renderImage(true); - } - }, - - /** - * Get the cropped area position and size data (base on the original image) - * - * @param {Boolean} rounded (optional) - * @return {Object} data - */ - getData: function (rounded) { - var options = this.options; - var image = this.image; - var canvas = this.canvas; - var cropBox = this.cropBox; - var ratio; - var data; - - if (this.built && this.cropped) { - data = { - x: cropBox.left - canvas.left, - y: cropBox.top - canvas.top, - width: cropBox.width, - height: cropBox.height - }; - - ratio = image.width / image.naturalWidth; - - $.each(data, function (i, n) { - n = n / ratio; - data[i] = rounded ? Math.round(n) : n; - }); - - } else { - data = { - x: 0, - y: 0, - width: 0, - height: 0 - }; - } - - if (options.rotatable) { - data.rotate = image.rotate || 0; - } - - if (options.scalable) { - data.scaleX = image.scaleX || 1; - data.scaleY = image.scaleY || 1; - } - - return data; - }, - - /** - * Set the cropped area position and size with new data - * - * @param {Object} data - */ - setData: function (data) { - var options = this.options; - var image = this.image; - var canvas = this.canvas; - var cropBoxData = {}; - var rotated; - var scaled; - var ratio; - - if ($.isFunction(data)) { - data = data.call(this.element); - } - - if (this.built && !this.disabled && $.isPlainObject(data)) { - if (options.rotatable) { - if (isNumber(data.rotate) && data.rotate !== image.rotate) { - image.rotate = data.rotate; - this.rotated = rotated = true; - } - } - - if (options.scalable) { - if (isNumber(data.scaleX) && data.scaleX !== image.scaleX) { - image.scaleX = data.scaleX; - scaled = true; - } - - if (isNumber(data.scaleY) && data.scaleY !== image.scaleY) { - image.scaleY = data.scaleY; - scaled = true; - } - } - - if (rotated) { - this.renderCanvas(); - } else if (scaled) { - this.renderImage(); - } - - ratio = image.width / image.naturalWidth; - - if (isNumber(data.x)) { - cropBoxData.left = data.x * ratio + canvas.left; - } - - if (isNumber(data.y)) { - cropBoxData.top = data.y * ratio + canvas.top; - } - - if (isNumber(data.width)) { - cropBoxData.width = data.width * ratio; - } - - if (isNumber(data.height)) { - cropBoxData.height = data.height * ratio; - } - - this.setCropBoxData(cropBoxData); - } - }, - - /** - * Get the container size data - * - * @return {Object} data - */ - getContainerData: function () { - return this.built ? this.container : {}; - }, - - /** - * Get the image position and size data - * - * @return {Object} data - */ - getImageData: function () { - return this.ready ? this.image : {}; - }, - - /** - * Get the canvas position and size data - * - * @return {Object} data - */ - getCanvasData: function () { - var canvas = this.canvas; - var data; - - if (this.built) { - data = { - left: canvas.left, - top: canvas.top, - width: canvas.width, - height: canvas.height - }; - } - - return data || {}; - }, - - /** - * Set the canvas position and size with new data - * - * @param {Object} data - */ - setCanvasData: function (data) { - var canvas = this.canvas; - var aspectRatio = canvas.aspectRatio; - - if ($.isFunction(data)) { - data = data.call(this.$element); - } - - if (this.built && !this.disabled && $.isPlainObject(data)) { - if (isNumber(data.left)) { - canvas.left = data.left; - } - - if (isNumber(data.top)) { - canvas.top = data.top; - } - - if (isNumber(data.width)) { - canvas.width = data.width; - canvas.height = data.width / aspectRatio; - } else if (isNumber(data.height)) { - canvas.height = data.height; - canvas.width = data.height * aspectRatio; - } - - this.renderCanvas(true); - } - }, - - /** - * Get the crop box position and size data - * - * @return {Object} data - */ - getCropBoxData: function () { - var cropBox = this.cropBox; - var data; - - if (this.built && this.cropped) { - data = { - left: cropBox.left, - top: cropBox.top, - width: cropBox.width, - height: cropBox.height - }; - } - - return data || {}; - }, - - /** - * Set the crop box position and size with new data - * - * @param {Object} data - */ - setCropBoxData: function (data) { - var cropBox = this.cropBox; - var aspectRatio = this.options.aspectRatio; - var widthChanged; - var heightChanged; - - if ($.isFunction(data)) { - data = data.call(this.$element); - } - - if (this.built && this.cropped && !this.disabled && $.isPlainObject(data)) { - - if (isNumber(data.left)) { - cropBox.left = data.left; - } - - if (isNumber(data.top)) { - cropBox.top = data.top; - } - - if (isNumber(data.width) && data.width !== cropBox.width) { - widthChanged = true; - cropBox.width = data.width; - } - - if (isNumber(data.height) && data.height !== cropBox.height) { - heightChanged = true; - cropBox.height = data.height; - } - - if (aspectRatio) { - if (widthChanged) { - cropBox.height = cropBox.width / aspectRatio; - } else if (heightChanged) { - cropBox.width = cropBox.height * aspectRatio; - } - } - - this.renderCropBox(); - } - }, - - /** - * Get a canvas drawn the cropped image - * - * @param {Object} options (optional) - * @return {HTMLCanvasElement} canvas - */ - getCroppedCanvas: function (options) { - var originalWidth; - var originalHeight; - var canvasWidth; - var canvasHeight; - var scaledWidth; - var scaledHeight; - var scaledRatio; - var aspectRatio; - var canvas; - var context; - var data; - - if (!this.built || !this.cropped || !SUPPORT_CANVAS) { - return; - } - - if (!$.isPlainObject(options)) { - options = {}; - } - - data = this.getData(); - originalWidth = data.width; - originalHeight = data.height; - aspectRatio = originalWidth / originalHeight; - - if ($.isPlainObject(options)) { - scaledWidth = options.width; - scaledHeight = options.height; - - if (scaledWidth) { - scaledHeight = scaledWidth / aspectRatio; - scaledRatio = scaledWidth / originalWidth; - } else if (scaledHeight) { - scaledWidth = scaledHeight * aspectRatio; - scaledRatio = scaledHeight / originalHeight; - } - } - - canvasWidth = scaledWidth || originalWidth; - canvasHeight = scaledHeight || originalHeight; - - canvas = $('')[0]; - canvas.width = canvasWidth; - canvas.height = canvasHeight; - context = canvas.getContext('2d'); - - if (options.fillColor) { - context.fillStyle = options.fillColor; - context.fillRect(0, 0, canvasWidth, canvasHeight); - } - - // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage - context.drawImage.apply(context, (function () { - var source = getSourceCanvas(this.$clone[0], this.image); - var sourceWidth = source.width; - var sourceHeight = source.height; - var args = [source]; - - // Source canvas - var srcX = data.x; - var srcY = data.y; - var srcWidth; - var srcHeight; - - // Destination canvas - var dstX; - var dstY; - var dstWidth; - var dstHeight; - - if (srcX <= -originalWidth || srcX > sourceWidth) { - srcX = srcWidth = dstX = dstWidth = 0; - } else if (srcX <= 0) { - dstX = -srcX; - srcX = 0; - srcWidth = dstWidth = min(sourceWidth, originalWidth + srcX); - } else if (srcX <= sourceWidth) { - dstX = 0; - srcWidth = dstWidth = min(originalWidth, sourceWidth - srcX); - } - - if (srcWidth <= 0 || srcY <= -originalHeight || srcY > sourceHeight) { - srcY = srcHeight = dstY = dstHeight = 0; - } else if (srcY <= 0) { - dstY = -srcY; - srcY = 0; - srcHeight = dstHeight = min(sourceHeight, originalHeight + srcY); - } else if (srcY <= sourceHeight) { - dstY = 0; - srcHeight = dstHeight = min(originalHeight, sourceHeight - srcY); - } - - args.push(srcX, srcY, srcWidth, srcHeight); - - // Scale destination sizes - if (scaledRatio) { - dstX *= scaledRatio; - dstY *= scaledRatio; - dstWidth *= scaledRatio; - dstHeight *= scaledRatio; - } - - // Avoid "IndexSizeError" in IE and Firefox - if (dstWidth > 0 && dstHeight > 0) { - args.push(dstX, dstY, dstWidth, dstHeight); - } - - return args; - }).call(this)); - - return canvas; - }, - - /** - * Change the aspect ratio of the crop box - * - * @param {Number} aspectRatio - */ - setAspectRatio: function (aspectRatio) { - var options = this.options; - - if (!this.disabled && !isUndefined(aspectRatio)) { - - // 0 -> NaN - options.aspectRatio = num(aspectRatio) || NaN; - - if (this.built) { - this.initCropBox(); - - if (this.cropped) { - this.renderCropBox(); - } - } - } - }, - - /** - * Change the drag mode - * - * @param {String} mode (optional) - */ - setDragMode: function (mode) { - var options = this.options; - var croppable; - var movable; - - if (this.ready && !this.disabled) { - croppable = options.dragCrop && mode === ACTION_CROP; - movable = options.movable && mode === ACTION_MOVE; - mode = (croppable || movable) ? mode : ACTION_NONE; - - this.$dragBox. - data(DATA_ACTION, mode). - toggleClass(CLASS_CROP, croppable). - toggleClass(CLASS_MOVE, movable); - - if (!options.cropBoxMovable) { - - // Sync drag mode to crop box when it is not movable(#300) - this.$face. - data(DATA_ACTION, mode). - toggleClass(CLASS_CROP, croppable). - toggleClass(CLASS_MOVE, movable); - } - } - } - }); - - $.extend(Cropper.prototype, prototype); - - Cropper.DEFAULTS = { - - // Define the aspect ratio of the crop box - aspectRatio: NaN, - - // An object with the previous cropping result data - data: null, - - // A jQuery selector for adding extra containers to preview - preview: '', - - // Strict mode, the image cannot zoom out less than the container - strict: true, - - // Rebuild when resize the window - responsive: true, - - // Check if the target image is cross origin - checkImageOrigin: true, - - // Show the black modal - modal: true, - - // Show the dashed lines for guiding - guides: true, - - // Show the center indicator for guiding - center: true, - - // Show the white modal to highlight the crop box - highlight: true, - - // Show the grid background - background: true, - - // Enable to crop the image automatically when initialize - autoCrop: true, - - // Define the percentage of automatic cropping area when initializes - autoCropArea: 0.8, - - // Enable to create new crop box by dragging over the image - dragCrop: true, - - // Enable to move the image - movable: true, - - // Enable to rotate the image - rotatable: true, - - // Enable to scale the image - scalable: true, - - // Enable to zoom the image - zoomable: true, - - // Enable to zoom the image by wheeling mouse - mouseWheelZoom: true, - - // Define zoom ratio when zoom the image by wheeling mouse - wheelZoomRatio: 0.1, - - // Enable to zoom the image by dragging touch - touchDragZoom: true, - - // Enable to move the crop box - cropBoxMovable: true, - - // Enable to resize the crop box - cropBoxResizable: true, - - // Toggle drag mode between "crop" and "move" when double click on the cropper - doubleClickToggle: true, - - // Size limitation - minCanvasWidth: 0, - minCanvasHeight: 0, - minCropBoxWidth: 0, - minCropBoxHeight: 0, - minContainerWidth: 200, - minContainerHeight: 100, - - // Shortcuts of events - build: null, - built: null, - cropstart: null, - cropmove: null, - cropend: null, - crop: null, - zoom: null - }; - - Cropper.setDefaults = function (options) { - $.extend(Cropper.DEFAULTS, options); - }; - - Cropper.TEMPLATE = ( - '
' + - '
' + - '
' + - '
' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '
' + - '
' - ); - - // Save the other cropper - Cropper.other = $.fn.cropper; - - // Register as jQuery plugin - $.fn.cropper = function (options) { - var args = toArray(arguments, 1); - var result; - - this.each(function () { - var $this = $(this); - var data = $this.data(NAMESPACE); - var fn; - - if (!data) { - if (/destroy/.test(options)) { - return; - } - - $this.data(NAMESPACE, (data = new Cropper(this, options))); - } - - if (typeof options === 'string' && $.isFunction(fn = data[options])) { - result = fn.apply(data, args); - } - }); - - return isUndefined(result) ? this : result; - }; - - $.fn.cropper.Constructor = Cropper; - $.fn.cropper.setDefaults = Cropper.setDefaults; - - // No conflict - $.fn.cropper.noConflict = function () { - $.fn.cropper = Cropper.other; - return this; - }; - -}); diff --git a/docs/v1.0.0/js/cropper.min.js b/docs/v1.0.0/js/cropper.min.js deleted file mode 100644 index 1a619a16..00000000 --- a/docs/v1.0.0/js/cropper.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * Cropper v1.0.0 - * https://github.com/fengyuanchen/cropper - * - * Copyright (c) 2014-2015 Fengyuan Chen and contributors - * Released under the MIT license - * - * Date: 2015-10-10T02:10:08.624Z - */ -!function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t("object"==typeof exports?require("jquery"):jQuery)}(function(t){"use strict";function i(t){return"number"==typeof t&&!isNaN(t)}function e(t){return"undefined"==typeof t}function s(t,e){var s=[];return i(e)&&s.push(e),s.slice.apply(t,s)}function o(t,i){var e=s(arguments,2);return function(){return t.apply(i,e.concat(s(arguments)))}}function h(t){var i=t.match(/^(https?:)\/\/([^\:\/\?#]+):?(\d*)/i);return i&&(i[1]!==f.protocol||i[2]!==f.hostname||i[3]!==f.port)}function a(t){var i="timestamp="+(new Date).getTime();return t+(-1===t.indexOf("?")?"?":"&")+i}function n(t){return t?' crossOrigin="'+t+'"':""}function r(t,i){var e;return t.naturalWidth?i(t.naturalWidth,t.naturalHeight):(e=document.createElement("img"),e.onload=function(){i(this.width,this.height)},void(e.src=t.src))}function p(t){var e=[],s=t.rotate,o=t.scaleX,h=t.scaleY;return i(s)&&e.push("rotate("+s+"deg)"),i(o)&&i(h)&&e.push("scale("+o+","+h+")"),e.length?e.join(" "):"none"}function c(t,i){var e,s,o=at(t.degree)%180,h=(o>90?180-o:o)*Math.PI/180,a=nt(h),n=rt(h),r=t.width,p=t.height,c=t.aspectRatio;return i?(e=r/(n+a/c),s=e/c):(e=r*n+p*a,s=r*a+p*n),{width:e,height:s}}function d(e,s){var o,h,a,n=t("")[0],r=n.getContext("2d"),p=0,d=0,l=s.naturalWidth,g=s.naturalHeight,u=s.rotate,f=s.scaleX,m=s.scaleY,v=i(f)&&i(m)&&(1!==f||1!==m),w=i(u)&&0!==u,x=w||v,b=l,C=g;return v&&(o=l/2,h=g/2),w&&(a=c({width:l,height:g,degree:u}),b=a.width,C=a.height,o=a.width/2,h=a.height/2),n.width=b,n.height=C,x&&(p=-l/2,d=-g/2,r.save(),r.translate(o,h)),w&&r.rotate(u*Math.PI/180),v&&r.scale(f,m),r.drawImage(e,p,d,l,g),x&&r.restore(),n}function l(i,e){this.$element=t(i),this.options=t.extend({},l.DEFAULTS,t.isPlainObject(e)&&e),this.ready=!1,this.built=!1,this.complete=!1,this.rotated=!1,this.cropped=!1,this.disabled=!1,this.replaced=!1,this.isImg=!1,this.originalUrl="",this.crossOrigin="",this.canvas=null,this.cropBox=null,this.init()}var g=t(window),u=t(document),f=window.location,m="cropper",v="cropper-modal",w="cropper-hide",x="cropper-hidden",b="cropper-invisible",C="cropper-move",y="cropper-crop",B="cropper-disabled",$="cropper-bg",D="mousedown touchstart pointerdown MSPointerDown",Y="mousemove touchmove pointermove MSPointerMove",X="mouseup touchend touchcancel pointerup pointercancel MSPointerUp MSPointerCancel",T="wheel mousewheel DOMMouseScroll",k="dblclick",M="load."+m,W="error."+m,L="resize."+m,H="build."+m,R="built."+m,z="cropstart."+m,I="cropmove."+m,P="cropend."+m,E="crop."+m,F="zoom."+m,O=/^(e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/,S="preview",j="action",A="e",N="w",U="s",Z="n",_="se",q="sw",K="ne",Q="nw",G="all",J="crop",V="move",tt="zoom",it="none",et=t.isFunction(t("")[0].getContext),st=Math.sqrt,ot=Math.min,ht=Math.max,at=Math.abs,nt=Math.sin,rt=Math.cos,pt=parseFloat,ct={version:"1.0.0"};t.extend(ct,{init:function(){var t,i=this.$element;if(i.is("img")){if(this.isImg=!0,this.originalUrl=t=i.attr("src"),!t)return;t=i.prop("src")}else i.is("canvas")&&et&&(t=i[0].toDataURL());this.load(t)},trigger:function(i,e){var s=t.Event(i,e);return this.$element.trigger(s),s},load:function(i){var e,s,o=this.options,r=this.$element,p="";i&&(this.url=i,r.one(H,o.build),this.trigger(H).isDefaultPrevented()||(o.checkImageOrigin&&h(i)&&(p=r.prop("crossOrigin"),p||(p="anonymous",e=a(i)),this.crossOrigin=p),this.$clone=s=t("'),this.isImg?r[0].complete?this.start():r.one(M,t.proxy(this.start,this)):s.one(M,t.proxy(this.start,this)).one(W,t.proxy(this.stop,this)).addClass(w).insertAfter(r)))},start:function(){var i=this.$element,e=this.$clone;this.isImg||(e.off(W,this.stop),i=e),r(i[0],t.proxy(function(t,i){this.image={naturalWidth:t,naturalHeight:i,aspectRatio:t/i},this.ready=!0,this.build()},this))},stop:function(){this.$clone.remove(),this.$clone=null}}),t.extend(ct,{build:function(){var i,e,s,o=this.options,h=this.$element,a=this.$clone;this.ready&&(this.built&&this.unbuild(),this.$container=h.parent(),this.$cropper=i=t(l.TEMPLATE),this.$canvas=i.find(".cropper-canvas").append(a),this.$dragBox=i.find(".cropper-drag-box"),this.$cropBox=e=i.find(".cropper-crop-box"),this.$viewBox=i.find(".cropper-view-box"),this.$face=s=e.find(".cropper-face"),h.addClass(x).after(i),this.isImg||a.removeClass(w),this.initPreview(),this.bind(),o.aspectRatio=pt(o.aspectRatio)||NaN,o.autoCrop?(this.cropped=!0,o.modal&&this.$dragBox.addClass(v)):e.addClass(x),o.guides||e.find(".cropper-dashed").addClass(x),o.center||e.find(".cropper-center").addClass(x),o.cropBoxMovable&&s.addClass(C).data(j,G),o.highlight||s.addClass(b),o.background&&i.addClass($),o.cropBoxResizable||e.find(".cropper-line, .cropper-point").addClass(x),this.setDragMode(o.dragCrop?J:o.movable?V:it),this.render(),this.built=!0,this.setData(o.data),h.one(R,o.built),setTimeout(t.proxy(function(){this.trigger(R),this.complete=!0},this),0))},unbuild:function(){this.built&&(this.built=!1,this.initialImage=null,this.initialCanvas=null,this.initialCropBox=null,this.container=null,this.canvas=null,this.cropBox=null,this.unbind(),this.resetPreview(),this.$preview=null,this.$viewBox=null,this.$cropBox=null,this.$dragBox=null,this.$canvas=null,this.$container=null,this.$cropper.remove(),this.$cropper=null)}}),t.extend(ct,{render:function(){this.initContainer(),this.initCanvas(),this.initCropBox(),this.renderCanvas(),this.cropped&&this.renderCropBox()},initContainer:function(){var t=this.options,i=this.$element,e=this.$container,s=this.$cropper;s.addClass(x),i.removeClass(x),s.css(this.container={width:ht(e.width(),pt(t.minContainerWidth)||200),height:ht(e.height(),pt(t.minContainerHeight)||100)}),i.addClass(x),s.removeClass(x)},initCanvas:function(){var i=this.container,e=i.width,s=i.height,o=this.image,h=o.aspectRatio,a={aspectRatio:h,width:e,height:s};s*h>e?a.height=e/h:a.width=s*h,a.oldLeft=a.left=(e-a.width)/2,a.oldTop=a.top=(s-a.height)/2,this.canvas=a,this.limitCanvas(!0,!0),this.initialImage=t.extend({},o),this.initialCanvas=t.extend({},a)},limitCanvas:function(t,i){var e,s,o=this.options,h=o.strict,a=this.container,n=a.width,r=a.height,p=this.canvas,c=p.aspectRatio,d=this.cropBox,l=this.cropped&&d,g=this.initialCanvas||p;t&&(e=pt(o.minCanvasWidth)||0,s=pt(o.minCanvasHeight)||0,h&&(e?e=ht(e,l?d.width:g.width):s?s=ht(s,l?d.height:g.height):l&&(e=d.width,s=d.height,s*c>e?e=s*c:s=e/c)),e&&s?s*c>e?s=e/c:e=s*c:e?s=e/c:s&&(e=s*c),p.minWidth=e,p.minHeight=s,p.maxWidth=1/0,p.maxHeight=1/0),i&&(h?(p.minLeft=l?ot(d.left,d.left+d.width-p.width):ot(0,n-p.width),p.minTop=l?ot(d.top,d.top+d.height-p.height):ot(0,r-p.height),p.maxLeft=l?d.left:ht(0,n-p.width),p.maxTop=l?d.top:ht(0,r-p.height)):(p.minLeft=-p.width,p.minTop=-p.height,p.maxLeft=n,p.maxTop=r))},renderCanvas:function(t){var i,e,s=this.options,o=this.canvas,h=this.image;this.rotated&&(this.rotated=!1,e=c({width:h.width,height:h.height,degree:h.rotate}),i=e.width/e.height,i!==o.aspectRatio&&(o.left-=(e.width-o.width)/2,o.top-=(e.height-o.height)/2,o.width=e.width,o.height=e.height,o.aspectRatio=i,this.limitCanvas(!0,!1))),(o.width>o.maxWidth||o.widtho.maxHeight||o.heighte.width?h.height=h.width/s:h.width=h.height*s),this.cropBox=h,this.limitCropBox(!0,!0),h.width=ot(ht(h.width,h.minWidth),h.maxWidth),h.height=ot(ht(h.height,h.minHeight),h.maxHeight),h.width=ht(h.minWidth,h.width*o),h.height=ht(h.minHeight,h.height*o),h.oldLeft=h.left=e.left+(e.width-h.width)/2,h.oldTop=h.top=e.top+(e.height-h.height)/2,this.initialCropBox=t.extend({},h)},limitCropBox:function(t,i){var e,s,o,h,a=this.options,n=a.strict,r=this.container,p=r.width,c=r.height,d=this.canvas,l=this.cropBox,g=a.aspectRatio;t&&(e=pt(a.minCropBoxWidth)||0,s=pt(a.minCropBoxHeight)||0,e=ot(e,p),s=ot(s,c),o=ot(p,n?d.width:p),h=ot(c,n?d.height:c),g&&(e&&s?s*g>e?s=e/g:e=s*g:e?s=e/g:s&&(e=s*g),h*g>o?h=o/g:o=h*g),l.minWidth=ot(e,o),l.minHeight=ot(s,h),l.maxWidth=o,l.maxHeight=h),i&&(n?(l.minLeft=ht(0,d.left),l.minTop=ht(0,d.top),l.maxLeft=ot(p,d.left+d.width)-l.width,l.maxTop=ot(c,d.top+d.height)-l.height):(l.minLeft=0,l.minTop=0,l.maxLeft=p-l.width,l.maxTop=c-l.height))},renderCropBox:function(){var t=this.options,i=this.container,e=i.width,s=i.height,o=this.cropBox;(o.width>o.maxWidth||o.widtho.maxHeight||o.height'),this.$preview.each(function(){var s=t(this);s.data(S,{width:s.width(),height:s.height(),original:s.html()}),s.html("')})},resetPreview:function(){this.$preview.each(function(){var i=t(this);i.html(i.data(S).original).removeData(S)})},preview:function(){var i=this.image,e=this.canvas,s=this.cropBox,o=s.width,h=s.height,a=i.width,n=i.height,r=s.left-e.left-i.left,c=s.top-e.top-i.top;this.cropped&&!this.disabled&&(this.$viewBox.find("img").css({width:a,height:n,marginLeft:-r,marginTop:-c,transform:p(i)}),this.$preview.each(function(){var e=t(this),s=e.data(S),d=s.width,l=s.height,g=d,u=l,f=1;o&&(f=d/o,u=h*f),h&&u>l&&(f=l/h,g=o*f,u=l),e.width(g).height(u).find("img").css({width:a*f,height:n*f,marginLeft:-r*f,marginTop:-c*f,transform:p(i)})}))}}),t.extend(ct,{bind:function(){var i=this.options,e=this.$element,s=this.$cropper;t.isFunction(i.cropstart)&&e.on(z,i.cropstart),t.isFunction(i.cropmove)&&e.on(I,i.cropmove),t.isFunction(i.cropend)&&e.on(P,i.cropend),t.isFunction(i.crop)&&e.on(E,i.crop),t.isFunction(i.zoom)&&e.on(F,i.zoom),s.on(D,t.proxy(this.cropStart,this)),i.zoomable&&i.mouseWheelZoom&&s.on(T,t.proxy(this.wheel,this)),i.doubleClickToggle&&s.on(k,t.proxy(this.dblclick,this)),u.on(Y,this._cropMove=o(this.cropMove,this)).on(X,this._cropEnd=o(this.cropEnd,this)),i.responsive&&g.on(L,this._resize=o(this.resize,this))},unbind:function(){var i=this.options,e=this.$element,s=this.$cropper;t.isFunction(i.cropstart)&&e.off(z,i.cropstart),t.isFunction(i.cropmove)&&e.off(I,i.cropmove),t.isFunction(i.cropend)&&e.off(P,i.cropend),t.isFunction(i.crop)&&e.off(E,i.crop),t.isFunction(i.zoom)&&e.off(F,i.zoom),s.off(D,this.cropStart),i.zoomable&&i.mouseWheelZoom&&s.off(T,this.wheel),i.doubleClickToggle&&s.off(k,this.dblclick),u.off(Y,this._cropMove).off(X,this._cropEnd),i.responsive&&g.off(L,this._resize)}}),t.extend(ct,{resize:function(){var i,e,s,o=this.$container,h=this.container;!this.disabled&&h&&(s=o.width()/h.width,(1!==s||o.height()!==h.height)&&(i=this.getCanvasData(),e=this.getCropBoxData(),this.render(),this.setCanvasData(t.each(i,function(t,e){i[t]=e*s})),this.setCropBoxData(t.each(e,function(t,i){e[t]=i*s}))))},dblclick:function(){this.disabled||(this.$dragBox.hasClass(y)?this.setDragMode(V):this.setDragMode(J))},wheel:function(t){var i=t.originalEvent,e=i,s=pt(this.options.wheelZoomRatio)||.1,o=1;this.disabled||(t.preventDefault(),e.deltaY?o=e.deltaY>0?1:-1:e.wheelDelta?o=-e.wheelDelta/120:e.detail&&(o=e.detail>0?1:-1),this.zoom(-o*s,i))},cropStart:function(i){var e,s,o=this.options,h=i.originalEvent,a=h&&h.touches,n=i;if(!this.disabled){if(a){if(e=a.length,e>1){if(!o.zoomable||!o.touchDragZoom||2!==e)return;n=a[1],this.startX2=n.pageX,this.startY2=n.pageY,s=tt}n=a[0]}if(s=s||t(n.target).data(j),O.test(s)){if(this.trigger(z,{originalEvent:h,action:s}).isDefaultPrevented())return;i.preventDefault(),this.action=s,this.cropping=!1,this.startX=n.pageX||h&&h.pageX,this.startY=n.pageY||h&&h.pageY,s===J&&(this.cropping=!0,this.$dragBox.addClass(v))}}},cropMove:function(t){var i,e=this.options,s=t.originalEvent,o=s&&s.touches,h=t,a=this.action;if(!this.disabled){if(o){if(i=o.length,i>1){if(!e.zoomable||!e.touchDragZoom||2!==i)return;h=o[1],this.endX2=h.pageX,this.endY2=h.pageY}h=o[0]}if(a){if(this.trigger(I,{originalEvent:s,action:a}).isDefaultPrevented())return;t.preventDefault(),this.endX=h.pageX||s&&s.pageX,this.endY=h.pageY||s&&s.pageY,this.change(h.shiftKey,a===tt?s:null)}}},cropEnd:function(t){var i=t.originalEvent,e=this.action;this.disabled||e&&(t.preventDefault(),this.cropping&&(this.cropping=!1,this.$dragBox.toggleClass(v,this.cropped&&this.options.modal)),this.action="",this.trigger(P,{originalEvent:i,action:e}))}}),t.extend(ct,{change:function(t,i){var e,s,o=this.options,h=o.aspectRatio,a=this.action,n=this.container,r=this.canvas,p=this.cropBox,c=p.width,d=p.height,l=p.left,g=p.top,u=l+c,f=g+d,m=0,v=0,w=n.width,b=n.height,C=!0;switch(!h&&t&&(h=c&&d?c/d:1),o.strict&&(m=p.minLeft,v=p.minTop,w=m+ot(n.width,r.width),b=v+ot(n.height,r.height)),s={x:this.endX-this.startX,y:this.endY-this.startY},h&&(s.X=s.y*h,s.Y=s.x/h),a){case G:l+=s.x,g+=s.y;break;case A:if(s.x>=0&&(u>=w||h&&(v>=g||f>=b))){C=!1;break}c+=s.x,h&&(d=c/h,g-=s.Y/2),0>c&&(a=N,c=0);break;case Z:if(s.y<=0&&(v>=g||h&&(m>=l||u>=w))){C=!1;break}d-=s.y,g+=s.y,h&&(c=d*h,l+=s.X/2),0>d&&(a=U,d=0);break;case N:if(s.x<=0&&(m>=l||h&&(v>=g||f>=b))){C=!1;break}c-=s.x,l+=s.x,h&&(d=c/h,g+=s.Y/2),0>c&&(a=A,c=0);break;case U:if(s.y>=0&&(f>=b||h&&(m>=l||u>=w))){C=!1;break}d+=s.y,h&&(c=d*h,l-=s.X/2),0>d&&(a=Z,d=0);break;case K:if(h){if(s.y<=0&&(v>=g||u>=w)){C=!1;break}d-=s.y,g+=s.y,c=d*h}else s.x>=0?w>u?c+=s.x:s.y<=0&&v>=g&&(C=!1):c+=s.x,s.y<=0?g>v&&(d-=s.y,g+=s.y):(d-=s.y,g+=s.y);0>c&&0>d?(a=q,d=0,c=0):0>c?(a=Q,c=0):0>d&&(a=_,d=0);break;case Q:if(h){if(s.y<=0&&(v>=g||m>=l)){C=!1;break}d-=s.y,g+=s.y,c=d*h,l+=s.X}else s.x<=0?l>m?(c-=s.x,l+=s.x):s.y<=0&&v>=g&&(C=!1):(c-=s.x,l+=s.x),s.y<=0?g>v&&(d-=s.y,g+=s.y):(d-=s.y,g+=s.y);0>c&&0>d?(a=_,d=0,c=0):0>c?(a=K,c=0):0>d&&(a=q,d=0);break;case q:if(h){if(s.x<=0&&(m>=l||f>=b)){C=!1;break}c-=s.x,l+=s.x,d=c/h}else s.x<=0?l>m?(c-=s.x,l+=s.x):s.y>=0&&f>=b&&(C=!1):(c-=s.x,l+=s.x),s.y>=0?b>f&&(d+=s.y):d+=s.y;0>c&&0>d?(a=K,d=0,c=0):0>c?(a=_,c=0):0>d&&(a=Q,d=0);break;case _:if(h){if(s.x>=0&&(u>=w||f>=b)){C=!1;break}c+=s.x,d=c/h}else s.x>=0?w>u?c+=s.x:s.y>=0&&f>=b&&(C=!1):c+=s.x,s.y>=0?b>f&&(d+=s.y):d+=s.y;0>c&&0>d?(a=Q,d=0,c=0):0>c?(a=q,c=0):0>d&&(a=K,d=0);break;case V:this.move(s.x,s.y),C=!1;break;case tt:this.zoom(function(t,i,e,s){var o=st(t*t+i*i),h=st(e*e+s*s);return(h-o)/o}(at(this.startX-this.startX2),at(this.startY-this.startY2),at(this.endX-this.endX2),at(this.endY-this.endY2)),i),this.startX2=this.endX2,this.startY2=this.endY2,C=!1;break;case J:s.x&&s.y&&(e=this.$cropper.offset(),l=this.startX-e.left,g=this.startY-e.top,c=p.minWidth,d=p.minHeight,s.x>0?s.y>0?a=_:(a=K,g-=d):s.y>0?(a=q,l-=c):(a=Q,l-=c,g-=d),this.cropped||(this.cropped=!0,this.$cropBox.removeClass(x)))}C&&(p.width=c,p.height=d,p.left=l,p.top=g,this.action=a,this.renderCropBox()),this.startX=this.endX,this.startY=this.endY}}),t.extend(ct,{crop:function(){this.built&&!this.disabled&&(this.cropped||(this.cropped=!0,this.limitCropBox(!0,!0),this.options.modal&&this.$dragBox.addClass(v),this.$cropBox.removeClass(x)),this.setCropBoxData(this.initialCropBox))},reset:function(){this.built&&!this.disabled&&(this.image=t.extend({},this.initialImage),this.canvas=t.extend({},this.initialCanvas),this.cropBox=t.extend({},this.initialCropBox),this.renderCanvas(),this.cropped&&this.renderCropBox())},clear:function(){this.cropped&&!this.disabled&&(t.extend(this.cropBox,{left:0,top:0,width:0,height:0}),this.cropped=!1,this.renderCropBox(),this.limitCanvas(!0,!0),this.renderCanvas(),this.$dragBox.removeClass(v),this.$cropBox.addClass(x))},replace:function(t){!this.disabled&&t&&(this.isImg&&(this.replaced=!0,this.$element.attr("src",t)),this.options.data=null,this.load(t))},enable:function(){this.built&&(this.disabled=!1,this.$cropper.removeClass(B))},disable:function(){this.built&&(this.disabled=!0,this.$cropper.addClass(B))},destroy:function(){var t=this.$element;this.ready?(this.isImg&&this.replaced&&t.attr("src",this.originalUrl),this.unbuild(),t.removeClass(x)):this.isImg?t.off(M,this.start):this.$clone&&this.$clone.remove(),t.removeData(m)},move:function(t,s){var o=this.canvas;e(s)&&(s=t),t=pt(t),s=pt(s),this.built&&!this.disabled&&this.options.movable&&(o.left+=i(t)?t:0,o.top+=i(s)?s:0,this.renderCanvas(!0))},zoom:function(t,i){var e,s,o=this.canvas;if(t=pt(t),t&&this.built&&!this.disabled&&this.options.zoomable){if(this.trigger(F,{originalEvent:i,ratio:t}).isDefaultPrevented())return;t=0>t?1/(1-t):1+t,e=o.width*t,s=o.height*t,o.left-=(e-o.width)/2,o.top-=(s-o.height)/2,o.width=e,o.height=s,this.renderCanvas(!0),this.setDragMode(V)}},rotate:function(t){var i=this.image,e=i.rotate||0;t=pt(t)||0,this.built&&!this.disabled&&this.options.rotatable&&(i.rotate=(e+t)%360,this.rotated=!0,this.renderCanvas(!0))},scale:function(t,s){var o=this.image;e(s)&&(s=t),t=pt(t),s=pt(s),this.built&&!this.disabled&&this.options.scalable&&(o.scaleX=i(t)?t:1,o.scaleY=i(s)?s:1,this.renderImage(!0))},getData:function(i){var e,s,o=this.options,h=this.image,a=this.canvas,n=this.cropBox;return this.built&&this.cropped?(s={x:n.left-a.left,y:n.top-a.top,width:n.width,height:n.height},e=h.width/h.naturalWidth,t.each(s,function(t,o){o/=e,s[t]=i?Math.round(o):o})):s={x:0,y:0,width:0,height:0},o.rotatable&&(s.rotate=h.rotate||0),o.scalable&&(s.scaleX=h.scaleX||1,s.scaleY=h.scaleY||1),s},setData:function(e){var s,o,h,a=this.options,n=this.image,r=this.canvas,p={};t.isFunction(e)&&(e=e.call(this.element)),this.built&&!this.disabled&&t.isPlainObject(e)&&(a.rotatable&&i(e.rotate)&&e.rotate!==n.rotate&&(n.rotate=e.rotate,this.rotated=s=!0),a.scalable&&(i(e.scaleX)&&e.scaleX!==n.scaleX&&(n.scaleX=e.scaleX,o=!0),i(e.scaleY)&&e.scaleY!==n.scaleY&&(n.scaleY=e.scaleY,o=!0)),s?this.renderCanvas():o&&this.renderImage(),h=n.width/n.naturalWidth,i(e.x)&&(p.left=e.x*h+r.left),i(e.y)&&(p.top=e.y*h+r.top),i(e.width)&&(p.width=e.width*h),i(e.height)&&(p.height=e.height*h),this.setCropBoxData(p))},getContainerData:function(){return this.built?this.container:{}},getImageData:function(){return this.ready?this.image:{}},getCanvasData:function(){var t,i=this.canvas;return this.built&&(t={left:i.left,top:i.top,width:i.width,height:i.height}),t||{}},setCanvasData:function(e){var s=this.canvas,o=s.aspectRatio;t.isFunction(e)&&(e=e.call(this.$element)),this.built&&!this.disabled&&t.isPlainObject(e)&&(i(e.left)&&(s.left=e.left),i(e.top)&&(s.top=e.top),i(e.width)?(s.width=e.width,s.height=e.width/o):i(e.height)&&(s.height=e.height,s.width=e.height*o),this.renderCanvas(!0))},getCropBoxData:function(){var t,i=this.cropBox;return this.built&&this.cropped&&(t={left:i.left,top:i.top,width:i.width,height:i.height}),t||{}},setCropBoxData:function(e){var s,o,h=this.cropBox,a=this.options.aspectRatio;t.isFunction(e)&&(e=e.call(this.$element)),this.built&&this.cropped&&!this.disabled&&t.isPlainObject(e)&&(i(e.left)&&(h.left=e.left),i(e.top)&&(h.top=e.top),i(e.width)&&e.width!==h.width&&(s=!0,h.width=e.width),i(e.height)&&e.height!==h.height&&(o=!0,h.height=e.height),a&&(s?h.height=h.width/a:o&&(h.width=h.height*a)),this.renderCropBox())},getCroppedCanvas:function(i){var e,s,o,h,a,n,r,p,c,l,g;return this.built&&this.cropped&&et?(t.isPlainObject(i)||(i={}),g=this.getData(),e=g.width,s=g.height,p=e/s,t.isPlainObject(i)&&(a=i.width,n=i.height,a?(n=a/p,r=a/e):n&&(a=n*p,r=n/s)),o=a||e,h=n||s,c=t("")[0],c.width=o,c.height=h,l=c.getContext("2d"),i.fillColor&&(l.fillStyle=i.fillColor,l.fillRect(0,0,o,h)),l.drawImage.apply(l,function(){var t,i,o,h,a,n,p=d(this.$clone[0],this.image),c=p.width,l=p.height,u=[p],f=g.x,m=g.y;return-e>=f||f>c?f=t=o=a=0:0>=f?(o=-f,f=0,t=a=ot(c,e+f)):c>=f&&(o=0,t=a=ot(e,c-f)),0>=t||-s>=m||m>l?m=i=h=n=0:0>=m?(h=-m,m=0,i=n=ot(l,s+m)):l>=m&&(h=0,i=n=ot(s,l-m)),u.push(f,m,t,i),r&&(o*=r,h*=r,a*=r,n*=r),a>0&&n>0&&u.push(o,h,a,n),u}.call(this)),c):void 0},setAspectRatio:function(t){var i=this.options;this.disabled||e(t)||(i.aspectRatio=pt(t)||NaN,this.built&&(this.initCropBox(),this.cropped&&this.renderCropBox()))},setDragMode:function(t){var i,e,s=this.options;this.ready&&!this.disabled&&(i=s.dragCrop&&t===J,e=s.movable&&t===V,t=i||e?t:it,this.$dragBox.data(j,t).toggleClass(y,i).toggleClass(C,e),s.cropBoxMovable||this.$face.data(j,t).toggleClass(y,i).toggleClass(C,e))}}),t.extend(l.prototype,ct),l.DEFAULTS={aspectRatio:NaN,data:null,preview:"",strict:!0,responsive:!0,checkImageOrigin:!0,modal:!0,guides:!0,center:!0,highlight:!0,background:!0,autoCrop:!0,autoCropArea:.8,dragCrop:!0,movable:!0,rotatable:!0,scalable:!0,zoomable:!0,mouseWheelZoom:!0,wheelZoomRatio:.1,touchDragZoom:!0,cropBoxMovable:!0,cropBoxResizable:!0,doubleClickToggle:!0,minCanvasWidth:0,minCanvasHeight:0,minCropBoxWidth:0,minCropBoxHeight:0,minContainerWidth:200,minContainerHeight:100,build:null,built:null,cropstart:null,cropmove:null,cropend:null,crop:null,zoom:null},l.setDefaults=function(i){t.extend(l.DEFAULTS,i)},l.TEMPLATE='
',l.other=t.fn.cropper,t.fn.cropper=function(i){var o,h=s(arguments,1);return this.each(function(){var e,s=t(this),a=s.data(m);if(!a){if(/destroy/.test(i))return;s.data(m,a=new l(this,i))}"string"==typeof i&&t.isFunction(e=a[i])&&(o=e.apply(a,h))}),e(o)?this:o},t.fn.cropper.Constructor=l,t.fn.cropper.setDefaults=l.setDefaults,t.fn.cropper.noConflict=function(){return t.fn.cropper=l.other,this}}); \ No newline at end of file diff --git a/docs/v1.0.0/js/main.js b/docs/v1.0.0/js/main.js deleted file mode 100644 index af5f8f17..00000000 --- a/docs/v1.0.0/js/main.js +++ /dev/null @@ -1,301 +0,0 @@ -$(function () { - - 'use strict'; - - var console = window.console || { log: function () {} }; - var $body = $('body'); - - - // Tooltip - $('[data-toggle="tooltip"]').tooltip(); - $.fn.tooltip.noConflict(); - $body.tooltip(); - - - // Demo - // --------------------------------------------------------------------------- - - (function () { - var $image = $('.img-container > img'); - var $actions = $('.docs-actions'); - var $download = $('#download'); - var $dataX = $('#dataX'); - var $dataY = $('#dataY'); - var $dataHeight = $('#dataHeight'); - var $dataWidth = $('#dataWidth'); - var $dataRotate = $('#dataRotate'); - var $dataScaleX = $('#dataScaleX'); - var $dataScaleY = $('#dataScaleY'); - var options = { - aspectRatio: 16 / 9, - preview: '.img-preview', - crop: function (e) { - $dataX.val(Math.round(e.x)); - $dataY.val(Math.round(e.y)); - $dataHeight.val(Math.round(e.height)); - $dataWidth.val(Math.round(e.width)); - $dataRotate.val(e.rotate); - $dataScaleX.val(e.scaleX); - $dataScaleY.val(e.scaleY); - } - }; - - $image.on({ - 'build.cropper': function (e) { - console.log(e.type); - }, - 'built.cropper': function (e) { - console.log(e.type); - }, - 'cropstart.cropper': function (e) { - console.log(e.type, e.action); - }, - 'cropmove.cropper': function (e) { - console.log(e.type, e.action); - }, - 'cropend.cropper': function (e) { - console.log(e.type, e.action); - }, - 'crop.cropper': function (e) { - console.log(e.type, e.x, e.y, e.width, e.height, e.rotate, e.scaleX, e.scaleY); - }, - 'zoom.cropper': function (e) { - console.log(e.type, e.ratio); - } - }).cropper(options); - - - // Buttons - if (!$.isFunction(document.createElement('canvas').getContext)) { - $('button[data-method="getCroppedCanvas"]').prop('disabled', true); - } - - if (typeof document.createElement('cropper').style.transition === 'undefined') { - $('button[data-method="rotate"]').prop('disabled', true); - $('button[data-method="scale"]').prop('disabled', true); - } - - - // Download - if (typeof $download[0].download === 'undefined') { - $download.addClass('disabled'); - } - - - // Options - $actions.on('change', ':checkbox', function () { - var $this = $(this); - var cropBoxData; - var canvasData; - - if (!$image.data('cropper')) { - return; - } - - options[$this.val()] = $this.prop('checked'); - - cropBoxData = $image.cropper('getCropBoxData'); - canvasData = $image.cropper('getCanvasData'); - options.built = function () { - $image.cropper('setCropBoxData', cropBoxData); - $image.cropper('setCanvasData', canvasData); - }; - - $image.cropper('destroy').cropper(options); - }); - - - // Methods - $actions.on('click', '[data-method]', function () { - var $this = $(this); - var data = $this.data(); - var $target; - var result; - - if ($this.prop('disabled') || $this.hasClass('disabled')) { - return; - } - - if ($image.data('cropper') && data.method) { - data = $.extend({}, data); // Clone a new one - - if (typeof data.target !== 'undefined') { - $target = $(data.target); - - if (typeof data.option === 'undefined') { - try { - data.option = JSON.parse($target.val()); - } catch (e) { - console.log(e.message); - } - } - } - - result = $image.cropper(data.method, data.option, data.secondOption); - - if (data.flip === 'horizontal') { - $(this).data('option', -data.option); - } - - if (data.flip === 'vertical') { - $(this).data('secondOption', -data.secondOption); - } - - if (data.method === 'getCroppedCanvas' && result) { - $('#getCroppedCanvasModal').modal().find('.modal-body').html(result); - - if (!$download.hasClass('disabled')) { - $download.attr('href', result.toDataURL()); - } - } - - if ($.isPlainObject(result) && $target) { - try { - $target.val(JSON.stringify(result)); - } catch (e) { - console.log(e.message); - } - } - - } - }); - - - // Keyboard - $body.on('keydown', function (e) { - - if (!$image.data('cropper') || this.scrollTop > 300) { - return; - } - - switch (e.which) { - case 37: - e.preventDefault(); - $image.cropper('move', -1, 0); - break; - - case 38: - e.preventDefault(); - $image.cropper('move', 0, -1); - break; - - case 39: - e.preventDefault(); - $image.cropper('move', 1, 0); - break; - - case 40: - e.preventDefault(); - $image.cropper('move', 0, 1); - break; - } - - }); - - - // Import image - var $inputImage = $('#inputImage'); - var URL = window.URL || window.webkitURL; - var blobURL; - - if (URL) { - $inputImage.change(function () { - var files = this.files; - var file; - - if (!$image.data('cropper')) { - return; - } - - if (files && files.length) { - file = files[0]; - - if (/^image\/\w+$/.test(file.type)) { - blobURL = URL.createObjectURL(file); - $image.one('built.cropper', function () { - URL.revokeObjectURL(blobURL); // Revoke when load complete - }).cropper('reset').cropper('replace', blobURL); - $inputImage.val(''); - } else { - $body.tooltip('Please choose an image file.', 'warning'); - } - } - }); - } else { - $inputImage.prop('disabled', true).parent().addClass('disabled'); - } - - }()); - - - // Examples - // --------------------------------------------------------------------------- - - // Example 1 - (function () { - $('.cropper-example-1 > img').cropper({ - aspectRatio: 16 / 9, - autoCropArea: 0.65, - strict: false, - guides: false, - highlight: false, - dragCrop: false, - cropBoxMovable: false, - cropBoxResizable: false - }); - })(); - - - // Example 2 - (function () { - var $image = $('#cropper-example-2 > img'); - var cropBoxData; - var canvasData; - - $('#cropper-example-2-modal').on('shown.bs.modal', function () { - $image.cropper({ - autoCropArea: 0.5, - built: function () { - // Strict mode: set crop box data first - $image.cropper('setCropBoxData', cropBoxData); - $image.cropper('setCanvasData', canvasData); - } - }); - }).on('hidden.bs.modal', function () { - cropBoxData = $image.cropper('getCropBoxData'); - canvasData = $image.cropper('getCanvasData'); - $image.cropper('destroy'); - }); - })(); - - - // Example 3 - (function () { - var $image = $('.cropper-example-3 > img'); - var $toggle = $('#replace-toggle'); - var originalText = $toggle.text(); - var replaced; - - $image.cropper({ - movable: false, - zoomable: false, - rotatable: false, - scalable: false - }); - - $toggle.click(function () { - if ($toggle.prop('disabled')) { - return; - } - - $toggle.text('loading').prop('disabled', true); - - $image.one('built.cropper', function () { - $toggle.text(originalText).prop('disabled', false); - }).cropper('replace', replaced ? 'img/picture.jpg' : 'img/picture-2.jpg'); - - replaced = !replaced; - }); - })(); - -}); diff --git a/docs/v2.3.4/css/cropper.css b/docs/v2.3.4/css/cropper.css index fb850233..80598e54 100644 --- a/docs/v2.3.4/css/cropper.css +++ b/docs/v2.3.4/css/cropper.css @@ -2,7 +2,7 @@ * Cropper v2.3.4 * https://github.com/fengyuanchen/cropper * - * Copyright (c) 2014-2016 Fengyuan Chen and contributors + * Copyright (c) 2014-2016 Chen Fengyuan and contributors * Released under the MIT license * * Date: 2016-09-03T05:50:45.412Z diff --git a/docs/v2.3.4/css/cropper.min.css b/docs/v2.3.4/css/cropper.min.css deleted file mode 100644 index 9426dacc..00000000 --- a/docs/v2.3.4/css/cropper.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Cropper v2.3.4 - * https://github.com/fengyuanchen/cropper - * - * Copyright (c) 2014-2016 Fengyuan Chen and contributors - * Released under the MIT license - * - * Date: 2016-09-03T05:50:45.412Z - */.cropper-container{font-size:0;line-height:0;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;direction:ltr!important}.cropper-container img{display:block;width:100%;min-width:0!important;max-width:none!important;height:100%;min-height:0!important;max-height:none!important;image-orientation:0deg!important}.cropper-canvas,.cropper-crop-box,.cropper-drag-box,.cropper-modal,.cropper-wrap-box{position:absolute;top:0;right:0;bottom:0;left:0}.cropper-wrap-box{overflow:hidden}.cropper-drag-box{opacity:0;background-color:#fff;filter:alpha(opacity=0)}.cropper-dashed,.cropper-modal{opacity:.5;filter:alpha(opacity=50)}.cropper-modal{background-color:#000}.cropper-view-box{display:block;overflow:hidden;width:100%;height:100%;outline:#39f solid 1px;outline-color:rgba(51,153,255,.75)}.cropper-dashed{position:absolute;display:block;border:0 dashed #eee}.cropper-dashed.dashed-h{top:33.33333%;left:0;width:100%;height:33.33333%;border-top-width:1px;border-bottom-width:1px}.cropper-dashed.dashed-v{top:0;left:33.33333%;width:33.33333%;height:100%;border-right-width:1px;border-left-width:1px}.cropper-center{position:absolute;top:50%;left:50%;display:block;width:0;height:0;opacity:.75;filter:alpha(opacity=75)}.cropper-center:after,.cropper-center:before{position:absolute;display:block;content:' ';background-color:#eee}.cropper-center:before{top:0;left:-3px;width:7px;height:1px}.cropper-center:after{top:-3px;left:0;width:1px;height:7px}.cropper-face,.cropper-line,.cropper-point{position:absolute;display:block;width:100%;height:100%;opacity:.1;filter:alpha(opacity=10)}.cropper-face{top:0;left:0;background-color:#fff}.cropper-line,.cropper-point{background-color:#39f}.cropper-line.line-e{top:0;right:-3px;width:5px;cursor:e-resize}.cropper-line.line-n{top:-3px;left:0;height:5px;cursor:n-resize}.cropper-line.line-w{top:0;left:-3px;width:5px;cursor:w-resize}.cropper-line.line-s{bottom:-3px;left:0;height:5px;cursor:s-resize}.cropper-point{width:5px;height:5px;opacity:.75;filter:alpha(opacity=75)}.cropper-point.point-e{top:50%;right:-3px;margin-top:-3px;cursor:e-resize}.cropper-point.point-n{top:-3px;left:50%;margin-left:-3px;cursor:n-resize}.cropper-point.point-w{top:50%;left:-3px;margin-top:-3px;cursor:w-resize}.cropper-point.point-s{bottom:-3px;left:50%;margin-left:-3px;cursor:s-resize}.cropper-point.point-ne{top:-3px;right:-3px;cursor:ne-resize}.cropper-point.point-nw{top:-3px;left:-3px;cursor:nw-resize}.cropper-point.point-sw{bottom:-3px;left:-3px;cursor:sw-resize}.cropper-point.point-se{right:-3px;bottom:-3px;width:20px;height:20px;cursor:se-resize;opacity:1;filter:alpha(opacity=100)}.cropper-point.point-se:before{position:absolute;right:-50%;bottom:-50%;display:block;width:200%;height:200%;content:' ';opacity:0;background-color:#39f;filter:alpha(opacity=0)}@media (min-width:768px){.cropper-point.point-se{width:15px;height:15px}}@media (min-width:992px){.cropper-point.point-se{width:10px;height:10px}}@media (min-width:1200px){.cropper-point.point-se{width:5px;height:5px;opacity:.75;filter:alpha(opacity=75)}}.cropper-invisible{opacity:0;filter:alpha(opacity=0)}.cropper-bg{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC)}.cropper-hide{position:absolute;display:block;width:0;height:0}.cropper-hidden{display:none!important}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-drag-box,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed} \ No newline at end of file diff --git a/docs/v1.0.0/img/picture.jpg b/docs/v2.3.4/images/picture.jpg similarity index 100% rename from docs/v1.0.0/img/picture.jpg rename to docs/v2.3.4/images/picture.jpg diff --git a/docs/v2.3.4/img/data.jpg b/docs/v2.3.4/img/data.jpg deleted file mode 100644 index 56926a274d80ba3197d036645a9a9795f5f38677..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16534 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 diff --git a/docs/v2.3.4/img/icons.png b/docs/v2.3.4/img/icons.png deleted file mode 100644 index 1dc9824ee25eccf3196d8af253f508fb26c03111..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3065 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 Hu0mjf06gOH diff --git a/docs/v2.3.4/img/layers.jpg b/docs/v2.3.4/img/layers.jpg deleted file mode 100644 index 02b77e7b2afcef789be940e444af43f522f3ca31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26921 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 bVib53gW0r$l$2a@a#+hz=dPahhv9z!%1KK! diff --git a/docs/v2.3.4/img/picture-2.jpg b/docs/v2.3.4/img/picture-2.jpg deleted file mode 100644 index 05df6dc31819a058455e49bdbfa9d47a47ab5f06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182998 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 VzfHY`6pSp=s_#+?w^XEW|JfH>e4PLQ diff --git a/docs/v2.3.4/img/picture-3.jpg b/docs/v2.3.4/img/picture-3.jpg deleted file mode 100644 index 472d721b6edd5334e48235a13e0675ea9fa1e7a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224777 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 L0yU&*HO#Mfh3zw+3V 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�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 - + Cropper - + @@ -61,7 +61,7 @@

Cropper v2.3.4

- Picture + Picture
@@ -537,7 +537,7 @@ - + diff --git a/docs/v2.3.4/js/cropper.js b/docs/v2.3.4/js/cropper.js index 27196e10..48c29f6d 100644 --- a/docs/v2.3.4/js/cropper.js +++ b/docs/v2.3.4/js/cropper.js @@ -2,7 +2,7 @@ * Cropper v2.3.4 * https://github.com/fengyuanchen/cropper * - * Copyright (c) 2014-2016 Fengyuan Chen and contributors + * Copyright (c) 2014-2016 Chen Fengyuan and contributors * Released under the MIT license * * Date: 2016-09-03T05:50:45.412Z diff --git a/docs/v2.3.4/js/cropper.min.js b/docs/v2.3.4/js/cropper.min.js deleted file mode 100644 index d285e2c2..00000000 --- a/docs/v2.3.4/js/cropper.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * Cropper v2.3.4 - * https://github.com/fengyuanchen/cropper - * - * Copyright (c) 2014-2016 Fengyuan Chen and contributors - * Released under the MIT license - * - * Date: 2016-09-03T05:50:45.412Z - */ -!function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t("object"==typeof exports?require("jquery"):jQuery)}(function(t){"use strict";function i(t){return"number"==typeof t&&!isNaN(t)}function e(t){return"undefined"==typeof t}function s(t,e){var s=[];return i(e)&&s.push(e),s.slice.apply(t,s)}function a(t,i){var e=s(arguments,2);return function(){return t.apply(i,e.concat(s(arguments)))}}function o(t){var i=t.match(/^(https?:)\/\/([^\:\/\?#]+):?(\d*)/i);return i&&(i[1]!==C.protocol||i[2]!==C.hostname||i[3]!==C.port)}function h(t){var i="timestamp="+(new Date).getTime();return t+(t.indexOf("?")===-1?"?":"&")+i}function n(t){return t?' crossOrigin="'+t+'"':""}function r(t,i){var e;return t.naturalWidth&&!mt?i(t.naturalWidth,t.naturalHeight):(e=document.createElement("img"),e.onload=function(){i(this.width,this.height)},void(e.src=t.src))}function p(t){var e=[],s=t.rotate,a=t.scaleX,o=t.scaleY;return i(s)&&0!==s&&e.push("rotate("+s+"deg)"),i(a)&&1!==a&&e.push("scaleX("+a+")"),i(o)&&1!==o&&e.push("scaleY("+o+")"),e.length?e.join(" "):"none"}function l(t,i){var e,s,a=Ct(t.degree)%180,o=(a>90?180-a:a)*Math.PI/180,h=bt(o),n=Bt(o),r=t.width,p=t.height,l=t.aspectRatio;return i?(e=r/(n+h/l),s=e/l):(e=r*n+p*h,s=r*h+p*n),{width:e,height:s}}function c(e,s){var a,o,h,n=t("")[0],r=n.getContext("2d"),p=0,c=0,d=s.naturalWidth,g=s.naturalHeight,u=s.rotate,f=s.scaleX,m=s.scaleY,v=i(f)&&i(m)&&(1!==f||1!==m),w=i(u)&&0!==u,x=w||v,C=d*Ct(f||1),b=g*Ct(m||1);return v&&(a=C/2,o=b/2),w&&(h=l({width:C,height:b,degree:u}),C=h.width,b=h.height,a=C/2,o=b/2),n.width=C,n.height=b,x&&(p=-d/2,c=-g/2,r.save(),r.translate(a,o)),w&&r.rotate(u*Math.PI/180),v&&r.scale(f,m),r.drawImage(e,$t(p),$t(c),$t(d),$t(g)),x&&r.restore(),n}function d(i){var e=i.length,s=0,a=0;return e&&(t.each(i,function(t,i){s+=i.pageX,a+=i.pageY}),s/=e,a/=e),{pageX:s,pageY:a}}function g(t,i,e){var s,a="";for(s=i,e+=i;s=8&&(r=s+a)))),r)for(d=c.getUint16(r,o),l=0;l")[0].getContext),mt=b&&/(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(b.userAgent),vt=Number,wt=Math.min,xt=Math.max,Ct=Math.abs,bt=Math.sin,Bt=Math.cos,yt=Math.sqrt,Dt=Math.round,$t=Math.floor,Lt=String.fromCharCode;v.prototype={constructor:v,init:function(){var t,i=this.$element;if(i.is("img")){if(this.isImg=!0,this.originalUrl=t=i.attr("src"),!t)return;t=i.prop("src")}else i.is("canvas")&&ft&&(t=i[0].toDataURL());this.load(t)},trigger:function(i,e){var s=t.Event(i,e);return this.$element.trigger(s),s},load:function(i){var e,s,a=this.options,n=this.$element;if(i&&(n.one(A,a.build),!this.trigger(A).isDefaultPrevented())){if(this.url=i,this.image={},!a.checkOrientation||!B)return this.clone();if(e=t.proxy(this.read,this),V.test(i))return J.test(i)?e(f(i)):this.clone();s=new XMLHttpRequest,s.onerror=s.onabort=t.proxy(function(){this.clone()},this),s.onload=function(){e(this.response)},a.checkCrossOrigin&&o(i)&&n.prop("crossOrigin")&&(i=h(i)),s.open("get",i),s.responseType="arraybuffer",s.send()}},read:function(t){var i=this.options,e=u(t),s=this.image,a=0,o=1,h=1;if(e>1)switch(this.url=m(t),e){case 2:o=-1;break;case 3:a=-180;break;case 4:h=-1;break;case 5:a=90,h=-1;break;case 6:a=90;break;case 7:a=90,o=-1;break;case 8:a=-90}i.rotatable&&(s.rotate=a),i.scalable&&(s.scaleX=o,s.scaleY=h),this.clone()},clone:function(){var i,e,s=this.options,a=this.$element,r=this.url,p="";s.checkCrossOrigin&&o(r)&&(p=a.prop("crossOrigin"),p?i=r:(p="anonymous",i=h(r))),this.crossOrigin=p,this.crossOriginUrl=i,this.$clone=e=t("'),this.isImg?a[0].complete?this.start():a.one(I,t.proxy(this.start,this)):e.one(I,t.proxy(this.start,this)).one(F,t.proxy(this.stop,this)).addClass(X).insertAfter(a)},start:function(){var i=this.$element,e=this.$clone;this.isImg||(e.off(F,this.stop),i=e),r(i[0],t.proxy(function(i,e){t.extend(this.image,{naturalWidth:i,naturalHeight:e,aspectRatio:i/e}),this.isLoaded=!0,this.build()},this))},stop:function(){this.$clone.remove(),this.$clone=null},build:function(){var i,e,s,a=this.options,o=this.$element,h=this.$clone;this.isLoaded&&(this.isBuilt&&this.unbuild(),this.$container=o.parent(),this.$cropper=i=t(v.TEMPLATE),this.$canvas=i.find(".cropper-canvas").append(h),this.$dragBox=i.find(".cropper-drag-box"),this.$cropBox=e=i.find(".cropper-crop-box"),this.$viewBox=i.find(".cropper-view-box"),this.$face=s=e.find(".cropper-face"),o.addClass(Y).after(i),this.isImg||h.removeClass(X),this.initPreview(),this.bind(),a.aspectRatio=xt(0,a.aspectRatio)||NaN,a.viewMode=xt(0,wt(3,Dt(a.viewMode)))||0,a.autoCrop?(this.isCropped=!0,a.modal&&this.$dragBox.addClass(T)):e.addClass(Y),a.guides||e.find(".cropper-dashed").addClass(Y),a.center||e.find(".cropper-center").addClass(Y),a.cropBoxMovable&&s.addClass(M).data(it,lt),a.highlight||s.addClass(k),a.background&&i.addClass(R),a.cropBoxResizable||e.find(".cropper-line, .cropper-point").addClass(Y),this.setDragMode(a.dragMode),this.render(),this.isBuilt=!0,this.setData(a.data),o.one(S,a.built),this.completing=setTimeout(t.proxy(function(){this.trigger(S),this.trigger(K,this.getData()),this.isCompleted=!0},this),0))},unbuild:function(){this.isBuilt&&(this.isCompleted||clearTimeout(this.completing),this.isBuilt=!1,this.isCompleted=!1,this.initialImage=null,this.initialCanvas=null,this.initialCropBox=null,this.container=null,this.canvas=null,this.cropBox=null,this.unbind(),this.resetPreview(),this.$preview=null,this.$viewBox=null,this.$cropBox=null,this.$dragBox=null,this.$canvas=null,this.$container=null,this.$cropper.remove(),this.$cropper=null)},render:function(){this.initContainer(),this.initCanvas(),this.initCropBox(),this.renderCanvas(),this.isCropped&&this.renderCropBox()},initContainer:function(){var t=this.options,i=this.$element,e=this.$container,s=this.$cropper;s.addClass(Y),i.removeClass(Y),s.css(this.container={width:xt(e.width(),vt(t.minContainerWidth)||200),height:xt(e.height(),vt(t.minContainerHeight)||100)}),i.addClass(Y),s.removeClass(Y)},initCanvas:function(){var i,e=this.options.viewMode,s=this.container,a=s.width,o=s.height,h=this.image,n=h.naturalWidth,r=h.naturalHeight,p=90===Ct(h.rotate),l=p?r:n,c=p?n:r,d=l/c,g=a,u=o;o*d>a?3===e?g=o*d:u=a/d:3===e?u=a/d:g=o*d,i={naturalWidth:l,naturalHeight:c,aspectRatio:d,width:g,height:u},i.oldLeft=i.left=(a-g)/2,i.oldTop=i.top=(o-u)/2,this.canvas=i,this.isLimited=1===e||2===e,this.limitCanvas(!0,!0),this.initialImage=t.extend({},h),this.initialCanvas=t.extend({},i)},limitCanvas:function(t,i){var e,s,a,o,h=this.options,n=h.viewMode,r=this.container,p=r.width,l=r.height,c=this.canvas,d=c.aspectRatio,g=this.cropBox,u=this.isCropped&&g;t&&(e=vt(h.minCanvasWidth)||0,s=vt(h.minCanvasHeight)||0,n&&(n>1?(e=xt(e,p),s=xt(s,l),3===n&&(s*d>e?e=s*d:s=e/d)):e?e=xt(e,u?g.width:0):s?s=xt(s,u?g.height:0):u&&(e=g.width,s=g.height,s*d>e?e=s*d:s=e/d)),e&&s?s*d>e?s=e/d:e=s*d:e?s=e/d:s&&(e=s*d),c.minWidth=e,c.minHeight=s,c.maxWidth=1/0,c.maxHeight=1/0),i&&(n?(a=p-c.width,o=l-c.height,c.minLeft=wt(0,a),c.minTop=wt(0,o),c.maxLeft=xt(0,a),c.maxTop=xt(0,o),u&&this.isLimited&&(c.minLeft=wt(g.left,g.left+g.width-c.width),c.minTop=wt(g.top,g.top+g.height-c.height),c.maxLeft=g.left,c.maxTop=g.top,2===n&&(c.width>=p&&(c.minLeft=wt(0,a),c.maxLeft=xt(0,a)),c.height>=l&&(c.minTop=wt(0,o),c.maxTop=xt(0,o))))):(c.minLeft=-c.width,c.minTop=-c.height,c.maxLeft=p,c.maxTop=l))},renderCanvas:function(t){var i,e,s=this.canvas,a=this.image,o=a.rotate,h=a.naturalWidth,n=a.naturalHeight;this.isRotated&&(this.isRotated=!1,e=l({width:a.width,height:a.height,degree:o}),i=e.width/e.height,i!==s.aspectRatio&&(s.left-=(e.width-s.width)/2,s.top-=(e.height-s.height)/2,s.width=e.width,s.height=e.height,s.aspectRatio=i,s.naturalWidth=h,s.naturalHeight=n,o%180&&(e=l({width:h,height:n,degree:o}),s.naturalWidth=e.width,s.naturalHeight=e.height),this.limitCanvas(!0,!1))),(s.width>s.maxWidth||s.widths.maxHeight||s.heighte.width?o.height=o.width/s:o.width=o.height*s),this.cropBox=o,this.limitCropBox(!0,!0),o.width=wt(xt(o.width,o.minWidth),o.maxWidth),o.height=wt(xt(o.height,o.minHeight),o.maxHeight),o.width=xt(o.minWidth,o.width*a),o.height=xt(o.minHeight,o.height*a),o.oldLeft=o.left=e.left+(e.width-o.width)/2,o.oldTop=o.top=e.top+(e.height-o.height)/2,this.initialCropBox=t.extend({},o)},limitCropBox:function(t,i){var e,s,a,o,h=this.options,n=h.aspectRatio,r=this.container,p=r.width,l=r.height,c=this.canvas,d=this.cropBox,g=this.isLimited;t&&(e=vt(h.minCropBoxWidth)||0,s=vt(h.minCropBoxHeight)||0,e=wt(e,p),s=wt(s,l),a=wt(p,g?c.width:p),o=wt(l,g?c.height:l),n&&(e&&s?s*n>e?s=e/n:e=s*n:e?s=e/n:s&&(e=s*n),o*n>a?o=a/n:a=o*n),d.minWidth=wt(e,a),d.minHeight=wt(s,o),d.maxWidth=a,d.maxHeight=o),i&&(g?(d.minLeft=xt(0,c.left),d.minTop=xt(0,c.top),d.maxLeft=wt(p,c.left+c.width)-d.width,d.maxTop=wt(l,c.top+c.height)-d.height):(d.minLeft=0,d.minTop=0,d.maxLeft=p-d.width,d.maxTop=l-d.height))},renderCropBox:function(){var t=this.options,i=this.container,e=i.width,s=i.height,a=this.cropBox;(a.width>a.maxWidth||a.widtha.maxHeight||a.height'),this.$viewBox.html(i),this.$preview.each(function(){var i=t(this);i.data(tt,{width:i.width(),height:i.height(),html:i.html()}),i.html("')})},resetPreview:function(){this.$preview.each(function(){var i=t(this),e=i.data(tt);i.css({width:e.width,height:e.height}).html(e.html).removeData(tt)})},preview:function(){var i=this.image,e=this.canvas,s=this.cropBox,a=s.width,o=s.height,h=i.width,n=i.height,r=s.left-e.left-i.left,l=s.top-e.top-i.top;this.isCropped&&!this.isDisabled&&(this.$clone2.css({width:h,height:n,marginLeft:-r,marginTop:-l,transform:p(i)}),this.$preview.each(function(){var e=t(this),s=e.data(tt),c=s.width,d=s.height,g=c,u=d,f=1;a&&(f=c/a,u=o*f),o&&u>d&&(f=d/o,g=a*f,u=d),e.css({width:g,height:u}).find("img").css({width:h*f,height:n*f,marginLeft:-r*f,marginTop:-l*f,transform:p(i)})}))},bind:function(){var i=this.options,e=this.$element,s=this.$cropper;t.isFunction(i.cropstart)&&e.on(N,i.cropstart),t.isFunction(i.cropmove)&&e.on(_,i.cropmove),t.isFunction(i.cropend)&&e.on(q,i.cropend),t.isFunction(i.crop)&&e.on(K,i.crop),t.isFunction(i.zoom)&&e.on(Z,i.zoom),s.on(z,t.proxy(this.cropStart,this)),i.zoomable&&i.zoomOnWheel&&s.on(E,t.proxy(this.wheel,this)),i.toggleDragModeOnDblclick&&s.on(U,t.proxy(this.dblclick,this)),x.on(O,this._cropMove=a(this.cropMove,this)).on(P,this._cropEnd=a(this.cropEnd,this)),i.responsive&&w.on(j,this._resize=a(this.resize,this))},unbind:function(){var i=this.options,e=this.$element,s=this.$cropper;t.isFunction(i.cropstart)&&e.off(N,i.cropstart),t.isFunction(i.cropmove)&&e.off(_,i.cropmove),t.isFunction(i.cropend)&&e.off(q,i.cropend),t.isFunction(i.crop)&&e.off(K,i.crop),t.isFunction(i.zoom)&&e.off(Z,i.zoom),s.off(z,this.cropStart),i.zoomable&&i.zoomOnWheel&&s.off(E,this.wheel),i.toggleDragModeOnDblclick&&s.off(U,this.dblclick),x.off(O,this._cropMove).off(P,this._cropEnd),i.responsive&&w.off(j,this._resize)},resize:function(){var i,e,s,a=this.options.restore,o=this.$container,h=this.container;!this.isDisabled&&h&&(s=o.width()/h.width,1===s&&o.height()===h.height||(a&&(i=this.getCanvasData(),e=this.getCropBoxData()),this.render(),a&&(this.setCanvasData(t.each(i,function(t,e){i[t]=e*s})),this.setCropBoxData(t.each(e,function(t,i){e[t]=i*s})))))},dblclick:function(){this.isDisabled||(this.$dragBox.hasClass(W)?this.setDragMode(dt):this.setDragMode(ct))},wheel:function(i){var e=i.originalEvent||i,s=vt(this.options.wheelZoomRatio)||.1,a=1;this.isDisabled||(i.preventDefault(),this.wheeling||(this.wheeling=!0,setTimeout(t.proxy(function(){this.wheeling=!1},this),50),e.deltaY?a=e.deltaY>0?1:-1:e.wheelDelta?a=-e.wheelDelta/120:e.detail&&(a=e.detail>0?1:-1),this.zoom(-a*s,i)))},cropStart:function(i){var e,s,a=this.options,o=i.originalEvent,h=o&&o.touches,n=i;if(!this.isDisabled){if(h){if(e=h.length,e>1){if(!a.zoomable||!a.zoomOnTouch||2!==e)return;n=h[1],this.startX2=n.pageX,this.startY2=n.pageY,s=gt}n=h[0]}if(s=s||t(n.target).data(it),Q.test(s)){if(this.trigger(N,{originalEvent:o,action:s}).isDefaultPrevented())return;i.preventDefault(),this.action=s,this.cropping=!1,this.startX=n.pageX||o&&o.pageX,this.startY=n.pageY||o&&o.pageY,s===ct&&(this.cropping=!0,this.$dragBox.addClass(T))}}},cropMove:function(t){var i,e=this.options,s=t.originalEvent,a=s&&s.touches,o=t,h=this.action;if(!this.isDisabled){if(a){if(i=a.length,i>1){if(!e.zoomable||!e.zoomOnTouch||2!==i)return;o=a[1],this.endX2=o.pageX,this.endY2=o.pageY}o=a[0]}if(h){if(this.trigger(_,{originalEvent:s,action:h}).isDefaultPrevented())return;t.preventDefault(),this.endX=o.pageX||s&&s.pageX,this.endY=o.pageY||s&&s.pageY,this.change(o.shiftKey,h===gt?t:null)}}},cropEnd:function(t){var i=t.originalEvent,e=this.action;this.isDisabled||e&&(t.preventDefault(),this.cropping&&(this.cropping=!1,this.$dragBox.toggleClass(T,this.isCropped&&this.options.modal)),this.action="",this.trigger(q,{originalEvent:i,action:e}))},change:function(t,i){var e,s,a=this.options,o=a.aspectRatio,h=this.action,n=this.container,r=this.canvas,p=this.cropBox,l=p.width,c=p.height,d=p.left,g=p.top,u=d+l,f=g+c,m=0,v=0,w=n.width,x=n.height,C=!0;switch(!o&&t&&(o=l&&c?l/c:1),this.isLimited&&(m=p.minLeft,v=p.minTop,w=m+wt(n.width,r.width,r.left+r.width),x=v+wt(n.height,r.height,r.top+r.height)),s={x:this.endX-this.startX,y:this.endY-this.startY},o&&(s.X=s.y*o,s.Y=s.x/o),h){case lt:d+=s.x,g+=s.y;break;case et:if(s.x>=0&&(u>=w||o&&(g<=v||f>=x))){C=!1;break}l+=s.x,o&&(c=l/o,g-=s.Y/2),l<0&&(h=st,l=0);break;case ot:if(s.y<=0&&(g<=v||o&&(d<=m||u>=w))){C=!1;break}c-=s.y,g+=s.y,o&&(l=c*o,d+=s.X/2),c<0&&(h=at,c=0);break;case st:if(s.x<=0&&(d<=m||o&&(g<=v||f>=x))){C=!1;break}l-=s.x,d+=s.x,o&&(c=l/o,g+=s.Y/2),l<0&&(h=et,l=0);break;case at:if(s.y>=0&&(f>=x||o&&(d<=m||u>=w))){C=!1;break}c+=s.y,o&&(l=c*o,d-=s.X/2),c<0&&(h=ot,c=0);break;case rt:if(o){if(s.y<=0&&(g<=v||u>=w)){C=!1;break}c-=s.y,g+=s.y,l=c*o}else s.x>=0?uv&&(c-=s.y,g+=s.y):(c-=s.y,g+=s.y);l<0&&c<0?(h=nt,c=0,l=0):l<0?(h=pt,l=0):c<0&&(h=ht,c=0);break;case pt:if(o){if(s.y<=0&&(g<=v||d<=m)){C=!1;break}c-=s.y,g+=s.y,l=c*o,d+=s.X}else s.x<=0?d>m?(l-=s.x,d+=s.x):s.y<=0&&g<=v&&(C=!1):(l-=s.x,d+=s.x),s.y<=0?g>v&&(c-=s.y,g+=s.y):(c-=s.y,g+=s.y);l<0&&c<0?(h=ht,c=0,l=0):l<0?(h=rt,l=0):c<0&&(h=nt,c=0);break;case nt:if(o){if(s.x<=0&&(d<=m||f>=x)){C=!1;break}l-=s.x,d+=s.x,c=l/o}else s.x<=0?d>m?(l-=s.x,d+=s.x):s.y>=0&&f>=x&&(C=!1):(l-=s.x,d+=s.x),s.y>=0?f=0&&(u>=w||f>=x)){C=!1;break}l+=s.x,c=l/o}else s.x>=0?u=0&&f>=x&&(C=!1):l+=s.x,s.y>=0?f0?h=s.y>0?ht:rt:s.x<0&&(d-=l,h=s.y>0?nt:pt),s.y<0&&(g-=c),this.isCropped||(this.$cropBox.removeClass(Y),this.isCropped=!0,this.isLimited&&this.limitCropBox(!0,!0))}C&&(p.width=l,p.height=c,p.left=d,p.top=g,this.action=h,this.renderCropBox()),this.startX=this.endX,this.startY=this.endY},crop:function(){this.isBuilt&&!this.isDisabled&&(this.isCropped||(this.isCropped=!0,this.limitCropBox(!0,!0),this.options.modal&&this.$dragBox.addClass(T),this.$cropBox.removeClass(Y)),this.setCropBoxData(this.initialCropBox))},reset:function(){this.isBuilt&&!this.isDisabled&&(this.image=t.extend({},this.initialImage),this.canvas=t.extend({},this.initialCanvas),this.cropBox=t.extend({},this.initialCropBox),this.renderCanvas(),this.isCropped&&this.renderCropBox())},clear:function(){this.isCropped&&!this.isDisabled&&(t.extend(this.cropBox,{left:0,top:0,width:0,height:0}),this.isCropped=!1,this.renderCropBox(),this.limitCanvas(!0,!0),this.renderCanvas(),this.$dragBox.removeClass(T),this.$cropBox.addClass(Y))},replace:function(t,i){!this.isDisabled&&t&&(this.isImg&&this.$element.attr("src",t),i?(this.url=t,this.$clone.attr("src",t),this.isBuilt&&this.$preview.find("img").add(this.$clone2).attr("src",t)):(this.isImg&&(this.isReplaced=!0),this.options.data=null,this.load(t)))},enable:function(){this.isBuilt&&(this.isDisabled=!1,this.$cropper.removeClass(H))},disable:function(){this.isBuilt&&(this.isDisabled=!0,this.$cropper.addClass(H))},destroy:function(){var t=this.$element;this.isLoaded?(this.isImg&&this.isReplaced&&t.attr("src",this.originalUrl),this.unbuild(),t.removeClass(Y)):this.isImg?t.off(I,this.start):this.$clone&&this.$clone.remove(),t.removeData(L)},move:function(t,i){var s=this.canvas;this.moveTo(e(t)?t:s.left+vt(t),e(i)?i:s.top+vt(i))},moveTo:function(t,s){var a=this.canvas,o=!1;e(s)&&(s=t),t=vt(t),s=vt(s),this.isBuilt&&!this.isDisabled&&this.options.movable&&(i(t)&&(a.left=t,o=!0),i(s)&&(a.top=s,o=!0),o&&this.renderCanvas(!0))},zoom:function(t,i){var e=this.canvas;t=vt(t),t=t<0?1/(1-t):1+t,this.zoomTo(e.width*t/e.naturalWidth,i)},zoomTo:function(t,i){var e,s,a,o,h,n=this.options,r=this.canvas,p=r.width,l=r.height,c=r.naturalWidth,g=r.naturalHeight;if(t=vt(t),t>=0&&this.isBuilt&&!this.isDisabled&&n.zoomable){if(s=c*t,a=g*t,i&&(e=i.originalEvent),this.trigger(Z,{originalEvent:e,oldRatio:p/c,ratio:s/c}).isDefaultPrevented())return;e?(o=this.$cropper.offset(),h=e.touches?d(e.touches):{pageX:i.pageX||e.pageX||0,pageY:i.pageY||e.pageY||0},r.left-=(s-p)*((h.pageX-o.left-r.left)/p),r.top-=(a-l)*((h.pageY-o.top-r.top)/l)):(r.left-=(s-p)/2,r.top-=(a-l)/2),r.width=s,r.height=a,this.renderCanvas(!0)}},rotate:function(t){this.rotateTo((this.image.rotate||0)+vt(t))},rotateTo:function(t){t=vt(t),i(t)&&this.isBuilt&&!this.isDisabled&&this.options.rotatable&&(this.image.rotate=t%360,this.isRotated=!0,this.renderCanvas(!0))},scale:function(t,s){var a=this.image,o=!1;e(s)&&(s=t),t=vt(t),s=vt(s),this.isBuilt&&!this.isDisabled&&this.options.scalable&&(i(t)&&(a.scaleX=t,o=!0),i(s)&&(a.scaleY=s,o=!0),o&&this.renderImage(!0))},scaleX:function(t){var e=this.image.scaleY;this.scale(t,i(e)?e:1)},scaleY:function(t){var e=this.image.scaleX;this.scale(i(e)?e:1,t)},getData:function(i){var e,s,a=this.options,o=this.image,h=this.canvas,n=this.cropBox;return this.isBuilt&&this.isCropped?(s={x:n.left-h.left,y:n.top-h.top,width:n.width,height:n.height},e=o.width/o.naturalWidth,t.each(s,function(t,a){a/=e,s[t]=i?Dt(a):a})):s={x:0,y:0,width:0,height:0},a.rotatable&&(s.rotate=o.rotate||0),a.scalable&&(s.scaleX=o.scaleX||1,s.scaleY=o.scaleY||1),s},setData:function(e){var s,a,o,h=this.options,n=this.image,r=this.canvas,p={};t.isFunction(e)&&(e=e.call(this.element)),this.isBuilt&&!this.isDisabled&&t.isPlainObject(e)&&(h.rotatable&&i(e.rotate)&&e.rotate!==n.rotate&&(n.rotate=e.rotate,this.isRotated=s=!0),h.scalable&&(i(e.scaleX)&&e.scaleX!==n.scaleX&&(n.scaleX=e.scaleX,a=!0),i(e.scaleY)&&e.scaleY!==n.scaleY&&(n.scaleY=e.scaleY,a=!0)),s?this.renderCanvas():a&&this.renderImage(),o=n.width/n.naturalWidth,i(e.x)&&(p.left=e.x*o+r.left),i(e.y)&&(p.top=e.y*o+r.top),i(e.width)&&(p.width=e.width*o),i(e.height)&&(p.height=e.height*o),this.setCropBoxData(p))},getContainerData:function(){return this.isBuilt?this.container:{}},getImageData:function(){return this.isLoaded?this.image:{}},getCanvasData:function(){var i=this.canvas,e={};return this.isBuilt&&t.each(["left","top","width","height","naturalWidth","naturalHeight"],function(t,s){e[s]=i[s]}),e},setCanvasData:function(e){var s=this.canvas,a=s.aspectRatio;t.isFunction(e)&&(e=e.call(this.$element)),this.isBuilt&&!this.isDisabled&&t.isPlainObject(e)&&(i(e.left)&&(s.left=e.left),i(e.top)&&(s.top=e.top),i(e.width)?(s.width=e.width,s.height=e.width/a):i(e.height)&&(s.height=e.height,s.width=e.height*a),this.renderCanvas(!0))},getCropBoxData:function(){var t,i=this.cropBox;return this.isBuilt&&this.isCropped&&(t={left:i.left,top:i.top,width:i.width,height:i.height}),t||{}},setCropBoxData:function(e){var s,a,o=this.cropBox,h=this.options.aspectRatio;t.isFunction(e)&&(e=e.call(this.$element)),this.isBuilt&&this.isCropped&&!this.isDisabled&&t.isPlainObject(e)&&(i(e.left)&&(o.left=e.left),i(e.top)&&(o.top=e.top),i(e.width)&&(s=!0,o.width=e.width),i(e.height)&&(a=!0,o.height=e.height),h&&(s?o.height=o.width/h:a&&(o.width=o.height*h)),this.renderCropBox())},getCroppedCanvas:function(i){var e,s,a,o,h,n,r,p,l,d,g;if(this.isBuilt&&ft)return this.isCropped?(t.isPlainObject(i)||(i={}),g=this.getData(),e=g.width,s=g.height,p=e/s,t.isPlainObject(i)&&(h=i.width,n=i.height,h?(n=h/p,r=h/e):n&&(h=n*p,r=n/s)),a=$t(h||e),o=$t(n||s),l=t("")[0],l.width=a,l.height=o,d=l.getContext("2d"),i.fillColor&&(d.fillStyle=i.fillColor,d.fillRect(0,0,a,o)),d.drawImage.apply(d,function(){var t,i,a,o,h,n,p=c(this.$clone[0],this.image),l=p.width,d=p.height,u=this.canvas,f=[p],m=g.x+u.naturalWidth*(Ct(g.scaleX||1)-1)/2,v=g.y+u.naturalHeight*(Ct(g.scaleY||1)-1)/2;return m<=-e||m>l?m=t=a=h=0:m<=0?(a=-m,m=0,t=h=wt(l,e+m)):m<=l&&(a=0,t=h=wt(e,l-m)),t<=0||v<=-s||v>d?v=i=o=n=0:v<=0?(o=-v,v=0,i=n=wt(d,s+v)):v<=d&&(o=0,i=n=wt(s,d-v)),f.push($t(m),$t(v),$t(t),$t(i)),r&&(a*=r,o*=r,h*=r,n*=r),h>0&&n>0&&f.push($t(a),$t(o),$t(h),$t(n)),f}.call(this)),l):c(this.$clone[0],this.image)},setAspectRatio:function(t){var i=this.options;this.isDisabled||e(t)||(i.aspectRatio=xt(0,t)||NaN,this.isBuilt&&(this.initCropBox(),this.isCropped&&this.renderCropBox()))},setDragMode:function(t){var i,e,s=this.options;this.isLoaded&&!this.isDisabled&&(i=t===ct,e=s.movable&&t===dt,t=i||e?t:ut,this.$dragBox.data(it,t).toggleClass(W,i).toggleClass(M,e),s.cropBoxMovable||this.$face.data(it,t).toggleClass(W,i).toggleClass(M,e))}},v.DEFAULTS={viewMode:0,dragMode:"crop",aspectRatio:NaN,data:null,preview:"",responsive:!0,restore:!0,checkCrossOrigin:!0,checkOrientation:!0,modal:!0,guides:!0,center:!0,highlight:!0,background:!0,autoCrop:!0,autoCropArea:.8,movable:!0,rotatable:!0,scalable:!0,zoomable:!0,zoomOnTouch:!0,zoomOnWheel:!0,wheelZoomRatio:.1,cropBoxMovable:!0,cropBoxResizable:!0,toggleDragModeOnDblclick:!0,minCanvasWidth:0,minCanvasHeight:0,minCropBoxWidth:0,minCropBoxHeight:0,minContainerWidth:200,minContainerHeight:100,build:null,built:null,cropstart:null,cropmove:null,cropend:null,crop:null,zoom:null},v.setDefaults=function(i){t.extend(v.DEFAULTS,i)},v.TEMPLATE='
',v.other=t.fn.cropper,t.fn.cropper=function(i){var a,o=s(arguments,1);return this.each(function(){var e,s,h=t(this),n=h.data(L);if(!n){if(/destroy/.test(i))return;e=t.extend({},h.data(),t.isPlainObject(i)&&i),h.data(L,n=new v(this,e))}"string"==typeof i&&t.isFunction(s=n[i])&&(a=s.apply(n,o))}),e(a)?this:a},t.fn.cropper.Constructor=v,t.fn.cropper.setDefaults=v.setDefaults,t.fn.cropper.noConflict=function(){return t.fn.cropper=v.other,this}}); \ No newline at end of file diff --git a/docs/v1.0.0/css/cropper.css b/docs/v3.1.6/css/cropper.css similarity index 75% rename from docs/v1.0.0/css/cropper.css rename to docs/v3.1.6/css/cropper.css index 6df89f1f..b7ce603c 100644 --- a/docs/v1.0.0/css/cropper.css +++ b/docs/v3.1.6/css/cropper.css @@ -1,273 +1,288 @@ /*! - * Cropper v1.0.0 + * Cropper v3.1.6 * https://github.com/fengyuanchen/cropper * - * Copyright (c) 2014-2015 Fengyuan Chen and contributors + * Copyright (c) 2014-2018 Chen Fengyuan * Released under the MIT license * - * Date: 2015-10-10T02:10:06.999Z + * Date: 2018-03-01T13:33:39.581Z */ -.cropper-container { - position: relative; - overflow: hidden; + + .cropper-container { + direction: ltr; font-size: 0; line-height: 0; + position: relative; -ms-touch-action: none; - touch-action: none; + touch-action: none; -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - - direction: ltr !important; - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } -.cropper-container img { + +.cropper-container img {/*Avoid margin top issue (Occur only when margin-top <= -height) + */ display: block; - width: 100%; - min-width: 0 !important; + height: 100%; + image-orientation: 0deg; + max-height: none !important; max-width: none !important; - height: 100%; min-height: 0 !important; - max-height: none !important; - - image-orientation: 0deg !important; + min-width: 0 !important; + width: 100%; } +.cropper-wrap-box, .cropper-canvas, .cropper-drag-box, .cropper-crop-box, .cropper-modal { - position: absolute; - top: 0; - right: 0; bottom: 0; left: 0; + position: absolute; + right: 0; + top: 0; +} + +.cropper-wrap-box, +.cropper-canvas { + overflow: hidden; } .cropper-drag-box { background-color: #fff; - filter: alpha(opacity=0); opacity: 0; } .cropper-modal { background-color: #000; - filter: alpha(opacity=50); opacity: .5; } .cropper-view-box { display: block; - width: 100%; - height: 100%; - overflow: hidden; + height: 100%; + outline-color: rgba(51, 153, 255, 0.75); outline: 1px solid #39f; - outline-color: rgba(51, 153, 255, .75); + overflow: hidden; + width: 100%; } .cropper-dashed { - position: absolute; - display: block; - filter: alpha(opacity=50); border: 0 dashed #eee; + display: block; opacity: .5; + position: absolute; } + .cropper-dashed.dashed-h { - top: 33.33333%; + border-bottom-width: 1px; + border-top-width: 1px; + height: 33.33333%; left: 0; + top: 33.33333%; width: 100%; - height: 33.33333%; - border-top-width: 1px; - border-bottom-width: 1px; } + .cropper-dashed.dashed-v { - top: 0; + border-left-width: 1px; + border-right-width: 1px; + height: 100%; left: 33.33333%; + top: 0; width: 33.33333%; - height: 100%; - border-right-width: 1px; - border-left-width: 1px; } .cropper-center { - position: absolute; - top: 50%; - left: 50%; display: block; - width: 0; height: 0; - filter: alpha(opacity=75); + left: 50%; opacity: .75; + position: absolute; + top: 50%; + width: 0; } + .cropper-center:before, - .cropper-center:after { - position: absolute; - display: block; - content: " "; +.cropper-center:after { background-color: #eee; + content: ' '; + display: block; + position: absolute; } + .cropper-center:before { - top: 0; + height: 1px; left: -3px; + top: 0; width: 7px; - height: 1px; } + .cropper-center:after { - top: -3px; + height: 7px; left: 0; + top: -3px; width: 1px; - height: 7px; } .cropper-face, .cropper-line, .cropper-point { - position: absolute; display: block; - width: 100%; height: 100%; - filter: alpha(opacity=10); opacity: .1; + position: absolute; + width: 100%; } .cropper-face { - top: 0; - left: 0; background-color: #fff; + left: 0; + top: 0; } .cropper-line { background-color: #39f; } + .cropper-line.line-e { - top: 0; + cursor: ew-resize; right: -3px; + top: 0; width: 5px; - cursor: e-resize; } + .cropper-line.line-n { - top: -3px; - left: 0; + cursor: ns-resize; height: 5px; - cursor: n-resize; + left: 0; + top: -3px; } + .cropper-line.line-w { - top: 0; + cursor: ew-resize; left: -3px; + top: 0; width: 5px; - cursor: w-resize; } + .cropper-line.line-s { bottom: -3px; - left: 0; + cursor: ns-resize; height: 5px; - cursor: s-resize; + left: 0; } .cropper-point { - width: 5px; - height: 5px; background-color: #39f; - filter: alpha(opacity=75); + height: 5px; opacity: .75; + width: 5px; } + .cropper-point.point-e { - top: 50%; - right: -3px; + cursor: ew-resize; margin-top: -3px; - cursor: e-resize; + right: -3px; + top: 50%; } + .cropper-point.point-n { - top: -3px; + cursor: ns-resize; left: 50%; margin-left: -3px; - cursor: n-resize; + top: -3px; } + .cropper-point.point-w { - top: 50%; + cursor: ew-resize; left: -3px; margin-top: -3px; - cursor: w-resize; + top: 50%; } + .cropper-point.point-s { bottom: -3px; + cursor: s-resize; left: 50%; margin-left: -3px; - cursor: s-resize; } + .cropper-point.point-ne { - top: -3px; + cursor: nesw-resize; right: -3px; - cursor: ne-resize; + top: -3px; } + .cropper-point.point-nw { - top: -3px; + cursor: nwse-resize; left: -3px; - cursor: nw-resize; + top: -3px; } + .cropper-point.point-sw { bottom: -3px; + cursor: nesw-resize; left: -3px; - cursor: sw-resize; } + .cropper-point.point-se { - right: -3px; bottom: -3px; - width: 20px; + cursor: nwse-resize; height: 20px; - cursor: se-resize; - filter: alpha(opacity=100); opacity: 1; + right: -3px; + width: 20px; } -.cropper-point.point-se:before { - position: absolute; - right: -50%; - bottom: -50%; - display: block; - width: 200%; - height: 200%; - content: " "; - background-color: #39f; - filter: alpha(opacity=0); - opacity: 0; -} + @media (min-width: 768px) { .cropper-point.point-se { - width: 15px; height: 15px; + width: 15px; } } + @media (min-width: 992px) { .cropper-point.point-se { - width: 10px; height: 10px; + width: 10px; } } + @media (min-width: 1200px) { .cropper-point.point-se { - width: 5px; height: 5px; - filter: alpha(opacity=75); opacity: .75; + width: 5px; } } -.cropper-bg { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC"); +.cropper-point.point-se:before { + background-color: #39f; + bottom: -50%; + content: ' '; + display: block; + height: 200%; + opacity: 0; + position: absolute; + right: -50%; + width: 200%; } .cropper-invisible { - filter: alpha(opacity=0); opacity: 0; } +.cropper-bg { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC'); +} + .cropper-hide { - position: absolute; display: block; - width: 0; height: 0; + position: absolute; + width: 0; } .cropper-hidden { diff --git a/docs/v3.1.6/css/main.css b/docs/v3.1.6/css/main.css new file mode 100644 index 00000000..800a1cdd --- /dev/null +++ b/docs/v3.1.6/css/main.css @@ -0,0 +1,253 @@ +.btn { + padding-left: .75rem; + padding-right: .75rem; +} + +label.btn { + margin-bottom: 0; +} + +.d-flex > .btn { + flex: 1; +} + +.carbonads { + border-radius: .25rem; + border: 1px solid #ccc; + font-size: .875rem; + overflow: hidden; + padding: 1rem; +} + +.carbon-wrap { + overflow: hidden; +} + +.carbon-img { + clear: left; + display: block; + float: left; +} + +.carbon-text, +.carbon-poweredby { + display: block; + margin-left: 140px; +} + +.carbon-text, +.carbon-text:hover, +.carbon-text:focus { + color: #fff; + text-decoration: none; +} + +.carbon-poweredby, +.carbon-poweredby:hover, +.carbon-poweredby:focus { + color: #ddd; + text-decoration: none; +} + +@media (min-width: 768px) { + .carbonads { + float: right; + margin-bottom: -1rem; + margin-top: -1rem; + max-width: 360px; + } +} + +.footer { + font-size: .875rem; + overflow: hidden; +} + +.heart { + color: #ddd; + display: block; + height: 2rem; + line-height: 2rem; + margin-bottom: 0; + margin-top: 1rem; + position: relative; + text-align: center; + width: 100%; +} + +.heart:hover { + color: #ff4136; +} + +.heart::before { + border-top: 1px solid #eee; + content: " "; + display: block; + height: 0; + left: 0; + position: absolute; + right: 0; + top: 50%; +} + +.heart::after { + background-color: #fff; + content: "♥"; + padding-left: .5rem; + padding-right: .5rem; + position: relative; + z-index: 1; +} + +.img-container, +.img-preview { + background-color: #f7f7f7; + text-align: center; + width: 100%; +} + +.img-container { + margin-bottom: 1rem; + max-height: 497px; + min-height: 200px; +} + +@media (min-width: 768px) { + .img-container { + min-height: 497px; + } +} + +.img-container > img { + max-width: 100%; +} + +.docs-preview { + margin-right: -1rem; +} + +.img-preview { + float: left; + margin-bottom: .5rem; + margin-right: .5rem; + overflow: hidden; +} + +.img-preview > img { + max-width: 100%; +} + +.preview-lg { + height: 9rem; + width: 16rem; +} + +.preview-md { + height: 4.5rem; + width: 8rem; +} + +.preview-sm { + height: 2.25rem; + width: 4rem; +} + +.preview-xs { + height: 1.125rem; + margin-right: 0; + width: 2rem; +} + +.docs-data > .input-group { + margin-bottom: .5rem; +} + +.docs-data .input-group-prepend .input-group-text { + min-width: 4rem; +} + +.docs-data .input-group-append .input-group-text { + min-width: 3rem; +} + +.docs-buttons > .btn, +.docs-buttons > .btn-group, +.docs-buttons > .form-control { + margin-bottom: .5rem; + margin-right: .25rem; +} + +.docs-toggles > .btn, +.docs-toggles > .btn-group, +.docs-toggles > .dropdown { + margin-bottom: .5rem; +} + +.docs-tooltip { + display: block; + margin: -.5rem -.75rem; + padding: .5rem .75rem; +} + +.docs-tooltip > .icon { + margin: 0 -.25rem; + vertical-align: top; +} + +.tooltip-inner { + white-space: normal; +} + +.btn-upload .tooltip-inner, +.btn-toggle .tooltip-inner { + white-space: nowrap; +} + +.btn-toggle { + padding: .5rem; +} + +.btn-toggle > .docs-tooltip { + margin: -.5rem; + padding: .5rem; +} + +@media (max-width: 400px) { + .btn-group-crop { + margin-right: -1rem!important; + } + + .btn-group-crop > .btn { + padding-left: .5rem; + padding-right: .5rem; + } + + .btn-group-crop .docs-tooltip { + margin-left: -.5rem; + margin-right: -.5rem; + padding-left: .5rem; + padding-right: .5rem; + } +} + +.docs-options .dropdown-menu { + width: 100%; +} + +.docs-options .dropdown-menu > li { + font-size: .875rem; + padding: .125rem 1rem; +} + +.docs-options .dropdown-menu .form-check-label { + display: block; +} + +.docs-cropped .modal-body { + text-align: center; +} + +.docs-cropped .modal-body > img, +.docs-cropped .modal-body > canvas { + max-width: 100%; +} diff --git a/docs/v2.3.4/img/picture.jpg b/docs/v3.1.6/images/picture.jpg similarity index 100% rename from docs/v2.3.4/img/picture.jpg rename to docs/v3.1.6/images/picture.jpg diff --git a/docs/v3.1.6/index.html b/docs/v3.1.6/index.html new file mode 100644 index 00000000..6bf0a76d --- /dev/null +++ b/docs/v3.1.6/index.html @@ -0,0 +1,567 @@ + + + + + + + + + + Cropper + + + + + + + + + + + + +
+
+

Cropper v3.1.6

+

A simple jQuery image cropping plugin.

+
+
+ + +
+
+
+ +
+ Picture +
+
+
+ +
+
+
+
+
+
+ + +
+
+ + + + + + px + +
+
+ + + + + + px + +
+
+ + + + + + px + +
+
+ + + + + + px + +
+
+ + + + + + deg + +
+
+ + + + +
+
+ + + + +
+
+
+
+
+
+ +
+ + +
+ +
+ + +
+ +
+ + + + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + +
+ +
+ + + + +
+ + + + Cropper.js + +
+
+
+ + + + + + + + + + + + diff --git a/docs/v3.1.6/js/cropper.js b/docs/v3.1.6/js/cropper.js new file mode 100644 index 00000000..3757403d --- /dev/null +++ b/docs/v3.1.6/js/cropper.js @@ -0,0 +1,3260 @@ +/*! + * Cropper v3.1.6 + * https://github.com/fengyuanchen/cropper + * + * Copyright (c) 2014-2018 Chen Fengyuan + * Released under the MIT license + * + * Date: 2018-03-01T13:33:48.179Z + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) : + typeof define === 'function' && define.amd ? define(['jquery'], factory) : + (factory(global.jQuery)); +}(this, (function ($) { 'use strict'; + +$ = $ && $.hasOwnProperty('default') ? $['default'] : $; + +var WINDOW = typeof window !== 'undefined' ? window : {}; +var NAMESPACE = 'cropper'; + +// Actions +var ACTION_ALL = 'all'; +var ACTION_CROP = 'crop'; +var ACTION_MOVE = 'move'; +var ACTION_ZOOM = 'zoom'; +var ACTION_EAST = 'e'; +var ACTION_WEST = 'w'; +var ACTION_SOUTH = 's'; +var ACTION_NORTH = 'n'; +var ACTION_NORTH_EAST = 'ne'; +var ACTION_NORTH_WEST = 'nw'; +var ACTION_SOUTH_EAST = 'se'; +var ACTION_SOUTH_WEST = 'sw'; + +// Classes +var CLASS_CROP = NAMESPACE + '-crop'; +var CLASS_DISABLED = NAMESPACE + '-disabled'; +var CLASS_HIDDEN = NAMESPACE + '-hidden'; +var CLASS_HIDE = NAMESPACE + '-hide'; +var CLASS_INVISIBLE = NAMESPACE + '-invisible'; +var CLASS_MODAL = NAMESPACE + '-modal'; +var CLASS_MOVE = NAMESPACE + '-move'; + +// Data keys +var DATA_ACTION = 'action'; +var DATA_PREVIEW = 'preview'; + +// Drag modes +var DRAG_MODE_CROP = 'crop'; +var DRAG_MODE_MOVE = 'move'; +var DRAG_MODE_NONE = 'none'; + +// Events +var EVENT_CROP = 'crop'; +var EVENT_CROP_END = 'cropend'; +var EVENT_CROP_MOVE = 'cropmove'; +var EVENT_CROP_START = 'cropstart'; +var EVENT_DBLCLICK = 'dblclick'; +var EVENT_ERROR = 'error'; +var EVENT_LOAD = 'load'; +var EVENT_POINTER_DOWN = WINDOW.PointerEvent ? 'pointerdown' : 'touchstart mousedown'; +var EVENT_POINTER_MOVE = WINDOW.PointerEvent ? 'pointermove' : 'touchmove mousemove'; +var EVENT_POINTER_UP = WINDOW.PointerEvent ? 'pointerup pointercancel' : 'touchend touchcancel mouseup'; +var EVENT_READY = 'ready'; +var EVENT_RESIZE = 'resize'; +var EVENT_WHEEL = 'wheel mousewheel DOMMouseScroll'; +var EVENT_ZOOM = 'zoom'; + +// RegExps +var REGEXP_ACTIONS = /^(e|w|s|n|se|sw|ne|nw|all|crop|move|zoom)$/; +var REGEXP_DATA_URL = /^data:/; +var REGEXP_DATA_URL_JPEG = /^data:image\/jpeg;base64,/; +var REGEXP_TAG_NAME = /^(img|canvas)$/i; + +var DEFAULTS = { + // Define the view mode of the cropper + viewMode: 0, // 0, 1, 2, 3 + + // Define the dragging mode of the cropper + dragMode: DRAG_MODE_CROP, // 'crop', 'move' or 'none' + + // Define the aspect ratio of the crop box + aspectRatio: NaN, + + // An object with the previous cropping result data + data: null, + + // A selector for adding extra containers to preview + preview: '', + + // Re-render the cropper when resize the window + responsive: true, + + // Restore the cropped area after resize the window + restore: true, + + // Check if the current image is a cross-origin image + checkCrossOrigin: true, + + // Check the current image's Exif Orientation information + checkOrientation: true, + + // Show the black modal + modal: true, + + // Show the dashed lines for guiding + guides: true, + + // Show the center indicator for guiding + center: true, + + // Show the white modal to highlight the crop box + highlight: true, + + // Show the grid background + background: true, + + // Enable to crop the image automatically when initialize + autoCrop: true, + + // Define the percentage of automatic cropping area when initializes + autoCropArea: 0.8, + + // Enable to move the image + movable: true, + + // Enable to rotate the image + rotatable: true, + + // Enable to scale the image + scalable: true, + + // Enable to zoom the image + zoomable: true, + + // Enable to zoom the image by dragging touch + zoomOnTouch: true, + + // Enable to zoom the image by wheeling mouse + zoomOnWheel: true, + + // Define zoom ratio when zoom the image by wheeling mouse + wheelZoomRatio: 0.1, + + // Enable to move the crop box + cropBoxMovable: true, + + // Enable to resize the crop box + cropBoxResizable: true, + + // Toggle drag mode between "crop" and "move" when click twice on the cropper + toggleDragModeOnDblclick: true, + + // Size limitation + minCanvasWidth: 0, + minCanvasHeight: 0, + minCropBoxWidth: 0, + minCropBoxHeight: 0, + minContainerWidth: 200, + minContainerHeight: 100, + + // Shortcuts of events + ready: null, + cropstart: null, + cropmove: null, + cropend: null, + crop: null, + zoom: null +}; + +var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
'; + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + +var toConsumableArray = function (arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; + + return arr2; + } else { + return Array.from(arr); + } +}; + +/** + * Check if the given value is a string. + * @param {*} value - The value to check. + * @returns {boolean} Returns `true` if the given value is a string, else `false`. + */ +function isString(value) { + return typeof value === 'string'; +} + +/** + * Check if the given value is not a number. + */ +var isNaN = Number.isNaN || WINDOW.isNaN; + +/** + * Check if the given value is a number. + * @param {*} value - The value to check. + * @returns {boolean} Returns `true` if the given value is a number, else `false`. + */ +function isNumber(value) { + return typeof value === 'number' && !isNaN(value); +} + +/** + * Check if the given value is undefined. + * @param {*} value - The value to check. + * @returns {boolean} Returns `true` if the given value is undefined, else `false`. + */ +function isUndefined(value) { + return typeof value === 'undefined'; +} + +/** + * Takes a function and returns a new one that will always have a particular context. + * Custom proxy to avoid jQuery's guid. + * @param {Function} fn - The target function. + * @param {Object} context - The new context for the function. + * @returns {Function} The new function. + */ +function proxy(fn, context) { + for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + args[_key - 2] = arguments[_key]; + } + + return function () { + for (var _len2 = arguments.length, args2 = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args2[_key2] = arguments[_key2]; + } + + return fn.apply(context, args.concat(args2)); + }; +} + +/** + * Get the own enumerable properties of a given object. + * @param {Object} obj - The target object. + * @returns {Array} All the own enumerable properties of the given object. + */ +var objectKeys = Object.keys || function objectKeys(obj) { + var keys = []; + + $.each(obj, function (key) { + keys.push(key); + }); + + return keys; +}; + +var REGEXP_DECIMALS = /\.\d*(?:0|9){12}\d*$/i; + +/** + * Normalize decimal number. + * Check out {@link http://0.30000000000000004.com/ } + * @param {number} value - The value to normalize. + * @param {number} [times=100000000000] - The times for normalizing. + * @returns {number} Returns the normalized number. + */ +function normalizeDecimalNumber(value) { + var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000; + + return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value; +} + +var location = WINDOW.location; + +var REGEXP_ORIGINS = /^(https?:)\/\/([^:/?#]+):?(\d*)/i; + +/** + * Check if the given URL is a cross origin URL. + * @param {string} url - The target URL. + * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`. + */ +function isCrossOriginURL(url) { + var parts = url.match(REGEXP_ORIGINS); + + return parts && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port); +} + +/** + * Add timestamp to the given URL. + * @param {string} url - The target URL. + * @returns {string} The result URL. + */ +function addTimestamp(url) { + var timestamp = 'timestamp=' + new Date().getTime(); + + return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp; +} + +/** + * Get transform values base on the given object. + * @param {Object} obj - The target object. + * @returns {string} A string contains transform values. + */ +function getTransformValues(_ref) { + var rotate = _ref.rotate, + scaleX = _ref.scaleX, + scaleY = _ref.scaleY, + translateX = _ref.translateX, + translateY = _ref.translateY; + + var values = []; + + if (isNumber(translateX) && translateX !== 0) { + values.push('translateX(' + translateX + 'px)'); + } + + if (isNumber(translateY) && translateY !== 0) { + values.push('translateY(' + translateY + 'px)'); + } + + // Rotate should come first before scale to match orientation transform + if (isNumber(rotate) && rotate !== 0) { + values.push('rotate(' + rotate + 'deg)'); + } + + if (isNumber(scaleX) && scaleX !== 1) { + values.push('scaleX(' + scaleX + ')'); + } + + if (isNumber(scaleY) && scaleY !== 1) { + values.push('scaleY(' + scaleY + ')'); + } + + return values.length ? values.join(' ') : 'none'; +} + +var navigator = WINDOW.navigator; + +var IS_SAFARI_OR_UIWEBVIEW = navigator && /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(navigator.userAgent); + +/** + * Get an image's natural sizes. + * @param {string} image - The target image. + * @param {Function} callback - The callback function. + */ +function getImageNaturalSizes(image, callback) { + // Modern browsers (except Safari) + if (image.naturalWidth && !IS_SAFARI_OR_UIWEBVIEW) { + callback(image.naturalWidth, image.naturalHeight); + return; + } + + var newImage = document.createElement('img'); + + newImage.onload = function () { + callback(newImage.width, newImage.height); + }; + + newImage.src = image.src; +} + +/** + * Get the max ratio of a group of pointers. + * @param {string} pointers - The target pointers. + * @returns {number} The result ratio. + */ +function getMaxZoomRatio(pointers) { + var pointers2 = $.extend({}, pointers); + var ratios = []; + + $.each(pointers, function (pointerId, pointer) { + delete pointers2[pointerId]; + + $.each(pointers2, function (pointerId2, pointer2) { + var x1 = Math.abs(pointer.startX - pointer2.startX); + var y1 = Math.abs(pointer.startY - pointer2.startY); + var x2 = Math.abs(pointer.endX - pointer2.endX); + var y2 = Math.abs(pointer.endY - pointer2.endY); + var z1 = Math.sqrt(x1 * x1 + y1 * y1); + var z2 = Math.sqrt(x2 * x2 + y2 * y2); + var ratio = (z2 - z1) / z1; + + ratios.push(ratio); + }); + }); + + ratios.sort(function (a, b) { + return Math.abs(a) < Math.abs(b); + }); + + return ratios[0]; +} + +/** + * Get a pointer from an event object. + * @param {Object} event - The target event object. + * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not. + * @returns {Object} The result pointer contains start and/or end point coordinates. + */ +function getPointer(_ref2, endOnly) { + var pageX = _ref2.pageX, + pageY = _ref2.pageY; + + var end = { + endX: pageX, + endY: pageY + }; + + if (endOnly) { + return end; + } + + return $.extend({ + startX: pageX, + startY: pageY + }, end); +} + +/** + * Get the center point coordinate of a group of pointers. + * @param {Object} pointers - The target pointers. + * @returns {Object} The center point coordinate. + */ +function getPointersCenter(pointers) { + var pageX = 0; + var pageY = 0; + var count = 0; + + $.each(pointers, function (pointerId, _ref3) { + var startX = _ref3.startX, + startY = _ref3.startY; + + pageX += startX; + pageY += startY; + count += 1; + }); + + pageX /= count; + pageY /= count; + + return { + pageX: pageX, + pageY: pageY + }; +} + +/** + * Check if the given value is a finite number. + */ +var isFinite = Number.isFinite || WINDOW.isFinite; + +/** + * Get the max sizes in a rectangle under the given aspect ratio. + * @param {Object} data - The original sizes. + * @param {string} [type='contain'] - The adjust type. + * @returns {Object} The result sizes. + */ +function getAdjustedSizes(_ref4) // or 'cover' +{ + var aspectRatio = _ref4.aspectRatio, + height = _ref4.height, + width = _ref4.width; + var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain'; + + var isValidNumber = function isValidNumber(value) { + return isFinite(value) && value > 0; + }; + + if (isValidNumber(width) && isValidNumber(height)) { + var adjustedWidth = height * aspectRatio; + + if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) { + height = width / aspectRatio; + } else { + width = height * aspectRatio; + } + } else if (isValidNumber(width)) { + height = width / aspectRatio; + } else if (isValidNumber(height)) { + width = height * aspectRatio; + } + + return { + width: width, + height: height + }; +} + +/** + * Get the new sizes of a rectangle after rotated. + * @param {Object} data - The original sizes. + * @returns {Object} The result sizes. + */ +function getRotatedSizes(_ref5) { + var width = _ref5.width, + height = _ref5.height, + degree = _ref5.degree; + + degree = Math.abs(degree) % 180; + + if (degree === 90) { + return { + width: height, + height: width + }; + } + + var arc = degree % 90 * Math.PI / 180; + var sinArc = Math.sin(arc); + var cosArc = Math.cos(arc); + var newWidth = width * cosArc + height * sinArc; + var newHeight = width * sinArc + height * cosArc; + + return degree > 90 ? { + width: newHeight, + height: newWidth + } : { + width: newWidth, + height: newHeight + }; +} + +/** + * Get a canvas which drew the given image. + * @param {HTMLImageElement} image - The image for drawing. + * @param {Object} imageData - The image data. + * @param {Object} canvasData - The canvas data. + * @param {Object} options - The options. + * @returns {HTMLCanvasElement} The result canvas. + */ +function getSourceCanvas(image, _ref6, _ref7, _ref8) { + var _ref6$rotate = _ref6.rotate, + rotate = _ref6$rotate === undefined ? 0 : _ref6$rotate, + _ref6$scaleX = _ref6.scaleX, + scaleX = _ref6$scaleX === undefined ? 1 : _ref6$scaleX, + _ref6$scaleY = _ref6.scaleY, + scaleY = _ref6$scaleY === undefined ? 1 : _ref6$scaleY; + var aspectRatio = _ref7.aspectRatio, + naturalWidth = _ref7.naturalWidth, + naturalHeight = _ref7.naturalHeight; + var _ref8$fillColor = _ref8.fillColor, + fillColor = _ref8$fillColor === undefined ? 'transparent' : _ref8$fillColor, + _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled, + imageSmoothingEnabled = _ref8$imageSmoothingE === undefined ? true : _ref8$imageSmoothingE, + _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality, + imageSmoothingQuality = _ref8$imageSmoothingQ === undefined ? 'low' : _ref8$imageSmoothingQ, + _ref8$maxWidth = _ref8.maxWidth, + maxWidth = _ref8$maxWidth === undefined ? Infinity : _ref8$maxWidth, + _ref8$maxHeight = _ref8.maxHeight, + maxHeight = _ref8$maxHeight === undefined ? Infinity : _ref8$maxHeight, + _ref8$minWidth = _ref8.minWidth, + minWidth = _ref8$minWidth === undefined ? 0 : _ref8$minWidth, + _ref8$minHeight = _ref8.minHeight, + minHeight = _ref8$minHeight === undefined ? 0 : _ref8$minHeight; + + var canvas = document.createElement('canvas'); + var context = canvas.getContext('2d'); + var maxSizes = getAdjustedSizes({ + aspectRatio: aspectRatio, + width: maxWidth, + height: maxHeight + }); + var minSizes = getAdjustedSizes({ + aspectRatio: aspectRatio, + width: minWidth, + height: minHeight + }, 'cover'); + var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth)); + var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight)); + var params = [-width / 2, -height / 2, width, height]; + + canvas.width = normalizeDecimalNumber(width); + canvas.height = normalizeDecimalNumber(height); + context.fillStyle = fillColor; + context.fillRect(0, 0, width, height); + context.save(); + context.translate(width / 2, height / 2); + context.rotate(rotate * Math.PI / 180); + context.scale(scaleX, scaleY); + context.imageSmoothingEnabled = imageSmoothingEnabled; + context.imageSmoothingQuality = imageSmoothingQuality; + context.drawImage.apply(context, [image].concat(toConsumableArray($.map(params, function (param) { + return Math.floor(normalizeDecimalNumber(param)); + })))); + context.restore(); + return canvas; +} + +var fromCharCode = String.fromCharCode; + +/** + * Get string from char code in data view. + * @param {DataView} dataView - The data view for read. + * @param {number} start - The start index. + * @param {number} length - The read length. + * @returns {string} The read result. + */ + +function getStringFromCharCode(dataView, start, length) { + var str = ''; + var i = void 0; + + length += start; + + for (i = start; i < length; i += 1) { + str += fromCharCode(dataView.getUint8(i)); + } + + return str; +} + +var REGEXP_DATA_URL_HEAD = /^data:.*,/; + +/** + * Transform Data URL to array buffer. + * @param {string} dataURL - The Data URL to transform. + * @returns {ArrayBuffer} The result array buffer. + */ +function dataURLToArrayBuffer(dataURL) { + var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, ''); + var binary = atob(base64); + var arrayBuffer = new ArrayBuffer(binary.length); + var uint8 = new Uint8Array(arrayBuffer); + + $.each(uint8, function (i) { + uint8[i] = binary.charCodeAt(i); + }); + + return arrayBuffer; +} + +/** + * Transform array buffer to Data URL. + * @param {ArrayBuffer} arrayBuffer - The array buffer to transform. + * @param {string} mimeType - The mime type of the Data URL. + * @returns {string} The result Data URL. + */ +function arrayBufferToDataURL(arrayBuffer, mimeType) { + var uint8 = new Uint8Array(arrayBuffer); + var data = ''; + + // TypedArray.prototype.forEach is not supported in some browsers. + $.each(uint8, function (i, value) { + data += fromCharCode(value); + }); + + return 'data:' + mimeType + ';base64,' + btoa(data); +} + +/** + * Get orientation value from given array buffer. + * @param {ArrayBuffer} arrayBuffer - The array buffer to read. + * @returns {number} The read orientation value. + */ +function getOrientation(arrayBuffer) { + var dataView = new DataView(arrayBuffer); + var orientation = void 0; + var littleEndian = void 0; + var app1Start = void 0; + var ifdStart = void 0; + + // Only handle JPEG image (start by 0xFFD8) + if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) { + var length = dataView.byteLength; + var offset = 2; + + while (offset < length) { + if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) { + app1Start = offset; + break; + } + + offset += 1; + } + } + + if (app1Start) { + var exifIDCode = app1Start + 4; + var tiffOffset = app1Start + 10; + + if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') { + var endianness = dataView.getUint16(tiffOffset); + + littleEndian = endianness === 0x4949; + + if (littleEndian || endianness === 0x4D4D /* bigEndian */) { + if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) { + var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian); + + if (firstIFDOffset >= 0x00000008) { + ifdStart = tiffOffset + firstIFDOffset; + } + } + } + } + } + + if (ifdStart) { + var _length = dataView.getUint16(ifdStart, littleEndian); + var _offset = void 0; + var i = void 0; + + for (i = 0; i < _length; i += 1) { + _offset = ifdStart + i * 12 + 2; + + if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) { + // 8 is the offset of the current tag's value + _offset += 8; + + // Get the original orientation value + orientation = dataView.getUint16(_offset, littleEndian); + + // Override the orientation with its default value + dataView.setUint16(_offset, 1, littleEndian); + break; + } + } + } + + return orientation; +} + +/** + * Parse Exif Orientation value. + * @param {number} orientation - The orientation to parse. + * @returns {Object} The parsed result. + */ +function parseOrientation(orientation) { + var rotate = 0; + var scaleX = 1; + var scaleY = 1; + + switch (orientation) { + // Flip horizontal + case 2: + scaleX = -1; + break; + + // Rotate left 180° + case 3: + rotate = -180; + break; + + // Flip vertical + case 4: + scaleY = -1; + break; + + // Flip vertical and rotate right 90° + case 5: + rotate = 90; + scaleY = -1; + break; + + // Rotate right 90° + case 6: + rotate = 90; + break; + + // Flip horizontal and rotate right 90° + case 7: + rotate = 90; + scaleX = -1; + break; + + // Rotate left 90° + case 8: + rotate = -90; + break; + + default: + } + + return { + rotate: rotate, + scaleX: scaleX, + scaleY: scaleY + }; +} + +var render = { + render: function render() { + this.initContainer(); + this.initCanvas(); + this.initCropBox(); + this.renderCanvas(); + + if (this.cropped) { + this.renderCropBox(); + } + }, + initContainer: function initContainer() { + var $element = this.$element, + options = this.options, + $container = this.$container, + $cropper = this.$cropper; + + + $cropper.addClass(CLASS_HIDDEN); + $element.removeClass(CLASS_HIDDEN); + + $cropper.css(this.container = { + width: Math.max($container.width(), Number(options.minContainerWidth) || 200), + height: Math.max($container.height(), Number(options.minContainerHeight) || 100) + }); + + $element.addClass(CLASS_HIDDEN); + $cropper.removeClass(CLASS_HIDDEN); + }, + + + // Canvas (image wrapper) + initCanvas: function initCanvas() { + var container = this.container, + image = this.image; + var viewMode = this.options.viewMode; + + var rotated = Math.abs(image.rotate) % 180 === 90; + var naturalWidth = rotated ? image.naturalHeight : image.naturalWidth; + var naturalHeight = rotated ? image.naturalWidth : image.naturalHeight; + var aspectRatio = naturalWidth / naturalHeight; + var canvasWidth = container.width; + var canvasHeight = container.height; + + if (container.height * aspectRatio > container.width) { + if (viewMode === 3) { + canvasWidth = container.height * aspectRatio; + } else { + canvasHeight = container.width / aspectRatio; + } + } else if (viewMode === 3) { + canvasHeight = container.width / aspectRatio; + } else { + canvasWidth = container.height * aspectRatio; + } + + var canvas = { + aspectRatio: aspectRatio, + naturalWidth: naturalWidth, + naturalHeight: naturalHeight, + width: canvasWidth, + height: canvasHeight + }; + + canvas.left = (container.width - canvasWidth) / 2; + canvas.top = (container.height - canvasHeight) / 2; + canvas.oldLeft = canvas.left; + canvas.oldTop = canvas.top; + + this.canvas = canvas; + this.limited = viewMode === 1 || viewMode === 2; + this.limitCanvas(true, true); + this.initialImage = $.extend({}, image); + this.initialCanvas = $.extend({}, canvas); + }, + limitCanvas: function limitCanvas(isSizeLimited, isPositionLimited) { + var options = this.options, + container = this.container, + canvas = this.canvas, + cropBox = this.cropBox; + var viewMode = options.viewMode; + var aspectRatio = canvas.aspectRatio; + + var cropped = this.cropped && cropBox; + + if (isSizeLimited) { + var minCanvasWidth = Number(options.minCanvasWidth) || 0; + var minCanvasHeight = Number(options.minCanvasHeight) || 0; + + if (viewMode > 0) { + if (viewMode > 1) { + minCanvasWidth = Math.max(minCanvasWidth, container.width); + minCanvasHeight = Math.max(minCanvasHeight, container.height); + + if (viewMode === 3) { + if (minCanvasHeight * aspectRatio > minCanvasWidth) { + minCanvasWidth = minCanvasHeight * aspectRatio; + } else { + minCanvasHeight = minCanvasWidth / aspectRatio; + } + } + } else if (minCanvasWidth) { + minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBox.width : 0); + } else if (minCanvasHeight) { + minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBox.height : 0); + } else if (cropped) { + minCanvasWidth = cropBox.width; + minCanvasHeight = cropBox.height; + + if (minCanvasHeight * aspectRatio > minCanvasWidth) { + minCanvasWidth = minCanvasHeight * aspectRatio; + } else { + minCanvasHeight = minCanvasWidth / aspectRatio; + } + } + } + + var _getAdjustedSizes = getAdjustedSizes({ + aspectRatio: aspectRatio, + width: minCanvasWidth, + height: minCanvasHeight + }); + + minCanvasWidth = _getAdjustedSizes.width; + minCanvasHeight = _getAdjustedSizes.height; + + + canvas.minWidth = minCanvasWidth; + canvas.minHeight = minCanvasHeight; + canvas.maxWidth = Infinity; + canvas.maxHeight = Infinity; + } + + if (isPositionLimited) { + if (viewMode > 0) { + var newCanvasLeft = container.width - canvas.width; + var newCanvasTop = container.height - canvas.height; + + canvas.minLeft = Math.min(0, newCanvasLeft); + canvas.minTop = Math.min(0, newCanvasTop); + canvas.maxLeft = Math.max(0, newCanvasLeft); + canvas.maxTop = Math.max(0, newCanvasTop); + + if (cropped && this.limited) { + canvas.minLeft = Math.min(cropBox.left, cropBox.left + cropBox.width - canvas.width); + canvas.minTop = Math.min(cropBox.top, cropBox.top + cropBox.height - canvas.height); + canvas.maxLeft = cropBox.left; + canvas.maxTop = cropBox.top; + + if (viewMode === 2) { + if (canvas.width >= container.width) { + canvas.minLeft = Math.min(0, newCanvasLeft); + canvas.maxLeft = Math.max(0, newCanvasLeft); + } + + if (canvas.height >= container.height) { + canvas.minTop = Math.min(0, newCanvasTop); + canvas.maxTop = Math.max(0, newCanvasTop); + } + } + } + } else { + canvas.minLeft = -canvas.width; + canvas.minTop = -canvas.height; + canvas.maxLeft = container.width; + canvas.maxTop = container.height; + } + } + }, + renderCanvas: function renderCanvas(changed, transformed) { + var canvas = this.canvas, + image = this.image; + + + if (transformed) { + var _getRotatedSizes = getRotatedSizes({ + width: image.naturalWidth * Math.abs(image.scaleX || 1), + height: image.naturalHeight * Math.abs(image.scaleY || 1), + degree: image.rotate || 0 + }), + naturalWidth = _getRotatedSizes.width, + naturalHeight = _getRotatedSizes.height; + + var width = canvas.width * (naturalWidth / canvas.naturalWidth); + var height = canvas.height * (naturalHeight / canvas.naturalHeight); + + canvas.left -= (width - canvas.width) / 2; + canvas.top -= (height - canvas.height) / 2; + canvas.width = width; + canvas.height = height; + canvas.aspectRatio = naturalWidth / naturalHeight; + canvas.naturalWidth = naturalWidth; + canvas.naturalHeight = naturalHeight; + this.limitCanvas(true, false); + } + + if (canvas.width > canvas.maxWidth || canvas.width < canvas.minWidth) { + canvas.left = canvas.oldLeft; + } + + if (canvas.height > canvas.maxHeight || canvas.height < canvas.minHeight) { + canvas.top = canvas.oldTop; + } + + canvas.width = Math.min(Math.max(canvas.width, canvas.minWidth), canvas.maxWidth); + canvas.height = Math.min(Math.max(canvas.height, canvas.minHeight), canvas.maxHeight); + + this.limitCanvas(false, true); + + canvas.left = Math.min(Math.max(canvas.left, canvas.minLeft), canvas.maxLeft); + canvas.top = Math.min(Math.max(canvas.top, canvas.minTop), canvas.maxTop); + canvas.oldLeft = canvas.left; + canvas.oldTop = canvas.top; + + this.$canvas.css({ + width: canvas.width, + height: canvas.height, + transform: getTransformValues({ + translateX: canvas.left, + translateY: canvas.top + }) + }); + + this.renderImage(changed); + + if (this.cropped && this.limited) { + this.limitCropBox(true, true); + } + }, + renderImage: function renderImage(changed) { + var canvas = this.canvas, + image = this.image; + + var width = image.naturalWidth * (canvas.width / canvas.naturalWidth); + var height = image.naturalHeight * (canvas.height / canvas.naturalHeight); + + $.extend(image, { + width: width, + height: height, + left: (canvas.width - width) / 2, + top: (canvas.height - height) / 2 + }); + + this.$clone.css({ + width: image.width, + height: image.height, + transform: getTransformValues($.extend({ + translateX: image.left, + translateY: image.top + }, image)) + }); + + if (changed) { + this.output(); + } + }, + initCropBox: function initCropBox() { + var options = this.options, + canvas = this.canvas; + var aspectRatio = options.aspectRatio; + + var autoCropArea = Number(options.autoCropArea) || 0.8; + var cropBox = { + width: canvas.width, + height: canvas.height + }; + + if (aspectRatio) { + if (canvas.height * aspectRatio > canvas.width) { + cropBox.height = cropBox.width / aspectRatio; + } else { + cropBox.width = cropBox.height * aspectRatio; + } + } + + this.cropBox = cropBox; + this.limitCropBox(true, true); + + // Initialize auto crop area + cropBox.width = Math.min(Math.max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); + cropBox.height = Math.min(Math.max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); + + // The width of auto crop area must large than "minWidth", and the height too. (#164) + cropBox.width = Math.max(cropBox.minWidth, cropBox.width * autoCropArea); + cropBox.height = Math.max(cropBox.minHeight, cropBox.height * autoCropArea); + cropBox.left = canvas.left + (canvas.width - cropBox.width) / 2; + cropBox.top = canvas.top + (canvas.height - cropBox.height) / 2; + cropBox.oldLeft = cropBox.left; + cropBox.oldTop = cropBox.top; + + this.initialCropBox = $.extend({}, cropBox); + }, + limitCropBox: function limitCropBox(isSizeLimited, isPositionLimited) { + var options = this.options, + container = this.container, + canvas = this.canvas, + cropBox = this.cropBox, + limited = this.limited; + var aspectRatio = options.aspectRatio; + + + if (isSizeLimited) { + var minCropBoxWidth = Number(options.minCropBoxWidth) || 0; + var minCropBoxHeight = Number(options.minCropBoxHeight) || 0; + var maxCropBoxWidth = Math.min(container.width, limited ? canvas.width : container.width); + var maxCropBoxHeight = Math.min(container.height, limited ? canvas.height : container.height); + + // The min/maxCropBoxWidth/Height must be less than container's width/Height + minCropBoxWidth = Math.min(minCropBoxWidth, container.width); + minCropBoxHeight = Math.min(minCropBoxHeight, container.height); + + if (aspectRatio) { + if (minCropBoxWidth && minCropBoxHeight) { + if (minCropBoxHeight * aspectRatio > minCropBoxWidth) { + minCropBoxHeight = minCropBoxWidth / aspectRatio; + } else { + minCropBoxWidth = minCropBoxHeight * aspectRatio; + } + } else if (minCropBoxWidth) { + minCropBoxHeight = minCropBoxWidth / aspectRatio; + } else if (minCropBoxHeight) { + minCropBoxWidth = minCropBoxHeight * aspectRatio; + } + + if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) { + maxCropBoxHeight = maxCropBoxWidth / aspectRatio; + } else { + maxCropBoxWidth = maxCropBoxHeight * aspectRatio; + } + } + + // The minWidth/Height must be less than maxWidth/Height + cropBox.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth); + cropBox.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight); + cropBox.maxWidth = maxCropBoxWidth; + cropBox.maxHeight = maxCropBoxHeight; + } + + if (isPositionLimited) { + if (limited) { + cropBox.minLeft = Math.max(0, canvas.left); + cropBox.minTop = Math.max(0, canvas.top); + cropBox.maxLeft = Math.min(container.width, canvas.left + canvas.width) - cropBox.width; + cropBox.maxTop = Math.min(container.height, canvas.top + canvas.height) - cropBox.height; + } else { + cropBox.minLeft = 0; + cropBox.minTop = 0; + cropBox.maxLeft = container.width - cropBox.width; + cropBox.maxTop = container.height - cropBox.height; + } + } + }, + renderCropBox: function renderCropBox() { + var options = this.options, + container = this.container, + cropBox = this.cropBox; + + + if (cropBox.width > cropBox.maxWidth || cropBox.width < cropBox.minWidth) { + cropBox.left = cropBox.oldLeft; + } + + if (cropBox.height > cropBox.maxHeight || cropBox.height < cropBox.minHeight) { + cropBox.top = cropBox.oldTop; + } + + cropBox.width = Math.min(Math.max(cropBox.width, cropBox.minWidth), cropBox.maxWidth); + cropBox.height = Math.min(Math.max(cropBox.height, cropBox.minHeight), cropBox.maxHeight); + + this.limitCropBox(false, true); + + cropBox.left = Math.min(Math.max(cropBox.left, cropBox.minLeft), cropBox.maxLeft); + cropBox.top = Math.min(Math.max(cropBox.top, cropBox.minTop), cropBox.maxTop); + cropBox.oldLeft = cropBox.left; + cropBox.oldTop = cropBox.top; + + if (options.movable && options.cropBoxMovable) { + // Turn to move the canvas when the crop box is equal to the container + this.$face.data(DATA_ACTION, cropBox.width >= container.width && cropBox.height >= container.height ? ACTION_MOVE : ACTION_ALL); + } + + this.$cropBox.css({ + width: cropBox.width, + height: cropBox.height, + transform: getTransformValues({ + translateX: cropBox.left, + translateY: cropBox.top + }) + }); + + if (this.cropped && this.limited) { + this.limitCanvas(true, true); + } + + if (!this.disabled) { + this.output(); + } + }, + output: function output() { + this.preview(); + + if (this.completed) { + this.trigger(EVENT_CROP, this.getData()); + } + } +}; + +var preview = { + initPreview: function initPreview() { + var crossOrigin = this.crossOrigin; + + var url = crossOrigin ? this.crossOriginUrl : this.url; + var image = document.createElement('img'); + + if (crossOrigin) { + image.crossOrigin = crossOrigin; + } + + image.src = url; + + var $clone2 = $(image); + + this.$preview = $(this.options.preview); + this.$clone2 = $clone2; + this.$viewBox.html($clone2); + this.$preview.each(function (i, element) { + var $element = $(element); + var img = document.createElement('img'); + + // Save the original size for recover + $element.data(DATA_PREVIEW, { + width: $element.width(), + height: $element.height(), + html: $element.html() + }); + + if (crossOrigin) { + img.crossOrigin = crossOrigin; + } + + img.src = url; + + /** + * Override img element styles + * Add `display:block` to avoid margin top issue + * Add `height:auto` to override `height` attribute on IE8 + * (Occur only when margin-top <= -height) + */ + 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;"'; + + $element.html(img); + }); + }, + resetPreview: function resetPreview() { + this.$preview.each(function (i, element) { + var $element = $(element); + var data = $element.data(DATA_PREVIEW); + + $element.css({ + width: data.width, + height: data.height + }).html(data.html).removeData(DATA_PREVIEW); + }); + }, + preview: function preview() { + var image = this.image, + canvas = this.canvas, + cropBox = this.cropBox; + var cropBoxWidth = cropBox.width, + cropBoxHeight = cropBox.height; + var width = image.width, + height = image.height; + + var left = cropBox.left - canvas.left - image.left; + var top = cropBox.top - canvas.top - image.top; + + if (!this.cropped || this.disabled) { + return; + } + + this.$clone2.css({ + width: width, + height: height, + transform: getTransformValues($.extend({ + translateX: -left, + translateY: -top + }, image)) + }); + + this.$preview.each(function (i, element) { + var $element = $(element); + var data = $element.data(DATA_PREVIEW); + var originalWidth = data.width; + var originalHeight = data.height; + var newWidth = originalWidth; + var newHeight = originalHeight; + var ratio = 1; + + if (cropBoxWidth) { + ratio = originalWidth / cropBoxWidth; + newHeight = cropBoxHeight * ratio; + } + + if (cropBoxHeight && newHeight > originalHeight) { + ratio = originalHeight / cropBoxHeight; + newWidth = cropBoxWidth * ratio; + newHeight = originalHeight; + } + + $element.css({ + width: newWidth, + height: newHeight + }).find('img').css({ + width: width * ratio, + height: height * ratio, + transform: getTransformValues($.extend({ + translateX: -left * ratio, + translateY: -top * ratio + }, image)) + }); + }); + } +}; + +var events = { + bind: function bind() { + var $element = this.$element, + options = this.options, + $cropper = this.$cropper; + + + if ($.isFunction(options.cropstart)) { + $element.on(EVENT_CROP_START, options.cropstart); + } + + if ($.isFunction(options.cropmove)) { + $element.on(EVENT_CROP_MOVE, options.cropmove); + } + + if ($.isFunction(options.cropend)) { + $element.on(EVENT_CROP_END, options.cropend); + } + + if ($.isFunction(options.crop)) { + $element.on(EVENT_CROP, options.crop); + } + + if ($.isFunction(options.zoom)) { + $element.on(EVENT_ZOOM, options.zoom); + } + + $cropper.on(EVENT_POINTER_DOWN, proxy(this.cropStart, this)); + + if (options.zoomable && options.zoomOnWheel) { + $cropper.on(EVENT_WHEEL, proxy(this.wheel, this)); + } + + if (options.toggleDragModeOnDblclick) { + $cropper.on(EVENT_DBLCLICK, proxy(this.dblclick, this)); + } + + $(this.element.ownerDocument).on(EVENT_POINTER_MOVE, this.onCropMove = proxy(this.cropMove, this)).on(EVENT_POINTER_UP, this.onCropEnd = proxy(this.cropEnd, this)); + + if (options.responsive) { + $(window).on(EVENT_RESIZE, this.onResize = proxy(this.resize, this)); + } + }, + unbind: function unbind() { + var $element = this.$element, + options = this.options, + $cropper = this.$cropper; + + + if ($.isFunction(options.cropstart)) { + $element.off(EVENT_CROP_START, options.cropstart); + } + + if ($.isFunction(options.cropmove)) { + $element.off(EVENT_CROP_MOVE, options.cropmove); + } + + if ($.isFunction(options.cropend)) { + $element.off(EVENT_CROP_END, options.cropend); + } + + if ($.isFunction(options.crop)) { + $element.off(EVENT_CROP, options.crop); + } + + if ($.isFunction(options.zoom)) { + $element.off(EVENT_ZOOM, options.zoom); + } + + $cropper.off(EVENT_POINTER_DOWN, this.cropStart); + + if (options.zoomable && options.zoomOnWheel) { + $cropper.off(EVENT_WHEEL, this.wheel); + } + + if (options.toggleDragModeOnDblclick) { + $cropper.off(EVENT_DBLCLICK, this.dblclick); + } + + $(this.element.ownerDocument).off(EVENT_POINTER_MOVE, this.onCropMove).off(EVENT_POINTER_UP, this.onCropEnd); + + if (options.responsive) { + $(window).off(EVENT_RESIZE, this.onResize); + } + } +}; + +var handlers = { + resize: function resize() { + var options = this.options, + $container = this.$container, + container = this.container; + + var minContainerWidth = Number(options.minContainerWidth) || 200; + var minContainerHeight = Number(options.minContainerHeight) || 100; + + if (this.disabled || container.width <= minContainerWidth || container.height <= minContainerHeight) { + return; + } + + var ratio = $container.width() / container.width; + + // Resize when width changed or height changed + if (ratio !== 1 || $container.height() !== container.height) { + var canvasData = void 0; + var cropBoxData = void 0; + + if (options.restore) { + canvasData = this.getCanvasData(); + cropBoxData = this.getCropBoxData(); + } + + this.render(); + + if (options.restore) { + this.setCanvasData($.each(canvasData, function (i, n) { + canvasData[i] = n * ratio; + })); + this.setCropBoxData($.each(cropBoxData, function (i, n) { + cropBoxData[i] = n * ratio; + })); + } + } + }, + dblclick: function dblclick() { + if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) { + return; + } + + this.setDragMode(this.$dragBox.hasClass(CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP); + }, + wheel: function wheel(event) { + var _this = this; + + var e = event.originalEvent || event; + var ratio = Number(this.options.wheelZoomRatio) || 0.1; + + if (this.disabled) { + return; + } + + event.preventDefault(); + + // Limit wheel speed to prevent zoom too fast + if (this.wheeling) { + return; + } + + this.wheeling = true; + + setTimeout(function () { + _this.wheeling = false; + }, 50); + + var delta = 1; + + if (e.deltaY) { + delta = e.deltaY > 0 ? 1 : -1; + } else if (e.wheelDelta) { + delta = -e.wheelDelta / 120; + } else if (e.detail) { + delta = e.detail > 0 ? 1 : -1; + } + + this.zoom(-delta * ratio, event); + }, + cropStart: function cropStart(e) { + if (this.disabled) { + return; + } + + var options = this.options, + pointers = this.pointers; + var originalEvent = e.originalEvent; + + var action = void 0; + + if (originalEvent && originalEvent.changedTouches) { + // Handle touch event + $.each(originalEvent.changedTouches, function (i, touch) { + pointers[touch.identifier] = getPointer(touch); + }); + } else { + // Handle mouse event and pointer event + pointers[originalEvent && originalEvent.pointerId || 0] = getPointer(originalEvent || e); + } + + if (objectKeys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) { + action = ACTION_ZOOM; + } else { + action = $(e.target).data(DATA_ACTION); + } + + if (!REGEXP_ACTIONS.test(action)) { + return; + } + + if (this.trigger(EVENT_CROP_START, { + originalEvent: originalEvent, + action: action + }).isDefaultPrevented()) { + return; + } + + e.preventDefault(); + + this.action = action; + this.cropping = false; + + if (action === ACTION_CROP) { + this.cropping = true; + this.$dragBox.addClass(CLASS_MODAL); + } + }, + cropMove: function cropMove(e) { + var action = this.action; + + + if (this.disabled || !action) { + return; + } + + var pointers = this.pointers; + var originalEvent = e.originalEvent; + + + e.preventDefault(); + + if (this.trigger(EVENT_CROP_MOVE, { + originalEvent: originalEvent, + action: action + }).isDefaultPrevented()) { + return; + } + + if (originalEvent && originalEvent.changedTouches) { + $.each(originalEvent.changedTouches, function (i, touch) { + $.extend(pointers[touch.identifier], getPointer(touch, true)); + }); + } else { + $.extend(pointers[originalEvent && originalEvent.pointerId || 0], getPointer(originalEvent || e, true)); + } + + this.change(e); + }, + cropEnd: function cropEnd(e) { + if (this.disabled) { + return; + } + + var action = this.action; + var pointers = this.pointers; + var originalEvent = e.originalEvent; + + + if (originalEvent && originalEvent.changedTouches) { + $.each(originalEvent.changedTouches, function (i, touch) { + delete pointers[touch.identifier]; + }); + } else { + delete pointers[originalEvent && originalEvent.pointerId || 0]; + } + + if (!action) { + return; + } + + e.preventDefault(); + + if (!objectKeys(pointers).length) { + this.action = ''; + } + + if (this.cropping) { + this.cropping = false; + this.$dragBox.toggleClass(CLASS_MODAL, this.cropped && this.options.modal); + } + + this.trigger(EVENT_CROP_END, { + originalEvent: originalEvent, + action: action + }); + } +}; + +var change = { + change: function change(e) { + var options = this.options, + pointers = this.pointers, + container = this.container, + canvas = this.canvas, + cropBox = this.cropBox; + var action = this.action; + var aspectRatio = options.aspectRatio; + var left = cropBox.left, + top = cropBox.top, + width = cropBox.width, + height = cropBox.height; + + var right = left + width; + var bottom = top + height; + var minLeft = 0; + var minTop = 0; + var maxWidth = container.width; + var maxHeight = container.height; + var renderable = true; + var offset = void 0; + + // Locking aspect ratio in "free mode" by holding shift key (#259) + if (!aspectRatio && e.shiftKey) { + aspectRatio = width && height ? width / height : 1; + } + + if (this.limited) { + minLeft = cropBox.minLeft; + minTop = cropBox.minTop; + + maxWidth = minLeft + Math.min(container.width, canvas.width, canvas.left + canvas.width); + maxHeight = minTop + Math.min(container.height, canvas.height, canvas.top + canvas.height); + } + + var pointer = pointers[objectKeys(pointers)[0]]; + var range = { + x: pointer.endX - pointer.startX, + y: pointer.endY - pointer.startY + }; + var check = function check(side) { + switch (side) { + case ACTION_EAST: + if (right + range.x > maxWidth) { + range.x = maxWidth - right; + } + + break; + + case ACTION_WEST: + if (left + range.x < minLeft) { + range.x = minLeft - left; + } + + break; + + case ACTION_NORTH: + if (top + range.y < minTop) { + range.y = minTop - top; + } + + break; + + case ACTION_SOUTH: + if (bottom + range.y > maxHeight) { + range.y = maxHeight - bottom; + } + + break; + + default: + } + }; + + switch (action) { + // Move crop box + case ACTION_ALL: + left += range.x; + top += range.y; + break; + + // Resize crop box + case ACTION_EAST: + if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) { + renderable = false; + break; + } + + check(ACTION_EAST); + width += range.x; + + if (aspectRatio) { + height = width / aspectRatio; + top -= range.x / aspectRatio / 2; + } + + if (width < 0) { + action = ACTION_WEST; + width = 0; + } + + break; + + case ACTION_NORTH: + if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) { + renderable = false; + break; + } + + check(ACTION_NORTH); + height -= range.y; + top += range.y; + + if (aspectRatio) { + width = height * aspectRatio; + left += range.y * aspectRatio / 2; + } + + if (height < 0) { + action = ACTION_SOUTH; + height = 0; + } + + break; + + case ACTION_WEST: + if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) { + renderable = false; + break; + } + + check(ACTION_WEST); + width -= range.x; + left += range.x; + + if (aspectRatio) { + height = width / aspectRatio; + top += range.x / aspectRatio / 2; + } + + if (width < 0) { + action = ACTION_EAST; + width = 0; + } + + break; + + case ACTION_SOUTH: + if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) { + renderable = false; + break; + } + + check(ACTION_SOUTH); + height += range.y; + + if (aspectRatio) { + width = height * aspectRatio; + left -= range.y * aspectRatio / 2; + } + + if (height < 0) { + action = ACTION_NORTH; + height = 0; + } + + break; + + case ACTION_NORTH_EAST: + if (aspectRatio) { + if (range.y <= 0 && (top <= minTop || right >= maxWidth)) { + renderable = false; + break; + } + + check(ACTION_NORTH); + height -= range.y; + top += range.y; + width = height * aspectRatio; + } else { + check(ACTION_NORTH); + check(ACTION_EAST); + + if (range.x >= 0) { + if (right < maxWidth) { + width += range.x; + } else if (range.y <= 0 && top <= minTop) { + renderable = false; + } + } else { + width += range.x; + } + + if (range.y <= 0) { + if (top > minTop) { + height -= range.y; + top += range.y; + } + } else { + height -= range.y; + top += range.y; + } + } + + if (width < 0 && height < 0) { + action = ACTION_SOUTH_WEST; + height = 0; + width = 0; + } else if (width < 0) { + action = ACTION_NORTH_WEST; + width = 0; + } else if (height < 0) { + action = ACTION_SOUTH_EAST; + height = 0; + } + + break; + + case ACTION_NORTH_WEST: + if (aspectRatio) { + if (range.y <= 0 && (top <= minTop || left <= minLeft)) { + renderable = false; + break; + } + + check(ACTION_NORTH); + height -= range.y; + top += range.y; + width = height * aspectRatio; + left += range.y * aspectRatio; + } else { + check(ACTION_NORTH); + check(ACTION_WEST); + + if (range.x <= 0) { + if (left > minLeft) { + width -= range.x; + left += range.x; + } else if (range.y <= 0 && top <= minTop) { + renderable = false; + } + } else { + width -= range.x; + left += range.x; + } + + if (range.y <= 0) { + if (top > minTop) { + height -= range.y; + top += range.y; + } + } else { + height -= range.y; + top += range.y; + } + } + + if (width < 0 && height < 0) { + action = ACTION_SOUTH_EAST; + height = 0; + width = 0; + } else if (width < 0) { + action = ACTION_NORTH_EAST; + width = 0; + } else if (height < 0) { + action = ACTION_SOUTH_WEST; + height = 0; + } + + break; + + case ACTION_SOUTH_WEST: + if (aspectRatio) { + if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) { + renderable = false; + break; + } + + check(ACTION_WEST); + width -= range.x; + left += range.x; + height = width / aspectRatio; + } else { + check(ACTION_SOUTH); + check(ACTION_WEST); + + if (range.x <= 0) { + if (left > minLeft) { + width -= range.x; + left += range.x; + } else if (range.y >= 0 && bottom >= maxHeight) { + renderable = false; + } + } else { + width -= range.x; + left += range.x; + } + + if (range.y >= 0) { + if (bottom < maxHeight) { + height += range.y; + } + } else { + height += range.y; + } + } + + if (width < 0 && height < 0) { + action = ACTION_NORTH_EAST; + height = 0; + width = 0; + } else if (width < 0) { + action = ACTION_SOUTH_EAST; + width = 0; + } else if (height < 0) { + action = ACTION_NORTH_WEST; + height = 0; + } + + break; + + case ACTION_SOUTH_EAST: + if (aspectRatio) { + if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) { + renderable = false; + break; + } + + check(ACTION_EAST); + width += range.x; + height = width / aspectRatio; + } else { + check(ACTION_SOUTH); + check(ACTION_EAST); + + if (range.x >= 0) { + if (right < maxWidth) { + width += range.x; + } else if (range.y >= 0 && bottom >= maxHeight) { + renderable = false; + } + } else { + width += range.x; + } + + if (range.y >= 0) { + if (bottom < maxHeight) { + height += range.y; + } + } else { + height += range.y; + } + } + + if (width < 0 && height < 0) { + action = ACTION_NORTH_WEST; + height = 0; + width = 0; + } else if (width < 0) { + action = ACTION_SOUTH_WEST; + width = 0; + } else if (height < 0) { + action = ACTION_NORTH_EAST; + height = 0; + } + + break; + + // Move canvas + case ACTION_MOVE: + this.move(range.x, range.y); + renderable = false; + break; + + // Zoom canvas + case ACTION_ZOOM: + this.zoom(getMaxZoomRatio(pointers), e.originalEvent); + renderable = false; + break; + + // Create crop box + case ACTION_CROP: + if (!range.x || !range.y) { + renderable = false; + break; + } + + offset = this.$cropper.offset(); + left = pointer.startX - offset.left; + top = pointer.startY - offset.top; + width = cropBox.minWidth; + height = cropBox.minHeight; + + if (range.x > 0) { + action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST; + } else if (range.x < 0) { + left -= width; + action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST; + } + + if (range.y < 0) { + top -= height; + } + + // Show the crop box if is hidden + if (!this.cropped) { + this.$cropBox.removeClass(CLASS_HIDDEN); + this.cropped = true; + + if (this.limited) { + this.limitCropBox(true, true); + } + } + + break; + + default: + } + + if (renderable) { + cropBox.width = width; + cropBox.height = height; + cropBox.left = left; + cropBox.top = top; + this.action = action; + this.renderCropBox(); + } + + // Override + $.each(pointers, function (i, p) { + p.startX = p.endX; + p.startY = p.endY; + }); + } +}; + +var methods = { + // Show the crop box manually + crop: function crop() { + if (!this.ready || this.disabled) { + return; + } + + if (!this.cropped) { + this.cropped = true; + this.limitCropBox(true, true); + + if (this.options.modal) { + this.$dragBox.addClass(CLASS_MODAL); + } + + this.$cropBox.removeClass(CLASS_HIDDEN); + } + + this.setCropBoxData(this.initialCropBox); + }, + + + // Reset the image and crop box to their initial states + reset: function reset() { + if (!this.ready || this.disabled) { + return; + } + + this.image = $.extend({}, this.initialImage); + this.canvas = $.extend({}, this.initialCanvas); + this.cropBox = $.extend({}, this.initialCropBox); + this.renderCanvas(); + + if (this.cropped) { + this.renderCropBox(); + } + }, + + + // Clear the crop box + clear: function clear() { + if (!this.cropped || this.disabled) { + return; + } + + $.extend(this.cropBox, { + left: 0, + top: 0, + width: 0, + height: 0 + }); + + this.cropped = false; + this.renderCropBox(); + this.limitCanvas(true, true); + + // Render canvas after crop box rendered + this.renderCanvas(); + this.$dragBox.removeClass(CLASS_MODAL); + this.$cropBox.addClass(CLASS_HIDDEN); + }, + + + /** + * Replace the image's src and rebuild the cropper + * @param {string} url - The new URL. + * @param {boolean} [onlyColorChanged] - Indicate if the new image only changed color. + */ + replace: function replace(url, onlyColorChanged) { + if (!this.disabled && url) { + if (this.isImg) { + this.$element.attr('src', url); + } + + if (onlyColorChanged) { + this.url = url; + this.$clone.attr('src', url); + + if (this.ready) { + this.$preview.find('img').add(this.$clone2).attr('src', url); + } + } else { + if (this.isImg) { + this.replaced = true; + } + + // Clear previous data + this.options.data = null; + this.load(url); + } + } + }, + + + // Enable (unfreeze) the cropper + enable: function enable() { + if (this.ready) { + this.disabled = false; + this.$cropper.removeClass(CLASS_DISABLED); + } + }, + + + // Disable (freeze) the cropper + disable: function disable() { + if (this.ready) { + this.disabled = true; + this.$cropper.addClass(CLASS_DISABLED); + } + }, + + + // Destroy the cropper and remove the instance from the image + destroy: function destroy() { + var $element = this.$element; + + + if (this.loaded) { + if (this.isImg && this.replaced) { + $element.attr('src', this.originalUrl); + } + + this.unbuild(); + $element.removeClass(CLASS_HIDDEN); + } else if (this.isImg) { + $element.off(EVENT_LOAD, this.start); + } else if (this.$clone) { + this.$clone.remove(); + } + + $element.removeData(NAMESPACE); + }, + + + /** + * Move the canvas with relative offsets + * @param {number} offsetX - The relative offset distance on the x-axis. + * @param {number} offsetY - The relative offset distance on the y-axis. + */ + move: function move(offsetX, offsetY) { + var _canvas = this.canvas, + left = _canvas.left, + top = _canvas.top; + + + this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY)); + }, + + + /** + * Move the canvas to an absolute point + * @param {number} x - The x-axis coordinate. + * @param {number} [y=x] - The y-axis coordinate. + */ + moveTo: function moveTo(x, y) { + var canvas = this.canvas; + + var changed = false; + + // If "y" is not present, its default value is "x" + if (isUndefined(y)) { + y = x; + } + + x = Number(x); + y = Number(y); + + if (this.ready && !this.disabled && this.options.movable) { + if (isNumber(x)) { + canvas.left = x; + changed = true; + } + + if (isNumber(y)) { + canvas.top = y; + changed = true; + } + + if (changed) { + this.renderCanvas(true); + } + } + }, + + + /** + * Zoom the canvas with a relative ratio + * @param {Number} ratio - The target ratio. + * @param {Event} _event - The related event if any. + */ + zoom: function zoom(ratio, _event) { + var canvas = this.canvas; + + + ratio = Number(ratio); + + if (ratio < 0) { + ratio = 1 / (1 - ratio); + } else { + ratio = 1 + ratio; + } + + this.zoomTo(canvas.width * ratio / canvas.naturalWidth, _event); + }, + + + /** + * Zoom the canvas to an absolute ratio + * @param {number} ratio - The target ratio. + * @param {Event} _event - The related event if any. + */ + zoomTo: function zoomTo(ratio, _event) { + var options = this.options, + pointers = this.pointers, + canvas = this.canvas; + var width = canvas.width, + height = canvas.height, + naturalWidth = canvas.naturalWidth, + naturalHeight = canvas.naturalHeight; + + + ratio = Number(ratio); + + if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) { + var newWidth = naturalWidth * ratio; + var newHeight = naturalHeight * ratio; + var originalEvent = void 0; + + if (_event) { + originalEvent = _event.originalEvent; + } + + if (this.trigger(EVENT_ZOOM, { + originalEvent: originalEvent, + oldRatio: width / naturalWidth, + ratio: newWidth / naturalWidth + }).isDefaultPrevented()) { + return; + } + + if (originalEvent) { + var offset = this.$cropper.offset(); + var center = pointers && objectKeys(pointers).length ? getPointersCenter(pointers) : { + pageX: _event.pageX || originalEvent.pageX || 0, + pageY: _event.pageY || originalEvent.pageY || 0 + }; + + // Zoom from the triggering point of the event + canvas.left -= (newWidth - width) * ((center.pageX - offset.left - canvas.left) / width); + canvas.top -= (newHeight - height) * ((center.pageY - offset.top - canvas.top) / height); + } else { + // Zoom from the center of the canvas + canvas.left -= (newWidth - width) / 2; + canvas.top -= (newHeight - height) / 2; + } + + canvas.width = newWidth; + canvas.height = newHeight; + this.renderCanvas(true); + } + }, + + + /** + * Rotate the canvas with a relative degree + * @param {number} degree - The rotate degree. + */ + rotate: function rotate(degree) { + this.rotateTo((this.image.rotate || 0) + Number(degree)); + }, + + + /** + * Rotate the canvas to an absolute degree + * @param {number} degree - The rotate degree. + */ + rotateTo: function rotateTo(degree) { + degree = Number(degree); + + if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) { + this.image.rotate = degree % 360; + this.renderCanvas(true, true); + } + }, + + + /** + * Scale the image on the x-axis. + * @param {number} scaleX - The scale ratio on the x-axis. + */ + scaleX: function scaleX(_scaleX) { + var scaleY = this.image.scaleY; + + + this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1); + }, + + + /** + * Scale the image on the y-axis. + * @param {number} scaleY - The scale ratio on the y-axis. + */ + scaleY: function scaleY(_scaleY) { + var scaleX = this.image.scaleX; + + + this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY); + }, + + + /** + * Scale the image + * @param {number} scaleX - The scale ratio on the x-axis. + * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis. + */ + scale: function scale(scaleX) { + var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX; + var image = this.image; + + var transformed = false; + + scaleX = Number(scaleX); + scaleY = Number(scaleY); + + if (this.ready && !this.disabled && this.options.scalable) { + if (isNumber(scaleX)) { + image.scaleX = scaleX; + transformed = true; + } + + if (isNumber(scaleY)) { + image.scaleY = scaleY; + transformed = true; + } + + if (transformed) { + this.renderCanvas(true, true); + } + } + }, + + + /** + * Get the cropped area position and size data (base on the original image) + * @param {boolean} [rounded=false] - Indicate if round the data values or not. + * @returns {Object} The result cropped data. + */ + getData: function getData() { + var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var options = this.options, + image = this.image, + canvas = this.canvas, + cropBox = this.cropBox; + + var data = void 0; + + if (this.ready && this.cropped) { + data = { + x: cropBox.left - canvas.left, + y: cropBox.top - canvas.top, + width: cropBox.width, + height: cropBox.height + }; + + var ratio = image.width / image.naturalWidth; + + $.each(data, function (i, n) { + n /= ratio; + data[i] = rounded ? Math.round(n) : n; + }); + } else { + data = { + x: 0, + y: 0, + width: 0, + height: 0 + }; + } + + if (options.rotatable) { + data.rotate = image.rotate || 0; + } + + if (options.scalable) { + data.scaleX = image.scaleX || 1; + data.scaleY = image.scaleY || 1; + } + + return data; + }, + + + /** + * Set the cropped area position and size with new data + * @param {Object} data - The new data. + */ + setData: function setData(data) { + var options = this.options, + image = this.image, + canvas = this.canvas; + + var cropBoxData = {}; + + if ($.isFunction(data)) { + data = data.call(this.element); + } + + if (this.ready && !this.disabled && $.isPlainObject(data)) { + var transformed = false; + + if (options.rotatable) { + if (isNumber(data.rotate) && data.rotate !== image.rotate) { + image.rotate = data.rotate; + transformed = true; + } + } + + if (options.scalable) { + if (isNumber(data.scaleX) && data.scaleX !== image.scaleX) { + image.scaleX = data.scaleX; + transformed = true; + } + + if (isNumber(data.scaleY) && data.scaleY !== image.scaleY) { + image.scaleY = data.scaleY; + transformed = true; + } + } + + if (transformed) { + this.renderCanvas(true, true); + } + + var ratio = image.width / image.naturalWidth; + + if (isNumber(data.x)) { + cropBoxData.left = data.x * ratio + canvas.left; + } + + if (isNumber(data.y)) { + cropBoxData.top = data.y * ratio + canvas.top; + } + + if (isNumber(data.width)) { + cropBoxData.width = data.width * ratio; + } + + if (isNumber(data.height)) { + cropBoxData.height = data.height * ratio; + } + + this.setCropBoxData(cropBoxData); + } + }, + + + /** + * Get the container size data. + * @returns {Object} The result container data. + */ + getContainerData: function getContainerData() { + return this.ready ? $.extend({}, this.container) : {}; + }, + + + /** + * Get the image position and size data. + * @returns {Object} The result image data. + */ + getImageData: function getImageData() { + return this.loaded ? $.extend({}, this.image) : {}; + }, + + + /** + * Get the canvas position and size data. + * @returns {Object} The result canvas data. + */ + getCanvasData: function getCanvasData() { + var canvas = this.canvas; + + var data = {}; + + if (this.ready) { + $.each(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (i, n) { + data[n] = canvas[n]; + }); + } + + return data; + }, + + + /** + * Set the canvas position and size with new data. + * @param {Object} data - The new canvas data. + */ + setCanvasData: function setCanvasData(data) { + var canvas = this.canvas; + var aspectRatio = canvas.aspectRatio; + + + if ($.isFunction(data)) { + data = data.call(this.$element); + } + + if (this.ready && !this.disabled && $.isPlainObject(data)) { + if (isNumber(data.left)) { + canvas.left = data.left; + } + + if (isNumber(data.top)) { + canvas.top = data.top; + } + + if (isNumber(data.width)) { + canvas.width = data.width; + canvas.height = data.width / aspectRatio; + } else if (isNumber(data.height)) { + canvas.height = data.height; + canvas.width = data.height * aspectRatio; + } + + this.renderCanvas(true); + } + }, + + + /** + * Get the crop box position and size data. + * @returns {Object} The result crop box data. + */ + getCropBoxData: function getCropBoxData() { + var cropBox = this.cropBox; + + + return this.ready && this.cropped ? { + left: cropBox.left, + top: cropBox.top, + width: cropBox.width, + height: cropBox.height + } : {}; + }, + + + /** + * Set the crop box position and size with new data. + * @param {Object} data - The new crop box data. + */ + setCropBoxData: function setCropBoxData(data) { + var cropBox = this.cropBox; + var aspectRatio = this.options.aspectRatio; + + var widthChanged = void 0; + var heightChanged = void 0; + + if ($.isFunction(data)) { + data = data.call(this.$element); + } + + if (this.ready && this.cropped && !this.disabled && $.isPlainObject(data)) { + if (isNumber(data.left)) { + cropBox.left = data.left; + } + + if (isNumber(data.top)) { + cropBox.top = data.top; + } + + if (isNumber(data.width) && data.width !== cropBox.width) { + widthChanged = true; + cropBox.width = data.width; + } + + if (isNumber(data.height) && data.height !== cropBox.height) { + heightChanged = true; + cropBox.height = data.height; + } + + if (aspectRatio) { + if (widthChanged) { + cropBox.height = cropBox.width / aspectRatio; + } else if (heightChanged) { + cropBox.width = cropBox.height * aspectRatio; + } + } + + this.renderCropBox(); + } + }, + + + /** + * Get a canvas drawn the cropped image. + * @param {Object} [options={}] - The config options. + * @returns {HTMLCanvasElement} - The result canvas. + */ + getCroppedCanvas: function getCroppedCanvas() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + if (!this.ready || !window.HTMLCanvasElement) { + return null; + } + + var canvasData = this.canvas; + + var source = getSourceCanvas(this.$clone[0], this.image, canvasData, options); + + // Returns the source canvas if it is not cropped. + if (!this.cropped) { + return source; + } + + var _getData = this.getData(), + initialX = _getData.x, + initialY = _getData.y, + initialWidth = _getData.width, + initialHeight = _getData.height; + + var ratio = source.width / Math.floor(canvasData.naturalWidth); + + if (ratio !== 1) { + initialX *= ratio; + initialY *= ratio; + initialWidth *= ratio; + initialHeight *= ratio; + } + + var aspectRatio = initialWidth / initialHeight; + var maxSizes = getAdjustedSizes({ + aspectRatio: aspectRatio, + width: options.maxWidth || Infinity, + height: options.maxHeight || Infinity + }); + var minSizes = getAdjustedSizes({ + aspectRatio: aspectRatio, + width: options.minWidth || 0, + height: options.minHeight || 0 + }, 'cover'); + + var _getAdjustedSizes = getAdjustedSizes({ + aspectRatio: aspectRatio, + width: options.width || (ratio !== 1 ? source.width : initialWidth), + height: options.height || (ratio !== 1 ? source.height : initialHeight) + }), + width = _getAdjustedSizes.width, + height = _getAdjustedSizes.height; + + width = Math.min(maxSizes.width, Math.max(minSizes.width, width)); + height = Math.min(maxSizes.height, Math.max(minSizes.height, height)); + + var canvas = document.createElement('canvas'); + var context = canvas.getContext('2d'); + + canvas.width = normalizeDecimalNumber(width); + canvas.height = normalizeDecimalNumber(height); + context.fillStyle = options.fillColor || 'transparent'; + context.fillRect(0, 0, width, height); + + var _options$imageSmoothi = options.imageSmoothingEnabled, + imageSmoothingEnabled = _options$imageSmoothi === undefined ? true : _options$imageSmoothi, + imageSmoothingQuality = options.imageSmoothingQuality; + + + context.imageSmoothingEnabled = imageSmoothingEnabled; + + if (imageSmoothingQuality) { + context.imageSmoothingQuality = imageSmoothingQuality; + } + + // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage + var sourceWidth = source.width; + var sourceHeight = source.height; + + // Source canvas parameters + var srcX = initialX; + var srcY = initialY; + var srcWidth = void 0; + var srcHeight = void 0; + + // Destination canvas parameters + var dstX = void 0; + var dstY = void 0; + var dstWidth = void 0; + var dstHeight = void 0; + + if (srcX <= -initialWidth || srcX > sourceWidth) { + srcX = 0; + srcWidth = 0; + dstX = 0; + dstWidth = 0; + } else if (srcX <= 0) { + dstX = -srcX; + srcX = 0; + srcWidth = Math.min(sourceWidth, initialWidth + srcX); + dstWidth = srcWidth; + } else if (srcX <= sourceWidth) { + dstX = 0; + srcWidth = Math.min(initialWidth, sourceWidth - srcX); + dstWidth = srcWidth; + } + + if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) { + srcY = 0; + srcHeight = 0; + dstY = 0; + dstHeight = 0; + } else if (srcY <= 0) { + dstY = -srcY; + srcY = 0; + srcHeight = Math.min(sourceHeight, initialHeight + srcY); + dstHeight = srcHeight; + } else if (srcY <= sourceHeight) { + dstY = 0; + srcHeight = Math.min(initialHeight, sourceHeight - srcY); + dstHeight = srcHeight; + } + + // All the numerical parameters should be integer for `drawImage` + // https://github.com/fengyuanchen/cropper/issues/476 + var params = [srcX, srcY, srcWidth, srcHeight]; + + // Avoid "IndexSizeError" + if (dstWidth > 0 && dstHeight > 0) { + var scale = width / initialWidth; + + params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale); + } + + context.drawImage.apply(context, [source].concat(toConsumableArray($.map(params, function (param) { + return Math.floor(normalizeDecimalNumber(param)); + })))); + return canvas; + }, + + + /** + * Change the aspect ratio of the crop box. + * @param {number} aspectRatio - The new aspect ratio. + */ + setAspectRatio: function setAspectRatio(aspectRatio) { + var options = this.options; + + + if (!this.disabled && !isUndefined(aspectRatio)) { + // 0 -> NaN + options.aspectRatio = Math.max(0, aspectRatio) || NaN; + + if (this.ready) { + this.initCropBox(); + + if (this.cropped) { + this.renderCropBox(); + } + } + } + }, + + + /** + * Change the drag mode. + * @param {string} mode - The new drag mode. + */ + setDragMode: function setDragMode(mode) { + var options = this.options; + + var croppable = void 0; + var movable = void 0; + + if (this.loaded && !this.disabled) { + croppable = mode === DRAG_MODE_CROP; + movable = options.movable && mode === DRAG_MODE_MOVE; + mode = croppable || movable ? mode : DRAG_MODE_NONE; + + this.$dragBox.data(DATA_ACTION, mode).toggleClass(CLASS_CROP, croppable).toggleClass(CLASS_MOVE, movable); + + if (!options.cropBoxMovable) { + // Sync drag mode to crop box when it is not movable(#300) + this.$face.data(DATA_ACTION, mode).toggleClass(CLASS_CROP, croppable).toggleClass(CLASS_MOVE, movable); + } + } + } +}; + +var Cropper = function () { + /** + * Create a new Cropper. + * @param {Element} element - The target element for cropping. + * @param {Object} [options={}] - The configuration options. + */ + function Cropper(element) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + classCallCheck(this, Cropper); + + if (!element || !REGEXP_TAG_NAME.test(element.tagName)) { + throw new Error('The first argument is required and must be an or element.'); + } + + this.element = element; + this.$element = $(element); + this.options = $.extend({}, DEFAULTS, $.isPlainObject(options) && options); + this.completed = false; + this.cropped = false; + this.disabled = false; + this.isImg = false; + this.limited = false; + this.loaded = false; + this.ready = false; + this.replaced = false; + this.wheeling = false; + this.originalUrl = ''; + this.canvas = null; + this.cropBox = null; + this.pointers = {}; + this.init(); + } + + createClass(Cropper, [{ + key: 'init', + value: function init() { + var $element = this.$element; + + var url = void 0; + + if ($element.is('img')) { + this.isImg = true; + + // Should use `$.fn.attr` here. e.g.: "img/picture.jpg" + url = $element.attr('src') || ''; + this.originalUrl = url; + + // Stop when it's a blank image + if (!url) { + return; + } + + // Should use `$.fn.prop` here. e.g.: "http://example.com/img/picture.jpg" + url = $element.prop('src'); + } else if ($element.is('canvas') && window.HTMLCanvasElement) { + url = $element[0].toDataURL(); + } + + this.load(url); + } + + // A shortcut for triggering custom events + + }, { + key: 'trigger', + value: function trigger(type, data) { + var e = $.Event(type, data); + + this.$element.trigger(e); + + return e; + } + }, { + key: 'load', + value: function load(url) { + var _this = this; + + if (!url) { + return; + } + + this.url = url; + this.image = {}; + + var $element = this.$element, + options = this.options; + + + if (!options.checkOrientation || !window.ArrayBuffer) { + this.clone(); + return; + } + + // XMLHttpRequest disallows to open a Data URL in some browsers like IE11 and Safari + if (REGEXP_DATA_URL.test(url)) { + if (REGEXP_DATA_URL_JPEG.test(url)) { + this.read(dataURLToArrayBuffer(url)); + } else { + this.clone(); + } + + return; + } + + var xhr = new XMLHttpRequest(); + + xhr.onerror = function () { + _this.clone(); + }; + + xhr.onload = function () { + _this.read(xhr.response); + }; + + // Bust cache when there is a "crossOrigin" property + if (options.checkCrossOrigin && isCrossOriginURL(url) && !$element.prop('crossOrigin')) { + url = addTimestamp(url); + } + + xhr.open('get', url); + xhr.responseType = 'arraybuffer'; + xhr.withCredentials = $element.prop('crossOrigin') === 'use-credentials'; + xhr.send(); + } + }, { + key: 'read', + value: function read(arrayBuffer) { + var options = this.options, + image = this.image; + + var orientation = getOrientation(arrayBuffer); + var rotate = 0; + var scaleX = 1; + var scaleY = 1; + + if (orientation > 1) { + this.url = arrayBufferToDataURL(arrayBuffer, 'image/jpeg'); + + var _parseOrientation = parseOrientation(orientation); + + rotate = _parseOrientation.rotate; + scaleX = _parseOrientation.scaleX; + scaleY = _parseOrientation.scaleY; + } + + if (options.rotatable) { + image.rotate = rotate; + } + + if (options.scalable) { + image.scaleX = scaleX; + image.scaleY = scaleY; + } + + this.clone(); + } + }, { + key: 'clone', + value: function clone() { + var $element = this.$element, + options = this.options, + url = this.url; + + var crossOrigin = ''; + var crossOriginUrl = void 0; + + if (options.checkCrossOrigin && isCrossOriginURL(url)) { + crossOrigin = $element.prop('crossOrigin'); + + if (crossOrigin) { + crossOriginUrl = url; + } else { + crossOrigin = 'anonymous'; + + // Bust cache (#148) when there is not a "crossOrigin" property + crossOriginUrl = addTimestamp(url); + } + } + + this.crossOrigin = crossOrigin; + this.crossOriginUrl = crossOriginUrl; + + var image = document.createElement('img'); + + if (crossOrigin) { + image.crossOrigin = crossOrigin; + } + + image.src = crossOriginUrl || url; + + var $clone = $(image); + + this.$clone = $clone; + + if (this.isImg) { + if (this.element.complete) { + this.start(); + } else { + $element.one(EVENT_LOAD, $.proxy(this.start, this)); + } + } else { + $clone.one(EVENT_LOAD, $.proxy(this.start, this)).one(EVENT_ERROR, $.proxy(this.stop, this)).addClass(CLASS_HIDE).insertAfter($element); + } + } + }, { + key: 'start', + value: function start() { + var _this2 = this; + + var $clone = this.$clone; + + var $image = this.$element; + + if (!this.isImg) { + $clone.off(EVENT_ERROR, this.stop); + $image = $clone; + } + + getImageNaturalSizes($image[0], function (naturalWidth, naturalHeight) { + $.extend(_this2.image, { + naturalWidth: naturalWidth, + naturalHeight: naturalHeight, + aspectRatio: naturalWidth / naturalHeight + }); + + _this2.loaded = true; + _this2.build(); + }); + } + }, { + key: 'stop', + value: function stop() { + this.$clone.remove(); + this.$clone = null; + } + }, { + key: 'build', + value: function build() { + var _this3 = this; + + if (!this.loaded) { + return; + } + + // Unbuild first when replace + if (this.ready) { + this.unbuild(); + } + + var $element = this.$element, + options = this.options, + $clone = this.$clone; + + var $cropper = $(TEMPLATE); + var $cropBox = $cropper.find('.' + NAMESPACE + '-crop-box'); + var $face = $cropBox.find('.' + NAMESPACE + '-face'); + + // Create cropper elements + this.$container = $element.parent(); + this.$cropper = $cropper; + this.$canvas = $cropper.find('.' + NAMESPACE + '-canvas').append($clone); + this.$dragBox = $cropper.find('.' + NAMESPACE + '-drag-box'); + this.$cropBox = $cropBox; + this.$viewBox = $cropper.find('.' + NAMESPACE + '-view-box'); + this.$face = $face; + + // Hide the original image + $element.addClass(CLASS_HIDDEN).after($cropper); + + // Show the clone image if is hidden + if (!this.isImg) { + $clone.removeClass(CLASS_HIDE); + } + + this.initPreview(); + this.bind(); + + options.aspectRatio = Math.max(0, options.aspectRatio) || NaN; + options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0; + + this.cropped = options.autoCrop; + + if (options.autoCrop) { + if (options.modal) { + this.$dragBox.addClass(CLASS_MODAL); + } + } else { + $cropBox.addClass(CLASS_HIDDEN); + } + + if (!options.guides) { + $cropBox.find('.' + NAMESPACE + '-dashed').addClass(CLASS_HIDDEN); + } + + if (!options.center) { + $cropBox.find('.' + NAMESPACE + '-center').addClass(CLASS_HIDDEN); + } + + if (options.cropBoxMovable) { + $face.addClass(CLASS_MOVE).data(DATA_ACTION, ACTION_ALL); + } + + if (!options.highlight) { + $face.addClass(CLASS_INVISIBLE); + } + + if (options.background) { + $cropper.addClass(NAMESPACE + '-bg'); + } + + if (!options.cropBoxResizable) { + $cropBox.find('.' + NAMESPACE + '-line,.' + NAMESPACE + '-point').addClass(CLASS_HIDDEN); + } + + this.setDragMode(options.dragMode); + this.render(); + this.ready = true; + this.setData(options.data); + + // Trigger the ready event asynchronously to keep `data('cropper')` is defined + this.completing = setTimeout(function () { + if ($.isFunction(options.ready)) { + $element.one(EVENT_READY, options.ready); + } + + _this3.trigger(EVENT_READY); + _this3.trigger(EVENT_CROP, _this3.getData()); + _this3.completed = true; + }, 0); + } + }, { + key: 'unbuild', + value: function unbuild() { + if (!this.ready) { + return; + } + + if (!this.completed) { + clearTimeout(this.completing); + } + + this.ready = false; + this.completed = false; + this.initialImage = null; + + // Clear `initialCanvas` is necessary when replace + this.initialCanvas = null; + this.initialCropBox = null; + this.container = null; + this.canvas = null; + + // Clear `cropBox` is necessary when replace + this.cropBox = null; + this.unbind(); + + this.resetPreview(); + this.$preview = null; + + this.$viewBox = null; + this.$cropBox = null; + this.$dragBox = null; + this.$canvas = null; + this.$container = null; + + this.$cropper.remove(); + this.$cropper = null; + } + + /** + * Change the default options. + * @param {Object} options - The new default options. + */ + + }], [{ + key: 'setDefaults', + value: function setDefaults(options) { + $.extend(DEFAULTS, $.isPlainObject(options) && options); + } + }]); + return Cropper; +}(); + +if ($.extend) { + $.extend(Cropper.prototype, render, preview, events, handlers, change, methods); +} + +if ($.fn) { + var AnotherCropper = $.fn.cropper; + + $.fn.cropper = function jQueryCropper(option) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var result = void 0; + + this.each(function (i, element) { + var $element = $(element); + var data = $element.data(NAMESPACE); + + if (!data) { + if (/destroy/.test(option)) { + return; + } + + var options = $.extend({}, $element.data(), $.isPlainObject(option) && option); + + data = new Cropper(element, options); + $element.data(NAMESPACE, data); + } + + if (isString(option)) { + var fn = data[option]; + + if ($.isFunction(fn)) { + result = fn.apply(data, args); + } + } + }); + + return isUndefined(result) ? this : result; + }; + + $.fn.cropper.Constructor = Cropper; + $.fn.cropper.setDefaults = Cropper.setDefaults; + $.fn.cropper.noConflict = function noConflict() { + $.fn.cropper = AnotherCropper; + return this; + }; +} + +}))); diff --git a/docs/v3.1.6/js/main.js b/docs/v3.1.6/js/main.js new file mode 100644 index 00000000..f384f785 --- /dev/null +++ b/docs/v3.1.6/js/main.js @@ -0,0 +1,275 @@ +$(function () { + + 'use strict'; + + var console = window.console || { log: function () {} }; + var URL = window.URL || window.webkitURL; + var $image = $('#image'); + var $download = $('#download'); + var $dataX = $('#dataX'); + var $dataY = $('#dataY'); + var $dataHeight = $('#dataHeight'); + var $dataWidth = $('#dataWidth'); + var $dataRotate = $('#dataRotate'); + var $dataScaleX = $('#dataScaleX'); + var $dataScaleY = $('#dataScaleY'); + var options = { + aspectRatio: 16 / 9, + preview: '.img-preview', + crop: function (e) { + $dataX.val(Math.round(e.x)); + $dataY.val(Math.round(e.y)); + $dataHeight.val(Math.round(e.height)); + $dataWidth.val(Math.round(e.width)); + $dataRotate.val(e.rotate); + $dataScaleX.val(e.scaleX); + $dataScaleY.val(e.scaleY); + } + }; + var originalImageURL = $image.attr('src'); + var uploadedImageName = 'cropped.jpg'; + var uploadedImageType = 'image/jpeg'; + var uploadedImageURL; + + + // Tooltip + $('[data-toggle="tooltip"]').tooltip(); + + + // Cropper + $image.on({ + ready: function (e) { + console.log(e.type); + }, + cropstart: function (e) { + console.log(e.type, e.action); + }, + cropmove: function (e) { + console.log(e.type, e.action); + }, + cropend: function (e) { + console.log(e.type, e.action); + }, + crop: function (e) { + console.log(e.type, e.x, e.y, e.width, e.height, e.rotate, e.scaleX, e.scaleY); + }, + zoom: function (e) { + console.log(e.type, e.ratio); + } + }).cropper(options); + + + // Buttons + if (!$.isFunction(document.createElement('canvas').getContext)) { + $('button[data-method="getCroppedCanvas"]').prop('disabled', true); + } + + if (typeof document.createElement('cropper').style.transition === 'undefined') { + $('button[data-method="rotate"]').prop('disabled', true); + $('button[data-method="scale"]').prop('disabled', true); + } + + + // Download + if (typeof $download[0].download === 'undefined') { + $download.addClass('disabled'); + } + + + // Options + $('.docs-toggles').on('change', 'input', function () { + var $this = $(this); + var name = $this.attr('name'); + var type = $this.prop('type'); + var cropBoxData; + var canvasData; + + if (!$image.data('cropper')) { + return; + } + + if (type === 'checkbox') { + options[name] = $this.prop('checked'); + cropBoxData = $image.cropper('getCropBoxData'); + canvasData = $image.cropper('getCanvasData'); + + options.ready = function () { + $image.cropper('setCropBoxData', cropBoxData); + $image.cropper('setCanvasData', canvasData); + }; + } else if (type === 'radio') { + options[name] = $this.val(); + } + + $image.cropper('destroy').cropper(options); + }); + + + // Methods + $('.docs-buttons').on('click', '[data-method]', function () { + var $this = $(this); + var data = $this.data(); + var cropper = $image.data('cropper'); + var cropped; + var $target; + var result; + + if ($this.prop('disabled') || $this.hasClass('disabled')) { + return; + } + + if (cropper && data.method) { + data = $.extend({}, data); // Clone a new one + + if (typeof data.target !== 'undefined') { + $target = $(data.target); + + if (typeof data.option === 'undefined') { + try { + data.option = JSON.parse($target.val()); + } catch (e) { + console.log(e.message); + } + } + } + + cropped = cropper.cropped; + + switch (data.method) { + case 'rotate': + if (cropped && options.viewMode > 0) { + $image.cropper('clear'); + } + + break; + + case 'getCroppedCanvas': + if (uploadedImageType === 'image/jpeg') { + if (!data.option) { + data.option = {}; + } + + data.option.fillColor = '#fff'; + } + + break; + } + + result = $image.cropper(data.method, data.option, data.secondOption); + + switch (data.method) { + case 'rotate': + if (cropped && options.viewMode > 0) { + $image.cropper('crop'); + } + + break; + + case 'scaleX': + case 'scaleY': + $(this).data('option', -data.option); + break; + + case 'getCroppedCanvas': + if (result) { + // Bootstrap's Modal + $('#getCroppedCanvasModal').modal().find('.modal-body').html(result); + + if (!$download.hasClass('disabled')) { + download.download = uploadedImageName; + $download.attr('href', result.toDataURL(uploadedImageType)); + } + } + + break; + + case 'destroy': + if (uploadedImageURL) { + URL.revokeObjectURL(uploadedImageURL); + uploadedImageURL = ''; + $image.attr('src', originalImageURL); + } + + break; + } + + if ($.isPlainObject(result) && $target) { + try { + $target.val(JSON.stringify(result)); + } catch (e) { + console.log(e.message); + } + } + + } + }); + + + // Keyboard + $(document.body).on('keydown', function (e) { + + if (!$image.data('cropper') || this.scrollTop > 300) { + return; + } + + switch (e.which) { + case 37: + e.preventDefault(); + $image.cropper('move', -1, 0); + break; + + case 38: + e.preventDefault(); + $image.cropper('move', 0, -1); + break; + + case 39: + e.preventDefault(); + $image.cropper('move', 1, 0); + break; + + case 40: + e.preventDefault(); + $image.cropper('move', 0, 1); + break; + } + + }); + + + // Import image + var $inputImage = $('#inputImage'); + + if (URL) { + $inputImage.change(function () { + var files = this.files; + var file; + + if (!$image.data('cropper')) { + return; + } + + if (files && files.length) { + file = files[0]; + + if (/^image\/\w+$/.test(file.type)) { + uploadedImageName = file.name; + uploadedImageType = file.type; + + if (uploadedImageURL) { + URL.revokeObjectURL(uploadedImageURL); + } + + uploadedImageURL = URL.createObjectURL(file); + $image.cropper('destroy').attr('src', uploadedImageURL).cropper(options); + $inputImage.val(''); + } else { + window.alert('Please choose an image file.'); + } + } + }); + } else { + $inputImage.prop('disabled', true).parent().addClass('disabled'); + } + +}); diff --git a/package-lock.json b/package-lock.json index db0573fe..6462ebf2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,23 +1,217 @@ { "name": "cropper", - "version": "3.1.6", + "version": "4.0.0-alpha", "lockfileVersion": 1, "requires": true, "dependencies": { + "@commitlint/cli": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-6.1.2.tgz", + "integrity": "sha1-3Ex1B6st7pKoIel1NVbxrB4mGIM=", + "dev": true, + "requires": { + "@commitlint/format": "6.1.2", + "@commitlint/lint": "6.1.2", + "@commitlint/load": "6.1.2", + "@commitlint/read": "6.1.2", + "babel-polyfill": "6.26.0", + "chalk": "2.3.1", + "get-stdin": "5.0.1", + "lodash.merge": "4.6.1", + "lodash.pick": "4.4.0", + "meow": "3.7.0" + } + }, + "@commitlint/config-angular": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/config-angular/-/config-angular-6.1.2.tgz", + "integrity": "sha1-k0Xo43shSQCqj+DQq8yRy4rgKJQ=", + "dev": true, + "requires": { + "@commitlint/config-angular-type-enum": "6.1.2" + } + }, + "@commitlint/config-angular-type-enum": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/config-angular-type-enum/-/config-angular-type-enum-6.1.2.tgz", + "integrity": "sha1-z0K9qwwEbIDNM5DM5jPeked9MBw=", + "dev": true + }, + "@commitlint/ensure": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-6.1.2.tgz", + "integrity": "sha1-wnpp4hPPvkcCMmH0FpVZwVQ3jFE=", + "dev": true, + "requires": { + "lodash.camelcase": "4.3.0", + "lodash.kebabcase": "4.1.1", + "lodash.snakecase": "4.1.1", + "lodash.startcase": "4.4.0", + "lodash.upperfirst": "4.3.1" + } + }, + "@commitlint/execute-rule": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-6.1.2.tgz", + "integrity": "sha1-74x+4Qcm+GMhHUlL6OTq8AGg4lg=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "@commitlint/format": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-6.1.2.tgz", + "integrity": "sha1-9G+pb4dDacFmtCDj7Vn3RcO7PUk=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "chalk": "2.3.1" + } + }, + "@commitlint/is-ignored": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-6.1.2.tgz", + "integrity": "sha1-JU1bq0gII63PT6lFyuHqjVMyYuE=", + "dev": true, + "requires": { + "semver": "5.5.0" + } + }, + "@commitlint/lint": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-6.1.2.tgz", + "integrity": "sha1-p8W8BR6wU51Bkk+wwRrxO/4YbLI=", + "dev": true, + "requires": { + "@commitlint/is-ignored": "6.1.2", + "@commitlint/parse": "6.1.2", + "@commitlint/rules": "6.1.2", + "babel-runtime": "6.26.0", + "lodash.topairs": "4.3.0" + } + }, + "@commitlint/load": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-6.1.2.tgz", + "integrity": "sha1-INFtL9cr09HtaiK3I0sf1VyV+9w=", + "dev": true, + "requires": { + "@commitlint/execute-rule": "6.1.2", + "@commitlint/resolve-extends": "6.1.2", + "babel-runtime": "6.26.0", + "cosmiconfig": "4.0.0", + "lodash.merge": "4.6.1", + "lodash.mergewith": "4.6.1", + "lodash.pick": "4.4.0", + "lodash.topairs": "4.3.0", + "resolve-from": "4.0.0" + } + }, + "@commitlint/message": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-6.1.2.tgz", + "integrity": "sha1-fw9xhYuuIxCrRYhq7/P4rkhIPCE=", + "dev": true + }, + "@commitlint/parse": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-6.1.2.tgz", + "integrity": "sha1-kgyCpBrCiwFp8aXUrUEVzv2pYgU=", + "dev": true, + "requires": { + "conventional-changelog-angular": "1.6.6", + "conventional-commits-parser": "2.1.5" + } + }, + "@commitlint/read": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-6.1.2.tgz", + "integrity": "sha1-bznWLMEgwTnQdewgXtHb/GgfFz8=", + "dev": true, + "requires": { + "@commitlint/top-level": "6.1.2", + "@marionebl/sander": "0.6.1", + "babel-runtime": "6.26.0", + "git-raw-commits": "1.3.4" + } + }, + "@commitlint/resolve-extends": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-6.1.2.tgz", + "integrity": "sha1-tItxlSQ9yTgbzzQcL8trHoA9qLQ=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "lodash.merge": "4.6.1", + "lodash.omit": "4.5.0", + "require-uncached": "1.0.3", + "resolve-from": "4.0.0", + "resolve-global": "0.1.0" + } + }, + "@commitlint/rules": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-6.1.2.tgz", + "integrity": "sha1-LO/6e/adH+MnvLF496cb1OCU41U=", + "dev": true, + "requires": { + "@commitlint/ensure": "6.1.2", + "@commitlint/message": "6.1.2", + "@commitlint/to-lines": "6.1.2", + "babel-runtime": "6.26.0" + } + }, + "@commitlint/to-lines": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-6.1.2.tgz", + "integrity": "sha1-AdAnL+mKUw5lOO+TT5cK6uP6SYw=", + "dev": true + }, + "@commitlint/top-level": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-6.1.2.tgz", + "integrity": "sha1-KAwXmvxRfSpYwceapQGe3/pdRD0=", + "dev": true, + "requires": { + "find-up": "2.1.0" + } + }, + "@marionebl/sander": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@marionebl/sander/-/sander-0.6.1.tgz", + "integrity": "sha1-GViWWHTyS8Ub5Ih1/rUNZC/EH3s=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" + } + }, "JSONStream": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz", - "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", + "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", "dev": true, "requires": { - "jsonparse": "0.0.5", + "jsonparse": "1.3.1", "through": "2.3.8" } }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + } + }, "acorn": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz", - "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.0.tgz", + "integrity": "sha512-arn53F07VXmls4o4pUhSzBa4fvaagPRe7AVZ8l7NHxFWUie2DsuFSBMMNAkgzRlOhEhzAnxeKyaWVzOH4xqp/g==", "dev": true }, "acorn-jsx": { @@ -37,22 +231,63 @@ } } }, + "acorn-node": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.3.0.tgz", + "integrity": "sha512-efP54n3d1aLfjL2UMdaXa6DsswwzJeI5rqhbFvXMrKiJ6eJFpf+7R0zN7t8IC+XKn2YOAFAv6xbBNgHUkoHWLw==", + "dev": true, + "requires": { + "acorn": "5.5.0", + "xtend": "4.0.1" + } + }, + "addressparser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", + "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=", + "dev": true, + "optional": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "agent-base": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", + "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", + "dev": true, + "requires": { + "extend": "3.0.1", + "semver": "5.0.3" + }, + "dependencies": { + "semver": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", + "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", + "dev": true + } + } + }, "ajv": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz", - "integrity": "sha1-wG9Zh3jETGsWGrr+NGa4GtGBTtI=", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "json-schema-traverse": "0.3.1", - "json-stable-stringify": "1.0.1" + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, "ajv-keywords": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.0.tgz", - "integrity": "sha1-opbhf3v658HOT34N5T0pyzIWLfA=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", "dev": true }, "alphanum-sort": { @@ -67,6 +302,49 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, + "amqplib": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.2.tgz", + "integrity": "sha512-l9mCs6LbydtHqRniRwYkKdqxVa6XMz3Vw1fh+2gJaaVgTM6Jk3o8RccAKWKtlhT1US5sWrFh+KKxsVUALURSIA==", + "dev": true, + "optional": true, + "requires": { + "bitsyntax": "0.0.4", + "bluebird": "3.5.1", + "buffer-more-ints": "0.0.2", + "readable-stream": "1.1.14", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true, + "optional": true + } + } + }, "ansi-align": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", @@ -89,10 +367,13 @@ "dev": true }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } }, "anymatch": { "version": "1.3.2", @@ -102,12 +383,23 @@ "requires": { "micromatch": "2.3.11", "normalize-path": "2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + } } }, "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "1.0.3" @@ -152,6 +444,12 @@ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, "array-map": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", @@ -164,6 +462,12 @@ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", "dev": true }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -185,6 +489,12 @@ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -195,7 +505,28 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true + "dev": true, + "optional": true + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } }, "assert-plus": { "version": "1.0.0", @@ -203,23 +534,70 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, + "ast-types": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.2.tgz", + "integrity": "sha512-aL+pcOQ+6dpWd0xrUe+Obo2CgdkFvsntkXEmzZKqEN4cR0PStF+1MBuc4V+YZsv4Q36luvyjG7F4lc+wH2bmag==", + "dev": true, + "optional": true + }, + "astw": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", + "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", + "dev": true, + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "async": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/async/-/async-2.1.5.tgz", + "integrity": "sha1-5YfGhYCZSsZ/xW/4bTrFa9voELw=", + "dev": true, + "optional": true, + "requires": { + "lodash": "4.17.5" + } + }, "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "dev": true, + "optional": true }, "atob": { "version": "2.0.3", @@ -234,7 +612,7 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000744", + "caniuse-db": "1.0.30000810", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "5.2.18", @@ -247,8 +625,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000744", - "electron-to-chromium": "1.3.24" + "caniuse-db": "1.0.30000810", + "electron-to-chromium": "1.3.34" } } } @@ -257,13 +635,25 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "dev": true, + "optional": true }, "aws4": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true + "dev": true, + "optional": true + }, + "axios": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.15.3.tgz", + "integrity": "sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM=", + "dev": true, + "optional": true, + "requires": { + "follow-redirects": "1.0.0" + } }, "babel-code-frame": { "version": "6.26.0", @@ -274,6 +664,33 @@ "chalk": "1.1.3", "esutils": "2.0.2", "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } } }, "babel-core": { @@ -283,7 +700,7 @@ "dev": true, "requires": { "babel-code-frame": "6.26.0", - "babel-generator": "6.26.0", + "babel-generator": "6.26.1", "babel-helpers": "6.24.1", "babel-messages": "6.23.0", "babel-register": "6.26.0", @@ -292,21 +709,21 @@ "babel-traverse": "6.26.0", "babel-types": "6.26.0", "babylon": "6.18.0", - "convert-source-map": "1.5.0", + "convert-source-map": "1.5.1", "debug": "2.6.9", "json5": "0.5.1", - "lodash": "4.17.4", + "lodash": "4.17.5", "minimatch": "3.0.4", "path-is-absolute": "1.0.1", - "private": "0.1.7", + "private": "0.1.8", "slash": "1.0.0", "source-map": "0.5.7" } }, "babel-generator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", - "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { "babel-messages": "6.23.0", @@ -314,7 +731,7 @@ "babel-types": "6.26.0", "detect-indent": "4.0.0", "jsesc": "1.3.0", - "lodash": "4.17.4", + "lodash": "4.17.5", "source-map": "0.5.7", "trim-right": "1.0.1" } @@ -351,7 +768,7 @@ "babel-helper-function-name": "6.24.1", "babel-runtime": "6.26.0", "babel-types": "6.26.0", - "lodash": "4.17.4" + "lodash": "4.17.5" } }, "babel-helper-explode-assignable-expression": { @@ -416,7 +833,7 @@ "requires": { "babel-runtime": "6.26.0", "babel-types": "6.26.0", - "lodash": "4.17.4" + "lodash": "4.17.5" } }, "babel-helper-remap-async-to-generator": { @@ -540,7 +957,7 @@ "babel-template": "6.26.0", "babel-traverse": "6.26.0", "babel-types": "6.26.0", - "lodash": "4.17.4" + "lodash": "4.17.5" } }, "babel-plugin-transform-es2015-classes": { @@ -776,6 +1193,25 @@ "babel-types": "6.26.0" } }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "core-js": "2.5.3", + "regenerator-runtime": "0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + } + } + }, "babel-preset-env": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", @@ -809,9 +1245,9 @@ "babel-plugin-transform-es2015-unicode-regex": "6.24.1", "babel-plugin-transform-exponentiation-operator": "6.24.1", "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "2.5.0", - "invariant": "2.2.2", - "semver": "5.4.1" + "browserslist": "2.11.3", + "invariant": "2.2.3", + "semver": "5.5.0" } }, "babel-register": { @@ -822,9 +1258,9 @@ "requires": { "babel-core": "6.26.0", "babel-runtime": "6.26.0", - "core-js": "2.5.1", + "core-js": "2.5.3", "home-or-tmp": "2.0.0", - "lodash": "4.17.4", + "lodash": "4.17.5", "mkdirp": "0.5.1", "source-map-support": "0.4.18" } @@ -835,8 +1271,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.11.0" + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" } }, "babel-template": { @@ -849,7 +1285,7 @@ "babel-traverse": "6.26.0", "babel-types": "6.26.0", "babylon": "6.18.0", - "lodash": "4.17.4" + "lodash": "4.17.5" } }, "babel-traverse": { @@ -865,8 +1301,8 @@ "babylon": "6.18.0", "debug": "2.6.9", "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" + "invariant": "2.2.3", + "lodash": "4.17.5" } }, "babel-types": { @@ -877,7 +1313,7 @@ "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", - "lodash": "4.17.4", + "lodash": "4.17.5", "to-fast-properties": "1.0.3" } }, @@ -887,6 +1323,12 @@ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -925,20 +1367,104 @@ } } }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", + "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, "requires": { "tweetnacl": "0.14.5" } }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, "binary-extensions": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", - "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "bitsyntax": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.0.4.tgz", + "integrity": "sha1-6xDMb4K4xJDj6FaY8H6D1G4MuoI=", + "dev": true, + "optional": true, + "requires": { + "buffer-more-ints": "0.0.2" + } + }, + "bl": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", + "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "2.0.6" + }, + "dependencies": { + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true, + "optional": true + } + } + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", "dev": true }, "bluebird": { @@ -947,77 +1473,59 @@ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", "dev": true }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + } + }, "boom": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "dev": true, + "optional": true, "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } }, "boxen": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.2.2.tgz", - "integrity": "sha1-Px1AMsMP/qnUsCwyLq8up0HcvOU=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", "dev": true, "requires": { "ansi-align": "2.0.0", "camelcase": "4.1.0", - "chalk": "2.3.0", + "chalk": "2.3.1", "cli-boxes": "1.0.0", "string-width": "2.1.1", "term-size": "1.2.0", - "widest-line": "1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } + "widest-line": "2.0.0" } }, "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "1.0.0", @@ -1035,14 +1543,261 @@ "repeat-element": "1.1.2" } }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-pack": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.4.tgz", + "integrity": "sha512-Q4Rvn7P6ObyWfc4stqLWHtG1MJ8vVtjgT24Zbu+8UTzxYuZouqZsmNRRTFVMY/Ux0eIKv1d+JWzsInTX+fdHPQ==", + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "combine-source-map": "0.8.0", + "defined": "1.0.0", + "safe-buffer": "5.1.1", + "through2": "2.0.3", + "umd": "3.0.1" + } + }, + "browser-resolve": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", + "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "browserify": { + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.5.0.tgz", + "integrity": "sha512-gKfOsNQv/toWz+60nSPfYzuwSEdzvV2WdxrVPUbPD/qui44rAkB3t3muNtmmGYHqrG56FGwX9SUEQmzNLAeS7g==", + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "assert": "1.4.1", + "browser-pack": "6.0.4", + "browser-resolve": "1.11.2", + "browserify-zlib": "0.2.0", + "buffer": "5.1.0", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "defined": "1.0.0", + "deps-sort": "2.0.0", + "domain-browser": "1.1.7", + "duplexer2": "0.1.4", + "events": "1.1.1", + "glob": "7.1.2", + "has": "1.0.1", + "htmlescape": "1.1.1", + "https-browserify": "1.0.0", + "inherits": "2.0.3", + "insert-module-globals": "7.0.2", + "labeled-stream-splicer": "2.0.0", + "module-deps": "4.1.1", + "os-browserify": "0.3.0", + "parents": "1.0.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "read-only-stream": "2.0.0", + "readable-stream": "2.3.4", + "resolve": "1.5.0", + "shasum": "1.0.2", + "shell-quote": "1.6.1", + "stream-browserify": "2.0.1", + "stream-http": "2.8.0", + "string_decoder": "1.0.3", + "subarg": "1.0.0", + "syntax-error": "1.4.0", + "through2": "2.0.3", + "timers-browserify": "1.4.2", + "tty-browserify": "0.0.1", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4", + "xtend": "4.0.1" + }, + "dependencies": { + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + } + } + }, + "browserify-aes": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", + "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true, + "requires": { + "browserify-aes": "1.1.1", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.6" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "1.0.6" + } + }, "browserslist": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.5.0.tgz", - "integrity": "sha512-6Vw1LIigGw8zCK0gxczksUMZlO+oPUwBazAztMmFL/F8D5wB0qCuxRJGYgYM3JzaO0v2ZMRIg+nnnOgNsPGHeA==", + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", + "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000810", + "electron-to-chromium": "1.3.34" + } + }, + "buffer": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", + "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", + "dev": true, + "requires": { + "base64-js": "1.2.3", + "ieee754": "1.1.8" + } + }, + "buffer-more-ints": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz", + "integrity": "sha1-JrOIXRD6E9t/wBquOquHAZngEkw=", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "buildmail": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/buildmail/-/buildmail-4.0.1.tgz", + "integrity": "sha1-h393OLeHKYccmhBeO4N9K+EaenI=", "dev": true, + "optional": true, "requires": { - "caniuse-lite": "1.0.30000744", - "electron-to-chromium": "1.3.24" + "addressparser": "1.0.1", + "libbase64": "0.1.0", + "libmime": "3.0.0", + "libqp": "1.1.0", + "nodemailer-fetch": "1.6.0", + "nodemailer-shared": "1.1.0", + "punycode": "1.4.1" } }, "builtin-modules": { @@ -1051,6 +1806,18 @@ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -1076,6 +1843,12 @@ } } }, + "cached-path-relative": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", + "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", + "dev": true + }, "caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", @@ -1085,6 +1858,12 @@ "callsites": "0.2.0" } }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, "callsites": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", @@ -1092,19 +1871,20 @@ "dev": true }, "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", "dev": true, "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "camelcase": "4.1.0", + "map-obj": "2.0.0", + "quick-lru": "1.1.0" } }, "caniuse-api": { @@ -1114,7 +1894,7 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000744", + "caniuse-db": "1.0.30000810", "lodash.memoize": "4.1.2", "lodash.uniq": "4.5.0" }, @@ -1125,22 +1905,22 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000744", - "electron-to-chromium": "1.3.24" + "caniuse-db": "1.0.30000810", + "electron-to-chromium": "1.3.34" } } } }, "caniuse-db": { - "version": "1.0.30000744", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000744.tgz", - "integrity": "sha1-AHWP991fcTjTShVgjcz3Glllb/4=", + "version": "1.0.30000810", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000810.tgz", + "integrity": "sha1-vSWDDEHvq2Qzmi44H0lnc0PIRQk=", "dev": true }, "caniuse-lite": { - "version": "1.0.30000744", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000744.tgz", - "integrity": "sha1-hg+lyDujT+YZOX1gfzC7R0ghZxs=", + "version": "1.0.30000810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000810.tgz", + "integrity": "sha512-/0Q00Oie9C72P8zQHtFvzmkrMC3oOFUnMWjCy5F2+BE8lzICm91hQPhh0+XIsAFPKOe2Dh3pKgbRmU3EKxfldA==", "dev": true }, "capture-stack-trace": { @@ -1153,19 +1933,32 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true + "dev": true, + "optional": true + }, + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "dev": true, + "requires": { + "assertion-error": "1.1.0", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.8" + } }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", + "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", "dev": true, "requires": { - "ansi-styles": "2.2.1", + "ansi-styles": "3.2.0", "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "supports-color": "5.2.0" } }, "chardet": { @@ -1174,6 +1967,12 @@ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", "dev": true }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", @@ -1191,6 +1990,22 @@ "readdirp": "2.1.0" } }, + "ci-info": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz", + "integrity": "sha512-uTGIPNx/nSpBdsF6xnseRXLLtfr9VLqkz8ZqHXr3Y7b6SftyRxBGjwMtJj1OhNbmlc1wZzLNAlAcvyIiE8a6ZA==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, "circular-json": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", @@ -1204,11 +2019,38 @@ "dev": true, "requires": { "chalk": "1.1.3" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { @@ -1242,7 +2084,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "1.1.6" } } } @@ -1262,7 +2104,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "1.1.6" } } } @@ -1314,42 +2156,37 @@ "dev": true }, "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", + "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", "wrap-ansi": "2.1.0" }, "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "ansi-regex": "3.0.0" } } } }, "clone": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", "dev": true }, "clone-regexp": { @@ -1374,7 +2211,7 @@ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "dev": true, "requires": { - "q": "1.5.0" + "q": "1.5.1" } }, "code-point-at": { @@ -1399,15 +2236,15 @@ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "dev": true, "requires": { - "clone": "1.0.2", - "color-convert": "1.9.0", + "clone": "1.0.3", + "color-convert": "1.9.1", "color-string": "0.3.0" } }, "color-convert": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", - "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "dev": true, "requires": { "color-name": "1.1.3" @@ -1435,9 +2272,9 @@ } }, "colorguard": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/colorguard/-/colorguard-1.2.0.tgz", - "integrity": "sha1-8/rK9cquuk71RlPZ+yW7cxd8DYQ=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorguard/-/colorguard-1.2.1.tgz", + "integrity": "sha512-qYVKTg626qpDg4/eBnPXidEPXn5+krbYqHVfyyEFBWV5z3IF4p44HKY/eE2t1ohlcrlIkDgHmFJMfQ8qMLnSFw==", "dev": true, "requires": { "chalk": "1.1.3", @@ -1452,6 +2289,34 @@ "yargs": "1.3.3" }, "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, "postcss-reporter": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-1.4.1.tgz", @@ -1459,11 +2324,17 @@ "dev": true, "requires": { "chalk": "1.1.3", - "lodash": "4.17.4", + "lodash": "4.17.5", "log-symbols": "1.0.2", "postcss": "5.2.18" } }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, "yargs": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.3.3.tgz", @@ -1489,19 +2360,70 @@ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, + "combine-lists": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, + "combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", + "dev": true, + "requires": { + "convert-source-map": "1.1.3", + "inline-source-map": "0.6.2", + "lodash.memoize": "3.0.4", + "source-map": "0.5.7" + }, + "dependencies": { + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "dev": true + } + } + }, "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { "delayed-stream": "1.0.0" } }, "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", + "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==", + "dev": true + }, + "compare-func": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", + "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", + "dev": true, + "requires": { + "array-ify": "1.0.0", + "dot-prop": "3.0.0" + } + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", "dev": true }, "component-emitter": { @@ -1510,6 +2432,12 @@ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1523,7 +2451,7 @@ "dev": true, "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.3", + "readable-stream": "2.3.4", "typedarray": "0.0.6" } }, @@ -1535,22 +2463,116 @@ "requires": { "dot-prop": "4.2.0", "graceful-fs": "4.1.11", - "make-dir": "1.1.0", + "make-dir": "1.2.0", "unique-string": "1.0.0", "write-file-atomic": "2.3.0", "xdg-basedir": "3.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "1.0.1" + } + } + } + }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "1.3.2", + "utils-merge": "1.0.1" + } + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" } }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, "contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "conventional-changelog-angular": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz", + "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==", + "dev": true, + "requires": { + "compare-func": "1.3.2", + "q": "1.5.1" + } + }, + "conventional-commits-parser": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.5.tgz", + "integrity": "sha512-jaAP61py+ISMF3/n3yIiIuY5h6mJlucOqawu5mLB1HaQADLvg/y5UB3pT7HSucZJan34lp7+7ylQPfbKEGmxrA==", + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "is-text-path": "1.0.1", + "lodash": "4.17.5", + "meow": "4.0.0", + "split2": "2.2.0", + "through2": "2.0.3", + "trim-off-newlines": "1.0.1" + }, + "dependencies": { + "meow": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.0.tgz", + "integrity": "sha512-Me/kel335m6vMKmEmA6c87Z6DUFW3JqkINRnxkbC+A/PUm0D5Fl2dEBQrPKnqCL9Te/CIa1MUt/0InMJhuC/sw==", + "dev": true, + "requires": { + "camelcase-keys": "4.2.0", + "decamelize-keys": "1.1.0", + "loud-rejection": "1.6.0", + "minimist": "1.2.0", + "minimist-options": "3.0.2", + "normalize-package-data": "2.4.0", + "read-pkg-up": "3.0.0", + "redent": "2.0.0", + "trim-newlines": "2.0.0" + } + } + } + }, "convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", "dev": true }, "copy-descriptor": { @@ -1560,9 +2582,9 @@ "dev": true }, "core-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", "dev": true }, "core-util-is": { @@ -1572,26 +2594,15 @@ "dev": true }, "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", "dev": true, "requires": { "is-directory": "0.3.1", - "js-yaml": "3.7.0", - "minimist": "1.2.0", - "object-assign": "4.1.1", - "os-homedir": "1.0.2", - "parse-json": "2.2.0", - "require-from-string": "1.2.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } + "js-yaml": "3.10.0", + "parse-json": "4.0.0", + "require-from-string": "2.0.1" } }, "cp-file": { @@ -1606,7 +2617,15 @@ "object-assign": "4.1.1", "pify": "2.3.0", "pinkie-promise": "2.0.1", - "readable-stream": "2.3.3" + "readable-stream": "2.3.4" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "cpy": { @@ -1633,6 +2652,16 @@ "meow": "3.7.0" } }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, "create-error-class": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", @@ -1642,6 +2671,38 @@ "capture-stack-trace": "1.0.0" } }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.10" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.10" + } + }, + "cropperjs": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.3.1.tgz", + "integrity": "sha512-ohkKN8W5Bpdu9dedydEoXGkGByBKASQ8FxYN6Iu/7BiWi1YGkaLc51/R0Bfr2KXzeVP8bh6e3SkZLBAAYHuxvw==", + "dev": true + }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", @@ -1658,6 +2719,7 @@ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", "dev": true, + "optional": true, "requires": { "boom": "5.2.0" }, @@ -1667,12 +2729,32 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "dev": true, + "optional": true, "requires": { - "hoek": "4.2.0" + "hoek": "4.2.1" } } } }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.0", + "randombytes": "2.0.6", + "randomfill": "1.0.4" + } + }, "crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", @@ -1741,6 +2823,65 @@ "duplexer2": "0.0.2", "ldjson-stream": "1.2.1", "through2": "0.6.5" + }, + "dependencies": { + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "1.1.14" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + } + } + } } }, "css-tokenize": { @@ -1850,23 +2991,58 @@ "array-find-index": "1.0.2" } }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "dargs": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", + "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, + "optional": true, "requires": { "assert-plus": "1.0.0" } }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "data-uri-to-buffer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz", + "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==", "dev": true, - "requires": { - "ms": "2.0.0" - } + "optional": true + }, + "date-format": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", + "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", + "dev": true + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "decamelize": { "version": "1.2.0", @@ -1874,12 +3050,39 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "1.2.0", + "map-obj": "1.0.1" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, "deep-extend": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", @@ -1926,90 +3129,41 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "degenerator": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", + "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", "dev": true, + "optional": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" + "ast-types": "0.11.2", + "escodegen": "1.9.1", + "esprima": "3.1.3" }, "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } + "optional": true } } }, - "del-cli": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/del-cli/-/del-cli-1.1.0.tgz", - "integrity": "sha1-J1V9aaC335ncuqHjSgnmrGWR0sQ=", + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "del": "3.0.0", - "meow": "3.7.0", - "update-notifier": "2.3.0" + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "p-map": "1.2.0", + "pify": "3.0.0", + "rimraf": "2.6.2" }, "dependencies": { - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, "globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", @@ -2030,27 +3184,60 @@ "dev": true } } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true } } }, + "del-cli": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/del-cli/-/del-cli-1.1.0.tgz", + "integrity": "sha1-J1V9aaC335ncuqHjSgnmrGWR0sQ=", + "dev": true, + "requires": { + "del": "3.0.0", + "meow": "3.7.0", + "update-notifier": "2.3.0" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, "dependency-graph": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.0.tgz", "integrity": "sha512-QzVBbA603vbxF1SMvYmGbE9ZXl+ggb+2SbHvIeOw0w753lgbXC2bZOnCmvG9qr+zlrKK/E0rqtCXOfrRGKH4/Q==", "dev": true }, + "deps-sort": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", + "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "shasum": "1.0.2", + "subarg": "1.0.0", + "through2": "2.0.3" + } + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, "detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", @@ -2060,12 +3247,39 @@ "repeating": "2.0.1" } }, + "detective": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", + "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", + "dev": true, + "requires": { + "acorn": "5.5.0", + "defined": "1.0.0" + } + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, "diff": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", "dev": true }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" + } + }, "dir-glob": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", @@ -2074,23 +3288,6 @@ "requires": { "arrify": "1.0.1", "path-type": "3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } } }, "doctrine": { @@ -2109,12 +3306,12 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000744", + "caniuse-db": "1.0.30000810", "css-rule-stream": "1.1.0", "duplexer2": "0.0.2", "jsonfilter": "1.1.2", "ldjson-stream": "1.2.1", - "lodash": "4.17.4", + "lodash": "4.17.5", "multimatch": "2.1.0", "postcss": "5.2.18", "source-map": "0.4.4", @@ -2128,8 +3325,34 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000744", - "electron-to-chromium": "1.3.24" + "caniuse-db": "1.0.30000810", + "electron-to-chromium": "1.3.34" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "1.1.14" } }, "is-fullwidth-code-point": { @@ -2141,6 +3364,12 @@ "number-is-nan": "1.0.1" } }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, "os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", @@ -2150,6 +3379,18 @@ "lcid": "1.0.0" } }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", @@ -2170,6 +3411,36 @@ "strip-ansi": "3.0.1" } }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + } + } + }, "yargs": { "version": "3.32.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", @@ -2187,15 +3458,40 @@ } } }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "1.0.1", + "ent": "2.2.0", + "extend": "3.0.1", + "void-elements": "2.0.1" + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", "dev": true, "requires": { "is-obj": "1.0.1" } }, + "double-ended-queue": { + "version": "2.1.0-0", + "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", + "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=", + "dev": true, + "optional": true + }, "duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", @@ -2203,38 +3499,12 @@ "dev": true }, "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { - "readable-stream": "1.1.14" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } + "readable-stream": "2.3.4" } }, "duplexer3": { @@ -2260,9 +3530,9 @@ "dev": true, "requires": { "bluebird": "3.5.1", - "commander": "2.11.0", + "commander": "2.14.1", "lru-cache": "3.2.0", - "semver": "5.4.1", + "semver": "5.5.0", "sigmund": "1.0.1" }, "dependencies": { @@ -2277,10 +3547,112 @@ } } }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, "electron-to-chromium": { - "version": "1.3.24", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.24.tgz", - "integrity": "sha1-m3uIuwXOufoBahd4M8wt3jiPIbY=", + "version": "1.3.34", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.34.tgz", + "integrity": "sha1-2TSY9AORuwwWpgPYJBuZUUBBV+0=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "engine.io": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz", + "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==", + "dev": true, + "requires": { + "accepts": "1.3.5", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "3.1.0", + "engine.io-parser": "2.1.2", + "uws": "9.14.0", + "ws": "3.3.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-client": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.5.tgz", + "integrity": "sha512-Rv9vgb83zrNVhRircUXHi4mtbJhgy2oWtJOCZEbCLFs2HiDSWmh/aOEj8TwoKsn8zXGqTuQuPSoU4v3E10bR6A==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "3.1.0", + "engine.io-parser": "2.1.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "3.3.3", + "xmlhttprequest-ssl": "1.5.5", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", + "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary2": "1.0.2" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", "dev": true }, "error-ex": { @@ -2293,9 +3665,9 @@ } }, "es-abstract": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.9.0.tgz", - "integrity": "sha512-kk3IJoKo7A3pWJc0OV8yZ/VEX2oSUytfekrJiqoxBlKJMFAJVJVpGdHClCCTdv+Fn2zHfpDHHIelMFhZVfef3Q==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", + "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", "dev": true, "requires": { "es-to-primitive": "1.1.1", @@ -2317,9 +3689,24 @@ } }, "es6-promise": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.2.tgz", - "integrity": "sha512-LSas5vsuA6Q4nEdf9wokY5/AJYXry98i0IzXsv49rYsgDGDNDPbqAYR1Pe23iFxygfbGZNR/5VrHXBCh2BhvUQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "4.2.4" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, "escape-string-regexp": { @@ -2328,6 +3715,36 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, + "escodegen": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "dev": true, + "optional": true, + "requires": { + "esprima": "3.1.3", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, "eslint": { "version": "4.18.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.18.1.tgz", @@ -2350,14 +3767,14 @@ "functional-red-black-tree": "1.0.1", "glob": "7.1.2", "globals": "11.3.0", - "ignore": "3.3.5", + "ignore": "3.3.7", "imurmurhash": "0.1.4", "inquirer": "3.3.0", "is-resolvable": "1.1.0", "js-yaml": "3.10.0", "json-stable-stringify-without-jsonify": "1.0.1", "levn": "0.3.0", - "lodash": "4.17.4", + "lodash": "4.17.5", "minimatch": "3.0.4", "mkdirp": "0.5.1", "natural-compare": "1.4.0", @@ -2366,51 +3783,19 @@ "pluralize": "7.0.0", "progress": "2.0.0", "require-uncached": "1.0.3", - "semver": "5.4.1", + "semver": "5.5.0", "strip-ansi": "4.0.0", "strip-json-comments": "2.0.1", - "table": "4.0.2", + "table": "4.0.3", "text-table": "0.2.0" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -2420,48 +3805,12 @@ "ms": "2.0.0" } }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, "globals": { "version": "11.3.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz", "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==", "dev": true }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" - } - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -2470,15 +3819,6 @@ "requires": { "ansi-regex": "3.0.0" } - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -2524,7 +3864,7 @@ "eslint-import-resolver-node": "0.3.2", "eslint-module-utils": "2.1.1", "has": "1.0.1", - "lodash": "4.17.4", + "lodash": "4.17.5", "minimatch": "3.0.4", "read-pkg-up": "2.0.0" }, @@ -2539,15 +3879,6 @@ "isarray": "1.0.0" } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -2560,6 +3891,15 @@ "strip-bom": "3.0.0" } }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", @@ -2569,6 +3909,12 @@ "pify": "2.3.0" } }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -2589,12 +3935,6 @@ "find-up": "2.1.0", "read-pkg": "2.0.0" } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true } } }, @@ -2610,7 +3950,7 @@ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "esrecurse": "4.2.0", + "esrecurse": "4.2.1", "estraverse": "4.2.0" } }, @@ -2626,14 +3966,14 @@ "integrity": "sha512-Zy3tAJDORxQZLl2baguiRU1syPERAIg0L+JB2MWorORgTu/CplzvxS9WWA7Xh4+Q+eOQihNs/1o1Xep8cvCxWQ==", "dev": true, "requires": { - "acorn": "5.4.1", + "acorn": "5.5.0", "acorn-jsx": "3.0.1" } }, "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", "dev": true }, "esquery": { @@ -2646,13 +3986,12 @@ } }, "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" + "estraverse": "4.2.0" } }, "estraverse": { @@ -2688,6 +4027,28 @@ "through": "2.3.8" } }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" + } + }, "execa": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", @@ -2712,6 +4073,50 @@ "clone-regexp": "1.0.0" } }, + "expand-braces": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "requires": { + "array-slice": "0.2.3", + "array-unique": "0.2.1", + "braces": "0.1.5" + }, + "dependencies": { + "braces": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "dev": true, + "requires": { + "expand-range": "0.1.1" + } + }, + "expand-range": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "dev": true, + "requires": { + "is-number": "0.1.1", + "repeat-string": "0.2.2" + } + }, + "is-number": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true + }, + "repeat-string": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true + } + } + }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", @@ -2789,6 +4194,12 @@ "yauzl": "2.4.1" }, "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, "mkdirp": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", @@ -2807,9 +4218,9 @@ "dev": true }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, "fast-json-stable-stringify": { @@ -2852,6 +4263,13 @@ "object-assign": "4.1.1" } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -2871,14 +4289,36 @@ "repeat-string": "1.6.1" } }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } + } + }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "locate-path": "2.0.0" } }, "flat-cache": { @@ -2891,6 +4331,43 @@ "del": "2.2.2", "graceful-fs": "4.1.11", "write": "0.2.1" + }, + "dependencies": { + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + } + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "flatten": { @@ -2899,11 +4376,21 @@ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", "dev": true }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "follow-redirects": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.0.0.tgz", + "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=", + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.9" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true }, "for-own": { "version": "0.1.5", @@ -2924,17 +4411,19 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true + "dev": true, + "optional": true }, "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "dev": true, + "optional": true, "requires": { "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "combined-stream": "1.0.6", + "mime-types": "2.1.18" } }, "fragment-cache": { @@ -2952,15 +4441,24 @@ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", "dev": true }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "1.0.0" + } + }, "fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", "dev": true, "requires": { "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1" + "jsonfile": "4.0.0", + "universalify": "0.1.1" } }, "fs.realpath": { @@ -3873,6 +5371,46 @@ } } }, + "ftp": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "1.1.14", + "xregexp": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true, + "optional": true + } + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -3891,16 +5429,39 @@ "integrity": "sha1-szmUr0V6gRVwDUEPMXczy+egkEs=", "dev": true }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true, + "optional": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "optional": true, + "requires": { + "is-property": "1.0.2" + } + }, "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", "dev": true }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", "dev": true }, "get-stream": { @@ -3909,6 +5470,21 @@ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, + "get-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.1.tgz", + "integrity": "sha512-7aelVrYqCLuVjq2kEKRTH8fXPTC0xKTkM+G7UlFkEwCXY3sFbSxvY375JoFowOAYbkaU47SrBvOefUlLZZ+6QA==", + "dev": true, + "optional": true, + "requires": { + "data-uri-to-buffer": "1.2.0", + "debug": "2.6.9", + "extend": "3.0.1", + "file-uri-to-path": "1.0.0", + "ftp": "0.3.10", + "readable-stream": "2.3.4" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -3920,16 +5496,50 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, + "optional": true, "requires": { "assert-plus": "1.0.0" } }, + "git-raw-commits": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.4.tgz", + "integrity": "sha512-G3O+41xHbscpgL5nA0DUkbFVgaAz5rd57AMSIMew8p7C8SyFwZDyn08MoXHkTl9zcD0LmxsLFPxbqFY4YPbpPA==", + "dev": true, + "requires": { + "dargs": "4.1.0", + "lodash.template": "4.4.0", + "meow": "4.0.0", + "split2": "2.2.0", + "through2": "2.0.3" + }, + "dependencies": { + "meow": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.0.tgz", + "integrity": "sha512-Me/kel335m6vMKmEmA6c87Z6DUFW3JqkINRnxkbC+A/PUm0D5Fl2dEBQrPKnqCL9Te/CIa1MUt/0InMJhuC/sw==", + "dev": true, + "requires": { + "camelcase-keys": "4.2.0", + "decamelize-keys": "1.1.0", + "loud-rejection": "1.6.0", + "minimist": "1.2.0", + "minimist-options": "3.0.2", + "normalize-package-data": "2.4.0", + "read-pkg-up": "3.0.0", + "redent": "2.0.0", + "trim-newlines": "2.0.0" + } + } + } + }, "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { + "fs.realpath": "1.0.0", "inflight": "1.0.6", "inherits": "2.0.3", "minimatch": "3.0.4", @@ -3957,12 +5567,12 @@ } }, "global-dirs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.0.tgz", - "integrity": "sha1-ENNAOeDfBCcuJizyQiT3IJQ0308=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "requires": { - "ini": "1.3.4" + "ini": "1.3.5" } }, "globals": { @@ -3983,6 +5593,27 @@ "object-assign": "4.1.1", "pify": "2.3.0", "pinkie-promise": "2.0.1" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "globjoin": { @@ -4016,19 +5647,27 @@ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true + }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true + "dev": true, + "optional": true }, "har-validator": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "dev": true, + "optional": true, "requires": { - "ajv": "5.2.3", + "ajv": "5.5.2", "har-schema": "2.0.0" } }, @@ -4050,10 +5689,33 @@ "ansi-regex": "2.1.1" } }, + "has-binary2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz", + "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=", + "dev": true, + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "has-value": { @@ -4100,7 +5762,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "1.1.6" } } } @@ -4111,19 +5773,28 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "1.1.6" } } } }, - "hasha": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", - "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", "dev": true, "requires": { - "is-stream": "1.1.0", - "pinkie-promise": "2.0.1" + "inherits": "2.0.3" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" } }, "hawk": { @@ -4131,17 +5802,46 @@ "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "dev": true, + "optional": true, "requires": { "boom": "4.3.1", "cryptiles": "3.1.2", - "hoek": "4.2.0", + "hoek": "4.2.1", "sntp": "2.1.0" } }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hipchat-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz", + "integrity": "sha1-ttJJdVQ3wZEII2d5nTupoPI7Ix4=", + "dev": true, + "optional": true, + "requires": { + "lodash": "4.17.5", + "request": "2.83.0" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", "dev": true }, "home-or-tmp": { @@ -4172,27 +5872,125 @@ "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", "dev": true }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } + }, + "http-proxy-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz", + "integrity": "sha1-zBzjjkU7+YSg93AtLdWcc9CBKEo=", + "dev": true, + "requires": { + "agent-base": "2.1.1", + "debug": "2.6.9", + "extend": "3.0.1" + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, + "optional": true, "requires": { "assert-plus": "1.0.0", "jsprim": "1.4.1", "sshpk": "1.13.1" } }, + "httpntlm": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz", + "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=", + "dev": true, + "requires": { + "httpreq": "0.4.24", + "underscore": "1.7.0" + } + }, + "httpreq": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", + "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=", + "dev": true + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "https-proxy-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", + "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", + "dev": true, + "requires": { + "agent-base": "2.1.1", + "debug": "2.6.9", + "extend": "3.0.1" + } + }, + "husky": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz", + "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==", + "dev": true, + "requires": { + "is-ci": "1.1.0", + "normalize-path": "1.0.0", + "strip-indent": "2.0.0" + } + }, "iconv-lite": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", "dev": true }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, "ignore": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.5.tgz", - "integrity": "sha512-JLH93mL8amZQhh/p6mfQgVBH3M6epNq3DfsXsTSuSrInVjwyYlFE1nv2AgfRCC8PoOhM0jwQ5v8s9LgbK7yGDw==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", "dev": true }, "import-lazy": { @@ -4208,13 +6006,10 @@ "dev": true }, "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true }, "indexes-of": { "version": "1.0.1", @@ -4222,6 +6017,19 @@ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflection": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.10.0.tgz", + "integrity": "sha1-W//LEZetPoEFD44X4hZoCH7p6y8=", + "dev": true, + "optional": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -4239,11 +6047,20 @@ "dev": true }, "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, "inquirer": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", @@ -4256,7 +6073,7 @@ "cli-width": "2.2.0", "external-editor": "2.1.0", "figures": "2.0.0", - "lodash": "4.17.4", + "lodash": "4.17.5", "mute-stream": "0.0.7", "run-async": "2.3.0", "rx-lite": "4.0.8", @@ -4272,32 +6089,6 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -4306,22 +6097,92 @@ "requires": { "ansi-regex": "3.0.0" } - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, + } + } + }, + "insert-module-globals": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.2.tgz", + "integrity": "sha512-p3s7g96Nm62MbHRuj9ZXab0DuJNWD7qcmdUXCOQ/ZZn42DtDXfsLill7bq19lDCx3K3StypqUnuE3H2VmIJFUw==", + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "combine-source-map": "0.7.2", + "concat-stream": "1.5.2", + "is-buffer": "1.1.6", + "lexical-scope": "1.2.0", + "process": "0.11.10", + "through2": "2.0.3", + "xtend": "4.0.1" + }, + "dependencies": { + "combine-source-map": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", + "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", + "dev": true, + "requires": { + "convert-source-map": "1.1.3", + "inline-source-map": "0.6.2", + "lodash.memoize": "3.0.4", + "source-map": "0.5.7" + } + }, + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + } + }, + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, "requires": { - "has-flag": "3.0.0" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true } } }, "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz", + "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==", "dev": true, "requires": { "loose-envify": "1.3.1" @@ -4333,10 +6194,17 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, + "ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.0.1.tgz", + "integrity": "sha1-x+NWzeoiWucbNtcPLnGpK6TkJZA=", + "dev": true, + "optional": true + }, "irregular-plurals": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.3.0.tgz", - "integrity": "sha512-njf5A+Mxb3kojuHd1DzISjjIl+XhyzovXEOyPPSzdQozq/Lf2tN27mOrAAsxEPZxpn6I4MGzs1oo9TxXxPFpaA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz", + "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=", "dev": true }, "is-absolute-url": { @@ -4374,13 +6242,13 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.10.0" + "binary-extensions": "1.11.0" } }, "is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, "is-builtin-module": { @@ -4398,6 +6266,15 @@ "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", "dev": true }, + "is-ci": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", + "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "dev": true, + "requires": { + "ci-info": "1.1.2" + } + }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", @@ -4503,8 +6380,8 @@ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", "dev": true, "requires": { - "global-dirs": "0.1.0", - "is-path-inside": "1.0.0" + "global-dirs": "0.1.1", + "is-path-inside": "1.0.1" } }, "is-module": { @@ -4513,6 +6390,27 @@ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true, + "optional": true + }, + "is-my-json-valid": { + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", + "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", + "dev": true, + "optional": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "is-my-ip-valid": "1.0.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, "is-npm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", @@ -4563,13 +6461,13 @@ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", "dev": true, "requires": { - "is-path-inside": "1.0.0" + "is-path-inside": "1.0.1" } }, "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { "path-is-inside": "1.0.2" @@ -4616,6 +6514,13 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true, + "optional": true + }, "is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", @@ -4676,11 +6581,21 @@ "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", "dev": true }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "requires": { + "text-extensions": "1.7.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "dev": true, + "optional": true }, "is-utf8": { "version": "0.2.1", @@ -4700,6 +6615,12 @@ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, + "isbinaryfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", + "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", + "dev": true + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -4725,7 +6646,8 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true + "dev": true, + "optional": true }, "jquery": { "version": "3.3.1", @@ -4734,9 +6656,9 @@ "dev": true }, "js-base64": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz", - "integrity": "sha512-Y2/+DnfJJXT1/FCwUebUhLWb3QihxiSC42+ctHLGogmW2jPY6LCapMdFZXRvVP2z6qyKW7s6qncE/9gSqZiArw==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", + "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==", "dev": true }, "js-tokens": { @@ -4746,13 +6668,13 @@ "dev": true }, "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "2.7.3" + "argparse": "1.0.10", + "esprima": "4.0.0" } }, "jsbn": { @@ -4778,7 +6700,8 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true + "dev": true, + "optional": true }, "json-schema-traverse": { "version": "0.3.1", @@ -4787,9 +6710,9 @@ "dev": true }, "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", "dev": true, "requires": { "jsonify": "0.0.0" @@ -4814,9 +6737,9 @@ "dev": true }, "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { "graceful-fs": "4.1.11" @@ -4834,12 +6757,40 @@ "through2": "0.6.5" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "JSONStream": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz", + "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=", + "dev": true, + "requires": { + "jsonparse": "0.0.5", + "through": "2.3.8" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "jsonparse": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz", + "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=", "dev": true }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, "stream-combiner": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", @@ -4849,6 +6800,22 @@ "duplexer": "0.1.1", "through": "2.3.8" } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } } } }, @@ -4859,16 +6826,24 @@ "dev": true }, "jsonparse": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz", - "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true, + "optional": true + }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, + "optional": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -4876,142 +6851,656 @@ "verror": "1.10.0" } }, - "kew": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", - "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "karma": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-2.0.0.tgz", + "integrity": "sha512-K9Kjp8CldLyL9ANSUctDyxC7zH3hpqXj/K09qVf06K3T/kXaHtFZ5tQciK7OzQu68FLvI89Na510kqQ2LCbpIw==", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "bluebird": "3.5.1", + "body-parser": "1.18.2", + "browserify": "14.5.0", + "chokidar": "1.7.0", + "colors": "1.1.2", + "combine-lists": "1.0.1", + "connect": "3.6.6", + "core-js": "2.5.3", + "di": "0.0.1", + "dom-serialize": "2.2.1", + "expand-braces": "0.1.2", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "http-proxy": "1.16.2", + "isbinaryfile": "3.0.2", + "lodash": "4.17.5", + "log4js": "2.5.3", + "mime": "1.6.0", + "minimatch": "3.0.4", + "optimist": "0.6.1", + "qjobs": "1.2.0", + "range-parser": "1.2.0", + "rimraf": "2.6.2", + "safe-buffer": "5.1.1", + "socket.io": "2.0.4", + "source-map": "0.6.1", + "tmp": "0.0.33", + "useragent": "2.3.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "known-css-properties": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.2.0.tgz", - "integrity": "sha512-UTCzU28rRI9wkb8qSGoZa9pgWvxr4LjP2MEhi9XHb/1XMOJy0uTnIxaxzj8My/PORG+kQG6VzAcGvRw66eIOfA==", + "karma-chai": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/karma-chai/-/karma-chai-0.1.0.tgz", + "integrity": "sha1-vuWtQEAFF4Ea40u5RfdikJEIt5o=", "dev": true }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "4.0.1" - } - }, - "lazy-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", - "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", - "dev": true, - "requires": { - "set-getter": "0.1.0" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "1.0.0" - } - }, - "ldjson-stream": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ldjson-stream/-/ldjson-stream-1.2.1.tgz", - "integrity": "sha1-kb7O2lrE7SsX5kn7d356v6AYnCs=", - "dev": true, - "requires": { - "split2": "0.2.1", - "through2": "0.6.5" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "fs-access": "1.0.1", + "which": "1.3.0" } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "karma-mocha": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", + "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "minimist": "1.2.0" } }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "karma-mocha-reporter": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz", + "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "chalk": "2.3.1", + "log-symbols": "2.2.0", + "strip-ansi": "4.0.0" }, "dependencies": { - "path-exists": { + "ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } } } }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash.endswith": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.endswith/-/lodash.endswith-4.2.1.tgz", - "integrity": "sha1-/tWawXOO0+I27dcGTsRWRIs3vAk=", - "dev": true - }, - "lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", - "dev": true + "karma-rollup-preprocessor": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/karma-rollup-preprocessor/-/karma-rollup-preprocessor-5.1.1.tgz", + "integrity": "sha512-HRzuR6mf5V0/5h78qp2J+bOjuqqHPz2yOzHpnWfr+OlHMF5//cxOXNh4nY7WbES+cr2/hObYiofD9On7kuIXBQ==", + "dev": true, + "requires": { + "chokidar": "2.0.2", + "object-assign": "4.1.1" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "3.1.9", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", + "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.1", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "chokidar": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz", + "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.1", + "fsevents": "1.1.3", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.0.4" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", + "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "known-css-properties": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.2.0.tgz", + "integrity": "sha512-UTCzU28rRI9wkb8qSGoZa9pgWvxr4LjP2MEhi9XHb/1XMOJy0uTnIxaxzj8My/PORG+kQG6VzAcGvRw66eIOfA==", + "dev": true + }, + "labeled-stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", + "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "isarray": "0.0.1", + "stream-splicer": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "4.0.1" + } + }, + "lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", + "dev": true, + "requires": { + "set-getter": "0.1.0" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "ldjson-stream": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ldjson-stream/-/ldjson-stream-1.2.1.tgz", + "integrity": "sha1-kb7O2lrE7SsX5kn7d356v6AYnCs=", + "dev": true, + "requires": { + "split2": "0.2.1", + "through2": "0.6.5" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "split2": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz", + "integrity": "sha1-At2smtwD7Au3jBKC7Aecpuha6QA=", + "dev": true, + "requires": { + "through2": "0.6.5" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } + } + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "lexical-scope": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", + "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", + "dev": true, + "requires": { + "astw": "2.2.0" + } + }, + "libbase64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz", + "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=", + "dev": true + }, + "libmime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/libmime/-/libmime-3.0.0.tgz", + "integrity": "sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY=", + "dev": true, + "requires": { + "iconv-lite": "0.4.15", + "libbase64": "0.1.0", + "libqp": "1.1.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", + "dev": true + } + } + }, + "libqp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz", + "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "4.0.0", + "pify": "3.0.0", + "strip-bom": "3.0.0" + } }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", "dev": true }, "lodash.memoize": { @@ -5020,10 +7509,40 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, - "lodash.startswith": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.startswith/-/lodash.startswith-4.2.1.tgz", - "integrity": "sha1-xZjErc4YiiflMUVzHNxsDnF3YAw=", + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", + "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", + "dev": true + }, + "lodash.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", + "dev": true + }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "dev": true + }, + "lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=", + "dev": true + }, + "lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha1-lDbjTtJgk+1/+uGTYUQ1CRXZrdg=", "dev": true }, "lodash.template": { @@ -5045,19 +7564,268 @@ "lodash._reinterpolate": "3.0.0" } }, + "lodash.topairs": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.topairs/-/lodash.topairs-4.3.0.tgz", + "integrity": "sha1-O23qo31g+xFnE8RsXxfqGQ7EjWQ=", + "dev": true + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "dev": true }, + "lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha1-E2Xt9DFIBIHvDRxolXpe2Z1J984=", + "dev": true + }, "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "2.3.1" + } + }, + "log4js": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-2.5.3.tgz", + "integrity": "sha512-YL/qpTxYtK0iWWbuKCrevDZz5lh+OjyHHD+mICqpjnYGKdNRBvPeh/1uYjkKUemT1CSO4wwLOwphWMpKAnD9kw==", + "dev": true, + "requires": { + "amqplib": "0.5.2", + "axios": "0.15.3", + "circular-json": "0.5.1", + "date-format": "1.2.0", + "debug": "3.1.0", + "hipchat-notifier": "1.1.0", + "loggly": "1.1.1", + "mailgun-js": "0.7.15", + "nodemailer": "2.7.2", + "redis": "2.8.0", + "semver": "5.5.0", + "slack-node": "0.2.0", + "streamroller": "0.7.0" + }, + "dependencies": { + "circular-json": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.1.tgz", + "integrity": "sha512-UjgcRlTAhAkLeXmDe2wK7ktwy/tgAqxiSndTIPiFZuIPLZmzHzWMwUIe9h9m/OokypG7snxCDEuwJshGBdPvaw==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "loggly": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/loggly/-/loggly-1.1.1.tgz", + "integrity": "sha1-Cg/B0/o6XsRP3HuJe+uipGlc6+4=", + "dev": true, + "optional": true, + "requires": { + "json-stringify-safe": "5.0.1", + "request": "2.75.0", + "timespan": "2.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true, + "optional": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true, + "optional": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "form-data": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz", + "integrity": "sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU=", + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "optional": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.14.1", + "is-my-json-valid": "2.17.2", + "pinkie-promise": "2.0.1" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "dev": true, + "optional": true + }, + "qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "dev": true, + "optional": true + }, + "request": { + "version": "2.75.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.75.0.tgz", + "integrity": "sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM=", + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "bl": "1.1.2", + "caseless": "0.11.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.0.0", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "node-uuid": "1.4.8", + "oauth-sign": "0.8.2", + "qs": "6.2.3", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.4.3" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "optional": true + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true, + "optional": true + } } }, "loose-envify": { @@ -5110,23 +7878,82 @@ "vlq": "0.2.3" } }, - "make-dir": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", - "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", + "mailcomposer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-4.0.1.tgz", + "integrity": "sha1-DhxEsqB890DuF9wUm6AJ8Zyt/rQ=", "dev": true, + "optional": true, "requires": { - "pify": "3.0.0" + "buildmail": "4.0.1", + "libmime": "3.0.0" + } + }, + "mailgun-js": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/mailgun-js/-/mailgun-js-0.7.15.tgz", + "integrity": "sha1-7jZqINrGTDwVwD1sGz4O15UlKrs=", + "dev": true, + "optional": true, + "requires": { + "async": "2.1.5", + "debug": "2.2.0", + "form-data": "2.1.4", + "inflection": "1.10.0", + "is-stream": "1.1.0", + "path-proxy": "1.0.0", + "proxy-agent": "2.0.0", + "q": "1.4.1", + "tsscmp": "1.0.5" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "optional": true, + "requires": { + "ms": "0.7.1" + } + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true, + "optional": true + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true, + "optional": true } } }, + "make-dir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", + "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -5134,9 +7961,9 @@ "dev": true }, "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", "dev": true }, "map-stream": { @@ -5166,13 +7993,41 @@ "integrity": "sha1-jUEmgWi/htEQK5gQnijlMeejRXg=", "dev": true }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, "mem": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "1.2.0" } }, "memorystream": { @@ -5199,10 +8054,154 @@ "trim-newlines": "1.0.0" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", "dev": true } } @@ -5226,6 +8225,27 @@ "object.omit": "2.0.1", "parse-glob": "3.0.4", "regex-cache": "0.4.4" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" } }, "mime": { @@ -5235,24 +8255,36 @@ "dev": true }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", "dev": true }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dev": true, "requires": { - "mime-db": "1.30.0" + "mime-db": "1.33.0" } }, "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", "dev": true }, "minimatch": { @@ -5261,15 +8293,25 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "1.1.11" } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "requires": { + "arrify": "1.0.1", + "is-plain-obj": "1.1.0" + } + }, "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", @@ -5298,6 +8340,128 @@ "dev": true, "requires": { "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "mocha": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.0.1.tgz", + "integrity": "sha512-SpwyojlnE/WRBNGtvJSNfllfm5PqEDFxcWluSIgLeSBJtXG4DmoX2NNAeEA7rP5kK+79VgtVq8nG6HskaL1ykg==", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.3.1", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "module-deps": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", + "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "browser-resolve": "1.11.2", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "defined": "1.0.0", + "detective": "4.7.1", + "duplexer2": "0.1.4", + "inherits": "2.0.3", + "parents": "1.0.1", + "readable-stream": "2.3.4", + "resolve": "1.5.0", + "stream-combiner2": "1.1.1", + "subarg": "1.0.0", + "through2": "2.0.3", + "xtend": "4.0.1" + }, + "dependencies": { + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + } + } + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } } }, "ms": { @@ -5377,6 +8541,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, "nested-error-stacks": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz", @@ -5386,61 +8556,105 @@ "inherits": "2.0.3" } }, - "node-qunit-phantomjs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-qunit-phantomjs/-/node-qunit-phantomjs-2.0.0.tgz", - "integrity": "sha512-xZV0J8fBbe8h04IkBxLtwvGVbP0ViUhkJzjFx/tb7uWT02w6iMt5X6HDmdTZuQXBMsgahyaIGjW30l3HSlj2yA==", + "netmask": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", + "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=", + "dev": true, + "optional": true + }, + "nodemailer": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-2.7.2.tgz", + "integrity": "sha1-8kLmSa7q45tsftdA73sGHEBNMPk=", "dev": true, + "optional": true, "requires": { - "chalk": "2.3.0", - "minimist": "1.2.0", - "phantomjs-prebuilt": "2.1.16", - "qunit-phantomjs-runner": "2.3.1" + "libmime": "3.0.0", + "mailcomposer": "4.0.1", + "nodemailer-direct-transport": "3.3.2", + "nodemailer-shared": "1.1.0", + "nodemailer-smtp-pool": "2.8.2", + "nodemailer-smtp-transport": "2.7.2", + "socks": "1.1.9" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "optional": true }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "socks": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.9.tgz", + "integrity": "sha1-Yo1+TQSRJDVEWsC25Fk3bLPm1pE=", "dev": true, + "optional": true, "requires": { - "has-flag": "2.0.0" + "ip": "1.1.5", + "smart-buffer": "1.1.15" } } } }, + "nodemailer-direct-transport": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz", + "integrity": "sha1-6W+vuQNYVglH5WkBfZfmBzilCoY=", + "dev": true, + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-fetch": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz", + "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=", + "dev": true + }, + "nodemailer-shared": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz", + "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=", + "dev": true, + "requires": { + "nodemailer-fetch": "1.6.0" + } + }, + "nodemailer-smtp-pool": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz", + "integrity": "sha1-LrlNbPhXgLG0clzoU7nL1ejajHI=", + "dev": true, + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-smtp-transport": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz", + "integrity": "sha1-A9ccdjFPFKx9vHvwM6am0W1n+3c=", + "dev": true, + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-wellknown": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz", + "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=", + "dev": true + }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", @@ -5449,18 +8663,15 @@ "requires": { "hosted-git-info": "2.5.0", "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" + "semver": "5.5.0", + "validate-npm-package-license": "3.0.3" } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true }, "normalize-range": { "version": "0.1.2", @@ -5493,7 +8704,7 @@ "dev": true, "requires": { "ansi-styles": "3.2.0", - "chalk": "2.3.0", + "chalk": "2.3.1", "cross-spawn": "5.1.0", "memorystream": "0.3.1", "minimatch": "3.0.4", @@ -5501,97 +8712,6 @@ "read-pkg": "3.0.0", "shell-quote": "1.6.1", "string.prototype.padend": "3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "4.0.0", - "normalize-package-data": "2.4.0", - "path-type": "3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } } }, "npm-run-path": { @@ -5603,6 +8723,12 @@ "path-key": "2.0.1" } }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", @@ -5619,7 +8745,8 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -5627,6 +8754,12 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -5736,6 +8869,15 @@ } } }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5746,9 +8888,9 @@ } }, "onecolor": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/onecolor/-/onecolor-3.0.4.tgz", - "integrity": "sha1-daRvgNpseqpbTarhekcZi9llJJQ=", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/onecolor/-/onecolor-3.0.5.tgz", + "integrity": "sha1-Nu/zIgE3nv3xGA+0ReUajiQl+fY=", "dev": true }, "onetime": { @@ -5757,7 +8899,31 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "1.2.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } } }, "optionator": { @@ -5774,6 +8940,12 @@ "wordwrap": "1.0.0" } }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -5804,10 +8976,13 @@ "dev": true }, "p-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "dev": true, + "requires": { + "p-try": "1.0.0" + } }, "p-locate": { "version": "2.0.0", @@ -5815,7 +8990,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.1.0" + "p-limit": "1.2.0" } }, "p-map": { @@ -5824,6 +8999,53 @@ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", "dev": true }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pac-proxy-agent": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-1.1.0.tgz", + "integrity": "sha512-QBELCWyLYPgE2Gj+4wUEiMscHrQ8nRPBzYItQNOHWavwBt25ohZHQC4qnd5IszdVVrFbLsQ+dPkm6eqdjJAmwQ==", + "dev": true, + "optional": true, + "requires": { + "agent-base": "2.1.1", + "debug": "2.6.9", + "extend": "3.0.1", + "get-uri": "2.0.1", + "http-proxy-agent": "1.0.0", + "https-proxy-agent": "1.0.0", + "pac-resolver": "2.0.0", + "raw-body": "2.3.2", + "socks-proxy-agent": "2.1.1" + } + }, + "pac-resolver": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-2.0.0.tgz", + "integrity": "sha1-mbiNLxk/ve78HJpSnB8yYKtSd80=", + "dev": true, + "optional": true, + "requires": { + "co": "3.0.6", + "degenerator": "1.0.4", + "ip": "1.0.1", + "netmask": "1.0.6", + "thunkify": "2.1.2" + }, + "dependencies": { + "co": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/co/-/co-3.0.6.tgz", + "integrity": "sha1-FEXyJsXrlWE45oyawwFn6n0ua9o=", + "dev": true, + "optional": true + } + } + }, "package-json": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", @@ -5831,9 +9053,37 @@ "dev": true, "requires": { "got": "6.7.1", - "registry-auth-token": "3.3.1", + "registry-auth-token": "3.3.2", "registry-url": "3.1.0", - "semver": "5.4.1" + "semver": "5.5.0" + } + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "dev": true + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dev": true, + "requires": { + "path-platform": "0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true, + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.1.1", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" } }, "parse-glob": { @@ -5849,20 +9099,51 @@ } }, "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "1.3.1", + "json-parse-better-errors": "1.0.1" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "dev": true, "requires": { - "error-ex": "1.3.1" + "better-assert": "1.0.2" } }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -5870,13 +9151,10 @@ "dev": true }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -5902,17 +9180,46 @@ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", "dev": true }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true + }, + "path-proxy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-proxy/-/path-proxy-1.0.0.tgz", + "integrity": "sha1-GOijaFn8nS8aU7SN7hOFQ8Ag3l4=", + "dev": true, + "optional": true, + "requires": { + "inflection": "1.3.8" + }, + "dependencies": { + "inflection": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.3.8.tgz", + "integrity": "sha1-y9Fg2p91sUw8xjV41POWeEvzAU4=", + "dev": true, + "optional": true + } + } + }, "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "pify": "3.0.0" } }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, "pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", @@ -5922,6 +9229,19 @@ "through": "2.3.8" } }, + "pbkdf2": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "dev": true, + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.10" + } + }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -5932,37 +9252,13 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "phantomjs-prebuilt": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", - "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", "dev": true, - "requires": { - "es6-promise": "4.2.2", - "extract-zip": "1.6.6", - "fs-extra": "1.0.0", - "hasha": "2.2.0", - "kew": "0.7.0", - "progress": "1.1.8", - "request": "2.83.0", - "request-progress": "2.0.1", - "which": "1.3.0" - }, - "dependencies": { - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true - } - } + "optional": true }, "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "pinkie": { @@ -5986,7 +9282,7 @@ "integrity": "sha1-GVV2CVno0aEcsqUOyD7sRwYz5J8=", "dev": true, "requires": { - "onecolor": "3.0.4", + "onecolor": "3.0.5", "synesthesia": "1.0.1" } }, @@ -5996,37 +9292,11 @@ "integrity": "sha1-LaSh3m7EQjxfw3lOkwuB1EkOxoY=", "dev": true, "requires": { - "browserslist": "2.5.0", + "browserslist": "2.11.3", "postcss": "6.0.19", "reduce-css-calc": "1.3.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -6043,15 +9313,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -6062,6 +9323,27 @@ "dev": true, "requires": { "find-up": "1.1.2" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + } } }, "pleeease-filters": { @@ -6070,36 +9352,10 @@ "integrity": "sha1-ZjKy+wVkjSdY2GU4T7zteeHMrsc=", "dev": true, "requires": { - "onecolor": "3.0.4", + "onecolor": "3.0.5", "postcss": "6.0.19" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -6116,15 +9372,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -6134,7 +9381,7 @@ "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", "dev": true, "requires": { - "irregular-plurals": "1.3.0" + "irregular-plurals": "1.4.0" } }, "pluralize": { @@ -6156,11 +9403,44 @@ "dev": true, "requires": { "chalk": "1.1.3", - "js-base64": "2.3.2", + "js-base64": "2.4.3", "source-map": "0.5.7", "supports-color": "3.2.3" }, "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -6183,38 +9463,12 @@ "postcss": "6.0.19" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, "balanced-match": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", "dev": true }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -6231,15 +9485,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -6253,32 +9498,6 @@ "postcss-selector-parser": "2.2.3" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -6295,15 +9514,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -6338,15 +9548,6 @@ "yargs": "11.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", @@ -6409,17 +9610,6 @@ } } }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, "chokidar": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz", @@ -6437,7 +9627,7 @@ "normalize-path": "2.1.1", "path-is-absolute": "1.0.1", "readdirp": "2.1.0", - "upath": "1.0.2" + "upath": "1.0.4" } }, "expand-brackets": { @@ -6551,37 +9741,6 @@ } } }, - "fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "4.0.0", - "universalify": "0.1.1" - } - }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -6612,17 +9771,11 @@ "array-union": "1.0.2", "dir-glob": "2.0.0", "glob": "7.1.2", - "ignore": "3.3.5", + "ignore": "3.3.7", "pify": "3.0.0", "slash": "1.0.0" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -6638,7 +9791,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "1.1.6" } } } @@ -6658,7 +9811,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "1.1.6" } } } @@ -6693,7 +9846,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "1.1.6" } } } @@ -6704,15 +9857,6 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -6740,11 +9884,14 @@ "to-regex": "3.0.2" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } }, "postcss": { "version": "6.0.19", @@ -6762,15 +9909,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -6786,32 +9924,6 @@ "postcss-value-parser": "3.3.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -6828,15 +9940,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -6852,26 +9955,6 @@ "reduce-function-call": "1.0.2" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, "color": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color/-/color-2.0.1.tgz", @@ -6882,15 +9965,6 @@ "color-string": "1.5.2" } }, - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, "color-string": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.2.tgz", @@ -6901,12 +9975,6 @@ "simple-swizzle": "0.2.2" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -6923,15 +9991,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -6946,33 +10005,13 @@ "postcss-message-helpers": "2.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, "color": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz", "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=", "dev": true, "requires": { - "color-convert": "1.9.0", + "color-convert": "1.9.1", "color-string": "1.5.2" } }, @@ -6986,12 +10025,6 @@ "simple-swizzle": "0.2.2" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -7008,15 +10041,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -7031,32 +10055,6 @@ "units-css": "0.4.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -7072,16 +10070,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } + "dev": true } } }, @@ -7097,33 +10086,13 @@ "reduce-function-call": "1.0.2" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, "color": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz", "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=", "dev": true, "requires": { - "color-convert": "1.9.0", + "color-convert": "1.9.1", "color-string": "1.5.2" } }, @@ -7137,12 +10106,6 @@ "simple-swizzle": "0.2.2" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -7159,15 +10122,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -7181,32 +10135,6 @@ "postcss-value-parser": "3.3.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -7223,15 +10151,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -7245,32 +10164,6 @@ "postcss-value-parser": "3.3.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -7287,15 +10180,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -7310,32 +10194,6 @@ "rgb-hex": "2.1.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -7352,15 +10210,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -7424,15 +10273,6 @@ "postcss-selector-not": "3.0.1" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, "autoprefixer": { "version": "7.2.6", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", @@ -7447,16 +10287,6 @@ "postcss-value-parser": "3.3.0" } }, - "browserslist": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", - "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000810", - "electron-to-chromium": "1.3.34" - } - }, "caniuse-api": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-2.0.0.tgz", @@ -7469,35 +10299,6 @@ "lodash.uniq": "4.5.0" } }, - "caniuse-lite": { - "version": "1.0.30000810", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000810.tgz", - "integrity": "sha512-/0Q00Oie9C72P8zQHtFvzmkrMC3oOFUnMWjCy5F2+BE8lzICm91hQPhh0+XIsAFPKOe2Dh3pKgbRmU3EKxfldA==", - "dev": true - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "electron-to-chromium": { - "version": "1.3.34", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.34.tgz", - "integrity": "sha1-2TSY9AORuwwWpgPYJBuZUUBBV+0=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -7536,15 +10337,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -7557,32 +10349,6 @@ "postcss": "6.0.19" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -7599,15 +10365,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -7621,32 +10378,6 @@ "postcss": "6.0.19" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -7663,15 +10394,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -7685,32 +10407,6 @@ "postcss-selector-matches": "3.0.1" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -7727,15 +10423,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -7804,32 +10491,6 @@ "postcss": "6.0.19" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -7846,15 +10507,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -7867,32 +10519,6 @@ "postcss": "6.0.19" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -7906,18 +10532,9 @@ }, "source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -7928,44 +10545,18 @@ "dev": true, "requires": { "babel-register": "6.26.0", - "postcss": "6.0.13" + "postcss": "6.0.19" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, "postcss": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.13.tgz", - "integrity": "sha512-nHsrD1PPTMSJDfU+osVsLtPkSP9YGeoOz4FDLN4r1DW4N5vqL1J+gACzTQHsfwIiWG/0/nV4yCzjTMo1zD8U1g==", + "version": "6.0.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", + "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", "dev": true, "requires": { - "chalk": "2.1.0", + "chalk": "2.3.1", "source-map": "0.6.1", - "supports-color": "4.4.0" + "supports-color": "5.2.0" } }, "source-map": { @@ -7973,15 +10564,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } } } }, @@ -7995,32 +10577,37 @@ "postcss-media-query-parser": "0.2.3" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "postcss": { + "version": "6.0.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", + "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", + "chalk": "2.3.1", + "source-map": "0.6.1", "supports-color": "5.2.0" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, + } + } + }, + "postcss-import": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-11.1.0.tgz", + "integrity": "sha512-5l327iI75POonjxkXgdRCUS+AlzAdBx4pOvMEhTKTCjb1p8IEeVR9yx3cPbmN7LIWJLbfnIXxAhoB4jpD0c/Cw==", + "dev": true, + "requires": { + "postcss": "6.0.19", + "postcss-value-parser": "3.3.0", + "read-cache": "1.0.0", + "resolve": "1.5.0" + }, + "dependencies": { "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -8037,15 +10624,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -8059,32 +10637,6 @@ "postcss": "6.0.19" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -8101,15 +10653,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -8132,6 +10675,38 @@ "object-assign": "4.1.1", "postcss-load-options": "1.2.0", "postcss-load-plugins": "2.3.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.10.0", + "minimist": "1.2.0", + "object-assign": "4.1.1", + "os-homedir": "1.0.2", + "parse-json": "2.2.0", + "require-from-string": "1.2.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + } } }, "postcss-load-options": { @@ -8142,6 +10717,38 @@ "requires": { "cosmiconfig": "2.2.2", "object-assign": "4.1.1" + }, + "dependencies": { + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.10.0", + "minimist": "1.2.0", + "object-assign": "4.1.1", + "os-homedir": "1.0.2", + "parse-json": "2.2.0", + "require-from-string": "1.2.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + } } }, "postcss-load-plugins": { @@ -8152,43 +10759,49 @@ "requires": { "cosmiconfig": "2.2.2", "object-assign": "4.1.1" - } - }, - "postcss-media-minmax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-3.0.0.tgz", - "integrity": "sha1-Z1JWA3pD70C8Twdgv9BtTcadSNI=", - "dev": true, - "requires": { - "postcss": "6.0.19" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", "dev": true, "requires": { - "color-convert": "1.9.0" + "is-directory": "0.3.1", + "js-yaml": "3.10.0", + "minimist": "1.2.0", + "object-assign": "4.1.1", + "os-homedir": "1.0.2", + "parse-json": "2.2.0", + "require-from-string": "1.2.1" } }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "error-ex": "1.3.1" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", "dev": true - }, + } + } + }, + "postcss-media-minmax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-3.0.0.tgz", + "integrity": "sha1-Z1JWA3pD70C8Twdgv9BtTcadSNI=", + "dev": true, + "requires": { + "postcss": "6.0.19" + }, + "dependencies": { "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -8205,15 +10818,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -8262,8 +10866,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000744", - "electron-to-chromium": "1.3.24" + "caniuse-db": "1.0.30000810", + "electron-to-chromium": "1.3.34" } } } @@ -8328,32 +10932,6 @@ "postcss": "6.0.19" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -8370,15 +10948,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -8423,32 +10992,6 @@ "postcss-selector-parser": "2.2.3" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -8465,53 +11008,18 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, "postcss-pseudoelements": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudoelements/-/postcss-pseudoelements-5.0.0.tgz", - "integrity": "sha1-7vGU6NUkZFylIKlJ6V5RjoEkAss=", - "dev": true, - "requires": { - "postcss": "6.0.19" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudoelements/-/postcss-pseudoelements-5.0.0.tgz", + "integrity": "sha1-7vGU6NUkZFylIKlJ6V5RjoEkAss=", + "dev": true, + "requires": { + "postcss": "6.0.19" + }, + "dependencies": { "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -8528,15 +11036,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -8579,32 +11078,6 @@ "postcss": "6.0.19" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -8621,15 +11094,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -8640,46 +11104,11 @@ "dev": true, "requires": { "chalk": "2.3.1", - "lodash": "4.17.4", + "lodash": "4.17.5", "log-symbols": "2.2.0", "postcss": "6.0.19" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "2.3.1" - } - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -8696,15 +11125,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -8715,49 +11135,23 @@ "dev": true }, "postcss-scss": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-1.0.2.tgz", - "integrity": "sha1-/0XPM1S4ee6JpOtoaA9GrJuxT5Q=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-1.0.4.tgz", + "integrity": "sha512-IFj42Hz2cBHHFvZTqkJqU08JCCM/MZU5/uNkTUZBaBFP2d4C5unw4HyCL52RfCwJb6KoVUD3eoepxMh1dfBFCQ==", "dev": true, "requires": { - "postcss": "6.0.13" + "postcss": "6.0.19" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, "postcss": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.13.tgz", - "integrity": "sha512-nHsrD1PPTMSJDfU+osVsLtPkSP9YGeoOz4FDLN4r1DW4N5vqL1J+gACzTQHsfwIiWG/0/nV4yCzjTMo1zD8U1g==", + "version": "6.0.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", + "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", "dev": true, "requires": { - "chalk": "2.1.0", + "chalk": "2.3.1", "source-map": "0.6.1", - "supports-color": "4.4.0" + "supports-color": "5.2.0" } }, "source-map": { @@ -8765,15 +11159,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } } } }, @@ -8787,38 +11172,12 @@ "postcss": "6.0.19" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, "balanced-match": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", "dev": true }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -8835,15 +11194,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -8857,38 +11207,12 @@ "postcss": "6.0.19" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, "balanced-match": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", "dev": true }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { "version": "6.0.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", @@ -8905,15 +11229,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -8934,7 +11249,7 @@ "integrity": "sha1-MrHpr6kTuyJaatB21QPY+YO7SoI=", "dev": true, "requires": { - "lodash": "4.17.4", + "lodash": "4.17.5", "postcss": "5.2.18" } }, @@ -8962,64 +11277,27 @@ } }, "postcss-url": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-7.3.0.tgz", - "integrity": "sha512-VBP6uf6iL3AZra23nkPkOEkS/5azj1xf/toRrjfkolfFEgg9Gyzg9UhJZeIsz12EGKZTNVeGbPa2XtaZm/iZvg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-7.3.1.tgz", + "integrity": "sha512-Ya5KIjGptgz0OtrVYfi2UbLxVAZ6Emc4Of+Grx4Sf1deWlRpFwLr8FrtkUxfqh+XiZIVkXbjQrddE10ESpNmdA==", "dev": true, "requires": { "mime": "1.6.0", "minimatch": "3.0.4", "mkdirp": "0.5.1", - "postcss": "6.0.16", - "xxhashjs": "0.2.1" + "postcss": "6.0.19", + "xxhashjs": "0.2.2" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - }, - "dependencies": { - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, "postcss": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.16.tgz", - "integrity": "sha512-m758RWPmSjFH/2MyyG3UOW1fgYbR9rtdzz5UNJnlm7OLtu4B2h9C6gi+bE4qFKghsBRFfZT8NzoQBs6JhLotoA==", + "version": "6.0.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", + "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", "dev": true, "requires": { - "chalk": "2.3.0", + "chalk": "2.3.1", "source-map": "0.6.1", - "supports-color": "5.1.0" + "supports-color": "5.2.0" } }, "source-map": { @@ -9027,15 +11305,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", - "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } } } }, @@ -9081,15 +11350,21 @@ "dev": true }, "private": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", - "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, "progress": { @@ -9098,6 +11373,38 @@ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", "dev": true }, + "proxy-agent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-2.0.0.tgz", + "integrity": "sha1-V+tTR6qAXXTsaByyVknbo5yTNJk=", + "dev": true, + "optional": true, + "requires": { + "agent-base": "2.1.1", + "debug": "2.6.9", + "extend": "3.0.1", + "http-proxy-agent": "1.0.0", + "https-proxy-agent": "1.0.0", + "lru-cache": "2.6.5", + "pac-proxy-agent": "1.1.0", + "socks-proxy-agent": "2.1.1" + }, + "dependencies": { + "lru-cache": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz", + "integrity": "sha1-5W1jVBSO3o13B7WNFDIg/QjfD9U=", + "dev": true, + "optional": true + } + } + }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=", + "dev": true + }, "ps-tree": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", @@ -9107,22 +11414,89 @@ "event-stream": "3.3.4" } }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.6" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "puppeteer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.1.1.tgz", + "integrity": "sha1-rb8l5J9e8DRDwQq44JqVTKDHv+4=", + "dev": true, + "requires": { + "debug": "2.6.9", + "extract-zip": "1.6.6", + "https-proxy-agent": "2.1.1", + "mime": "1.6.0", + "progress": "2.0.0", + "proxy-from-env": "1.0.0", + "rimraf": "2.6.2", + "ws": "3.3.3" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", + "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", + "dev": true, + "requires": { + "es6-promisify": "5.0.0" + } + }, + "https-proxy-agent": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.1.1.tgz", + "integrity": "sha512-LK6tQUR/VOkTI6ygAfWUKKP95I+e6M1h7N3PncGu1CATHCnex+CAv9ttR0lbHu1Uk2PXm/WoAHFo6JCGwMjVMw==", + "dev": true, + "requires": { + "agent-base": "4.2.0", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + } + } + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true }, - "q": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", - "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true }, "qs": { @@ -9141,19 +11515,22 @@ "strict-uri-encode": "1.1.0" } }, - "qunit-phantomjs-runner": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/qunit-phantomjs-runner/-/qunit-phantomjs-runner-2.3.1.tgz", - "integrity": "sha512-RLg51606zm6/HwZi29NciAMAqifyJE1oGg77tEuk05vEa7kuqEaI0Mkjw976Ynnq7GXurATnbFd+471c024tBQ==", - "dev": true, - "requires": { - "qunit-reporter-junit": "1.1.1" - } + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true }, - "qunit-reporter-junit": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/qunit-reporter-junit/-/qunit-reporter-junit-1.1.1.tgz", - "integrity": "sha1-7rYiZFeJaZPnlaEZQPGK9q+lebQ=", + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", "dev": true }, "randomatic": { @@ -9181,7 +11558,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "1.1.6" } } } @@ -9192,29 +11569,58 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "1.1.6" } } } }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "2.0.6", + "safe-buffer": "5.1.1" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, "rc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz", - "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.5.tgz", + "integrity": "sha1-J1zWh/bjs2zHVrqibf7oCnkDAf0=", "dev": true, "requires": { "deep-extend": "0.4.2", - "ini": "1.3.4", + "ini": "1.3.5", "minimist": "1.2.0", "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } } }, "read-cache": { @@ -9224,6 +11630,14 @@ "dev": true, "requires": { "pify": "2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "read-file-stdin": { @@ -9235,37 +11649,46 @@ "gather-stream": "1.0.0" } }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dev": true, + "requires": { + "readable-stream": "2.3.4" + } + }, "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "1.1.0", + "load-json-file": "4.0.0", "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "path-type": "3.0.0" } }, "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "2.1.0", + "read-pkg": "3.0.0" } }, "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", + "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", - "process-nextick-args": "1.0.7", + "process-nextick-args": "2.0.0", "safe-buffer": "5.1.1", "string_decoder": "1.0.3", "util-deprecate": "1.0.2" @@ -9279,20 +11702,46 @@ "requires": { "graceful-fs": "4.1.11", "minimatch": "3.0.4", - "readable-stream": "2.3.3", + "readable-stream": "2.3.4", "set-immediate-shim": "1.0.1" } }, "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "dev": true, + "requires": { + "indent-string": "3.2.0", + "strip-indent": "2.0.0" + } + }, + "redis": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", + "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==", "dev": true, + "optional": true, "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "double-ended-queue": "2.1.0-0", + "redis-commands": "1.3.5", + "redis-parser": "2.6.0" } }, + "redis-commands": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.5.tgz", + "integrity": "sha512-foGF8u6MXGFF++1TZVC6icGXuMYPftKXt1FBT2vrfU9ZATNtZJ8duRC5d1lEfE8hyVe3jhelHGB91oB7I6qLsA==", + "dev": true, + "optional": true + }, + "redis-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", + "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=", + "dev": true, + "optional": true + }, "reduce-css-calc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", @@ -9336,9 +11785,9 @@ "dev": true }, "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, "regenerator-transform": { @@ -9349,7 +11798,7 @@ "requires": { "babel-runtime": "6.26.0", "babel-types": "6.26.0", - "private": "0.1.7" + "private": "0.1.8" } }, "regex-cache": { @@ -9383,12 +11832,12 @@ } }, "registry-auth-token": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", - "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", "dev": true, "requires": { - "rc": "1.2.2", + "rc": "1.2.5", "safe-buffer": "5.1.1" } }, @@ -9398,7 +11847,7 @@ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "dev": true, "requires": { - "rc": "1.2.2" + "rc": "1.2.5" } }, "regjsgen": { @@ -9456,38 +11905,43 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", "dev": true, + "optional": true, "requires": { "aws-sign2": "0.7.0", "aws4": "1.6.0", "caseless": "0.12.0", - "combined-stream": "1.0.5", + "combined-stream": "1.0.6", "extend": "3.0.1", "forever-agent": "0.6.1", - "form-data": "2.3.1", + "form-data": "2.3.2", "har-validator": "5.0.3", "hawk": "6.0.2", "http-signature": "1.2.0", "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", + "mime-types": "2.1.18", "oauth-sign": "0.8.2", "performance-now": "2.1.0", "qs": "6.5.1", "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "uuid": "3.2.1" } }, - "request-progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", - "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", + "requestretry": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.13.0.tgz", + "integrity": "sha512-Lmh9qMvnQXADGAQxsXHP4rbgO6pffCfuR8XUBdP9aitJcLQJxhp7YZK4xAVYXnPJ5E52mwrfiKQtKonPL8xsmg==", "dev": true, + "optional": true, "requires": { - "throttleit": "1.0.0" + "extend": "3.0.1", + "lodash": "4.17.5", + "request": "2.83.0", + "when": "3.7.8" } }, "require-directory": { @@ -9497,9 +11951,9 @@ "dev": true }, "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.1.tgz", + "integrity": "sha1-xUUjPp19pmFunVmt+zn8n1iGdv8=", "dev": true }, "require-main-filename": { @@ -9522,8 +11976,22 @@ "requires": { "caller-path": "0.1.0", "resolve-from": "1.0.1" + }, + "dependencies": { + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + } } }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, "resolve": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", @@ -9534,11 +12002,20 @@ } }, "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "resolve-global": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-0.1.0.tgz", + "integrity": "sha1-j7As/Vt9sgEY6IYxHxWvlb0V+9k=", + "dev": true, + "requires": { + "global-dirs": "0.1.1" + } + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -9580,28 +12057,22 @@ "dev": true, "requires": { "glob": "7.1.2" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" } }, "rollup": { - "version": "0.56.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.56.2.tgz", - "integrity": "sha512-vZIn0P+xA1glmc4DwRsUC9ce6SSE5gZT2YKaRiSYHwJXHcRtXWHOvrY2NtUR8Gk+EoszyyoXMfw9OrYCCKCYCA==", + "version": "0.56.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.56.3.tgz", + "integrity": "sha512-/iH4RfioboHgBjo7TbQcdMad/ifVGY/ToOB1AsW7oZHUhfhm+low6QlrImUSaJO1JqklOpWEKlD+b3MZYLuptA==", "dev": true }, "rollup-plugin-babel": { @@ -9619,7 +12090,7 @@ "integrity": "sha512-PYs3OiYgENFYEmI3vOEm5nrp3eY90YZqd5vGmQqeXmhJsAWFIrFdROCvOasqJ1HgeTvqyYo9IGXnFDyoboNcgQ==", "dev": true, "requires": { - "acorn": "5.4.1", + "acorn": "5.5.0", "estree-walker": "0.5.1", "magic-string": "0.22.4", "resolve": "1.5.0", @@ -9748,9 +12219,9 @@ "dev": true }, "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true }, "semver-diff": { @@ -9759,7 +12230,7 @@ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "dev": true, "requires": { - "semver": "5.4.1" + "semver": "5.5.0" } }, "set-blocking": { @@ -9806,6 +12277,32 @@ } } }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + }, + "sha.js": { + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz", + "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "dev": true, + "requires": { + "json-stable-stringify": "0.0.1", + "sha.js": "2.4.10" + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -9862,6 +12359,16 @@ } } }, + "slack-node": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/slack-node/-/slack-node-0.2.0.tgz", + "integrity": "sha1-3kuN3aqLeT9h29KTgQT9q/N9+jA=", + "dev": true, + "optional": true, + "requires": { + "requestretry": "1.13.0" + } + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -9877,6 +12384,22 @@ "is-fullwidth-code-point": "2.0.0" } }, + "smart-buffer": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", + "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=", + "dev": true + }, + "smtp-connection": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz", + "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=", + "dev": true, + "requires": { + "httpntlm": "1.6.1", + "nodemailer-shared": "1.1.0" + } + }, "snapdragon": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", @@ -9926,7 +12449,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "1.1.6" } } } @@ -9946,7 +12469,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "1.1.6" } } } @@ -10012,8 +12535,107 @@ "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "dev": true, + "optional": true, + "requires": { + "hoek": "4.2.1" + } + }, + "socket.io": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz", + "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "engine.io": "3.1.5", + "socket.io-adapter": "1.1.1", + "socket.io-client": "2.0.4", + "socket.io-parser": "3.1.3" + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, + "socket.io-client": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", + "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.6.9", + "engine.io-client": "3.1.5", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "3.1.3", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", + "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "3.1.0", + "has-binary2": "1.0.2", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "socks": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz", + "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", + "dev": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "1.1.15" + }, + "dependencies": { + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + } + } + }, + "socks-proxy-agent": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-2.1.1.tgz", + "integrity": "sha512-sFtmYqdUK5dAMh85H0LEVFUCO7OhJJe1/z2x/Z6mxp3s7/QPf1RkZmpZy+BpuU0bEjcV9npqKjq9Y3kwFUjnxw==", + "dev": true, "requires": { - "hoek": "4.2.0" + "agent-base": "2.1.1", + "extend": "3.0.1", + "socks": "1.1.10" } }, "sort-keys": { @@ -10060,24 +12682,35 @@ "dev": true }, "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" } }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", "dev": true }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", "dev": true }, "specificity": { @@ -10105,12 +12738,12 @@ } }, "split2": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz", - "integrity": "sha1-At2smtwD7Au3jBKC7Aecpuha6QA=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", "dev": true, "requires": { - "through2": "0.6.5" + "through2": "2.0.3" } }, "sprintf-js": { @@ -10124,6 +12757,7 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", "dev": true, + "optional": true, "requires": { "asn1": "0.2.3", "assert-plus": "1.0.0", @@ -10169,7 +12803,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "1.1.6" } } } @@ -10189,7 +12823,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "1.1.6" } } } @@ -10213,19 +12847,91 @@ } } }, - "stdin": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/stdin/-/stdin-0.0.1.tgz", - "integrity": "sha1-0wQZgarsPf28d6GzjWNy449ftx4=", - "dev": true + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + }, + "stdin": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/stdin/-/stdin-0.0.1.tgz", + "integrity": "sha1-0wQZgarsPf28d6GzjWNy449ftx4=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "dev": true, + "requires": { + "duplexer": "0.1.1" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "requires": { + "duplexer2": "0.1.4", + "readable-stream": "2.3.4" + } + }, + "stream-http": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz", + "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", + "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "streamroller": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", + "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", "dev": true, "requires": { - "duplexer": "0.1.1" + "date-format": "1.2.0", + "debug": "3.1.0", + "mkdirp": "0.5.1", + "readable-stream": "2.3.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "strict-uri-encode": { @@ -10268,7 +12974,7 @@ "dev": true, "requires": { "define-properties": "1.1.2", - "es-abstract": "1.9.0", + "es-abstract": "1.10.0", "function-bind": "1.1.1" } }, @@ -10285,7 +12991,8 @@ "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true + "dev": true, + "optional": true }, "strip-ansi": { "version": "3.0.1", @@ -10297,13 +13004,10 @@ } }, "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true }, "strip-eof": { "version": "1.0.0", @@ -10312,13 +13016,10 @@ "dev": true }, "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "4.0.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true }, "strip-json-comments": { "version": "2.0.1", @@ -10344,8 +13045,8 @@ "editorconfig": "0.13.3", "globby": "6.1.0", "minimist": "1.2.0", - "postcss": "6.0.13", - "postcss-scss": "1.0.2", + "postcss": "6.0.19", + "postcss-scss": "1.0.4", "postcss-sorting": "2.1.0", "postcss-value-parser": "3.3.0", "stdin": "0.0.1", @@ -10354,26 +13055,22 @@ }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" } }, "globby": { @@ -10389,38 +13086,50 @@ "pinkie-promise": "2.0.1" } }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, "postcss": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.13.tgz", - "integrity": "sha512-nHsrD1PPTMSJDfU+osVsLtPkSP9YGeoOz4FDLN4r1DW4N5vqL1J+gACzTQHsfwIiWG/0/nV4yCzjTMo1zD8U1g==", + "version": "6.0.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", + "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", "dev": true, "requires": { - "chalk": "2.1.0", + "chalk": "2.3.1", "source-map": "0.6.1", - "supports-color": "4.4.0" + "supports-color": "5.2.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", + "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", "dev": true, "requires": { "ansi-styles": "3.2.0", "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" + "supports-color": "5.2.0" + } + }, + "supports-color": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", + "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "dev": true, + "requires": { + "has-flag": "3.0.0" } } } @@ -10432,13 +13141,10 @@ "dev": true }, "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true } } }, @@ -10461,21 +13167,43 @@ "write-file-stdout": "0.0.2" }, "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, "browserslist": { "version": "1.7.7", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000744", - "electron-to-chromium": "1.3.24" + "caniuse-db": "1.0.30000810", + "electron-to-chromium": "1.3.34" } }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } }, "postcss-reporter": { "version": "1.4.1", @@ -10484,10 +13212,16 @@ "dev": true, "requires": { "chalk": "1.1.3", - "lodash": "4.17.4", + "lodash": "4.17.5", "log-symbols": "1.0.2", "postcss": "5.2.18" } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true } } }, @@ -10499,8 +13233,8 @@ "requires": { "autoprefixer": "6.7.7", "balanced-match": "0.4.2", - "chalk": "2.1.0", - "colorguard": "1.2.0", + "chalk": "2.3.1", + "colorguard": "1.2.1", "cosmiconfig": "2.2.2", "debug": "2.6.9", "doiuse": "2.6.0", @@ -10510,10 +13244,10 @@ "globby": "6.1.0", "globjoin": "0.1.4", "html-tags": "2.0.0", - "ignore": "3.3.5", + "ignore": "3.3.7", "imurmurhash": "0.1.4", "known-css-properties": "0.2.0", - "lodash": "4.17.4", + "lodash": "4.17.5", "log-symbols": "1.0.2", "mathml-tag-names": "2.0.1", "meow": "3.7.0", @@ -10535,17 +13269,14 @@ "stylehacks": "2.3.2", "sugarss": "0.2.0", "svg-tags": "1.0.0", - "table": "4.0.2" + "table": "4.0.3" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true }, "balanced-match": { "version": "0.4.2", @@ -10553,35 +13284,19 @@ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", "dev": true }, - "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" - } - }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "is-directory": "0.3.1", + "js-yaml": "3.10.0", + "minimist": "1.2.0", + "object-assign": "4.1.1", + "os-homedir": "1.0.2", + "parse-json": "2.2.0", + "require-from-string": "1.2.1" } }, "globby": { @@ -10597,10 +13312,43 @@ "pinkie-promise": "2.0.1" } }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "1.1.3" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, "postcss-reporter": { @@ -10610,17 +13358,11 @@ "dev": true, "requires": { "chalk": "1.1.3", - "lodash": "4.17.4", + "lodash": "4.17.5", "log-symbols": "1.0.2", "postcss": "5.2.18" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -10633,12 +13375,6 @@ "strip-ansi": "3.0.1", "supports-color": "2.0.0" } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true } } }, @@ -10651,6 +13387,12 @@ "postcss": "5.2.18" } }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, "resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", @@ -10658,13 +13400,10 @@ "dev": true }, "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true } } }, @@ -10674,11 +13413,20 @@ "integrity": "sha1-2338oFQbUGIBDH4uIedFeR/AiKw=", "dev": true, "requires": { - "lodash": "4.17.4", + "lodash": "4.17.5", "postcss": "5.2.18", "stylelint": "7.13.0" } }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, + "requires": { + "minimist": "1.2.0" + } + }, "sugarss": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-0.2.0.tgz", @@ -10689,10 +13437,13 @@ } }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", + "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } }, "svg-tags": { "version": "1.0.0", @@ -10713,6 +13464,24 @@ "mkdirp": "0.5.1", "sax": "1.2.4", "whet.extend": "0.9.9" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "2.7.3" + } + } } }, "synesthesia": { @@ -10732,53 +13501,38 @@ } } }, + "syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dev": true, + "requires": { + "acorn-node": "1.3.0" + } + }, "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", + "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", "dev": true, "requires": { - "ajv": "5.2.3", - "ajv-keywords": "2.1.0", - "chalk": "2.1.0", - "lodash": "4.17.4", + "ajv": "6.2.0", + "ajv-keywords": "3.1.0", + "chalk": "2.3.1", + "lodash": "4.17.5", "slice-ansi": "1.0.0", "string-width": "2.1.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + }, + "dependencies": { + "ajv": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.0.tgz", + "integrity": "sha1-r6wpW7qgFSRJ5SJ0LkVHwa6TKNI=", "dev": true, "requires": { - "has-flag": "2.0.0" + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } } } @@ -10792,18 +13546,18 @@ "execa": "0.7.0" } }, + "text-extensions": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz", + "integrity": "sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg==", + "dev": true + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", - "dev": true - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -10811,47 +13565,44 @@ "dev": true }, "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "1.0.34", + "readable-stream": "2.3.4", "xtend": "4.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } } }, + "thunkify": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", + "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=", + "dev": true, + "optional": true + }, "timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", "dev": true }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dev": true, + "requires": { + "process": "0.11.10" + } + }, + "timespan": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", + "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=", + "dev": true, + "optional": true + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -10861,6 +13612,18 @@ "os-tmpdir": "1.0.2" } }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", @@ -10910,18 +13673,25 @@ } }, "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "dev": true, + "optional": true, "requires": { "punycode": "1.4.1" } }, "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true + }, + "trim-off-newlines": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", + "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", "dev": true }, "trim-right": { @@ -10930,11 +13700,25 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, + "tsscmp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz", + "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc=", + "dev": true, + "optional": true + }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, + "optional": true, "requires": { "safe-buffer": "5.1.1" } @@ -10955,6 +13739,22 @@ "prelude-ls": "1.1.2" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.18" + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -10971,12 +13771,6 @@ "source-map": "0.6.1" }, "dependencies": { - "commander": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", - "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10985,6 +13779,24 @@ } } }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, + "umd": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", + "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", + "dev": true + }, + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", + "dev": true + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -11066,6 +13878,12 @@ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", "dev": true }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -11119,16 +13937,10 @@ "dev": true }, "upath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.2.tgz", - "integrity": "sha512-fCmij7T5LnwUme3dbnVSejvOHHlARjB3ikJFwgZfz386pHmf/gueuTLRFU94FZEaeCLlbQrweiUU700gG41tUw==", - "dev": true, - "requires": { - "lodash.endswith": "4.2.1", - "lodash.isfunction": "3.0.9", - "lodash.isstring": "4.0.1", - "lodash.startswith": "4.2.1" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz", + "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==", + "dev": true }, "update-notifier": { "version": "2.3.0", @@ -11136,8 +13948,8 @@ "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=", "dev": true, "requires": { - "boxen": "1.2.2", - "chalk": "2.3.0", + "boxen": "1.3.0", + "chalk": "2.3.1", "configstore": "3.1.1", "import-lazy": "2.1.0", "is-installed-globally": "0.1.0", @@ -11145,43 +13957,6 @@ "latest-version": "3.1.0", "semver-diff": "2.1.0", "xdg-basedir": "3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } } }, "urix": { @@ -11190,6 +13965,24 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, "url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", @@ -11234,7 +14027,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "1.1.6" } } } @@ -11254,7 +14047,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "1.1.6" } } } @@ -11284,26 +14077,67 @@ } } }, + "useragent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "tmp": "0.0.33" + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true, + "optional": true + }, + "uws": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz", + "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==", + "dev": true, + "optional": true + }, "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" } }, "vendors": { @@ -11317,6 +14151,7 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, + "optional": true, "requires": { "assert-plus": "1.0.0", "core-util-is": "1.0.2", @@ -11335,6 +14170,28 @@ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", "dev": true }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "when": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", + "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=", + "dev": true, + "optional": true + }, "whet.extend": { "version": "0.9.9", "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", @@ -11357,34 +14214,12 @@ "dev": true }, "widest-line": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", - "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", "dev": true, "requires": { - "string-width": "1.0.2" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } + "string-width": "2.1.1" } }, "window-size": { @@ -11463,12 +14298,36 @@ "integrity": "sha1-wlLXx8WxtAKJdjDjRTx7/mkNnKE=", "dev": true }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1", + "ultron": "1.1.1" + } + }, "xdg-basedir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", "dev": true }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", + "dev": true, + "optional": true + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -11476,9 +14335,9 @@ "dev": true }, "xxhashjs": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.1.tgz", - "integrity": "sha1-m76b6JYUKXbfo0wGGy0GjEPTDeA=", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", "dev": true, "requires": { "cuint": "0.2.2" @@ -11514,43 +14373,6 @@ "which-module": "2.0.0", "y18n": "3.2.1", "yargs-parser": "9.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "cliui": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", - "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", - "dev": true, - "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } } }, "yargs-parser": { @@ -11560,14 +14382,6 @@ "dev": true, "requires": { "camelcase": "4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } } }, "yauzl": { @@ -11578,6 +14392,12 @@ "requires": { "fd-slicer": "1.0.1" } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true } } } diff --git a/package.json b/package.json index ea46acb0..8985ffe4 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { "name": "cropper", "description": "A simple jQuery image cropping plugin.", - "version": "3.1.6", + "version": "4.0.0-alpha", "main": "dist/cropper.common.js", "module": "dist/cropper.esm.js", - "browser": "dist/cropper.js", + "unpkg": "dist/cropper.js", "repository": "fengyuanchen/cropper", "homepage": "https://fengyuanchen.github.io/cropper", "license": "MIT", @@ -19,13 +19,14 @@ "keywords": [ "image", "crop", - "cropper", - "cropping", - "processing", "move", "zoom", "rotate", "scale", + "cropper", + "cropper.js", + "cropping", + "processing", "jquery", "plugin", "jquery-plugin", @@ -38,38 +39,54 @@ ], "scripts": { "build": "npm run build:css && npm run build:js", - "build:css": "postcss src/css/cropper.css -o dist/cropper.css --no-map", + "build:css": "postcss src/index.css -o dist/cropper.css --no-map", "build:js": "rollup -c", "clear": "del-cli dist", + "commitmsg": "npm run lint && commitlint -e", "compress": "npm run compress:css && npm run compress:js", "compress:css": "postcss dist/cropper.css -u cssnano -o dist/cropper.min.css --no-map", "compress:js": "uglifyjs dist/cropper.js -o dist/cropper.min.js -c -m --comments /^!/", "copy": "cpy dist/cropper.css docs/css", - "lint": "eslint src/js --fix", + "lint": "eslint src test --fix", "release": "npm run clear && npm run lint && npm run build && npm run compress && npm run copy && npm test", "start": "npm-run-all --parallel watch:*", - "test": "node-qunit-phantomjs test/index.html --timeout 10", - "watch:css": "postcss src/css/cropper.css -o docs/css/cropper.css -m -w", + "test": "karma start test/karma.conf.js", + "watch:css": "postcss src/index.css -o docs/css/cropper.css -m -w", "watch:js": "rollup -c -m -w" }, + "dependencies": { + "cropperjs": "^1.3.1" + }, "devDependencies": { + "@commitlint/cli": "^6.1.2", + "@commitlint/config-angular": "^6.1.2", "babel-core": "^6.26.0", "babel-plugin-external-helpers": "^6.22.0", "babel-preset-env": "^1.6.1", + "chai": "^4.1.2", "cpy-cli": "^1.0.1", "cssnano": "^3.10.0", "del-cli": "^1.1.0", "eslint": "^4.18.1", "eslint-config-airbnb-base": "^12.1.0", "eslint-plugin-import": "^2.9.0", + "husky": "^0.14.3", "jquery": "^3.3.1", - "node-qunit-phantomjs": "^2.0.0", + "karma": "^2.0.0", + "karma-chai": "^0.1.0", + "karma-chrome-launcher": "^2.2.0", + "karma-mocha": "^1.3.0", + "karma-mocha-reporter": "^2.2.5", + "karma-rollup-preprocessor": "^5.1.1", + "mocha": "^5.0.1", "npm-run-all": "^4.1.2", "postcss-cli": "^5.0.0", "postcss-cssnext": "^3.1.0", "postcss-header": "^1.0.0", - "postcss-url": "^7.3.0", - "rollup": "^0.56.2", + "postcss-import": "^11.1.0", + "postcss-url": "^7.3.1", + "puppeteer": "^1.1.1", + "rollup": "^0.56.3", "rollup-plugin-babel": "^3.0.3", "rollup-plugin-commonjs": "^8.3.0", "rollup-plugin-node-resolve": "^3.0.3",