diff --git a/.babelrc b/.babelrc index a0765e185..f3ccf4a26 100644 --- a/.babelrc +++ b/.babelrc @@ -1,3 +1,8 @@ { - "presets": ["es2015"] + "presets": ["es2015"], + "plugins": [ + ["transform-es2015-destructuring", {"loose": true}], + ["transform-es2015-for-of", {"loose": true}], + ["transform-es2015-spread", {"loose": true}] + ] } diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 89e7f893a..000000000 --- a/.eslintrc +++ /dev/null @@ -1,253 +0,0 @@ -{ - "env": { - "browser": true, - "amd": true, - "node": true, - "jasmine": true, - "jquery": true, - "es6": true - }, - "globals": { - "fabric": true, - "tui": true, - "loadFixtures": true - }, - "parserOptions": { - "sourceType": "module" - }, - "rules": { - //Possible Errors - "comma-dangle": [2, "never"], - "no-cond-assign": [2, "always"], - "no-console": 1, - "no-constant-condition": 2, - "no-control-regex": 2, - "no-debugger": 2, - "no-dupe-args": 2, - "no-dupe-keys": 2, - "no-duplicate-case": 2, - "no-empty-character-class": 2, - "no-empty": [2, {"allowEmptyCatch": false}], - "no-ex-assign": 2, - "no-extra-boolean-cast": 2, - "no-extra-parens": [2, "functions"], - "no-extra-semi": 2, - "no-func-assign": 2, - "no-inner-declarations": [2, "both"], - "no-invalid-regexp": 2, - "no-irregular-whitespace": [2, {"skipComments": true}], - "no-negated-in-lhs": 2, - "no-obj-calls": 2, - "no-prototype-builtins": 0, - "no-regex-spaces": 2, - "no-sparse-arrays": 2, - "no-template-curly-in-string": 2, - "no-unexpected-multiline": 2, - "no-unreachable": 2, - "use-isnan": 2, - "valid-jsdoc": [2, { - "prefer": { - "return": "returns" - }, - "requireReturnDescription": false, - "requireReturn": false - }], - "valid-typeof": 2, - - //Best Practices - "accessor-pairs": [2, {"getWithoutSet": true}], - "block-scoped-var": 2, - "complexity": [1, 6], - "consistent-return": 2, - "curly": 2, - "default-case": 2, - "dot-location": [2, "property"], - "dot-notation": [2], - "eqeqeq": [2, "always"], - "guard-for-in": 2, - "no-alert": 0, - "no-caller": 2, - "no-case-declarations": 2, - "no-div-regex": 2, - "no-else-return": 2, - "no-empty-pattern": 2, - "no-eq-null": 2, - "no-eval": 2, - "no-extend-native": 2, - "no-extra-bind": 2, - "no-fallthrough": 2, - "no-floating-decimal": 2, - "no-implicit-coercion": [2, {"boolean": false}], - "no-implied-eval": 2, - "no-iterator": 2, - "no-labels": 2, - "no-lone-blocks": 2, - "no-loop-func": 2, - "no-multi-spaces": 2, - "no-multi-str": 2, - "no-native-reassign": 2, - "no-new-func": 2, - "no-new-wrappers": 2, - "no-new": 2, - "no-octal-escape": 2, - "no-octal": 2, - "no-param-reassign": 0, - "no-process-env": 2, - "no-proto": 2, - "no-redeclare": 2, - "no-return-assign": [2, "always"], - "no-script-url": 2, - "no-self-compare": 2, - "no-sequences": 2, - "no-throw-literal": 2, - "no-unsafe-finally": 2, - "no-unused-expressions": 2, - "no-useless-call": 2, - "no-useless-concat": 2, - "no-void": 2, - "no-warning-comments": 1, - "no-with": 2, - "radix": 2, - "vars-on-top": 2, - "wrap-iife": [2, "inside"], - "yoda": 2, - "no-useless-escape": 2, - - // Strict Mode - "strict": [2, "global"], - - // Variables - "init-declarations": 0, - "no-catch-shadow": 2, - "no-delete-var": 2, - "no-label-var": 2, - "no-shadow-restricted-names": 2, - "no-shadow": 2, - "no-undef-init": 2, - "no-undef": 2, - "no-undefined": 2, - "no-unused-vars": 2, - "no-use-before-define": [2, "nofunc"], - "no-restricted-globals": [1, "event", "fdescribe", "fit"], - - // Node.js and CommonJS - "global-require": 2, - "handle-callback-err": 2, - "no-mixed-requires": [2, true], - "no-new-require": 2, - "no-path-concat": 2, - "no-process-exit": 2, - "no-restricted-modules": 0, - "no-sync": 0, - - //Stylistic Issues - "array-bracket-spacing": [2, "never"], - "block-spacing": [2, "never"], - "brace-style": [2, "1tbs", {"allowSingleLine": false}], - "camelcase": 2, - "comma-spacing": [2, {"before": false, "after": true}], - "comma-style": [2, "last"], - "computed-property-spacing": [2, "never"], - "consistent-this": [2, "self"], - "eol-last": 2, - "func-names": 0, - "func-style": 0, - "func-call-spacing": [2, "never"], - "id-length": 0, - "id-match": 0, - "indent": [2, 4, {"SwitchCase": 1}], - "jsx-quotes": [2, "prefer-double"], - "key-spacing": [2, {"beforeColon": false, "afterColon": true}], - "keyword-spacing": 2, - "linebreak-style": [2, "unix"], - "lines-around-comment": 0, - "max-depth": [2, 3], - "max-len": [2, 120, 4], - "max-nested-callbacks": [2, 3], - "max-params": [2, 5], - "max-statements": 0, - "multiline-ternary": [2, "never"], - "new-cap": [2, { - "capIsNewExceptions": ["$.Deferred"] - }], - "new-parens": 2, - "newline-after-var": 0, - "no-array-constructor": 0, - "no-bitwise": 0, - "no-continue": 0, - "no-inline-comments": 0, - "no-lonely-if": 2, - "no-mixed-operators": [2, {"allowSamePrecedence": true}], - "no-mixed-spaces-and-tabs": [2, "smart-tabs"], - "no-multiple-empty-lines": [2, {"max": 2}], - "no-nested-ternary": 2, - "no-new-object": 2, - "no-plusplus": 2, - "no-restricted-syntax": [2, "WithStatement"], - "no-spaced-func": 2, - "no-tabs": 2, - "no-ternary": 0, - "no-trailing-spaces": 2, - "no-underscore-dangle": 0, - "no-unneeded-ternary": 2, - "object-curly-newline": 0, - "object-curly-spacing": [2, "never"], - "object-property-newline": [2, {"allowMultiplePropertiesPerLine": false}], - "one-var": 0, - "operator-assignment": 0, - "operator-linebreak": 0, - "padded-blocks": [2, "never"], - "quote-props": 0, - "quotes": [2, "single", {"avoidEscape": true, "allowTemplateLiterals": true}], - "require-jsdoc": 1, - "semi-spacing": [2, {"before": false, "after": true}], - "semi": 2, - "sort-keys": 0, - "sort-vars": 0, - "space-before-blocks": 2, - "space-before-function-paren": [2, "never"], - "space-in-parens": [2, "never"], - "space-infix-ops": 2, - "space-unary-ops": [2, {"words": true, "nonwords": false}], - "spaced-comment": [2, "always", { - "block": { - "markers": ["*"], - "exceptions": ["*"] - } - }], - "wrap-regex": 0, - "newline-before-return": 1, - "max-statements-per-line": [2, {"max": 1}], - "unicode-bom": [2, "never"], - - //ES6 - "arrow-body-style": [2, "as-needed", {"requireReturnForObjectLiteral": false}], - "arrow-parens": [2, "as-needed"], - "arrow-spacing": [2, {"before": true, "after": true}], - "constructor-super": 2, - "generator-star-spacing": [2, "after"], - "no-class-assign": 2, - "no-const-assign": 2, - "no-confusing-arrow": [2, {"allowParens": true}], - "no-dupe-class-members": 2, - "no-duplicate-imports": 2, - "no-new-symbol": 2, - "no-this-before-super": 2, - "no-useless-constructor": 2, - "no-useless-computed-key": 2, - "no-useless-rename": 2, - "no-var": 2, - "object-shorthand": [2, "always", {"avoidQuotes": true}], - "prefer-arrow-callback": [2, {"allowUnboundThis": false, "allowNamedFunctions": true}], - "prefer-const": [2, {"destructuring": "any", "ignoreReadBeforeAssign": true}], - "prefer-reflect": 0, - "prefer-rest-params": 2, - "prefer-spread": 2, - "prefer-template": 2, - "require-yield": 2, - "rest-spread-spacing": [2, "never"], - "sort-imports": 0, - "template-curly-spacing": [2, "never"], - "yield-star-spacing": [2, "after"] - } -} diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..7810e3a07 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,19 @@ +module.exports = { + "extends": "tui/es6", + "env": { + "browser": true, + "amd": true, + "node": true, + "jasmine": true, + "jquery": true, + "es6": true + }, + "globals": { + "fabric": true, + "tui": true, + "loadFixtures": true + }, + "parserOptions": { + "sourceType": "module" + } +}; diff --git a/.gitignore b/.gitignore index 8cebd0cb5..16f3fd9ab 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,6 @@ demo report *.vim test.html + +# Compiled files +dist diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..afcf9bd6a --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,26 @@ + + + + +## Version + + +## Development Environment + + +## Current Behavior + + +```js +// Write example code +``` + +## Expected Behavior + diff --git a/README.md b/README.md index afd03e8c8..0bae40df2 100644 --- a/README.md +++ b/README.md @@ -18,36 +18,83 @@ Canvas image editor * Image Filter ## Documentation -* API: [http://nhnent.github.io/tui.component.image-editor/latest/](http://nhnent.github.io/tui.component.image-editor/latest/) -* Tutorial: [https://github.com/nhnent/tui.component.image-editor/wiki/Tutorial](https://github.com/nhnent/tui.component.image-editor/wiki/Tutorial) -* Examples: [http://nhnent.github.io/tui.component.image-editor/latest/tutorial-basic.html](http://nhnent.github.io/tui.component.image-editor/latest/tutorial-basic.html) +* API: [http://nhnent.github.io/tui.image-editor/latest/](http://nhnent.github.io/tui.image-editor/latest/) +* Tutorial: [https://github.com/nhnent/tui.image-editor/wiki/Tutorial](https://github.com/nhnent/tui.image-editor/wiki/Tutorial) +* Examples: [http://nhnent.github.io/tui.image-editor/latest/tutorial-example01-basic.html](http://nhnent.github.io/tui.image-editor/latest/tutorial-example01-basic.html) ## Dependency -* fabric.js: ~1.6.4 -* tui.code-snippet: ~1.2.0 - -## Test environment -* IE9 ~ -* Chrome -* Firefox - -## Mobile test environment -* iOS 9.3.x -* Android 4.4.x - -## Download/Install -* Bower - * Latest: `bower install tui-component-image-editor` - * Each version: `bower install tui-component-image-editor[#tag]` -* Download - * [https://github.com/nhnent/tui.component.image-editor/tree/master/dist](https://github.com/nhnent/tui.component.image-editor/tree/master/dist) - * Download dependencies - * fabric.js: [https://github.com/kangax/fabric.js](https://github.com/kangax/fabric.js) - * tui.code-snippet: [https://github.com/nhnent/tui.code-snippet](https://github.com/nhnent/tui.code-snippet) - -## LICENSE -* [MIT](LICENSE) - -## Sponsor -*
- [BrowserStack](https://www.browserstack.com/) is a cloud based cross browser testing tool +* [fabric.js: ~1.6.7](https://github.com/kangax/fabric.js/releases/tag/v1.6.7) +* [tui.code-snippet: 1.2.5](https://github.com/nhnent/tui.code-snippet/releases/tag/v1.2.5) + +## Tested Browsers +* Browser: + * IE9 ~ IE11 + * Edge + * Chrome + * Firefox + * Safari +* Mobile test environment + * iOS 9.3.x + * Android 4.4.x + +## Usage +### Use `npm` + +Install the latest version using `npm` command: + +``` +$ npm install tui-image-editor --save +``` + +or want to install the each version: + +``` +$ npm install tui-image-editor@ --save +``` + +To access as module format in your code: + +```javascript +var ImageEditor = require('tui-image-editor'); +var instance = new ImageEditor('.tui-image-editor', { + cssMaxWidth: 700, + cssMaxHeight: 500, + selectionStyle: { + cornerSize: 20, + rotatingPointOffset: 70 + } +}); +``` + +### Use `bower` +Install the latest version using `bower` command: + +``` +$ bower install tui-image-editor +``` + +or want to install the each version: + +``` +$ bower install tui-image-editor# +``` + +To access as namespace format in your code: + +```javascript +var imageEditor = new tui.ImageEditor('.tui-image-editor', { + cssMaxWidth: 700, + cssMaxHeight: 500, + selectionStyle: { + cornerSize: 20, + rotatingPointOffset: 70 + } +}); +``` + +### Download +* [Download bundle files from `dist` folder](https://github.com/nhnent/tui.image-editor/tree/production/dist) +* [Download all sources for each version](https://github.com/nhnent/tui.image-editor/releases) + +## License +[MIT LICENSE](https://github.com/nhnent/tui.image-editor/blob/master/LICENSE) diff --git a/bower.json b/bower.json index 2e8ce81ac..d4a8fdc1b 100644 --- a/bower.json +++ b/bower.json @@ -24,12 +24,12 @@ ".gitignore", "samples", "index.js", - "jsdoc-conf.json", + "jsdoc.conf.json", "webpack.*.js" ], "dependencies": { "fabric": "~1.6.4", - "tui-code-snippet": "~1.2.0" + "tui-code-snippet": "^1.2.5" }, "devDependencies": { "tui-component-colorpicker": "~1.0.1", diff --git a/dist/tui-image-editor.js b/dist/tui-image-editor.js deleted file mode 100644 index 0c61c2b5c..000000000 --- a/dist/tui-image-editor.js +++ /dev/null @@ -1,10936 +0,0 @@ -/*! - * tui-image-editor.js - * @version 2.0.0 - * @author NHNEnt FE Development Lab - * @license MIT - */ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; - -/******/ // The require function -/******/ function __webpack_require__(moduleId) { - -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; - -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false -/******/ }; - -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - -/******/ // Flag the module as loaded -/******/ module.loaded = true; - -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } - - -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; - -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; - -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "dist"; - -/******/ // Load entry module and return exports -/******/ return __webpack_require__(0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _imageEditor = __webpack_require__(1); - - var _imageEditor2 = _interopRequireDefault(_imageEditor); - - __webpack_require__(97); - - __webpack_require__(98); - - __webpack_require__(99); - - __webpack_require__(100); - - __webpack_require__(101); - - __webpack_require__(102); - - __webpack_require__(103); - - __webpack_require__(104); - - __webpack_require__(105); - - __webpack_require__(106); - - __webpack_require__(107); - - __webpack_require__(108); - - __webpack_require__(109); - - __webpack_require__(110); - - __webpack_require__(111); - - __webpack_require__(112); - - __webpack_require__(113); - - __webpack_require__(114); - - __webpack_require__(115); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - tui.util.defineNamespace('tui.component.ImageEditor', _imageEditor2.default, true); - - // commands - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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; }; }(); /** - * @author NHN Ent. FE Development Team - * @fileoverview Image-editor application class - */ - - - var _invoker2 = __webpack_require__(2); - - var _invoker3 = _interopRequireDefault(_invoker2); - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _graphics = __webpack_require__(72); - - var _graphics2 = _interopRequireDefault(_graphics); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _toConsumableArray(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); } } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - var events = _consts2.default.eventNames; - var commands = _consts2.default.commandNames; - var keyCodes = _consts2.default.keyCodes, - rejectMessages = _consts2.default.rejectMessages; - var _tui$util = tui.util, - isUndefined = _tui$util.isUndefined, - forEach = _tui$util.forEach; - - /** - * Image editor - * @class - * @param {string|jQuery|HTMLElement} wrapper - Wrapper's element or selector - * @param {Object} [option] - Canvas max width & height of css - * @param {number} option.cssMaxWidth - Canvas css-max-width - * @param {number} option.cssMaxHeight - Canvas css-max-height - */ - - var ImageEditor = function () { - function ImageEditor(wrapper, option) { - _classCallCheck(this, ImageEditor); - - option = option || {}; - - /** - * Invoker - * @type {Invoker} - * @private - */ - this._invoker = new _invoker3.default(); - - /** - * Graphics instance - * @type {Graphics} - * @private - */ - this._graphics = new _graphics2.default(wrapper, option.cssMaxWidth, option.cssMaxHeight); - - /** - * Event handler list - * @type {Object} - * @private - */ - this._handlers = { - keydown: this._onKeyDown.bind(this), - mousedown: this._onMouseDown.bind(this), - objectActivated: this._onObjectActivated.bind(this), - objectMoved: this._onObjectMoved.bind(this), - objectScaled: this._onObjectScaled.bind(this), - createdPath: this._onCreatedPath, - addText: this._onAddText.bind(this), - addObject: this._onAddObject.bind(this), - textEditing: this._onTextEditing.bind(this), - textChanged: this._onTextChanged.bind(this) - }; - - this._attachInvokerEvents(); - this._attachGraphicsEvents(); - this._attachDomEvents(); - - if (option.selectionStyle) { - this._setSelectionStyle(option.selectionStyle); - } - } - - /** - * Image filter result - * @typedef {Object} FilterResult - * @property {string} type - filter type like 'mask', 'Grayscale' and so on - * @property {string} action - action type like 'add', 'remove' - */ - - /** - * Flip status - * @typedef {Object} FlipStatus - * @property {boolean} flipX - x axis - * @property {boolean} flipY - y axis - * @property {Number} angle - angle - */ - - /** - * Rotation status - * @typedef {Number} RotateStatus - * @property {Number} angle - angle - */ - - /** - * Old and new Size - * @typedef {Object} SizeChange - * @property {Number} oldWidth - old width - * @property {Number} oldHeight - old height - * @property {Number} newWidth - new width - * @property {Number} newHeight - new height - */ - - /** - * @typedef {string} ErrorMsg - {string} error message - */ - - /** - * @typedef {Object} ObjectProps - graphics object properties - * @property {number} id - object id - * @property {string} type - object type - * @property {string} text - text content - * @property {string} left - Left - * @property {string} top - Top - * @property {string} width - Width - * @property {string} height - Height - * @property {string} fill - Color - * @property {string} stroke - Stroke - * @property {string} strokeWidth - StrokeWidth - * @property {string} fontFamily - Font type for text - * @property {number} fontSize - Font Size - * @property {string} fontStyle - Type of inclination (normal / italic) - * @property {string} fontWeight - Type of thicker or thinner looking (normal / bold) - * @property {string} textAlign - Type of text align (left / center / right) - * @property {string} textDecoraiton - Type of line (underline / line-throgh / overline) - */ - - /** - * Set selection style by init option - * @param {Object} styles - Selection styles - * @private - */ - - - _createClass(ImageEditor, [{ - key: '_setSelectionStyle', - value: function _setSelectionStyle(styles) { - this._graphics.setSelectionStyle(styles); - } - - /** - * Attach invoker events - * @private - */ - - }, { - key: '_attachInvokerEvents', - value: function _attachInvokerEvents() { - var UNDO_STACK_CHANGED = events.UNDO_STACK_CHANGED, - REDO_STACK_CHANGED = events.REDO_STACK_CHANGED; - - /** - * Undo stack changed event - * @event ImageEditor#undoStackChanged - * @param {Number} length - undo stack length - * @example - * imageEditor.on('undoStackChanged', function(length) { - * console.log(length); - * }); - */ - - this._invoker.on(UNDO_STACK_CHANGED, this.fire.bind(this, UNDO_STACK_CHANGED)); - /** - * Redo stack changed event - * @event ImageEditor#redoStackChanged - * @param {Number} length - redo stack length - * @example - * imageEditor.on('redoStackChanged', function(length) { - * console.log(length); - * }); - */ - this._invoker.on(REDO_STACK_CHANGED, this.fire.bind(this, REDO_STACK_CHANGED)); - } - - /** - * Attach canvas events - * @private - */ - - }, { - key: '_attachGraphicsEvents', - value: function _attachGraphicsEvents() { - this._graphics.on({ - 'mousedown': this._handlers.mousedown, - 'objectMoved': this._handlers.objectMoved, - 'objectScaled': this._handlers.objectScaled, - 'objectActivated': this._handlers.objectActivated, - 'addText': this._handlers.addText, - 'addObject': this._handlers.addObject, - 'textEditing': this._handlers.textEditing, - 'textChanged': this._handlers.textChanged - }); - } - - /** - * Attach dom events - * @private - */ - - }, { - key: '_attachDomEvents', - value: function _attachDomEvents() { - // ImageEditor supports IE 9 higher - document.addEventListener('keydown', this._handlers.keydown); - } - - /** - * Detach dom events - * @private - */ - - }, { - key: '_detachDomEvents', - value: function _detachDomEvents() { - // ImageEditor supports IE 9 higher - document.removeEventListener('keydown', this._handlers.keydown); - } - - /** - * Keydown event handler - * @param {KeyboardEvent} e - Event object - * @private - */ - /* eslint-disable complexity */ - - }, { - key: '_onKeyDown', - value: function _onKeyDown(e) { - var activeObject = this._graphics.getActiveObject(); - var activeObjectId = this._graphics.getObjectId(activeObject); - - if ((e.ctrlKey || e.metaKey) && e.keyCode === keyCodes.Z) { - // There is no error message on shortcut when it's empty - this.undo().catch(function () {}); - } - - if ((e.ctrlKey || e.metaKey) && e.keyCode === keyCodes.Y) { - // There is no error message on shortcut when it's empty - this.redo().catch(function () {}); - } - - if ((e.keyCode === keyCodes.BACKSPACE || e.keyCode === keyCodes.DEL) && activeObject) { - e.preventDefault(); - this.removeObject(activeObjectId); - } - } - /* eslint-enable complexity */ - - /** - * mouse down event handler - * @param {Event} event mouse down event - * @param {Object} originPointer origin pointer - * @param {Number} originPointer.x x position - * @param {Number} originPointer.y y position - * @private - */ - - }, { - key: '_onMouseDown', - value: function _onMouseDown(event, originPointer) { - /** - * The mouse down event with position x, y on canvas - * @event ImageEditor#mousedown - * @param {Object} event - browser mouse event object - * @param {Object} originPointer origin pointer - * @param {Number} originPointer.x x position - * @param {Number} originPointer.y y position - * @example - * imageEditor.on('mousedown', function(event, originPointer) { - * console.log(event); - * console.log(originPointer); - * if (imageEditor.hasFilter('colorFilter')) { - * imageEditor.applyFilter('colorFilter', { - * x: parseInt(originPointer.x, 10), - * y: parseInt(originPointer.y, 10) - * }); - * } - * }); - */ - this.fire(events.MOUSE_DOWN, event, originPointer); - } - - /** - * Add a 'addObject' command - * @param {Object} obj - Fabric object - * @private - */ - - }, { - key: '_pushAddObjectCommand', - value: function _pushAddObjectCommand(obj) { - var command = _command2.default.create(commands.ADD_OBJECT, this._graphics, obj); - this._invoker.pushUndoStack(command); - } - - /** - * 'objectActivated' event handler - * @param {ObjectProps} props - object properties - * @private - */ - - }, { - key: '_onObjectActivated', - value: function _onObjectActivated(props) { - /** - * The event when object is selected(aka activated). - * @event ImageEditor#objectActivated - * @param {ObjectProps} objectProps - object properties - * @example - * imageEditor.on('objectActivated', function(props) { - * console.log(props); - * console.log(props.type); - * console.log(props.id); - * }); - */ - this.fire(events.OBJECT_ACTIVATED, props); - } - - /** - * 'objectMoved' event handler - * @param {ObjectProps} props - object properties - * @private - */ - - }, { - key: '_onObjectMoved', - value: function _onObjectMoved(props) { - /** - * The event when object is moved - * @event ImageEditor#objectMoved - * @param {ObjectProps} props - object properties - * @example - * imageEditor.on('objectMoved', function(props) { - * console.log(props); - * console.log(props.type); - * }); - */ - this.fire(events.OBJECT_MOVED, props); - } - - /** - * 'objectScaled' event handler - * @param {ObjectProps} props - object properties - * @private - */ - - }, { - key: '_onObjectScaled', - value: function _onObjectScaled(props) { - /** - * The event when scale factor is changed - * @event ImageEditor#objectScaled - * @param {ObjectProps} props - object properties - * @example - * imageEditor.on('objectScaled', function(props) { - * console.log(props); - * console.log(props.type); - * }); - */ - this.fire(events.OBJECT_SCALED, props); - } - - /** - * Get current drawing mode - * @returns {string} - * @example - * // Image editor drawing mode - * // - * // NORMAL: 'NORMAL' - * // CROPPER: 'CROPPER' - * // FREE_DRAWING: 'FREE_DRAWING' - * // LINE_DRAWING: 'LINE_DRAWING' - * // TEXT: 'TEXT' - * // - * if (imageEditor.getDrawingMode() === 'FREE_DRAWING') { - * imageEditor.stopDrawingMode(); - * } - */ - - }, { - key: 'getDrawingMode', - value: function getDrawingMode() { - return this._graphics.getDrawingMode(); - } - - /** - * Clear all objects - * @returns {Promise} - * @example - * imageEditor.clearObjects(); - */ - - }, { - key: 'clearObjects', - value: function clearObjects() { - return this.execute(commands.CLEAR_OBJECTS); - } - - /** - * Deactivate all objects - * @example - * imageEditor.deactivateAll(); - */ - - }, { - key: 'deactivateAll', - value: function deactivateAll() { - this._graphics.deactivateAll(); - this._graphics.renderAll(); - } - - /** - * Invoke command - * @param {String} commandName - Command name - * @param {...*} args - Arguments for creating command - * @returns {Promise} - * @private - */ - - }, { - key: 'execute', - value: function execute(commandName) { - var _invoker; - - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - // Inject an Graphics instance as first parameter - var theArgs = [this._graphics].concat(args); - - return (_invoker = this._invoker).execute.apply(_invoker, [commandName].concat(_toConsumableArray(theArgs))); - } - - /** - * Undo - * @returns {Promise} - * @example - * imageEditor.undo(); - */ - - }, { - key: 'undo', - value: function undo() { - return this._invoker.undo(); - } - - /** - * Redo - * @returns {Promise} - * @example - * imageEditor.redo(); - */ - - }, { - key: 'redo', - value: function redo() { - return this._invoker.redo(); - } - - /** - * Load image from file - * @param {File} imgFile - Image file - * @param {string} [imageName] - imageName - * @returns {Promise} - * @example - * imageEditor.loadImageFromFile(file).then(result => { - * console.log('old : ' + result.oldWidth + ', ' + result.oldHeight); - * console.log('new : ' + result.newWidth + ', ' + result.newHeight); - * }); - */ - - }, { - key: 'loadImageFromFile', - value: function loadImageFromFile(imgFile, imageName) { - if (!imgFile) { - return Promise.reject(rejectMessages.invalidParameters); - } - - var imgUrl = URL.createObjectURL(imgFile); - imageName = imageName || imgFile.name; - - return this.loadImageFromURL(imgUrl, imageName).then(function (value) { - URL.revokeObjectURL(imgFile); - - return value; - }); - } - - /** - * Load image from url - * @param {string} url - File url - * @param {string} imageName - imageName - * @returns {Promise} - * @example - * imageEditor.loadImageFromURL('http://url/testImage.png', 'lena').then(result => { - * console.log('old : ' + result.oldWidth + ', ' + result.oldHeight); - * console.log('new : ' + result.newWidth + ', ' + result.newHeight); - * }); - */ - - }, { - key: 'loadImageFromURL', - value: function loadImageFromURL(url, imageName) { - if (!imageName || !url) { - return Promise.reject(rejectMessages.invalidParameters); - } - - return this.execute(commands.LOAD_IMAGE, imageName, url); - } - - /** - * Add image object on canvas - * @param {string} imgUrl - Image url to make object - * @returns {Promise} - * @example - * imageEditor.addImageObject('path/fileName.jpg').then(objectProps => { - * console.log(ojectProps.id); - * }); - */ - - }, { - key: 'addImageObject', - value: function addImageObject(imgUrl) { - if (!imgUrl) { - return Promise.reject(rejectMessages.invalidParameters); - } - - return this.execute(commands.ADD_IMAGE_OBJECT, imgUrl); - } - - /** - * Start a drawing mode. If the current mode is not 'NORMAL', 'stopDrawingMode()' will be called first. - * @param {String} mode Can be one of 'CROPPER', 'FREE_DRAWING', 'LINE_DRAWING', 'TEXT', 'SHAPE' - * @param {Object} [option] parameters of drawing mode, it's available with 'FREE_DRAWING', 'LINE_DRAWING' - * @param {Number} [option.width] brush width - * @param {String} [option.color] brush color - * @returns {boolean} true if success or false - * @example - * imageEditor.startDrawingMode('FREE_DRAWING', { - * width: 10, - * color: 'rgba(255,0,0,0.5)' - * }); - */ - - }, { - key: 'startDrawingMode', - value: function startDrawingMode(mode, option) { - return this._graphics.startDrawingMode(mode, option); - } - - /** - * Stop the current drawing mode and back to the 'NORMAL' mode - * @example - * imageEditor.stopDrawingMode(); - */ - - }, { - key: 'stopDrawingMode', - value: function stopDrawingMode() { - this._graphics.stopDrawingMode(); - } - - /** - * Crop this image with rect - * @param {Object} rect crop rect - * @param {Number} rect.left left position - * @param {Number} rect.top top position - * @param {Number} rect.width width - * @param {Number} rect.height height - * @returns {Promise} - * @example - * imageEditor.crop(imageEditor.getCropzoneRect()); - */ - - }, { - key: 'crop', - value: function crop(rect) { - var data = this._graphics.getCroppedImageData(rect); - if (!data) { - return Promise.reject(rejectMessages.invalidParameters); - } - - return this.loadImageFromURL(data.url, data.imageName); - } - - /** - * Get the cropping rect - * @returns {Object} {{left: number, top: number, width: number, height: number}} rect - */ - - }, { - key: 'getCropzoneRect', - value: function getCropzoneRect() { - return this._graphics.getCropzoneRect(); - } - - /** - * Flip - * @returns {Promise} - * @param {string} type - 'flipX' or 'flipY' or 'reset' - * @returns {Promise} - * @private - */ - - }, { - key: '_flip', - value: function _flip(type) { - return this.execute(commands.FLIP_IMAGE, type); - } - - /** - * Flip x - * @returns {Promise} - * @example - * imageEditor.flipX().then((status => { - * console.log('flipX: ', status.flipX); - * console.log('flipY: ', status.flipY); - * console.log('angle: ', status.angle); - * }).catch(message => { - * console.log('error: ', message); - * }); - */ - - }, { - key: 'flipX', - value: function flipX() { - return this._flip('flipX'); - } - - /** - * Flip y - * @returns {Promise} - * @example - * imageEditor.flipY().then(status => { - * console.log('flipX: ', status.flipX); - * console.log('flipY: ', status.flipY); - * console.log('angle: ', status.angle); - * }).catch(message => { - * console.log('error: ', message); - * }); - */ - - }, { - key: 'flipY', - value: function flipY() { - return this._flip('flipY'); - } - - /** - * Reset flip - * @returns {Promise} - * @example - * imageEditor.resetFlip().then(status => { - * console.log('flipX: ', status.flipX); - * console.log('flipY: ', status.flipY); - * console.log('angle: ', status.angle); - * }).catch(message => { - * console.log('error: ', message); - * });; - */ - - }, { - key: 'resetFlip', - value: function resetFlip() { - return this._flip('reset'); - } - - /** - * @param {string} type - 'rotate' or 'setAngle' - * @param {number} angle - angle value (degree) - * @returns {Promise} - * @private - */ - - }, { - key: '_rotate', - value: function _rotate(type, angle) { - return this.execute(commands.ROTATE_IMAGE, type, angle); - } - - /** - * Rotate image - * @returns {Promise} - * @param {number} angle - Additional angle to rotate image - * @returns {Promise} - * @example - * imageEditor.setAngle(10); // angle = 10 - * imageEditor.rotate(10); // angle = 20 - * imageEidtor.setAngle(5); // angle = 5 - * imageEidtor.rotate(-95); // angle = -90 - * imageEditor.rotate(10).then(status => { - * console.log('angle: ', status.angle); - * })).catch(message => { - * console.log('error: ', message); - * }); - */ - - }, { - key: 'rotate', - value: function rotate(angle) { - return this._rotate('rotate', angle); - } - - /** - * Set angle - * @param {number} angle - Angle of image - * @returns {Promise} - * @example - * imageEditor.setAngle(10); // angle = 10 - * imageEditor.rotate(10); // angle = 20 - * imageEidtor.setAngle(5); // angle = 5 - * imageEidtor.rotate(50); // angle = 55 - * imageEidtor.setAngle(-40); // angle = -40 - * imageEditor.setAngle(10).then(status => { - * console.log('angle: ', status.angle); - * })).catch(message => { - * console.log('error: ', message); - * }); - */ - - }, { - key: 'setAngle', - value: function setAngle(angle) { - return this._rotate('setAngle', angle); - } - - /** - * Set drawing brush - * @param {Object} option brush option - * @param {Number} option.width width - * @param {String} option.color color like 'FFFFFF', 'rgba(0, 0, 0, 0.5)' - * @example - * imageEditor.startDrawingMode('FREE_DRAWING'); - * imageEditor.setBrush({ - * width: 12, - * color: 'rgba(0, 0, 0, 0.5)' - * }); - * imageEditor.setBrush({ - * width: 8, - * color: 'FFFFFF' - * }); - */ - - }, { - key: 'setBrush', - value: function setBrush(option) { - this._graphics.setBrush(option); - } - - /** - * Set states of current drawing shape - * @param {string} type - Shape type (ex: 'rect', 'circle', 'triangle') - * @param {Object} [options] - Shape options - * @param {string} [options.fill] - Shape foreground color (ex: '#fff', 'transparent') - * @param {string} [options.stoke] - Shape outline color - * @param {number} [options.strokeWidth] - Shape outline width - * @param {number} [options.width] - Width value (When type option is 'rect', this options can use) - * @param {number} [options.height] - Height value (When type option is 'rect', this options can use) - * @param {number} [options.rx] - Radius x value (When type option is 'circle', this options can use) - * @param {number} [options.ry] - Radius y value (When type option is 'circle', this options can use) - * @param {number} [options.isRegular] - Whether resizing shape has 1:1 ratio or not - * @example - * imageEditor.setDrawingShape('rect', { - * fill: 'red', - * width: 100, - * height: 200 - * }); - * @example - * imageEditor.setDrawingShape('circle', { - * fill: 'transparent', - * stroke: 'blue', - * strokeWidth: 3, - * rx: 10, - * ry: 100 - * }); - * @example - * imageEditor.setDrawingShape('triangle', { // When resizing, the shape keep the 1:1 ratio - * width: 1, - * height: 1, - * isRegular: true - * }); - * @example - * imageEditor.setDrawingShape('circle', { // When resizing, the shape keep the 1:1 ratio - * rx: 10, - * ry: 10, - * isRegular: true - * }); - */ - - }, { - key: 'setDrawingShape', - value: function setDrawingShape(type, options) { - this._graphics.setDrawingShape(type, options); - } - - /** - * Add shape - * @param {string} type - Shape type (ex: 'rect', 'circle', 'triangle') - * @param {Object} options - Shape options - * @param {string} [options.fill] - Shape foreground color (ex: '#fff', 'transparent') - * @param {string} [options.stroke] - Shape outline color - * @param {number} [options.strokeWidth] - Shape outline width - * @param {number} [options.width] - Width value (When type option is 'rect', this options can use) - * @param {number} [options.height] - Height value (When type option is 'rect', this options can use) - * @param {number} [options.rx] - Radius x value (When type option is 'circle', this options can use) - * @param {number} [options.ry] - Radius y value (When type option is 'circle', this options can use) - * @param {number} [options.left] - Shape x position - * @param {number} [options.top] - Shape y position - * @param {number} [options.isRegular] - Whether resizing shape has 1:1 ratio or not - * @returns {Promise} - * @example - * imageEditor.addShape('rect', { - * fill: 'red', - * stroke: 'blue', - * strokeWidth: 3, - * width: 100, - * height: 200, - * left: 10, - * top: 10, - * isRegular: true - * }); - * @example - * imageEditor.addShape('circle', { - * fill: 'red', - * stroke: 'blue', - * strokeWidth: 3, - * rx: 10, - * ry: 100, - * isRegular: false - * }).then(objectProps => { - * console.log(objectProps.id); - * }); - */ - - }, { - key: 'addShape', - value: function addShape(type, options) { - options = options || {}; - - this._setPositions(options); - - return this.execute(commands.ADD_SHAPE, type, options); - } - - /** - * Change shape - * @param {number} id - object id - * @param {Object} options - Shape options - * @param {string} [options.fill] - Shape foreground color (ex: '#fff', 'transparent') - * @param {string} [options.stroke] - Shape outline color - * @param {number} [options.strokeWidth] - Shape outline width - * @param {number} [options.width] - Width value (When type option is 'rect', this options can use) - * @param {number} [options.height] - Height value (When type option is 'rect', this options can use) - * @param {number} [options.rx] - Radius x value (When type option is 'circle', this options can use) - * @param {number} [options.ry] - Radius y value (When type option is 'circle', this options can use) - * @param {number} [options.isRegular] - Whether resizing shape has 1:1 ratio or not - * @returns {Promise} - * @example - * // call after selecting shape object on canvas - * imageEditor.changeShape(id, { // change rectagle or triangle - * fill: 'red', - * stroke: 'blue', - * strokeWidth: 3, - * width: 100, - * height: 200 - * }); - * @example - * // call after selecting shape object on canvas - * imageEditor.changeShape(id, { // change circle - * fill: 'red', - * stroke: 'blue', - * strokeWidth: 3, - * rx: 10, - * ry: 100 - * }); - */ - - }, { - key: 'changeShape', - value: function changeShape(id, options) { - return this.execute(commands.CHANGE_SHAPE, id, options); - } - - /** - * Add text on image - * @param {string} text - Initial input text - * @param {Object} [options] Options for generating text - * @param {Object} [options.styles] Initial styles - * @param {string} [options.styles.fill] Color - * @param {string} [options.styles.fontFamily] Font type for text - * @param {number} [options.styles.fontSize] Size - * @param {string} [options.styles.fontStyle] Type of inclination (normal / italic) - * @param {string} [options.styles.fontWeight] Type of thicker or thinner looking (normal / bold) - * @param {string} [options.styles.textAlign] Type of text align (left / center / right) - * @param {string} [options.styles.textDecoraiton] Type of line (underline / line-throgh / overline) - * @param {{x: number, y: number}} [options.position] - Initial position - * @returns {Promise} - * @example - * imageEditor.addText('init text'); - * @example - * imageEditor.addText('init text', { - * styles: { - * fill: '#000', - * fontSize: '20', - * fontWeight: 'bold' - * }, - * position: { - * x: 10, - * y: 10 - * } - * }).then(objectProps => { - * console.log(objectProps.id); - * }); - */ - - }, { - key: 'addText', - value: function addText(text, options) { - text = text || ''; - options = options || {}; - - return this.execute(commands.ADD_TEXT, text, options); - } - - /** - * Change contents of selected text object on image - * @param {number} id - object id - * @param {string} text - Changing text - * @returns {Promise} - * @example - * imageEditor.changeText(id, 'change text'); - */ - - }, { - key: 'changeText', - value: function changeText(id, text) { - text = text || ''; - - return this.execute(commands.CHANGE_TEXT, id, text); - } - - /** - * Set style - * @param {number} id - object id - * @param {Object} styleObj - text styles - * @param {string} [styleObj.fill] Color - * @param {string} [styleObj.fontFamily] Font type for text - * @param {number} [styleObj.fontSize] Size - * @param {string} [styleObj.fontStyle] Type of inclination (normal / italic) - * @param {string} [styleObj.fontWeight] Type of thicker or thinner looking (normal / bold) - * @param {string} [styleObj.textAlign] Type of text align (left / center / right) - * @param {string} [styleObj.textDecoraiton] Type of line (underline / line-throgh / overline) - * @returns {Promise} - * @example - * imageEditor.changeTextStyle(id, { - * fontStyle: 'italic' - * }); - */ - - }, { - key: 'changeTextStyle', - value: function changeTextStyle(id, styleObj) { - return this.execute(commands.CHANGE_TEXT_STYLE, id, styleObj); - } - - /** - * 'textChanged' event handler - * @param {Object} objectProps changed object properties - * @private - */ - - }, { - key: '_onTextChanged', - value: function _onTextChanged(objectProps) { - this.changeText(objectProps.id, objectProps.text); - } - - /** - * 'textEditing' event handler - * @private - */ - - }, { - key: '_onTextEditing', - value: function _onTextEditing() { - /** - * The event which starts to edit text object - * @event ImageEditor#textEditing - * @example - * imageEditor.on('textEditing', function() { - * console.log('text editing'); - * }); - */ - this.fire(events.TEXT_EDITING); - } - - /** - * Mousedown event handler in case of 'TEXT' drawing mode - * @param {fabric.Event} event - Current mousedown event object - * @private - */ - - }, { - key: '_onAddText', - value: function _onAddText(event) { - /** - * The event when 'TEXT' drawing mode is enabled and click non-object area. - * @event ImageEditor#addText - * @param {Object} pos - * @param {Object} pos.originPosition - Current position on origin canvas - * @param {Number} pos.originPosition.x - x - * @param {Number} pos.originPosition.y - y - * @param {Object} pos.clientPosition - Current position on client area - * @param {Number} pos.clientPosition.x - x - * @param {Number} pos.clientPosition.y - y - * @example - * imageEditor.on('addText', function(pos) { - * imageEditor.addText('Double Click', { - * position: pos.originPosition - * }); - * console.log('text position on canvas: ' + pos.originPosition); - * console.log('text position on brwoser: ' + pos.clientPosition); - * }); - */ - this.fire(events.ADD_TEXT, { - originPosition: event.originPosition, - clientPosition: event.clientPosition - }); - } - - /** - * 'addObject' event handler - * @param {Object} objectProps added object properties - * @private - */ - - }, { - key: '_onAddObject', - value: function _onAddObject(objectProps) { - var obj = this._graphics.getObject(objectProps.id); - this._pushAddObjectCommand(obj); - } - - /** - * Register custom icons - * @param {{iconType: string, pathValue: string}} infos - Infos to register icons - * @example - * imageEditor.registerIcons({ - * customIcon: 'M 0 0 L 20 20 L 10 10 Z', - * customArrow: 'M 60 0 L 120 60 H 90 L 75 45 V 180 H 45 V 45 L 30 60 H 0 Z' - * }); - */ - - }, { - key: 'registerIcons', - value: function registerIcons(infos) { - this._graphics.registerPaths(infos); - } - - /** - * Add icon on canvas - * @param {string} type - Icon type ('arrow', 'cancel', custom icon name) - * @param {Object} options - Icon options - * @param {string} [options.fill] - Icon foreground color - * @param {string} [options.left] - Icon x position - * @param {string} [options.top] - Icon y position - * @returns {Promise} - * @example - * imageEditor.addIcon('arrow'); // The position is center on canvas - * @example - * imageEditor.addIcon('arrow', { - * left: 100, - * top: 100 - * }).then(objectProps => { - * console.log(objectProps.id); - * }); - */ - - }, { - key: 'addIcon', - value: function addIcon(type, options) { - options = options || {}; - - this._setPositions(options); - - return this.execute(commands.ADD_ICON, type, options); - } - - /** - * Change icon color - * @param {number} id - object id - * @param {string} color - Color for icon - * @returns {Promise} - * @example - * imageEditor.changeIconColor(id, '#000000'); - */ - - }, { - key: 'changeIconColor', - value: function changeIconColor(id, color) { - return this.execute(commands.CHANGE_ICON_COLOR, id, color); - } - - /** - * Remove an object or group by id - * @param {number} id - object id - * @returns {Promise} - * @example - * imageEditor.removeObject(id); - */ - - }, { - key: 'removeObject', - value: function removeObject(id) { - return this.execute(commands.REMOVE_OBJECT, id); - } - - /** - * Whether it has the filter or not - * @param {string} type - Filter type - * @returns {boolean} true if it has the filter - */ - - }, { - key: 'hasFilter', - value: function hasFilter(type) { - return this._graphics.hasFilter(type); - } - - /** - * Remove filter on canvas image - * @param {string} type - Filter type - * @returns {Promise} - * @example - * imageEditor.removeFilter('Grayscale').then(obj => { - * console.log('filterType: ', obj.type); - * console.log('actType: ', obj.action); - * }).catch(message => { - * console.log('error: ', message); - * }); - */ - - }, { - key: 'removeFilter', - value: function removeFilter(type) { - return this.execute(commands.REMOVE_FILTER, type); - } - - /** - * Apply filter on canvas image - * @param {string} type - Filter type - * @param {Object} options - Options to apply filter - * @param {number} options.maskObjId - masking image object id - * @returns {Promise} - * @example - * imageEditor.applyFilter('Grayscale'); - * @example - * imageEditor.applyFilter('mask', {maskObjId: id}).then(obj => { - * console.log('filterType: ', obj.type); - * console.log('actType: ', obj.action); - * }).catch(message => { - * console.log('error: ', message); - * });; - */ - - }, { - key: 'applyFilter', - value: function applyFilter(type, options) { - return this.execute(commands.APPLY_FILTER, type, options); - } - - /** - * Get data url - * @param {string} type - A DOMString indicating the image format. The default type is image/png. - * @returns {string} A DOMString containing the requested data URI - * @example - * imgEl.src = imageEditor.toDataURL(); - * - * imageEditor.loadImageFromURL(imageEditor.toDataURL(), 'FilterImage').then(() => { - * imageEditor.addImageObject(imgUrl); - * }); - */ - - }, { - key: 'toDataURL', - value: function toDataURL(type) { - return this._graphics.toDataURL(type); - } - - /** - * Get image name - * @returns {string} image name - * @example - * console.log(imageEditor.getImageName()); - */ - - }, { - key: 'getImageName', - value: function getImageName() { - return this._graphics.getImageName(); - } - - /** - * Clear undoStack - * @example - * imageEditor.clearUndoStack(); - */ - - }, { - key: 'clearUndoStack', - value: function clearUndoStack() { - this._invoker.clearUndoStack(); - } - - /** - * Clear redoStack - * @example - * imageEditor.clearRedoStack(); - */ - - }, { - key: 'clearRedoStack', - value: function clearRedoStack() { - this._invoker.clearRedoStack(); - } - - /** - * Whehter the undo stack is empty or not - * @returns {boolean} - * imageEditor.isEmptyUndoStack(); - */ - - }, { - key: 'isEmptyUndoStack', - value: function isEmptyUndoStack() { - return this._invoker.isEmptyUndoStack(); - } - - /** - * Whehter the redo stack is empty or not - * @returns {boolean} - * imageEditor.isEmptyRedoStack(); - */ - - }, { - key: 'isEmptyRedoStack', - value: function isEmptyRedoStack() { - return this._invoker.isEmptyRedoStack(); - } - - /** - * Resize canvas dimension - * @param {{width: number, height: number}} dimension - Max width & height - * @returns {Promise} - */ - - }, { - key: 'resizeCanvasDimension', - value: function resizeCanvasDimension(dimension) { - if (!dimension) { - return Promise.reject(rejectMessages.invalidParameters); - } - - return this.execute(commands.RESIZE_CANVAS_DIMENSION, dimension); - } - - /** - * Destroy - */ - - }, { - key: 'destroy', - value: function destroy() { - var _this = this; - - this.stopDrawingMode(); - this._detachDomEvents(); - this._graphics.destroy(); - this._graphics = null; - - forEach(this, function (value, key) { - _this[key] = null; - }, this); - } - - /** - * Set position - * @param {Object} options - Position options (left or top) - * @private - */ - - }, { - key: '_setPositions', - value: function _setPositions(options) { - var centerPosition = this._graphics.getCenter(); - - if (isUndefined(options.left)) { - options.left = centerPosition.left; - } - - if (isUndefined(options.top)) { - options.top = centerPosition.top; - } - } - - /** - * Set properties of active object - * @param {number} id - object id - * @param {Object} keyValue - key & value - * @returns {Promise} - * @example - * imageEditor.setObjectProperties(id, { - * left:100, - * top:100, - * width: 200, - * height: 200, - * opacity: 0.5 - * }); - */ - - }, { - key: 'setObjectProperties', - value: function setObjectProperties(id, keyValue) { - return this.execute(commands.SET_OBJECT_PROPERTIES, id, keyValue); - } - - /** - * Get properties of active object corresponding key - * @param {number} id - object id - * @param {Array|ObjectProps|string} keys - property's key - * @returns {ObjectProps} properties if id is valid or null - * @example - * var props = imageEditor.getObjectProperties(id, 'left'); - * console.log(props); - * @example - * var props = imageEditor.getObjectProperties(id, ['left', 'top', 'width', 'height']); - * console.log(props); - * @example - * var props = imageEditor.getObjectProperties(id, { - * left: null, - * top: null, - * width: null, - * height: null, - * opacity: null - * }); - * console.log(props); - */ - - }, { - key: 'getObjectProperties', - value: function getObjectProperties(id, keys) { - var object = this._graphics.getObject(id); - if (!object) { - return null; - } - - return this._graphics.getObjectProperties(id, keys); - } - - /** - * Get the canvas size - * @returns {Object} {{width: number, height: number}} canvas size - * @example - * var canvasSize = imageEditor.getCanvasSize(); - * console.log(canvasSize.width); - * console.height(canvasSize.height); - */ - - }, { - key: 'getCanvasSize', - value: function getCanvasSize() { - return this._graphics.getCanvasSize(); - } - - /** - * Get object position by originX, originY - * @param {number} id - object id - * @param {string} originX - can be 'left', 'center', 'right' - * @param {string} originY - can be 'top', 'center', 'bottom' - * @returns {Object} {{x:number, y: number}} position by origin if id is valid, or null - * @example - * var position = imageEditor.getObjectPosition(id, 'left', 'top'); - * console.log(position); - */ - - }, { - key: 'getObjectPosition', - value: function getObjectPosition(id, originX, originY) { - return this._graphics.getObjectPosition(id, originX, originY); - } - - /** - * Set object position by originX, originY - * @param {number} id - object id - * @param {Object} posInfo - position object - * @param {number} posInfo.x - x position - * @param {number} posInfo.y - y position - * @param {string} posInfo.originX - can be 'left', 'center', 'right' - * @param {string} posInfo.originY - can be 'top', 'center', 'bottom' - * @returns {Promise} - * @example - * // align the object to 'left', 'top' - * imageEditor.setObjectPosition(id, { - * x: 0, - * y: 0, - * originX: 'left', - * originY: 'top' - * }); - * @example - * // align the object to 'right', 'top' - * var canvasSize = imageEditor.getCanvasSize(); - * imageEditor.setObjectPosition(id, { - * x: canvasSize.width, - * y: 0, - * originX: 'right', - * originY: 'top' - * }); - * @example - * // align the object to 'left', 'bottom' - * var canvasSize = imageEditor.getCanvasSize(); - * imageEditor.setObjectPosition(id, { - * x: 0, - * y: canvasSize.height, - * originX: 'left', - * originY: 'bottom' - * }); - * @example - * // align the object to 'right', 'bottom' - * var canvasSize = imageEditor.getCanvasSize(); - * imageEditor.setObjectPosition(id, { - * x: canvasSize.width, - * y: canvasSize.height, - * originX: 'right', - * originY: 'bottom' - * }); - */ - - }, { - key: 'setObjectPosition', - value: function setObjectPosition(id, posInfo) { - return this.execute(commands.SET_OBJECT_POSITION, id, posInfo); - } - }]); - - return ImageEditor; - }(); - - tui.util.CustomEvents.mixin(ImageEditor); - module.exports = ImageEditor; - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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; }; }(); /** - * @author NHN Ent. FE Development Team - * @fileoverview Invoker - invoke commands - */ - - - var _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _toConsumableArray(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); } } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - var eventNames = _consts2.default.eventNames, - rejectMessages = _consts2.default.rejectMessages; - - /** - * Invoker - * @class - * @ignore - */ - - var Invoker = function () { - function Invoker() { - _classCallCheck(this, Invoker); - - /** - * Undo stack - * @type {Array.} - * @private - */ - this._undoStack = []; - - /** - * Redo stack - * @type {Array.} - * @private - */ - this._redoStack = []; - - /** - * Lock-flag for executing command - * @type {boolean} - * @private - */ - this._isLocked = false; - } - - /** - * Invoke command execution - * @param {Command} command - Command - * @returns {Promise} - * @private - */ - - - _createClass(Invoker, [{ - key: '_invokeExecution', - value: function _invokeExecution(command) { - var _this = this; - - this.lock(); - - var args = []; - if (command.args) { - args = command.args; - } - - return command.execute.apply(command, _toConsumableArray(args)).then(function (value) { - _this.pushUndoStack(command); - _this.unlock(); - if (tui.util.isFunction(command.executeCallback)) { - command.executeCallback(value); - } - - return value; - }).catch(function (message) { - _this.unlock(); - - return _promise2.default.reject(message); - }); - } - - /** - * Invoke command undo - * @param {Command} command - Command - * @returns {Promise} - * @private - */ - - }, { - key: '_invokeUndo', - value: function _invokeUndo(command) { - var _this2 = this; - - this.lock(); - - var args = []; - if (command.args) { - args = command.args; - } - - return command.undo.apply(command, _toConsumableArray(args)).then(function (value) { - _this2.pushRedoStack(command); - _this2.unlock(); - if (tui.util.isFunction(command.undoCallback)) { - command.undoCallback(value); - } - - return value; - }).catch(function (message) { - _this2.unlock(); - - return _promise2.default.reject(message); - }); - } - - /** - * fire REDO_STACK_CHANGED event - * @private - */ - - }, { - key: '_fireRedoStackChanged', - value: function _fireRedoStackChanged() { - this.fire(eventNames.REDO_STACK_CHANGED, this._redoStack.length); - } - - /** - * fire UNDO_STACK_CHANGED event - * @private - */ - - }, { - key: '_fireUndoStackChanged', - value: function _fireUndoStackChanged() { - this.fire(eventNames.UNDO_STACK_CHANGED, this._undoStack.length); - } - - /** - * Lock this invoker - */ - - }, { - key: 'lock', - value: function lock() { - this._isLocked = true; - } - - /** - * Unlock this invoker - */ - - }, { - key: 'unlock', - value: function unlock() { - this._isLocked = false; - } - - /** - * Invoke command - * Store the command to the undoStack - * Clear the redoStack - * @param {String} commandName - Command name - * @param {...*} args - Arguments for creating command - * @returns {Promise} - */ - - }, { - key: 'execute', - value: function execute() { - var _this3 = this; - - if (this._isLocked) { - return _promise2.default.reject(rejectMessages.isLock); - } - - var command = arguments.length <= 0 ? undefined : arguments[0]; - if (tui.util.isString(arguments.length <= 0 ? undefined : arguments[0])) { - command = _command2.default.create.apply(_command2.default, arguments); - } - - return this._invokeExecution(command).then(function (value) { - _this3.clearRedoStack(); - - return value; - }); - } - - /** - * Undo command - * @returns {Promise} - */ - - }, { - key: 'undo', - value: function undo() { - var command = this._undoStack.pop(); - var promise = void 0; - var message = ''; - - if (command && this._isLocked) { - this.pushUndoStack(command, true); - command = null; - } - if (command) { - if (this.isEmptyUndoStack()) { - this._fireUndoStackChanged(); - } - promise = this._invokeUndo(command); - } else { - message = rejectMessages.undo; - if (this._isLocked) { - message = message + ' Because ' + rejectMessages.isLock; - } - promise = _promise2.default.reject(message); - } - - return promise; - } - - /** - * Redo command - * @returns {Promise} - */ - - }, { - key: 'redo', - value: function redo() { - var command = this._redoStack.pop(); - var promise = void 0; - var message = ''; - - if (command && this._isLocked) { - this.pushRedoStack(command, true); - command = null; - } - if (command) { - if (this.isEmptyRedoStack()) { - this._fireRedoStackChanged(); - } - promise = this._invokeExecution(command); - } else { - message = rejectMessages.redo; - if (this._isLocked) { - message = message + ' Because ' + rejectMessages.isLock; - } - promise = _promise2.default.reject(message); - } - - return promise; - } - - /** - * Push undo stack - * @param {Command} command - command - * @param {boolean} [isSilent] - Fire event or not - */ - - }, { - key: 'pushUndoStack', - value: function pushUndoStack(command, isSilent) { - this._undoStack.push(command); - if (!isSilent) { - this._fireUndoStackChanged(); - } - } - - /** - * Push redo stack - * @param {Command} command - command - * @param {boolean} [isSilent] - Fire event or not - */ - - }, { - key: 'pushRedoStack', - value: function pushRedoStack(command, isSilent) { - this._redoStack.push(command); - if (!isSilent) { - this._fireRedoStackChanged(); - } - } - - /** - * Return whether the redoStack is empty - * @returns {boolean} - */ - - }, { - key: 'isEmptyRedoStack', - value: function isEmptyRedoStack() { - return this._redoStack.length === 0; - } - - /** - * Return whether the undoStack is empty - * @returns {boolean} - */ - - }, { - key: 'isEmptyUndoStack', - value: function isEmptyUndoStack() { - return this._undoStack.length === 0; - } - - /** - * Clear undoStack - */ - - }, { - key: 'clearUndoStack', - value: function clearUndoStack() { - if (!this.isEmptyUndoStack()) { - this._undoStack = []; - this._fireUndoStackChanged(); - } - } - - /** - * Clear redoStack - */ - - }, { - key: 'clearRedoStack', - value: function clearRedoStack() { - if (!this.isEmptyRedoStack()) { - this._redoStack = []; - this._fireRedoStackChanged(); - } - } - }]); - - return Invoker; - }(); - - tui.util.CustomEvents.mixin(Invoker); - module.exports = Invoker; - -/***/ }), -/* 3 */ -/***/ (function(module, exports, __webpack_require__) { - - __webpack_require__(4); - __webpack_require__(5); - __webpack_require__(49); - __webpack_require__(53); - module.exports = __webpack_require__(13).Promise; - -/***/ }), -/* 4 */ -/***/ (function(module, exports) { - - - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - var $at = __webpack_require__(6)(true); - - // 21.1.3.27 String.prototype[@@iterator]() - __webpack_require__(9)(String, 'String', function(iterated){ - this._t = String(iterated); // target - this._i = 0; // next index - // 21.1.5.2.1 %StringIteratorPrototype%.next() - }, function(){ - var O = this._t - , index = this._i - , point; - if(index >= O.length)return {value: undefined, done: true}; - point = $at(O, index); - this._i += point.length; - return {value: point, done: false}; - }); - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { - - var toInteger = __webpack_require__(7) - , defined = __webpack_require__(8); - // true -> String#at - // false -> String#codePointAt - module.exports = function(TO_STRING){ - return function(that, pos){ - var s = String(defined(that)) - , i = toInteger(pos) - , l = s.length - , a, b; - if(i < 0 || i >= l)return TO_STRING ? '' : undefined; - a = s.charCodeAt(i); - return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff - ? TO_STRING ? s.charAt(i) : a - : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; - }; - }; - -/***/ }), -/* 7 */ -/***/ (function(module, exports) { - - // 7.1.4 ToInteger - var ceil = Math.ceil - , floor = Math.floor; - module.exports = function(it){ - return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); - }; - -/***/ }), -/* 8 */ -/***/ (function(module, exports) { - - // 7.2.1 RequireObjectCoercible(argument) - module.exports = function(it){ - if(it == undefined)throw TypeError("Can't call method on " + it); - return it; - }; - -/***/ }), -/* 9 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - var LIBRARY = __webpack_require__(10) - , $export = __webpack_require__(11) - , redefine = __webpack_require__(26) - , hide = __webpack_require__(16) - , has = __webpack_require__(27) - , Iterators = __webpack_require__(28) - , $iterCreate = __webpack_require__(29) - , setToStringTag = __webpack_require__(45) - , getPrototypeOf = __webpack_require__(47) - , ITERATOR = __webpack_require__(46)('iterator') - , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next` - , FF_ITERATOR = '@@iterator' - , KEYS = 'keys' - , VALUES = 'values'; - - var returnThis = function(){ return this; }; - - module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){ - $iterCreate(Constructor, NAME, next); - var getMethod = function(kind){ - if(!BUGGY && kind in proto)return proto[kind]; - switch(kind){ - case KEYS: return function keys(){ return new Constructor(this, kind); }; - case VALUES: return function values(){ return new Constructor(this, kind); }; - } return function entries(){ return new Constructor(this, kind); }; - }; - var TAG = NAME + ' Iterator' - , DEF_VALUES = DEFAULT == VALUES - , VALUES_BUG = false - , proto = Base.prototype - , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT] - , $default = $native || getMethod(DEFAULT) - , $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined - , $anyNative = NAME == 'Array' ? proto.entries || $native : $native - , methods, key, IteratorPrototype; - // Fix native - if($anyNative){ - IteratorPrototype = getPrototypeOf($anyNative.call(new Base)); - if(IteratorPrototype !== Object.prototype){ - // Set @@toStringTag to native iterators - setToStringTag(IteratorPrototype, TAG, true); - // fix for some old engines - if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis); - } - } - // fix Array#{values, @@iterator}.name in V8 / FF - if(DEF_VALUES && $native && $native.name !== VALUES){ - VALUES_BUG = true; - $default = function values(){ return $native.call(this); }; - } - // Define iterator - if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){ - hide(proto, ITERATOR, $default); - } - // Plug for library - Iterators[NAME] = $default; - Iterators[TAG] = returnThis; - if(DEFAULT){ - methods = { - values: DEF_VALUES ? $default : getMethod(VALUES), - keys: IS_SET ? $default : getMethod(KEYS), - entries: $entries - }; - if(FORCED)for(key in methods){ - if(!(key in proto))redefine(proto, key, methods[key]); - } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); - } - return methods; - }; - -/***/ }), -/* 10 */ -/***/ (function(module, exports) { - - module.exports = true; - -/***/ }), -/* 11 */ -/***/ (function(module, exports, __webpack_require__) { - - var global = __webpack_require__(12) - , core = __webpack_require__(13) - , ctx = __webpack_require__(14) - , hide = __webpack_require__(16) - , PROTOTYPE = 'prototype'; - - var $export = function(type, name, source){ - var IS_FORCED = type & $export.F - , IS_GLOBAL = type & $export.G - , IS_STATIC = type & $export.S - , IS_PROTO = type & $export.P - , IS_BIND = type & $export.B - , IS_WRAP = type & $export.W - , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) - , expProto = exports[PROTOTYPE] - , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE] - , key, own, out; - if(IS_GLOBAL)source = name; - for(key in source){ - // contains in native - own = !IS_FORCED && target && target[key] !== undefined; - if(own && key in exports)continue; - // export native or passed - out = own ? target[key] : source[key]; - // prevent global pollution for namespaces - exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] - // bind timers to global for call from export context - : IS_BIND && own ? ctx(out, global) - // wrap global constructors for prevent change them in library - : IS_WRAP && target[key] == out ? (function(C){ - var F = function(a, b, c){ - if(this instanceof C){ - switch(arguments.length){ - case 0: return new C; - case 1: return new C(a); - case 2: return new C(a, b); - } return new C(a, b, c); - } return C.apply(this, arguments); - }; - F[PROTOTYPE] = C[PROTOTYPE]; - return F; - // make static versions for prototype methods - })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; - // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% - if(IS_PROTO){ - (exports.virtual || (exports.virtual = {}))[key] = out; - // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% - if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out); - } - } - }; - // type bitmap - $export.F = 1; // forced - $export.G = 2; // global - $export.S = 4; // static - $export.P = 8; // proto - $export.B = 16; // bind - $export.W = 32; // wrap - $export.U = 64; // safe - $export.R = 128; // real proto method for `library` - module.exports = $export; - -/***/ }), -/* 12 */ -/***/ (function(module, exports) { - - // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 - var global = module.exports = typeof window != 'undefined' && window.Math == Math - ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); - if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef - -/***/ }), -/* 13 */ -/***/ (function(module, exports) { - - var core = module.exports = {version: '2.4.0'}; - if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef - -/***/ }), -/* 14 */ -/***/ (function(module, exports, __webpack_require__) { - - // optional / simple context binding - var aFunction = __webpack_require__(15); - module.exports = function(fn, that, length){ - aFunction(fn); - if(that === undefined)return fn; - switch(length){ - case 1: return function(a){ - return fn.call(that, a); - }; - case 2: return function(a, b){ - return fn.call(that, a, b); - }; - case 3: return function(a, b, c){ - return fn.call(that, a, b, c); - }; - } - return function(/* ...args */){ - return fn.apply(that, arguments); - }; - }; - -/***/ }), -/* 15 */ -/***/ (function(module, exports) { - - module.exports = function(it){ - if(typeof it != 'function')throw TypeError(it + ' is not a function!'); - return it; - }; - -/***/ }), -/* 16 */ -/***/ (function(module, exports, __webpack_require__) { - - var dP = __webpack_require__(17) - , createDesc = __webpack_require__(25); - module.exports = __webpack_require__(21) ? function(object, key, value){ - return dP.f(object, key, createDesc(1, value)); - } : function(object, key, value){ - object[key] = value; - return object; - }; - -/***/ }), -/* 17 */ -/***/ (function(module, exports, __webpack_require__) { - - var anObject = __webpack_require__(18) - , IE8_DOM_DEFINE = __webpack_require__(20) - , toPrimitive = __webpack_require__(24) - , dP = Object.defineProperty; - - exports.f = __webpack_require__(21) ? Object.defineProperty : function defineProperty(O, P, Attributes){ - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if(IE8_DOM_DEFINE)try { - return dP(O, P, Attributes); - } catch(e){ /* empty */ } - if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); - if('value' in Attributes)O[P] = Attributes.value; - return O; - }; - -/***/ }), -/* 18 */ -/***/ (function(module, exports, __webpack_require__) { - - var isObject = __webpack_require__(19); - module.exports = function(it){ - if(!isObject(it))throw TypeError(it + ' is not an object!'); - return it; - }; - -/***/ }), -/* 19 */ -/***/ (function(module, exports) { - - module.exports = function(it){ - return typeof it === 'object' ? it !== null : typeof it === 'function'; - }; - -/***/ }), -/* 20 */ -/***/ (function(module, exports, __webpack_require__) { - - module.exports = !__webpack_require__(21) && !__webpack_require__(22)(function(){ - return Object.defineProperty(__webpack_require__(23)('div'), 'a', {get: function(){ return 7; }}).a != 7; - }); - -/***/ }), -/* 21 */ -/***/ (function(module, exports, __webpack_require__) { - - // Thank's IE8 for his funny defineProperty - module.exports = !__webpack_require__(22)(function(){ - return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; - }); - -/***/ }), -/* 22 */ -/***/ (function(module, exports) { - - module.exports = function(exec){ - try { - return !!exec(); - } catch(e){ - return true; - } - }; - -/***/ }), -/* 23 */ -/***/ (function(module, exports, __webpack_require__) { - - var isObject = __webpack_require__(19) - , document = __webpack_require__(12).document - // in old IE typeof document.createElement is 'object' - , is = isObject(document) && isObject(document.createElement); - module.exports = function(it){ - return is ? document.createElement(it) : {}; - }; - -/***/ }), -/* 24 */ -/***/ (function(module, exports, __webpack_require__) { - - // 7.1.1 ToPrimitive(input [, PreferredType]) - var isObject = __webpack_require__(19); - // instead of the ES6 spec version, we didn't implement @@toPrimitive case - // and the second argument - flag - preferred type is a string - module.exports = function(it, S){ - if(!isObject(it))return it; - var fn, val; - if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; - if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val; - if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; - throw TypeError("Can't convert object to primitive value"); - }; - -/***/ }), -/* 25 */ -/***/ (function(module, exports) { - - module.exports = function(bitmap, value){ - return { - enumerable : !(bitmap & 1), - configurable: !(bitmap & 2), - writable : !(bitmap & 4), - value : value - }; - }; - -/***/ }), -/* 26 */ -/***/ (function(module, exports, __webpack_require__) { - - module.exports = __webpack_require__(16); - -/***/ }), -/* 27 */ -/***/ (function(module, exports) { - - var hasOwnProperty = {}.hasOwnProperty; - module.exports = function(it, key){ - return hasOwnProperty.call(it, key); - }; - -/***/ }), -/* 28 */ -/***/ (function(module, exports) { - - module.exports = {}; - -/***/ }), -/* 29 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - var create = __webpack_require__(30) - , descriptor = __webpack_require__(25) - , setToStringTag = __webpack_require__(45) - , IteratorPrototype = {}; - - // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() - __webpack_require__(16)(IteratorPrototype, __webpack_require__(46)('iterator'), function(){ return this; }); - - module.exports = function(Constructor, NAME, next){ - Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)}); - setToStringTag(Constructor, NAME + ' Iterator'); - }; - -/***/ }), -/* 30 */ -/***/ (function(module, exports, __webpack_require__) { - - // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) - var anObject = __webpack_require__(18) - , dPs = __webpack_require__(31) - , enumBugKeys = __webpack_require__(43) - , IE_PROTO = __webpack_require__(40)('IE_PROTO') - , Empty = function(){ /* empty */ } - , PROTOTYPE = 'prototype'; - - // Create object with fake `null` prototype: use iframe Object with cleared prototype - var createDict = function(){ - // Thrash, waste and sodomy: IE GC bug - var iframe = __webpack_require__(23)('iframe') - , i = enumBugKeys.length - , lt = '<' - , gt = '>' - , iframeDocument; - iframe.style.display = 'none'; - __webpack_require__(44).appendChild(iframe); - iframe.src = 'javascript:'; // eslint-disable-line no-script-url - // createDict = iframe.contentWindow.Object; - // html.removeChild(iframe); - iframeDocument = iframe.contentWindow.document; - iframeDocument.open(); - iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); - iframeDocument.close(); - createDict = iframeDocument.F; - while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]]; - return createDict(); - }; - - module.exports = Object.create || function create(O, Properties){ - var result; - if(O !== null){ - Empty[PROTOTYPE] = anObject(O); - result = new Empty; - Empty[PROTOTYPE] = null; - // add "__proto__" for Object.getPrototypeOf polyfill - result[IE_PROTO] = O; - } else result = createDict(); - return Properties === undefined ? result : dPs(result, Properties); - }; - - -/***/ }), -/* 31 */ -/***/ (function(module, exports, __webpack_require__) { - - var dP = __webpack_require__(17) - , anObject = __webpack_require__(18) - , getKeys = __webpack_require__(32); - - module.exports = __webpack_require__(21) ? Object.defineProperties : function defineProperties(O, Properties){ - anObject(O); - var keys = getKeys(Properties) - , length = keys.length - , i = 0 - , P; - while(length > i)dP.f(O, P = keys[i++], Properties[P]); - return O; - }; - -/***/ }), -/* 32 */ -/***/ (function(module, exports, __webpack_require__) { - - // 19.1.2.14 / 15.2.3.14 Object.keys(O) - var $keys = __webpack_require__(33) - , enumBugKeys = __webpack_require__(43); - - module.exports = Object.keys || function keys(O){ - return $keys(O, enumBugKeys); - }; - -/***/ }), -/* 33 */ -/***/ (function(module, exports, __webpack_require__) { - - var has = __webpack_require__(27) - , toIObject = __webpack_require__(34) - , arrayIndexOf = __webpack_require__(37)(false) - , IE_PROTO = __webpack_require__(40)('IE_PROTO'); - - module.exports = function(object, names){ - var O = toIObject(object) - , i = 0 - , result = [] - , key; - for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key); - // Don't enum bug & hidden keys - while(names.length > i)if(has(O, key = names[i++])){ - ~arrayIndexOf(result, key) || result.push(key); - } - return result; - }; - -/***/ }), -/* 34 */ -/***/ (function(module, exports, __webpack_require__) { - - // to indexed object, toObject with fallback for non-array-like ES3 strings - var IObject = __webpack_require__(35) - , defined = __webpack_require__(8); - module.exports = function(it){ - return IObject(defined(it)); - }; - -/***/ }), -/* 35 */ -/***/ (function(module, exports, __webpack_require__) { - - // fallback for non-array-like ES3 and non-enumerable old V8 strings - var cof = __webpack_require__(36); - module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ - return cof(it) == 'String' ? it.split('') : Object(it); - }; - -/***/ }), -/* 36 */ -/***/ (function(module, exports) { - - var toString = {}.toString; - - module.exports = function(it){ - return toString.call(it).slice(8, -1); - }; - -/***/ }), -/* 37 */ -/***/ (function(module, exports, __webpack_require__) { - - // false -> Array#indexOf - // true -> Array#includes - var toIObject = __webpack_require__(34) - , toLength = __webpack_require__(38) - , toIndex = __webpack_require__(39); - module.exports = function(IS_INCLUDES){ - return function($this, el, fromIndex){ - var O = toIObject($this) - , length = toLength(O.length) - , index = toIndex(fromIndex, length) - , value; - // Array#includes uses SameValueZero equality algorithm - if(IS_INCLUDES && el != el)while(length > index){ - value = O[index++]; - if(value != value)return true; - // Array#toIndex ignores holes, Array#includes - not - } else for(;length > index; index++)if(IS_INCLUDES || index in O){ - if(O[index] === el)return IS_INCLUDES || index || 0; - } return !IS_INCLUDES && -1; - }; - }; - -/***/ }), -/* 38 */ -/***/ (function(module, exports, __webpack_require__) { - - // 7.1.15 ToLength - var toInteger = __webpack_require__(7) - , min = Math.min; - module.exports = function(it){ - return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 - }; - -/***/ }), -/* 39 */ -/***/ (function(module, exports, __webpack_require__) { - - var toInteger = __webpack_require__(7) - , max = Math.max - , min = Math.min; - module.exports = function(index, length){ - index = toInteger(index); - return index < 0 ? max(index + length, 0) : min(index, length); - }; - -/***/ }), -/* 40 */ -/***/ (function(module, exports, __webpack_require__) { - - var shared = __webpack_require__(41)('keys') - , uid = __webpack_require__(42); - module.exports = function(key){ - return shared[key] || (shared[key] = uid(key)); - }; - -/***/ }), -/* 41 */ -/***/ (function(module, exports, __webpack_require__) { - - var global = __webpack_require__(12) - , SHARED = '__core-js_shared__' - , store = global[SHARED] || (global[SHARED] = {}); - module.exports = function(key){ - return store[key] || (store[key] = {}); - }; - -/***/ }), -/* 42 */ -/***/ (function(module, exports) { - - var id = 0 - , px = Math.random(); - module.exports = function(key){ - return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); - }; - -/***/ }), -/* 43 */ -/***/ (function(module, exports) { - - // IE 8- don't enum bug keys - module.exports = ( - 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' - ).split(','); - -/***/ }), -/* 44 */ -/***/ (function(module, exports, __webpack_require__) { - - module.exports = __webpack_require__(12).document && document.documentElement; - -/***/ }), -/* 45 */ -/***/ (function(module, exports, __webpack_require__) { - - var def = __webpack_require__(17).f - , has = __webpack_require__(27) - , TAG = __webpack_require__(46)('toStringTag'); - - module.exports = function(it, tag, stat){ - if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag}); - }; - -/***/ }), -/* 46 */ -/***/ (function(module, exports, __webpack_require__) { - - var store = __webpack_require__(41)('wks') - , uid = __webpack_require__(42) - , Symbol = __webpack_require__(12).Symbol - , USE_SYMBOL = typeof Symbol == 'function'; - - var $exports = module.exports = function(name){ - return store[name] || (store[name] = - USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); - }; - - $exports.store = store; - -/***/ }), -/* 47 */ -/***/ (function(module, exports, __webpack_require__) { - - // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) - var has = __webpack_require__(27) - , toObject = __webpack_require__(48) - , IE_PROTO = __webpack_require__(40)('IE_PROTO') - , ObjectProto = Object.prototype; - - module.exports = Object.getPrototypeOf || function(O){ - O = toObject(O); - if(has(O, IE_PROTO))return O[IE_PROTO]; - if(typeof O.constructor == 'function' && O instanceof O.constructor){ - return O.constructor.prototype; - } return O instanceof Object ? ObjectProto : null; - }; - -/***/ }), -/* 48 */ -/***/ (function(module, exports, __webpack_require__) { - - // 7.1.13 ToObject(argument) - var defined = __webpack_require__(8); - module.exports = function(it){ - return Object(defined(it)); - }; - -/***/ }), -/* 49 */ -/***/ (function(module, exports, __webpack_require__) { - - __webpack_require__(50); - var global = __webpack_require__(12) - , hide = __webpack_require__(16) - , Iterators = __webpack_require__(28) - , TO_STRING_TAG = __webpack_require__(46)('toStringTag'); - - for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){ - var NAME = collections[i] - , Collection = global[NAME] - , proto = Collection && Collection.prototype; - if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME); - Iterators[NAME] = Iterators.Array; - } - -/***/ }), -/* 50 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - var addToUnscopables = __webpack_require__(51) - , step = __webpack_require__(52) - , Iterators = __webpack_require__(28) - , toIObject = __webpack_require__(34); - - // 22.1.3.4 Array.prototype.entries() - // 22.1.3.13 Array.prototype.keys() - // 22.1.3.29 Array.prototype.values() - // 22.1.3.30 Array.prototype[@@iterator]() - module.exports = __webpack_require__(9)(Array, 'Array', function(iterated, kind){ - this._t = toIObject(iterated); // target - this._i = 0; // next index - this._k = kind; // kind - // 22.1.5.2.1 %ArrayIteratorPrototype%.next() - }, function(){ - var O = this._t - , kind = this._k - , index = this._i++; - if(!O || index >= O.length){ - this._t = undefined; - return step(1); - } - if(kind == 'keys' )return step(0, index); - if(kind == 'values')return step(0, O[index]); - return step(0, [index, O[index]]); - }, 'values'); - - // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) - Iterators.Arguments = Iterators.Array; - - addToUnscopables('keys'); - addToUnscopables('values'); - addToUnscopables('entries'); - -/***/ }), -/* 51 */ -/***/ (function(module, exports) { - - module.exports = function(){ /* empty */ }; - -/***/ }), -/* 52 */ -/***/ (function(module, exports) { - - module.exports = function(done, value){ - return {value: value, done: !!done}; - }; - -/***/ }), -/* 53 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - var LIBRARY = __webpack_require__(10) - , global = __webpack_require__(12) - , ctx = __webpack_require__(14) - , classof = __webpack_require__(54) - , $export = __webpack_require__(11) - , isObject = __webpack_require__(19) - , aFunction = __webpack_require__(15) - , anInstance = __webpack_require__(55) - , forOf = __webpack_require__(56) - , speciesConstructor = __webpack_require__(60) - , task = __webpack_require__(61).set - , microtask = __webpack_require__(63)() - , PROMISE = 'Promise' - , TypeError = global.TypeError - , process = global.process - , $Promise = global[PROMISE] - , process = global.process - , isNode = classof(process) == 'process' - , empty = function(){ /* empty */ } - , Internal, GenericPromiseCapability, Wrapper; - - var USE_NATIVE = !!function(){ - try { - // correct subclassing with @@species support - var promise = $Promise.resolve(1) - , FakePromise = (promise.constructor = {})[__webpack_require__(46)('species')] = function(exec){ exec(empty, empty); }; - // unhandled rejections tracking support, NodeJS Promise without it fails @@species test - return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise; - } catch(e){ /* empty */ } - }(); - - // helpers - var sameConstructor = function(a, b){ - // with library wrapper special case - return a === b || a === $Promise && b === Wrapper; - }; - var isThenable = function(it){ - var then; - return isObject(it) && typeof (then = it.then) == 'function' ? then : false; - }; - var newPromiseCapability = function(C){ - return sameConstructor($Promise, C) - ? new PromiseCapability(C) - : new GenericPromiseCapability(C); - }; - var PromiseCapability = GenericPromiseCapability = function(C){ - var resolve, reject; - this.promise = new C(function($$resolve, $$reject){ - if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor'); - resolve = $$resolve; - reject = $$reject; - }); - this.resolve = aFunction(resolve); - this.reject = aFunction(reject); - }; - var perform = function(exec){ - try { - exec(); - } catch(e){ - return {error: e}; - } - }; - var notify = function(promise, isReject){ - if(promise._n)return; - promise._n = true; - var chain = promise._c; - microtask(function(){ - var value = promise._v - , ok = promise._s == 1 - , i = 0; - var run = function(reaction){ - var handler = ok ? reaction.ok : reaction.fail - , resolve = reaction.resolve - , reject = reaction.reject - , domain = reaction.domain - , result, then; - try { - if(handler){ - if(!ok){ - if(promise._h == 2)onHandleUnhandled(promise); - promise._h = 1; - } - if(handler === true)result = value; - else { - if(domain)domain.enter(); - result = handler(value); - if(domain)domain.exit(); - } - if(result === reaction.promise){ - reject(TypeError('Promise-chain cycle')); - } else if(then = isThenable(result)){ - then.call(result, resolve, reject); - } else resolve(result); - } else reject(value); - } catch(e){ - reject(e); - } - }; - while(chain.length > i)run(chain[i++]); // variable length - can't use forEach - promise._c = []; - promise._n = false; - if(isReject && !promise._h)onUnhandled(promise); - }); - }; - var onUnhandled = function(promise){ - task.call(global, function(){ - var value = promise._v - , abrupt, handler, console; - if(isUnhandled(promise)){ - abrupt = perform(function(){ - if(isNode){ - process.emit('unhandledRejection', value, promise); - } else if(handler = global.onunhandledrejection){ - handler({promise: promise, reason: value}); - } else if((console = global.console) && console.error){ - console.error('Unhandled promise rejection', value); - } - }); - // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should - promise._h = isNode || isUnhandled(promise) ? 2 : 1; - } promise._a = undefined; - if(abrupt)throw abrupt.error; - }); - }; - var isUnhandled = function(promise){ - if(promise._h == 1)return false; - var chain = promise._a || promise._c - , i = 0 - , reaction; - while(chain.length > i){ - reaction = chain[i++]; - if(reaction.fail || !isUnhandled(reaction.promise))return false; - } return true; - }; - var onHandleUnhandled = function(promise){ - task.call(global, function(){ - var handler; - if(isNode){ - process.emit('rejectionHandled', promise); - } else if(handler = global.onrejectionhandled){ - handler({promise: promise, reason: promise._v}); - } - }); - }; - var $reject = function(value){ - var promise = this; - if(promise._d)return; - promise._d = true; - promise = promise._w || promise; // unwrap - promise._v = value; - promise._s = 2; - if(!promise._a)promise._a = promise._c.slice(); - notify(promise, true); - }; - var $resolve = function(value){ - var promise = this - , then; - if(promise._d)return; - promise._d = true; - promise = promise._w || promise; // unwrap - try { - if(promise === value)throw TypeError("Promise can't be resolved itself"); - if(then = isThenable(value)){ - microtask(function(){ - var wrapper = {_w: promise, _d: false}; // wrap - try { - then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1)); - } catch(e){ - $reject.call(wrapper, e); - } - }); - } else { - promise._v = value; - promise._s = 1; - notify(promise, false); - } - } catch(e){ - $reject.call({_w: promise, _d: false}, e); // wrap - } - }; - - // constructor polyfill - if(!USE_NATIVE){ - // 25.4.3.1 Promise(executor) - $Promise = function Promise(executor){ - anInstance(this, $Promise, PROMISE, '_h'); - aFunction(executor); - Internal.call(this); - try { - executor(ctx($resolve, this, 1), ctx($reject, this, 1)); - } catch(err){ - $reject.call(this, err); - } - }; - Internal = function Promise(executor){ - this._c = []; // <- awaiting reactions - this._a = undefined; // <- checked in isUnhandled reactions - this._s = 0; // <- state - this._d = false; // <- done - this._v = undefined; // <- value - this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled - this._n = false; // <- notify - }; - Internal.prototype = __webpack_require__(64)($Promise.prototype, { - // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected) - then: function then(onFulfilled, onRejected){ - var reaction = newPromiseCapability(speciesConstructor(this, $Promise)); - reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; - reaction.fail = typeof onRejected == 'function' && onRejected; - reaction.domain = isNode ? process.domain : undefined; - this._c.push(reaction); - if(this._a)this._a.push(reaction); - if(this._s)notify(this, false); - return reaction.promise; - }, - // 25.4.5.1 Promise.prototype.catch(onRejected) - 'catch': function(onRejected){ - return this.then(undefined, onRejected); - } - }); - PromiseCapability = function(){ - var promise = new Internal; - this.promise = promise; - this.resolve = ctx($resolve, promise, 1); - this.reject = ctx($reject, promise, 1); - }; - } - - $export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: $Promise}); - __webpack_require__(45)($Promise, PROMISE); - __webpack_require__(65)(PROMISE); - Wrapper = __webpack_require__(13)[PROMISE]; - - // statics - $export($export.S + $export.F * !USE_NATIVE, PROMISE, { - // 25.4.4.5 Promise.reject(r) - reject: function reject(r){ - var capability = newPromiseCapability(this) - , $$reject = capability.reject; - $$reject(r); - return capability.promise; - } - }); - $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, { - // 25.4.4.6 Promise.resolve(x) - resolve: function resolve(x){ - // instanceof instead of internal slot check because we should fix it without replacement native Promise core - if(x instanceof $Promise && sameConstructor(x.constructor, this))return x; - var capability = newPromiseCapability(this) - , $$resolve = capability.resolve; - $$resolve(x); - return capability.promise; - } - }); - $export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(66)(function(iter){ - $Promise.all(iter)['catch'](empty); - })), PROMISE, { - // 25.4.4.1 Promise.all(iterable) - all: function all(iterable){ - var C = this - , capability = newPromiseCapability(C) - , resolve = capability.resolve - , reject = capability.reject; - var abrupt = perform(function(){ - var values = [] - , index = 0 - , remaining = 1; - forOf(iterable, false, function(promise){ - var $index = index++ - , alreadyCalled = false; - values.push(undefined); - remaining++; - C.resolve(promise).then(function(value){ - if(alreadyCalled)return; - alreadyCalled = true; - values[$index] = value; - --remaining || resolve(values); - }, reject); - }); - --remaining || resolve(values); - }); - if(abrupt)reject(abrupt.error); - return capability.promise; - }, - // 25.4.4.4 Promise.race(iterable) - race: function race(iterable){ - var C = this - , capability = newPromiseCapability(C) - , reject = capability.reject; - var abrupt = perform(function(){ - forOf(iterable, false, function(promise){ - C.resolve(promise).then(capability.resolve, reject); - }); - }); - if(abrupt)reject(abrupt.error); - return capability.promise; - } - }); - -/***/ }), -/* 54 */ -/***/ (function(module, exports, __webpack_require__) { - - // getting tag from 19.1.3.6 Object.prototype.toString() - var cof = __webpack_require__(36) - , TAG = __webpack_require__(46)('toStringTag') - // ES3 wrong here - , ARG = cof(function(){ return arguments; }()) == 'Arguments'; - - // fallback for IE11 Script Access Denied error - var tryGet = function(it, key){ - try { - return it[key]; - } catch(e){ /* empty */ } - }; - - module.exports = function(it){ - var O, T, B; - return it === undefined ? 'Undefined' : it === null ? 'Null' - // @@toStringTag case - : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T - // builtinTag case - : ARG ? cof(O) - // ES3 arguments fallback - : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; - }; - -/***/ }), -/* 55 */ -/***/ (function(module, exports) { - - module.exports = function(it, Constructor, name, forbiddenField){ - if(!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)){ - throw TypeError(name + ': incorrect invocation!'); - } return it; - }; - -/***/ }), -/* 56 */ -/***/ (function(module, exports, __webpack_require__) { - - var ctx = __webpack_require__(14) - , call = __webpack_require__(57) - , isArrayIter = __webpack_require__(58) - , anObject = __webpack_require__(18) - , toLength = __webpack_require__(38) - , getIterFn = __webpack_require__(59) - , BREAK = {} - , RETURN = {}; - var exports = module.exports = function(iterable, entries, fn, that, ITERATOR){ - var iterFn = ITERATOR ? function(){ return iterable; } : getIterFn(iterable) - , f = ctx(fn, that, entries ? 2 : 1) - , index = 0 - , length, step, iterator, result; - if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!'); - // fast case for arrays with default iterator - if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){ - result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); - if(result === BREAK || result === RETURN)return result; - } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){ - result = call(iterator, f, step.value, entries); - if(result === BREAK || result === RETURN)return result; - } - }; - exports.BREAK = BREAK; - exports.RETURN = RETURN; - -/***/ }), -/* 57 */ -/***/ (function(module, exports, __webpack_require__) { - - // call something on iterator step with safe closing on error - var anObject = __webpack_require__(18); - module.exports = function(iterator, fn, value, entries){ - try { - return entries ? fn(anObject(value)[0], value[1]) : fn(value); - // 7.4.6 IteratorClose(iterator, completion) - } catch(e){ - var ret = iterator['return']; - if(ret !== undefined)anObject(ret.call(iterator)); - throw e; - } - }; - -/***/ }), -/* 58 */ -/***/ (function(module, exports, __webpack_require__) { - - // check on default Array iterator - var Iterators = __webpack_require__(28) - , ITERATOR = __webpack_require__(46)('iterator') - , ArrayProto = Array.prototype; - - module.exports = function(it){ - return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); - }; - -/***/ }), -/* 59 */ -/***/ (function(module, exports, __webpack_require__) { - - var classof = __webpack_require__(54) - , ITERATOR = __webpack_require__(46)('iterator') - , Iterators = __webpack_require__(28); - module.exports = __webpack_require__(13).getIteratorMethod = function(it){ - if(it != undefined)return it[ITERATOR] - || it['@@iterator'] - || Iterators[classof(it)]; - }; - -/***/ }), -/* 60 */ -/***/ (function(module, exports, __webpack_require__) { - - // 7.3.20 SpeciesConstructor(O, defaultConstructor) - var anObject = __webpack_require__(18) - , aFunction = __webpack_require__(15) - , SPECIES = __webpack_require__(46)('species'); - module.exports = function(O, D){ - var C = anObject(O).constructor, S; - return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); - }; - -/***/ }), -/* 61 */ -/***/ (function(module, exports, __webpack_require__) { - - var ctx = __webpack_require__(14) - , invoke = __webpack_require__(62) - , html = __webpack_require__(44) - , cel = __webpack_require__(23) - , global = __webpack_require__(12) - , process = global.process - , setTask = global.setImmediate - , clearTask = global.clearImmediate - , MessageChannel = global.MessageChannel - , counter = 0 - , queue = {} - , ONREADYSTATECHANGE = 'onreadystatechange' - , defer, channel, port; - var run = function(){ - var id = +this; - if(queue.hasOwnProperty(id)){ - var fn = queue[id]; - delete queue[id]; - fn(); - } - }; - var listener = function(event){ - run.call(event.data); - }; - // Node.js 0.9+ & IE10+ has setImmediate, otherwise: - if(!setTask || !clearTask){ - setTask = function setImmediate(fn){ - var args = [], i = 1; - while(arguments.length > i)args.push(arguments[i++]); - queue[++counter] = function(){ - invoke(typeof fn == 'function' ? fn : Function(fn), args); - }; - defer(counter); - return counter; - }; - clearTask = function clearImmediate(id){ - delete queue[id]; - }; - // Node.js 0.8- - if(__webpack_require__(36)(process) == 'process'){ - defer = function(id){ - process.nextTick(ctx(run, id, 1)); - }; - // Browsers with MessageChannel, includes WebWorkers - } else if(MessageChannel){ - channel = new MessageChannel; - port = channel.port2; - channel.port1.onmessage = listener; - defer = ctx(port.postMessage, port, 1); - // Browsers with postMessage, skip WebWorkers - // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' - } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){ - defer = function(id){ - global.postMessage(id + '', '*'); - }; - global.addEventListener('message', listener, false); - // IE8- - } else if(ONREADYSTATECHANGE in cel('script')){ - defer = function(id){ - html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){ - html.removeChild(this); - run.call(id); - }; - }; - // Rest old browsers - } else { - defer = function(id){ - setTimeout(ctx(run, id, 1), 0); - }; - } - } - module.exports = { - set: setTask, - clear: clearTask - }; - -/***/ }), -/* 62 */ -/***/ (function(module, exports) { - - // fast apply, http://jsperf.lnkit.com/fast-apply/5 - module.exports = function(fn, args, that){ - var un = that === undefined; - switch(args.length){ - case 0: return un ? fn() - : fn.call(that); - case 1: return un ? fn(args[0]) - : fn.call(that, args[0]); - case 2: return un ? fn(args[0], args[1]) - : fn.call(that, args[0], args[1]); - case 3: return un ? fn(args[0], args[1], args[2]) - : fn.call(that, args[0], args[1], args[2]); - case 4: return un ? fn(args[0], args[1], args[2], args[3]) - : fn.call(that, args[0], args[1], args[2], args[3]); - } return fn.apply(that, args); - }; - -/***/ }), -/* 63 */ -/***/ (function(module, exports, __webpack_require__) { - - var global = __webpack_require__(12) - , macrotask = __webpack_require__(61).set - , Observer = global.MutationObserver || global.WebKitMutationObserver - , process = global.process - , Promise = global.Promise - , isNode = __webpack_require__(36)(process) == 'process'; - - module.exports = function(){ - var head, last, notify; - - var flush = function(){ - var parent, fn; - if(isNode && (parent = process.domain))parent.exit(); - while(head){ - fn = head.fn; - head = head.next; - try { - fn(); - } catch(e){ - if(head)notify(); - else last = undefined; - throw e; - } - } last = undefined; - if(parent)parent.enter(); - }; - - // Node.js - if(isNode){ - notify = function(){ - process.nextTick(flush); - }; - // browsers with MutationObserver - } else if(Observer){ - var toggle = true - , node = document.createTextNode(''); - new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new - notify = function(){ - node.data = toggle = !toggle; - }; - // environments with maybe non-completely correct, but existent Promise - } else if(Promise && Promise.resolve){ - var promise = Promise.resolve(); - notify = function(){ - promise.then(flush); - }; - // for other environments - macrotask based on: - // - setImmediate - // - MessageChannel - // - window.postMessag - // - onreadystatechange - // - setTimeout - } else { - notify = function(){ - // strange IE + webpack dev server bug - use .call(global) - macrotask.call(global, flush); - }; - } - - return function(fn){ - var task = {fn: fn, next: undefined}; - if(last)last.next = task; - if(!head){ - head = task; - notify(); - } last = task; - }; - }; - -/***/ }), -/* 64 */ -/***/ (function(module, exports, __webpack_require__) { - - var hide = __webpack_require__(16); - module.exports = function(target, src, safe){ - for(var key in src){ - if(safe && target[key])target[key] = src[key]; - else hide(target, key, src[key]); - } return target; - }; - -/***/ }), -/* 65 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - var global = __webpack_require__(12) - , core = __webpack_require__(13) - , dP = __webpack_require__(17) - , DESCRIPTORS = __webpack_require__(21) - , SPECIES = __webpack_require__(46)('species'); - - module.exports = function(KEY){ - var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY]; - if(DESCRIPTORS && C && !C[SPECIES])dP.f(C, SPECIES, { - configurable: true, - get: function(){ return this; } - }); - }; - -/***/ }), -/* 66 */ -/***/ (function(module, exports, __webpack_require__) { - - var ITERATOR = __webpack_require__(46)('iterator') - , SAFE_CLOSING = false; - - try { - var riter = [7][ITERATOR](); - riter['return'] = function(){ SAFE_CLOSING = true; }; - Array.from(riter, function(){ throw 2; }); - } catch(e){ /* empty */ } - - module.exports = function(exec, skipClosing){ - if(!skipClosing && !SAFE_CLOSING)return false; - var safe = false; - try { - var arr = [7] - , iter = arr[ITERATOR](); - iter.next = function(){ return {done: safe = true}; }; - arr[ITERATOR] = function(){ return iter; }; - exec(arr); - } catch(e){ /* empty */ } - return safe; - }; - -/***/ }), -/* 67 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(68); - - var _command2 = _interopRequireDefault(_command); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var commands = {}; - - /** - * Create a command - * @param {string} name - Command name - * @param {...*} args - Arguments for creating command - * @returns {Command} - * @ignore - */ - /** - * @author NHN Ent. FE Development Team - * @fileoverview Command factory - */ - function create(name) { - var actions = commands[name]; - if (actions) { - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - return new _command2.default(actions, args); - } - - return null; - } - - /** - * Register a command with name as a key - * @param {Object} command - {name:{string}, execute: {function}, undo: {function}} - * @param {string} command.name - command name - * @param {function} command.execute - executable function - * @param {function} command.undo - undo function - * @ignore - */ - function register(command) { - commands[command.name] = command; - } - - module.exports = { - create: create, - register: register - }; - -/***/ }), -/* 68 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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; }; }(); /** - * @author NHN Ent. FE Development Team - * @fileoverview Command interface - */ - - - var _errorMessage = __webpack_require__(69); - - var _errorMessage2 = _interopRequireDefault(_errorMessage); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - var createMessage = _errorMessage2.default.create; - var errorTypes = _errorMessage2.default.types; - - /** - * Command class - * @class - * @param {{name:function, execute: function, undo: function, - * executeCallback: function, undoCallback: function}} actions - Command actions - * @param {Array} args - passing arguments on execute, undo - * @ignore - */ - - var Command = function () { - function Command(actions, args) { - _classCallCheck(this, Command); - - /** - * command name - * @type {string} - */ - this.name = actions.name; - - /** - * arguments - * @type {Array} - */ - this.args = args; - - /** - * Execute function - * @type {function} - */ - this.execute = actions.execute; - - /** - * Undo function - * @type {function} - */ - this.undo = actions.undo; - - /** - * executeCallback - * @type {function} - */ - this.executeCallback = actions.executeCallback || null; - - /** - * undoCallback - * @type {function} - */ - this.undoCallback = actions.undoCallback || null; - - /** - * data for undo - * @type {Object} - */ - this.undoData = {}; - } - - /** - * Execute action - * @param {Object.} compMap - Components injection - * @abstract - */ - - - _createClass(Command, [{ - key: 'execute', - value: function execute() { - throw new Error(createMessage(errorTypes.UN_IMPLEMENTATION, 'execute')); - } - - /** - * Undo action - * @param {Object.} compMap - Components injection - * @abstract - */ - - }, { - key: 'undo', - value: function undo() { - throw new Error(createMessage(errorTypes.UN_IMPLEMENTATION, 'undo')); - } - - /** - * Attach execute callabck - * @param {function} callback - Callback after execution - * @returns {Command} this - */ - - }, { - key: 'setExecuteCallback', - value: function setExecuteCallback(callback) { - this.executeCallback = callback; - - return this; - } - - /** - * Attach undo callback - * @param {function} callback - Callback after undo - * @returns {Command} this - */ - - }, { - key: 'setUndoCallback', - value: function setUndoCallback(callback) { - this.undoCallback = callback; - - return this; - } - }]); - - return Command; - }(); - - module.exports = Command; - -/***/ }), -/* 69 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _util = __webpack_require__(70); - - var _util2 = _interopRequireDefault(_util); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var keyMirror = _util2.default.keyMirror; /** - * @author NHN Ent. FE Development Team - * @fileoverview Error-message factory - */ - - var types = keyMirror('UN_IMPLEMENTATION', 'NO_COMPONENT_NAME'); - var messages = { - UN_IMPLEMENTATION: 'Should implement a method: ', - NO_COMPONENT_NAME: 'Should set a component name' - }; - var map = { - UN_IMPLEMENTATION: function UN_IMPLEMENTATION(methodName) { - return messages.UN_IMPLEMENTATION + methodName; - }, - NO_COMPONENT_NAME: function NO_COMPONENT_NAME() { - return messages.NO_COMPONENT_NAME; - } - }; - - module.exports = { - types: tui.util.extend({}, types), - - create: function create(type) { - type = type.toLowerCase(); - var func = map[type]; - - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - return func.apply(undefined, args); - } - }; - -/***/ }), -/* 70 */ -/***/ (function(module, exports) { - - 'use strict'; - - /** - * @author NHN Ent. FE Development Team - * @fileoverview Util - */ - var min = Math.min, - max = Math.max; - - - module.exports = { - /** - * Clamp value - * @param {number} value - Value - * @param {number} minValue - Minimum value - * @param {number} maxValue - Maximum value - * @returns {number} clamped value - */ - clamp: function clamp(value, minValue, maxValue) { - var temp = void 0; - if (minValue > maxValue) { - temp = minValue; - minValue = maxValue; - maxValue = temp; - } - - return max(minValue, min(value, maxValue)); - }, - - - /** - * Make key-value object from arguments - * @returns {object.} - */ - keyMirror: function keyMirror() { - var obj = {}; - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - tui.util.forEach(args, function (key) { - obj[key] = key; - }); - - return obj; - }, - - - /** - * Make CSSText - * @param {Object} styleObj - Style info object - * @returns {string} Connected string of style - */ - makeStyleText: function makeStyleText(styleObj) { - var styleStr = ''; - - tui.util.forEach(styleObj, function (value, prop) { - styleStr += prop + ': ' + value + ';'; - }); - - return styleStr; - }, - - - /** - * Get object's properties - * @param {Object} obj - object - * @param {Array} keys - keys - * @returns {Object} properties object - */ - getProperties: function getProperties(obj, keys) { - var props = {}; - var length = keys.length; - var i = 0; - var key = void 0; - - for (i = 0; i < length; i += 1) { - key = keys[i]; - props[key] = obj[key]; - } - - return props; - } - }; - -/***/ }), -/* 71 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _util = __webpack_require__(70); - - var _util2 = _interopRequireDefault(_util); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - module.exports = { - /** - * Component names - * @type {Object.} - */ - componentNames: _util2.default.keyMirror('IMAGE_LOADER', 'CROPPER', 'FLIP', 'ROTATION', 'FREE_DRAWING', 'LINE', 'TEXT', 'ICON', 'FILTER', 'SHAPE'), - - /** - * Command names - * @type {Object.} - */ - commandNames: { - 'CLEAR_OBJECTS': 'clearObjects', - 'LOAD_IMAGE': 'loadImage', - 'FLIP_IMAGE': 'flip', - 'ROTATE_IMAGE': 'rotate', - 'ADD_OBJECT': 'addObject', - 'REMOVE_OBJECT': 'removeObject', - 'APPLY_FILTER': 'applyFilter', - 'REMOVE_FILTER': 'removeFilter', - 'ADD_ICON': 'addIcon', - 'CHANGE_ICON_COLOR': 'changeIconColor', - 'ADD_SHAPE': 'addShape', - 'CHANGE_SHAPE': 'changeShape', - 'ADD_TEXT': 'addText', - 'CHANGE_TEXT': 'changeText', - 'CHANGE_TEXT_STYLE': 'changeTextStyle', - 'ADD_IMAGE_OBJECT': 'addImageObject', - 'RESIZE_CANVAS_DIMENSION': 'resizeCanvasDimension', - 'SET_OBJECT_PROPERTIES': 'setObjectProperties', - 'SET_OBJECT_POSITION': 'setObjectPosition' - }, - - /** - * Event names - * @type {Object.} - */ - eventNames: { - OBJECT_ACTIVATED: 'objectActivated', - OBJECT_MOVED: 'objectMoved', - OBJECT_SCALED: 'objectScaled', - TEXT_EDITING: 'textEditing', - TEXT_CHANGED: 'textChanged', - ADD_TEXT: 'addText', - ADD_OBJECT: 'addObject', - MOUSE_DOWN: 'mousedown', - // UNDO/REDO Events - REDO_STACK_CHANGED: 'redoStackChanged', - UNDO_STACK_CHANGED: 'undoStackChanged' - }, - - /** - * Editor states - * @type {Object.} - */ - drawingModes: _util2.default.keyMirror('NORMAL', 'CROPPER', 'FREE_DRAWING', 'LINE_DRAWING', 'TEXT', 'SHAPE'), - - /** - * Shortcut key values - * @type {Object.} - */ - keyCodes: { - Z: 90, - Y: 89, - SHIFT: 16, - BACKSPACE: 8, - DEL: 46 - }, - - /** - * Fabric object options - * @type {Object.} - */ - fObjectOptions: { - SELECTION_STYLE: { - borderColor: 'red', - cornerColor: 'green', - cornerSize: 10, - originX: 'center', - originY: 'center', - transparentCorners: false - } - }, - - /** - * Promise reject messages - * @type {Object.} - */ - rejectMessages: { - flip: 'The flipX and flipY setting values are not changed.', - rotation: 'The current angle is same the old angle.', - loadImage: 'The background image is empty.', - isLock: 'The executing command state is locked.', - undo: 'The promise of undo command is reject.', - redo: 'The promise of redo command is reject.', - invalidDrawingMode: 'This operation is not supported in the drawing mode', - invalidParameters: 'Invalid parameters', - noActiveObject: 'There is no active object.', - unsupportedType: 'Unsupported object type', - noObject: 'The object is not in canvas.', - addedObject: 'The object is already added.' - } - }; /** - * @author NHN Ent. FE Development Team - * @fileoverview Constants - */ - -/***/ }), -/* 72 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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; }; }(); /** - * @author NHN Ent. FE Development Team - * @fileoverview Graphics module - */ - - - var _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _imageLoader = __webpack_require__(73); - - var _imageLoader2 = _interopRequireDefault(_imageLoader); - - var _cropper = __webpack_require__(75); - - var _cropper2 = _interopRequireDefault(_cropper); - - var _flip = __webpack_require__(77); - - var _flip2 = _interopRequireDefault(_flip); - - var _rotation = __webpack_require__(78); - - var _rotation2 = _interopRequireDefault(_rotation); - - var _freeDrawing = __webpack_require__(79); - - var _freeDrawing2 = _interopRequireDefault(_freeDrawing); - - var _line = __webpack_require__(80); - - var _line2 = _interopRequireDefault(_line); - - var _text = __webpack_require__(81); - - var _text2 = _interopRequireDefault(_text); - - var _icon = __webpack_require__(82); - - var _icon2 = _interopRequireDefault(_icon); - - var _filter = __webpack_require__(83); - - var _filter2 = _interopRequireDefault(_filter); - - var _shape = __webpack_require__(89); - - var _shape2 = _interopRequireDefault(_shape); - - var _cropper3 = __webpack_require__(91); - - var _cropper4 = _interopRequireDefault(_cropper3); - - var _freeDrawing3 = __webpack_require__(93); - - var _freeDrawing4 = _interopRequireDefault(_freeDrawing3); - - var _lineDrawing = __webpack_require__(94); - - var _lineDrawing2 = _interopRequireDefault(_lineDrawing); - - var _shape3 = __webpack_require__(95); - - var _shape4 = _interopRequireDefault(_shape3); - - var _text3 = __webpack_require__(96); - - var _text4 = _interopRequireDefault(_text3); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - var _util = __webpack_require__(70); - - var _util2 = _interopRequireDefault(_util); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _toConsumableArray(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); } } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - var components = _consts2.default.componentNames; - var events = _consts2.default.eventNames; - var drawingModes = _consts2.default.drawingModes, - fObjectOptions = _consts2.default.fObjectOptions; - var _tui$util = tui.util, - extend = _tui$util.extend, - stamp = _tui$util.stamp; - - - var DEFAULT_CSS_MAX_WIDTH = 1000; - var DEFAULT_CSS_MAX_HEIGHT = 800; - - var cssOnly = { - cssOnly: true - }; - var backstoreOnly = { - backstoreOnly: true - }; - - /** - * Graphics class - * @class - * @param {string|jQuery|HTMLElement} wrapper - Wrapper's element or selector - * @param {Object} [option] - Canvas max width & height of css - * @param {number} option.cssMaxWidth - Canvas css-max-width - * @param {number} option.cssMaxHeight - Canvas css-max-height - * @ignore - */ - - var Graphics = function () { - function Graphics(element, cssMaxWidth, cssMaxHeight) { - _classCallCheck(this, Graphics); - - /** - * Fabric image instance - * @type {fabric.Image} - */ - this.canvasImage = null; - - /** - * Max width of canvas elements - * @type {number} - */ - this.cssMaxWidth = cssMaxWidth || DEFAULT_CSS_MAX_WIDTH; - - /** - * Max height of canvas elements - * @type {number} - */ - this.cssMaxHeight = cssMaxHeight || DEFAULT_CSS_MAX_HEIGHT; - - /** - * Image name - * @type {string} - */ - this.imageName = ''; - - /** - * Object Map - * @type {Object} - * @private - */ - this._objects = {}; - - /** - * Fabric-Canvas instance - * @type {fabric.Canvas} - * @private - */ - this._canvas = null; - - /** - * Drawing mode - * @type {string} - * @private - */ - this._drawingMode = drawingModes.NORMAL; - - /** - * DrawingMode map - * @type {Object.} - * @private - */ - this._drawingModeMap = {}; - - /** - * Component map - * @type {Object.} - * @private - */ - this._componentMap = {}; - - /** - * fabric event handlers - * @type {Object.} - * @private - */ - this._handler = { - onMouseDown: this._onMouseDown.bind(this), - onObjectAdded: this._onObjectAdded.bind(this), - onObjectRemoved: this._onObjectRemoved.bind(this), - onObjectMoved: this._onObjectMoved.bind(this), - onObjectScaled: this._onObjectScaled.bind(this), - onObjectSelected: this._onObjectSelected.bind(this), - onPathCreated: this._onPathCreated.bind(this) - }; - - this._setCanvasElement(element); - this._createDrawingModeInstances(); - this._createComponents(); - this._attachCanvasEvents(); - } - - /** - * Destroy canvas element - */ - - - _createClass(Graphics, [{ - key: 'destroy', - value: function destroy() { - var wrapperEl = this._canvas.wrapperEl; - - this._canvas.clear(); - - wrapperEl.parentNode.removeChild(wrapperEl); - } - - /** - * Deactivates all objects on canvas - * @returns {Graphics} this - */ - - }, { - key: 'deactivateAll', - value: function deactivateAll() { - this._canvas.deactivateAll(); - - return this; - } - - /** - * Renders all objects on canvas - * @returns {Graphics} this - */ - - }, { - key: 'renderAll', - value: function renderAll() { - this._canvas.renderAll(); - - return this; - } - - /** - * Adds objects on canvas - * @param {Object|Array} objects - objects - */ - - }, { - key: 'add', - value: function add(objects) { - var _canvas; - - var theArgs = []; - if (tui.util.isArray(objects)) { - theArgs = objects; - } else { - theArgs.push(objects); - } - - (_canvas = this._canvas).add.apply(_canvas, _toConsumableArray(theArgs)); - } - /** - * Removes the object or group - * @param {Object} target - graphics object or group - * @returns {boolean} true if contains or false - */ - - }, { - key: 'contains', - value: function contains(target) { - return this._canvas.contains(target); - } - - /** - * Gets all objects or group - * @returns {Array} all objects, shallow copy - */ - - }, { - key: 'getObjects', - value: function getObjects() { - return this._canvas.getObjects().slice(); - } - - /** - * Get an object by id - * @param {number} id - object id - * @returns {fabric.Object} object corresponding id - */ - - }, { - key: 'getObject', - value: function getObject(id) { - return this._objects[id]; - } - - /** - * Removes the object or group - * @param {Object} target - graphics object or group - */ - - }, { - key: 'remove', - value: function remove(target) { - this._canvas.remove(target); - } - - /** - * Removes all object or group - * @param {boolean} includesBackground - remove the background image or not - * @returns {Array} all objects array which is removed - */ - - }, { - key: 'removeAll', - value: function removeAll(includesBackground) { - var canvas = this._canvas; - var objects = canvas.getObjects().slice(); - canvas.remove.apply(canvas, _toConsumableArray(this._canvas.getObjects())); - - if (includesBackground) { - canvas.clear(); - } - - return objects; - } - - /** - * Removes an object or group by id - * @param {number} id - object id - * @returns {Array} removed objects - */ - - }, { - key: 'removeObjectById', - value: function removeObjectById(id) { - var objects = []; - var canvas = this._canvas; - var target = this.getObject(id); - var isValidGroup = target && target.isType('group') && !target.isEmpty(); - - if (isValidGroup) { - canvas.discardActiveGroup(); // restore states for each objects - target.forEachObject(function (obj) { - objects.push(obj); - obj.remove(); - }); - } else if (canvas.contains(target)) { - objects.push(target); - target.remove(); - } - - return objects; - } - - /** - * Get an id by object instance - * @param {fabric.Object} object object - * @returns {number} object id if it exists or null - */ - - }, { - key: 'getObjectId', - value: function getObjectId(object) { - var key = null; - for (key in this._objects) { - if (this._objects.hasOwnProperty(key)) { - if (object === this._objects[key]) { - return key; - } - } - } - - return null; - } - - /** - * Gets an active object or group - * @returns {Object} active object or group instance - */ - - }, { - key: 'getActiveObject', - value: function getActiveObject() { - return this._canvas.getActiveObject(); - } - - /** - * Activates an object or group - * @param {Object} target - target object or group - */ - - }, { - key: 'setActiveObject', - value: function setActiveObject(target) { - this._canvas.setActiveObject(target); - } - - /** - * Get component - * @param {string} name - Component name - * @returns {Component} - */ - - }, { - key: 'getComponent', - value: function getComponent(name) { - return this._componentMap[name]; - } - - /** - * Get current drawing mode - * @returns {string} - */ - - }, { - key: 'getDrawingMode', - value: function getDrawingMode() { - return this._drawingMode; - } - - /** - * Start a drawing mode. If the current mode is not 'NORMAL', 'stopDrawingMode()' will be called first. - * @param {String} mode Can be one of 'CROPPER', 'FREE_DRAWING', 'LINE', 'TEXT', 'SHAPE' - * @param {Object} [option] parameters of drawing mode, it's available with 'FREE_DRAWING', 'LINE_DRAWING' - * @param {Number} [option.width] brush width - * @param {String} [option.color] brush color - * @returns {boolean} true if success or false - */ - - }, { - key: 'startDrawingMode', - value: function startDrawingMode(mode, option) { - if (this._isSameDrawingMode(mode)) { - return true; - } - - // If the current mode is not 'NORMAL', 'stopDrawingMode()' will be called first. - this.stopDrawingMode(); - - var drawingModeInstance = this._getDrawingModeInstance(mode); - if (drawingModeInstance && drawingModeInstance.start) { - drawingModeInstance.start(this, option); - - this._drawingMode = mode; - } - - return !!drawingModeInstance; - } - /** - * Stop the current drawing mode and back to the 'NORMAL' mode - */ - - }, { - key: 'stopDrawingMode', - value: function stopDrawingMode() { - if (this._isSameDrawingMode(drawingModes.NORMAL)) { - return; - } - - var drawingModeInstance = this._getDrawingModeInstance(this.getDrawingMode()); - if (drawingModeInstance && drawingModeInstance.end) { - drawingModeInstance.end(this); - } - this._drawingMode = drawingModes.NORMAL; - } - - /** - * To data url from canvas - * @param {string} type - A DOMString indicating the image format. The default type is image/png. - * @returns {string} A DOMString containing the requested data URI. - */ - - }, { - key: 'toDataURL', - value: function toDataURL(type) { - return this._canvas && this._canvas.toDataURL(type); - } - - /** - * Save image(background) of canvas - * @param {string} name - Name of image - * @param {?fabric.Image} canvasImage - Fabric image instance - */ - - }, { - key: 'setCanvasImage', - value: function setCanvasImage(name, canvasImage) { - if (canvasImage) { - stamp(canvasImage); - } - this.imageName = name; - this.canvasImage = canvasImage; - } - - /** - * Set css max dimension - * @param {{width: number, height: number}} maxDimension - Max width & Max height - */ - - }, { - key: 'setCssMaxDimension', - value: function setCssMaxDimension(maxDimension) { - this.cssMaxWidth = maxDimension.width || this.cssMaxWidth; - this.cssMaxHeight = maxDimension.height || this.cssMaxHeight; - } - - /** - * Adjust canvas dimension with scaling image - */ - - }, { - key: 'adjustCanvasDimension', - value: function adjustCanvasDimension() { - var canvasImage = this.canvasImage.scale(1); - - var _canvasImage$getBound = canvasImage.getBoundingRect(), - width = _canvasImage$getBound.width, - height = _canvasImage$getBound.height; - - var maxDimension = this._calcMaxDimension(width, height); - - this.setCanvasCssDimension({ - width: '100%', - height: '100%', // Set height '' for IE9 - 'max-width': maxDimension.width + 'px', - 'max-height': maxDimension.height + 'px' - }); - - this.setCanvasBackstoreDimension({ - width: width, - height: height - }); - this._canvas.centerObject(canvasImage); - } - - /** - * Set canvas dimension - css only - * {@link http://fabricjs.com/docs/fabric.Canvas.html#setDimensions} - * @param {Object} dimension - Canvas css dimension - */ - - }, { - key: 'setCanvasCssDimension', - value: function setCanvasCssDimension(dimension) { - this._canvas.setDimensions(dimension, cssOnly); - } - - /** - * Set canvas dimension - backstore only - * {@link http://fabricjs.com/docs/fabric.Canvas.html#setDimensions} - * @param {Object} dimension - Canvas backstore dimension - */ - - }, { - key: 'setCanvasBackstoreDimension', - value: function setCanvasBackstoreDimension(dimension) { - this._canvas.setDimensions(dimension, backstoreOnly); - } - - /** - * Set image properties - * {@link http://fabricjs.com/docs/fabric.Image.html#set} - * @param {Object} setting - Image properties - * @param {boolean} [withRendering] - If true, The changed image will be reflected in the canvas - */ - - }, { - key: 'setImageProperties', - value: function setImageProperties(setting, withRendering) { - var canvasImage = this.canvasImage; - - if (!canvasImage) { - return; - } - - canvasImage.set(setting).setCoords(); - if (withRendering) { - this._canvas.renderAll(); - } - } - - /** - * Returns canvas element of fabric.Canvas[[lower-canvas]] - * @returns {HTMLCanvasElement} - */ - - }, { - key: 'getCanvasElement', - value: function getCanvasElement() { - return this._canvas.getElement(); - } - - /** - * Get fabric.Canvas instance - * @returns {fabric.Canvas} - * @private - */ - - }, { - key: 'getCanvas', - value: function getCanvas() { - return this._canvas; - } - - /** - * Get canvasImage (fabric.Image instance) - * @returns {fabric.Image} - */ - - }, { - key: 'getCanvasImage', - value: function getCanvasImage() { - return this.canvasImage; - } - - /** - * Get image name - * @returns {string} - */ - - }, { - key: 'getImageName', - value: function getImageName() { - return this.imageName; - } - - /** - * Add image object on canvas - * @param {string} imgUrl - Image url to make object - * @returns {Promise} - */ - - }, { - key: 'addImageObject', - value: function addImageObject(imgUrl) { - var _this = this; - - var callback = this._callbackAfterLoadingImageObject.bind(this); - - return new _promise2.default(function (resolve) { - fabric.Image.fromURL(imgUrl, function (image) { - callback(image); - resolve(_this.createObjectProperties(image)); - }, { - crossOrigin: 'Anonymous' - }); - }); - } - - /** - * Get center position of canvas - * @returns {Object} {left, top} - */ - - }, { - key: 'getCenter', - value: function getCenter() { - return this._canvas.getCenter(); - } - - /** - * Get cropped rect - * @returns {Object} rect - */ - - }, { - key: 'getCropzoneRect', - value: function getCropzoneRect() { - return this.getComponent(components.CROPPER).getCropzoneRect(); - } - - /** - * Get cropped image data - * @param {Object} cropRect cropzone rect - * @param {Number} cropRect.left left position - * @param {Number} cropRect.top top position - * @param {Number} cropRect.width width - * @param {Number} cropRect.height height - * @returns {?{imageName: string, url: string}} cropped Image data - */ - - }, { - key: 'getCroppedImageData', - value: function getCroppedImageData(cropRect) { - return this.getComponent(components.CROPPER).getCroppedImageData(cropRect); - } - - /** - * Set brush option - * @param {Object} option brush option - * @param {Number} option.width width - * @param {String} option.color color like 'FFFFFF', 'rgba(0, 0, 0, 0.5)' - */ - - }, { - key: 'setBrush', - value: function setBrush(option) { - var drawingMode = this._drawingMode; - var compName = components.FREE_DRAWING; - - if (drawingMode === drawingModes.LINE) { - compName = drawingModes.LINE; - } - - this.getComponent(compName).setBrush(option); - } - - /** - * Set states of current drawing shape - * @param {string} type - Shape type (ex: 'rect', 'circle', 'triangle') - * @param {Object} [options] - Shape options - * @param {string} [options.fill] - Shape foreground color (ex: '#fff', 'transparent') - * @param {string} [options.stoke] - Shape outline color - * @param {number} [options.strokeWidth] - Shape outline width - * @param {number} [options.width] - Width value (When type option is 'rect', this options can use) - * @param {number} [options.height] - Height value (When type option is 'rect', this options can use) - * @param {number} [options.rx] - Radius x value (When type option is 'circle', this options can use) - * @param {number} [options.ry] - Radius y value (When type option is 'circle', this options can use) - * @param {number} [options.isRegular] - Whether resizing shape has 1:1 ratio or not - */ - - }, { - key: 'setDrawingShape', - value: function setDrawingShape(type, options) { - this.getComponent(components.SHAPE).setStates(type, options); - } - - /** - * Register icon paths - * @param {Object} pathInfos - Path infos - * @param {string} pathInfos.key - key - * @param {string} pathInfos.value - value - */ - - }, { - key: 'registerPaths', - value: function registerPaths(pathInfos) { - this.getComponent(components.ICON).registerPaths(pathInfos); - } - - /** - * Whether it has the filter or not - * @param {string} type - Filter type - * @returns {boolean} true if it has the filter - */ - - }, { - key: 'hasFilter', - value: function hasFilter(type) { - return this.getComponent(components.FILTER).hasFilter(type); - } - - /** - * Set selection style of fabric object by init option - * @param {Object} styles - Selection styles - */ - - }, { - key: 'setSelectionStyle', - value: function setSelectionStyle(styles) { - extend(fObjectOptions.SELECTION_STYLE, styles); - } - - /** - * Set object properties - * @param {number} id - object id - * @param {Object} props - props - * @param {string} [props.fill] Color - * @param {string} [props.fontFamily] Font type for text - * @param {number} [props.fontSize] Size - * @param {string} [props.fontStyle] Type of inclination (normal / italic) - * @param {string} [props.fontWeight] Type of thicker or thinner looking (normal / bold) - * @param {string} [props.textAlign] Type of text align (left / center / right) - * @param {string} [props.textDecoraiton] Type of line (underline / line-throgh / overline) - * @returns {Object} applied properties - */ - - }, { - key: 'setObjectProperties', - value: function setObjectProperties(id, props) { - var object = this.getObject(id); - var clone = extend({}, props); - - object.set(clone); - - this.getCanvas().renderAll(); - - return clone; - } - - /** - * Get object properties corresponding key - * @param {number} id - object id - * @param {Array|ObjectProps|string} keys - property's key - * @returns {Object} properties - */ - - }, { - key: 'getObjectProperties', - value: function getObjectProperties(id, keys) { - var object = this.getObject(id); - var props = {}; - - if (tui.util.isString(keys)) { - props[keys] = object[keys]; - } else if (tui.util.isArray(keys)) { - tui.util.forEachArray(keys, function (value) { - props[value] = object[value]; - }); - } else { - tui.util.forEachOwnProperties(keys, function (value, key) { - props[key] = object[key]; - }); - } - - return props; - } - - /** - * Get object position by originX, originY - * @param {number} id - object id - * @param {string} originX - can be 'left', 'center', 'right' - * @param {string} originY - can be 'top', 'center', 'bottom' - * @returns {Object} {{x:number, y: number}} position by origin if id is valid, or null - */ - - }, { - key: 'getObjectPosition', - value: function getObjectPosition(id, originX, originY) { - var targetObj = this.getObject(id); - if (!targetObj) { - return null; - } - - return targetObj.getPointByOrigin(originX, originY); - } - - /** - * Set object position by originX, originY - * @param {number} id - object id - * @param {Object} posInfo - position object - * @param {number} posInfo.x - x position - * @param {number} posInfo.y - y position - * @param {string} posInfo.originX - can be 'left', 'center', 'right' - * @param {string} posInfo.originY - can be 'top', 'center', 'bottom' - * @returns {boolean} true if target id is valid or false - */ - - }, { - key: 'setObjectPosition', - value: function setObjectPosition(id, posInfo) { - var targetObj = this.getObject(id); - var x = posInfo.x, - y = posInfo.y, - originX = posInfo.originX, - originY = posInfo.originY; - - if (!targetObj) { - return false; - } - - var targetOrigin = targetObj.getPointByOrigin(originX, originY); - var centerOrigin = targetObj.getPointByOrigin('center', 'center'); - var diffX = centerOrigin.x - targetOrigin.x; - var diffY = centerOrigin.y - targetOrigin.y; - - targetObj.set({ - left: x + diffX, - top: y + diffY - }); - - return true; - } - - /** - * Get the canvas size - * @returns {Object} {{width: number, height: number}} image size - */ - - }, { - key: 'getCanvasSize', - value: function getCanvasSize() { - var image = this.getCanvasImage(); - - return { - width: image ? image.width : 0, - height: image ? image.height : 0 - }; - } - - /** - * Get a DrawingMode instance - * @param {string} modeName - DrawingMode Class Name - * @returns {DrawingMode} DrawingMode instance - * @private - */ - - }, { - key: '_getDrawingModeInstance', - value: function _getDrawingModeInstance(modeName) { - return this._drawingModeMap[modeName]; - } - - /** - * Set canvas element to fabric.Canvas - * @param {jQuery|Element|string} element - Wrapper or canvas element or selector - * @private - */ - - }, { - key: '_setCanvasElement', - value: function _setCanvasElement(element) { - var selectedElement = void 0; - var canvasElement = void 0; - - if (element.jquery) { - selectedElement = element[0]; - } else if (element.nodeType) { - selectedElement = element; - } else { - selectedElement = document.querySelector(element); - } - - if (selectedElement.nodeName.toUpperCase() !== 'CANVAS') { - canvasElement = document.createElement('canvas'); - selectedElement.appendChild(canvasElement); - } - - this._canvas = new fabric.Canvas(canvasElement, { - containerClass: 'tui-image-editor-canvas-container', - enableRetinaScaling: false - }); - } - - /** - * Creates DrawingMode instances - * @private - */ - - }, { - key: '_createDrawingModeInstances', - value: function _createDrawingModeInstances() { - this._register(this._drawingModeMap, new _cropper4.default()); - this._register(this._drawingModeMap, new _freeDrawing4.default()); - this._register(this._drawingModeMap, new _lineDrawing2.default()); - this._register(this._drawingModeMap, new _shape4.default()); - this._register(this._drawingModeMap, new _text4.default()); - } - - /** - * Create components - * @private - */ - - }, { - key: '_createComponents', - value: function _createComponents() { - this._register(this._componentMap, new _imageLoader2.default(this)); - this._register(this._componentMap, new _cropper2.default(this)); - this._register(this._componentMap, new _flip2.default(this)); - this._register(this._componentMap, new _rotation2.default(this)); - this._register(this._componentMap, new _freeDrawing2.default(this)); - this._register(this._componentMap, new _line2.default(this)); - this._register(this._componentMap, new _text2.default(this)); - this._register(this._componentMap, new _icon2.default(this)); - this._register(this._componentMap, new _filter2.default(this)); - this._register(this._componentMap, new _shape2.default(this)); - } - - /** - * Register component - * @param {Object} map - map object - * @param {Object} module - module which has getName method - * @private - */ - - }, { - key: '_register', - value: function _register(map, module) { - map[module.getName()] = module; - } - - /** - * Get the current drawing mode is same with given mode - * @param {string} mode drawing mode - * @returns {boolean} true if same or false - */ - - }, { - key: '_isSameDrawingMode', - value: function _isSameDrawingMode(mode) { - return this.getDrawingMode() === mode; - } - - /** - * Calculate max dimension of canvas - * The css-max dimension is dynamically decided with maintaining image ratio - * The css-max dimension is lower than canvas dimension (attribute of canvas, not css) - * @param {number} width - Canvas width - * @param {number} height - Canvas height - * @returns {{width: number, height: number}} - Max width & Max height - * @private - */ - - }, { - key: '_calcMaxDimension', - value: function _calcMaxDimension(width, height) { - var wScaleFactor = this.cssMaxWidth / width; - var hScaleFactor = this.cssMaxHeight / height; - var cssMaxWidth = Math.min(width, this.cssMaxWidth); - var cssMaxHeight = Math.min(height, this.cssMaxHeight); - - if (wScaleFactor < 1 && wScaleFactor < hScaleFactor) { - cssMaxWidth = width * wScaleFactor; - cssMaxHeight = height * wScaleFactor; - } else if (hScaleFactor < 1 && hScaleFactor < wScaleFactor) { - cssMaxWidth = width * hScaleFactor; - cssMaxHeight = height * hScaleFactor; - } - - return { - width: Math.floor(cssMaxWidth), - height: Math.floor(cssMaxHeight) - }; - } - - /** - * Callback function after loading image - * @param {fabric.Image} obj - Fabric image object - * @private - */ - - }, { - key: '_callbackAfterLoadingImageObject', - value: function _callbackAfterLoadingImageObject(obj) { - var centerPos = this.getCanvasImage().getCenterPoint(); - - obj.set(_consts2.default.fObjectOptions.SELECTION_STYLE); - obj.set({ - left: centerPos.x, - top: centerPos.y, - crossOrigin: 'Anonymous' - }); - - this.getCanvas().add(obj).setActiveObject(obj); - } - - /** - * Attach canvas's events - */ - - }, { - key: '_attachCanvasEvents', - value: function _attachCanvasEvents() { - var canvas = this._canvas; - var handler = this._handler; - canvas.on({ - 'mouse:down': handler.onMouseDown, - 'object:added': handler.onObjectAdded, - 'object:removed': handler.onObjectRemoved, - 'object:moving': handler.onObjectMoved, - 'object:scaling': handler.onObjectScaled, - 'object:selected': handler.onObjectSelected, - 'path:created': handler.onPathCreated - }); - } - - /** - * "mouse:down" canvas event handler - * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event - * @private - */ - - }, { - key: '_onMouseDown', - value: function _onMouseDown(fEvent) { - var originPointer = this._canvas.getPointer(fEvent.e); - this.fire(events.MOUSE_DOWN, fEvent.e, originPointer); - } - - /** - * "object:added" canvas event handler - * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event - * @private - */ - - }, { - key: '_onObjectAdded', - value: function _onObjectAdded(fEvent) { - var obj = fEvent.target; - if (obj.isType('cropzone')) { - return; - } - - this._addFabricObject(obj); - } - - /** - * "object:removed" canvas event handler - * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event - * @private - */ - - }, { - key: '_onObjectRemoved', - value: function _onObjectRemoved(fEvent) { - var obj = fEvent.target; - - this._removeFabricObject(stamp(obj)); - } - - /** - * "object:moving" canvas event handler - * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event - * @private - */ - - }, { - key: '_onObjectMoved', - value: function _onObjectMoved(fEvent) { - var target = fEvent.target; - var params = this.createObjectProperties(target); - - this.fire(events.OBJECT_MOVED, params); - } - - /** - * "object:scaling" canvas event handler - * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event - * @private - */ - - }, { - key: '_onObjectScaled', - value: function _onObjectScaled(fEvent) { - var target = fEvent.target; - var params = this.createObjectProperties(target); - - this.fire(events.OBJECT_SCALED, params); - } - - /** - * "object:selected" canvas event handler - * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event - * @private - */ - - }, { - key: '_onObjectSelected', - value: function _onObjectSelected(fEvent) { - var target = fEvent.target; - var params = this.createObjectProperties(target); - - this.fire(events.OBJECT_ACTIVATED, params); - } - - /** - * "path:created" canvas event handler - * @param {{path: fabric.Path}} obj - Path object - * @private - */ - - }, { - key: '_onPathCreated', - value: function _onPathCreated(obj) { - obj.path.set(_consts2.default.fObjectOptions.SELECTION_STYLE); - - var params = this.createObjectProperties(obj.path); - - this.fire(events.ADD_OBJECT, params); - } - - /** - * Return object's properties - * @param {fabric.Object} obj - fabric object - * @returns {Object} properties object - */ - - }, { - key: 'createObjectProperties', - value: function createObjectProperties(obj) { - var predefinedKeys = ['left', 'top', 'width', 'height', 'fill', 'stroke', 'strokeWidth', 'opacity']; - var props = { - id: stamp(obj), - type: obj.type - }; - - extend(props, _util2.default.getProperties(obj, predefinedKeys)); - - if (obj.type === 'text') { - extend(props, this._createTextProperties(obj, props)); - } - - return props; - } - - /** - * Get text object's properties - * @param {fabric.Object} obj - fabric text object - * @param {Object} props - properties - * @returns {Object} properties object - */ - - }, { - key: '_createTextProperties', - value: function _createTextProperties(obj) { - var predefinedKeys = ['text', 'fontFamily', 'fontSize', 'fontStyle', 'textAlign', 'textDecoration']; - var props = {}; - extend(props, _util2.default.getProperties(obj, predefinedKeys)); - - return props; - } - - /** - * Add object array by id - * @param {fabric.Object} obj - fabric object - * @returns {number} object id - */ - - }, { - key: '_addFabricObject', - value: function _addFabricObject(obj) { - var id = stamp(obj); - this._objects[id] = obj; - - return id; - } - - /** - * Remove an object in array yb id - * @param {number} id - object id - */ - - }, { - key: '_removeFabricObject', - value: function _removeFabricObject(id) { - delete this._objects[id]; - } - }]); - - return Graphics; - }(); - - tui.util.CustomEvents.mixin(Graphics); - module.exports = Graphics; - -/***/ }), -/* 73 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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 _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _component = __webpack_require__(74); - - var _component2 = _interopRequireDefault(_component); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** - * @author NHN Ent. FE Development Team - * @fileoverview Image loader - */ - - - var componentNames = _consts2.default.componentNames, - rejectMessages = _consts2.default.rejectMessages; - - var imageOption = { - padding: 0, - crossOrigin: 'Anonymous' - }; - - /** - * ImageLoader components - * @extends {Component} - * @class ImageLoader - * @param {Graphics} graphics - Graphics instance - * @ignore - */ - - var ImageLoader = function (_Component) { - _inherits(ImageLoader, _Component); - - function ImageLoader(graphics) { - _classCallCheck(this, ImageLoader); - - return _possibleConstructorReturn(this, (ImageLoader.__proto__ || Object.getPrototypeOf(ImageLoader)).call(this, componentNames.IMAGE_LOADER, graphics)); - } - - /** - * Load image from url - * @param {?string} imageName - File name - * @param {?(fabric.Image|string)} img - fabric.Image instance or URL of an image - * @returns {jQuery.Deferred} deferred - */ - - - _createClass(ImageLoader, [{ - key: 'load', - value: function load(imageName, img) { - var _this2 = this; - - var promise = void 0; - - if (!imageName && !img) { - // Back to the initial state, not error. - var canvas = this.getCanvas(); - - canvas.backgroundImage = null; - canvas.renderAll(); - - promise = new _promise2.default(function (resolve) { - _this2.setCanvasImage('', null); - resolve(); - }); - } else { - promise = this._setBackgroundImage(img).then(function (oImage) { - _this2.setCanvasImage(imageName, oImage); - _this2.adjustCanvasDimension(); - - return oImage; - }); - } - - return promise; - } - - /** - * Set background image - * @param {?(fabric.Image|String)} img fabric.Image instance or URL of an image to set background to - * @returns {$.Deferred} deferred - * @private - */ - - }, { - key: '_setBackgroundImage', - value: function _setBackgroundImage(img) { - var _this3 = this; - - if (!img) { - return _promise2.default.reject(rejectMessages.loadImage); - } - - return new _promise2.default(function (resolve, reject) { - var canvas = _this3.getCanvas(); - - canvas.setBackgroundImage(img, function () { - var oImage = canvas.backgroundImage; - - if (oImage.getElement()) { - resolve(oImage); - } else { - reject(rejectMessages.loadingImageFailed); - } - }, imageOption); - }); - } - }]); - - return ImageLoader; - }(_component2.default); - - module.exports = ImageLoader; - -/***/ }), -/* 74 */ -/***/ (function(module, exports) { - - "use strict"; - - 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; }; }(); - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - /** - * @author NHN Ent. FE Development Team - * @fileoverview Component interface - */ - - /** - * Component interface - * @class - * @param {string} name - component name - * @param {Graphics} graphics - Graphics instance - * @ignore - */ - var Component = function () { - function Component(name, graphics) { - _classCallCheck(this, Component); - - /** - * Component name - * @type {string} - */ - this.name = name; - - /** - * Graphics instance - * @type {Graphics} - */ - this.graphics = graphics; - } - - /** - * Fire Graphics event - * @param {Array} args - arguments - * @returns {Object} return value - */ - - - _createClass(Component, [{ - key: "fire", - value: function fire() { - var context = this.graphics; - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return this.graphics.fire.apply(context, args); - } - - /** - * Save image(background) of canvas - * @param {string} name - Name of image - * @param {fabric.Image} oImage - Fabric image instance - */ - - }, { - key: "setCanvasImage", - value: function setCanvasImage(name, oImage) { - this.graphics.setCanvasImage(name, oImage); - } - - /** - * Returns canvas element of fabric.Canvas[[lower-canvas]] - * @returns {HTMLCanvasElement} - */ - - }, { - key: "getCanvasElement", - value: function getCanvasElement() { - return this.graphics.getCanvasElement(); - } - - /** - * Get fabric.Canvas instance - * @returns {fabric.Canvas} - */ - - }, { - key: "getCanvas", - value: function getCanvas() { - return this.graphics.getCanvas(); - } - - /** - * Get canvasImage (fabric.Image instance) - * @returns {fabric.Image} - */ - - }, { - key: "getCanvasImage", - value: function getCanvasImage() { - return this.graphics.getCanvasImage(); - } - - /** - * Get image name - * @returns {string} - */ - - }, { - key: "getImageName", - value: function getImageName() { - return this.graphics.getImageName(); - } - - /** - * Get image editor - * @returns {ImageEditor} - */ - - }, { - key: "getEditor", - value: function getEditor() { - return this.graphics.getEditor(); - } - - /** - * Return component name - * @returns {string} - */ - - }, { - key: "getName", - value: function getName() { - return this.name; - } - - /** - * Set image properties - * @param {Object} setting - Image properties - * @param {boolean} [withRendering] - If true, The changed image will be reflected in the canvas - */ - - }, { - key: "setImageProperties", - value: function setImageProperties(setting, withRendering) { - this.graphics.setImageProperties(setting, withRendering); - } - - /** - * Set canvas dimension - css only - * @param {Object} dimension - Canvas css dimension - */ - - }, { - key: "setCanvasCssDimension", - value: function setCanvasCssDimension(dimension) { - this.graphics.setCanvasCssDimension(dimension); - } - - /** - * Set canvas dimension - css only - * @param {Object} dimension - Canvas backstore dimension - */ - - }, { - key: "setCanvasBackstoreDimension", - value: function setCanvasBackstoreDimension(dimension) { - this.graphics.setCanvasBackstoreDimension(dimension); - } - - /** - * Adjust canvas dimension with scaling image - */ - - }, { - key: "adjustCanvasDimension", - value: function adjustCanvasDimension() { - this.graphics.adjustCanvasDimension(); - } - }]); - - return Component; - }(); - - module.exports = Component; - -/***/ }), -/* 75 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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 _component = __webpack_require__(74); - - var _component2 = _interopRequireDefault(_component); - - var _cropzone = __webpack_require__(76); - - var _cropzone2 = _interopRequireDefault(_cropzone); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - var _util = __webpack_require__(70); - - var _util2 = _interopRequireDefault(_util); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** - * @author NHN Ent. FE Development Team - * @fileoverview Image crop module (start cropping, end cropping) - */ - - - var MOUSE_MOVE_THRESHOLD = 10; - var abs = Math.abs; - var clamp = _util2.default.clamp; - var keyCodes = _consts2.default.keyCodes; - - /** - * Cropper components - * @param {Graphics} graphics - Graphics instance - * @extends {Component} - * @class Cropper - * @ignore - */ - - var Cropper = function (_Component) { - _inherits(Cropper, _Component); - - function Cropper(graphics) { - _classCallCheck(this, Cropper); - - /** - * Cropzone - * @type {Cropzone} - * @private - */ - var _this = _possibleConstructorReturn(this, (Cropper.__proto__ || Object.getPrototypeOf(Cropper)).call(this, _consts2.default.componentNames.CROPPER, graphics)); - - _this._cropzone = null; - - /** - * StartX of Cropzone - * @type {number} - * @private - */ - _this._startX = null; - - /** - * StartY of Cropzone - * @type {number} - * @private - */ - _this._startY = null; - - /** - * State whether shortcut key is pressed or not - * @type {boolean} - * @private - */ - _this._withShiftKey = false; - - /** - * Listeners - * @type {object.} - * @private - */ - _this._listeners = { - keydown: _this._onKeyDown.bind(_this), - keyup: _this._onKeyUp.bind(_this), - mousedown: _this._onFabricMouseDown.bind(_this), - mousemove: _this._onFabricMouseMove.bind(_this), - mouseup: _this._onFabricMouseUp.bind(_this) - }; - return _this; - } - - /** - * Start cropping - */ - - - _createClass(Cropper, [{ - key: 'start', - value: function start() { - if (this._cropzone) { - return; - } - var canvas = this.getCanvas(); - canvas.forEachObject(function (obj) { - // {@link http://fabricjs.com/docs/fabric.Object.html#evented} - obj.evented = false; - }); - this._cropzone = new _cropzone2.default({ - left: -10, - top: -10, - width: 1, - height: 1, - strokeWidth: 0, // {@link https://github.com/kangax/fabric.js/issues/2860} - cornerSize: 10, - cornerColor: 'black', - fill: 'transparent', - hasRotatingPoint: false, - hasBorders: false, - lockScalingFlip: true, - lockRotation: true - }); - canvas.deactivateAll(); - canvas.add(this._cropzone); - canvas.on('mouse:down', this._listeners.mousedown); - canvas.selection = false; - canvas.defaultCursor = 'crosshair'; - - fabric.util.addListener(document, 'keydown', this._listeners.keydown); - fabric.util.addListener(document, 'keyup', this._listeners.keyup); - } - - /** - * End cropping - */ - - }, { - key: 'end', - value: function end() { - var canvas = this.getCanvas(); - var cropzone = this._cropzone; - - if (!cropzone) { - return; - } - cropzone.remove(); - canvas.selection = true; - canvas.defaultCursor = 'default'; - canvas.off('mouse:down', this._listeners.mousedown); - canvas.forEachObject(function (obj) { - obj.evented = true; - }); - - this._cropzone = null; - - fabric.util.removeListener(document, 'keydown', this._listeners.keydown); - fabric.util.removeListener(document, 'keyup', this._listeners.keyup); - } - - /** - * onMousedown handler in fabric canvas - * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event - * @private - */ - - }, { - key: '_onFabricMouseDown', - value: function _onFabricMouseDown(fEvent) { - var canvas = this.getCanvas(); - - if (fEvent.target) { - return; - } - - canvas.selection = false; - var coord = canvas.getPointer(fEvent.e); - - this._startX = coord.x; - this._startY = coord.y; - - canvas.on({ - 'mouse:move': this._listeners.mousemove, - 'mouse:up': this._listeners.mouseup - }); - } - - /** - * onMousemove handler in fabric canvas - * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event - * @private - */ - - }, { - key: '_onFabricMouseMove', - value: function _onFabricMouseMove(fEvent) { - var canvas = this.getCanvas(); - var pointer = canvas.getPointer(fEvent.e); - var x = pointer.x; - var y = pointer.y; - var cropzone = this._cropzone; - - if (abs(x - this._startX) + abs(y - this._startY) > MOUSE_MOVE_THRESHOLD) { - cropzone.remove(); - cropzone.set(this._calcRectDimensionFromPoint(x, y)); - - canvas.add(cropzone); - } - } - - /** - * Get rect dimension setting from Canvas-Mouse-Position(x, y) - * @param {number} x - Canvas-Mouse-Position x - * @param {number} y - Canvas-Mouse-Position Y - * @returns {{left: number, top: number, width: number, height: number}} - * @private - */ - - }, { - key: '_calcRectDimensionFromPoint', - value: function _calcRectDimensionFromPoint(x, y) { - var canvas = this.getCanvas(); - var canvasWidth = canvas.getWidth(); - var canvasHeight = canvas.getHeight(); - var startX = this._startX; - var startY = this._startY; - var left = clamp(x, 0, startX); - var top = clamp(y, 0, startY); - var width = clamp(x, startX, canvasWidth) - left; // (startX <= x(mouse) <= canvasWidth) - left - var height = clamp(y, startY, canvasHeight) - top; // (startY <= y(mouse) <= canvasHeight) - top - - if (this._withShiftKey) { - // make fixed ratio cropzone - if (width > height) { - height = width; - } else if (height > width) { - width = height; - } - - if (startX >= x) { - left = startX - width; - } - - if (startY >= y) { - top = startY - height; - } - } - - return { - left: left, - top: top, - width: width, - height: height - }; - } - - /** - * onMouseup handler in fabric canvas - * @private - */ - - }, { - key: '_onFabricMouseUp', - value: function _onFabricMouseUp() { - var cropzone = this._cropzone; - var listeners = this._listeners; - var canvas = this.getCanvas(); - - canvas.setActiveObject(cropzone); - canvas.off({ - 'mouse:move': listeners.mousemove, - 'mouse:up': listeners.mouseup - }); - } - - /** - * Get cropped image data - * @param {Object} cropRect cropzone rect - * @param {Number} cropRect.left left position - * @param {Number} cropRect.top top position - * @param {Number} cropRect.width width - * @param {Number} cropRect.height height - * @returns {?{imageName: string, url: string}} cropped Image data - */ - - }, { - key: 'getCroppedImageData', - value: function getCroppedImageData(cropRect) { - var canvas = this.getCanvas(); - var containsCropzone = canvas.contains(this._cropzone); - if (!cropRect) { - return null; - } - - if (containsCropzone) { - this._cropzone.remove(); - } - - var imageData = { - imageName: this.getImageName(), - url: canvas.toDataURL(cropRect) - }; - - if (containsCropzone) { - canvas.add(this._cropzone); - } - - return imageData; - } - - /** - * Get cropped rect - * @returns {Object} rect - */ - - }, { - key: 'getCropzoneRect', - value: function getCropzoneRect() { - var cropzone = this._cropzone; - - if (!cropzone.isValid()) { - return null; - } - - return { - left: cropzone.getLeft(), - top: cropzone.getTop(), - width: cropzone.getWidth(), - height: cropzone.getHeight() - }; - } - - /** - * Keydown event handler - * @param {KeyboardEvent} e - Event object - * @private - */ - - }, { - key: '_onKeyDown', - value: function _onKeyDown(e) { - if (e.keyCode === keyCodes.SHIFT) { - this._withShiftKey = true; - } - } - - /** - * Keyup event handler - * @param {KeyboardEvent} e - Event object - * @private - */ - - }, { - key: '_onKeyUp', - value: function _onKeyUp(e) { - if (e.keyCode === keyCodes.SHIFT) { - this._withShiftKey = false; - } - } - }]); - - return Cropper; - }(_component2.default); - - module.exports = Cropper; - -/***/ }), -/* 76 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _util = __webpack_require__(70); - - var _util2 = _interopRequireDefault(_util); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var clamp = _util2.default.clamp; /** - * @author NHN Ent. FE Development Team - * @fileoverview Cropzone extending fabric.Rect - */ - - - var CORNER_TYPE_TOP_LEFT = 'tl'; - var CORNER_TYPE_TOP_RIGHT = 'tr'; - var CORNER_TYPE_MIDDLE_TOP = 'mt'; - var CORNER_TYPE_MIDDLE_LEFT = 'ml'; - var CORNER_TYPE_MIDDLE_RIGHT = 'mr'; - var CORNER_TYPE_MIDDLE_BOTTOM = 'mb'; - var CORNER_TYPE_BOTTOM_LEFT = 'bl'; - var CORNER_TYPE_BOTTOM_RIGHT = 'br'; - - /** - * Cropzone object - * Issue: IE7, 8(with excanvas) - * - Cropzone is a black zone without transparency. - * @class Cropzone - * @extends {fabric.Rect} - * @ignore - */ - var Cropzone = fabric.util.createClass(fabric.Rect, /** @lends Cropzone.prototype */{ - /** - * Constructor - * @param {Object} options Options object - * @override - */ - initialize: function initialize(options) { - options.type = 'cropzone'; - this.callSuper('initialize', options); - this.on({ - 'moving': this._onMoving, - 'scaling': this._onScaling - }); - }, - - - /** - * Render Crop-zone - * @param {CanvasRenderingContext2D} ctx - Context - * @private - * @override - */ - _render: function _render(ctx) { - var cropzoneDashLineWidth = 7; - var cropzoneDashLineOffset = 7; - this.callSuper('_render', ctx); - - // Calc original scale - var originalFlipX = this.flipX ? -1 : 1; - var originalFlipY = this.flipY ? -1 : 1; - var originalScaleX = originalFlipX / this.scaleX; - var originalScaleY = originalFlipY / this.scaleY; - - // Set original scale - ctx.scale(originalScaleX, originalScaleY); - - // Render outer rect - this._fillOuterRect(ctx, 'rgba(0, 0, 0, 0.55)'); - - // Black dash line - this._strokeBorder(ctx, 'rgb(0, 0, 0)', cropzoneDashLineWidth); - - // White dash line - this._strokeBorder(ctx, 'rgb(255, 255, 255)', cropzoneDashLineWidth, cropzoneDashLineOffset); - - // Reset scale - ctx.scale(1 / originalScaleX, 1 / originalScaleY); - }, - - - /** - * Cropzone-coordinates with outer rectangle - * - * x0 x1 x2 x3 - * y0 +--------------------------+ - * |///////|//////////|///////| // <--- "Outer-rectangle" - * |///////|//////////|///////| - * y1 +-------+----------+-------+ - * |///////| Cropzone |///////| Cropzone is the "Inner-rectangle" - * |///////| (0, 0) |///////| Center point (0, 0) - * y2 +-------+----------+-------+ - * |///////|//////////|///////| - * |///////|//////////|///////| - * y3 +--------------------------+ - * - * @typedef {{x: Array, y: Array}} cropzoneCoordinates - * @ignore - */ - - /** - * Fill outer rectangle - * @param {CanvasRenderingContext2D} ctx - Context - * @param {string|CanvasGradient|CanvasPattern} fillStyle - Fill-style - * @private - */ - _fillOuterRect: function _fillOuterRect(ctx, fillStyle) { - var coordinates = this._getCoordinates(ctx), - x = coordinates.x, - y = coordinates.y; - - ctx.save(); - ctx.fillStyle = fillStyle; - ctx.beginPath(); - - // Outer rectangle - // Numbers are +/-1 so that overlay edges don't get blurry. - ctx.moveTo(x[0] - 1, y[0] - 1); - ctx.lineTo(x[3] + 1, y[0] - 1); - ctx.lineTo(x[3] + 1, y[3] + 1); - ctx.lineTo(x[0] - 1, y[3] - 1); - ctx.lineTo(x[0] - 1, y[0] - 1); - ctx.closePath(); - - // Inner rectangle - ctx.moveTo(x[1], y[1]); - ctx.lineTo(x[1], y[2]); - ctx.lineTo(x[2], y[2]); - ctx.lineTo(x[2], y[1]); - ctx.lineTo(x[1], y[1]); - ctx.closePath(); - - ctx.fill(); - ctx.restore(); - }, - - - /** - * Get coordinates - * @param {CanvasRenderingContext2D} ctx - Context - * @returns {cropzoneCoordinates} - {@link cropzoneCoordinates} - * @private - */ - _getCoordinates: function _getCoordinates(ctx) { - var ceil = Math.ceil, - width = this.getWidth(), - height = this.getHeight(), - halfWidth = width / 2, - halfHeight = height / 2, - left = this.getLeft(), - top = this.getTop(), - canvasEl = ctx.canvas; // canvas element, not fabric object - - return { - x: tui.util.map([-(halfWidth + left), // x0 - -halfWidth, // x1 - halfWidth, // x2 - halfWidth + (canvasEl.width - left - width) // x3 - ], ceil), - y: tui.util.map([-(halfHeight + top), // y0 - -halfHeight, // y1 - halfHeight, // y2 - halfHeight + (canvasEl.height - top - height) // y3 - ], ceil) - }; - }, - - - /** - * Stroke border - * @param {CanvasRenderingContext2D} ctx - Context - * @param {string|CanvasGradient|CanvasPattern} strokeStyle - Stroke-style - * @param {number} lineDashWidth - Dash width - * @param {number} [lineDashOffset] - Dash offset - * @private - */ - _strokeBorder: function _strokeBorder(ctx, strokeStyle, lineDashWidth, lineDashOffset) { - var halfWidth = this.getWidth() / 2, - halfHeight = this.getHeight() / 2; - - ctx.save(); - ctx.strokeStyle = strokeStyle; - if (ctx.setLineDash) { - ctx.setLineDash([lineDashWidth, lineDashWidth]); - } - if (lineDashOffset) { - ctx.lineDashOffset = lineDashOffset; - } - - ctx.beginPath(); - ctx.moveTo(-halfWidth, -halfHeight); - ctx.lineTo(halfWidth, -halfHeight); - ctx.lineTo(halfWidth, halfHeight); - ctx.lineTo(-halfWidth, halfHeight); - ctx.lineTo(-halfWidth, -halfHeight); - ctx.stroke(); - - ctx.restore(); - }, - - - /** - * onMoving event listener - * @private - */ - _onMoving: function _onMoving() { - var canvas = this.canvas, - left = this.getLeft(), - top = this.getTop(), - width = this.getWidth(), - height = this.getHeight(), - maxLeft = canvas.getWidth() - width, - maxTop = canvas.getHeight() - height; - - this.setLeft(clamp(left, 0, maxLeft)); - this.setTop(clamp(top, 0, maxTop)); - }, - - - /** - * onScaling event listener - * @param {{e: MouseEvent}} fEvent - Fabric event - * @private - */ - _onScaling: function _onScaling(fEvent) { - var pointer = this.canvas.getPointer(fEvent.e), - settings = this._calcScalingSizeFromPointer(pointer); - - // On scaling cropzone, - // change real width and height and fix scaleFactor to 1 - this.scale(1).set(settings); - }, - - - /** - * Calc scaled size from mouse pointer with selected corner - * @param {{x: number, y: number}} pointer - Mouse position - * @returns {Object} Having left or(and) top or(and) width or(and) height. - * @private - */ - _calcScalingSizeFromPointer: function _calcScalingSizeFromPointer(pointer) { - var pointerX = pointer.x, - pointerY = pointer.y, - tlScalingSize = this._calcTopLeftScalingSizeFromPointer(pointerX, pointerY), - brScalingSize = this._calcBottomRightScalingSizeFromPointer(pointerX, pointerY); - - /* - * @todo: 일반 객체에서 shift 조합키를 누르면 free size scaling이 됨 --> 확인해볼것 - * canvas.class.js // _scaleObject: function(...){...} - */ - return this._makeScalingSettings(tlScalingSize, brScalingSize); - }, - - - /** - * Calc scaling size(position + dimension) from left-top corner - * @param {number} x - Mouse position X - * @param {number} y - Mouse position Y - * @returns {{top: number, left: number, width: number, height: number}} - * @private - */ - _calcTopLeftScalingSizeFromPointer: function _calcTopLeftScalingSizeFromPointer(x, y) { - var bottom = this.getHeight() + this.top, - right = this.getWidth() + this.left, - top = clamp(y, 0, bottom - 1), - // 0 <= top <= (bottom - 1) - left = clamp(x, 0, right - 1); // 0 <= left <= (right - 1) - - // When scaling "Top-Left corner": It fixes right and bottom coordinates - return { - top: top, - left: left, - width: right - left, - height: bottom - top - }; - }, - - - /** - * Calc scaling size from right-bottom corner - * @param {number} x - Mouse position X - * @param {number} y - Mouse position Y - * @returns {{width: number, height: number}} - * @private - */ - _calcBottomRightScalingSizeFromPointer: function _calcBottomRightScalingSizeFromPointer(x, y) { - var canvas = this.canvas, - maxX = canvas.width, - maxY = canvas.height, - left = this.left, - top = this.top; - - // When scaling "Bottom-Right corner": It fixes left and top coordinates - return { - width: clamp(x, left + 1, maxX) - left, // (width = x - left), (left + 1 <= x <= maxX) - height: clamp(y, top + 1, maxY) - top // (height = y - top), (top + 1 <= y <= maxY) - }; - }, - - - /* eslint-disable complexity */ - /** - * Make scaling settings - * @param {{width: number, height: number, left: number, top: number}} tl - Top-Left setting - * @param {{width: number, height: number}} br - Bottom-Right setting - * @returns {{width: ?number, height: ?number, left: ?number, top: ?number}} Position setting - * @private - */ - _makeScalingSettings: function _makeScalingSettings(tl, br) { - var tlWidth = tl.width; - var tlHeight = tl.height; - var brHeight = br.height; - var brWidth = br.width; - var tlLeft = tl.left; - var tlTop = tl.top; - var settings = void 0; - - switch (this.__corner) { - case CORNER_TYPE_TOP_LEFT: - settings = tl; - break; - case CORNER_TYPE_TOP_RIGHT: - settings = { - width: brWidth, - height: tlHeight, - top: tlTop - }; - break; - case CORNER_TYPE_BOTTOM_LEFT: - settings = { - width: tlWidth, - height: brHeight, - left: tlLeft - }; - break; - case CORNER_TYPE_BOTTOM_RIGHT: - settings = br; - break; - case CORNER_TYPE_MIDDLE_LEFT: - settings = { - width: tlWidth, - left: tlLeft - }; - break; - case CORNER_TYPE_MIDDLE_TOP: - settings = { - height: tlHeight, - top: tlTop - }; - break; - case CORNER_TYPE_MIDDLE_RIGHT: - settings = { - width: brWidth - }; - break; - case CORNER_TYPE_MIDDLE_BOTTOM: - settings = { - height: brHeight - }; - break; - default: - break; - } - - return settings; - }, - /* eslint-enable complexity */ - - /** - * Return the whether this cropzone is valid - * @returns {boolean} - */ - isValid: function isValid() { - return this.left >= 0 && this.top >= 0 && this.width > 0 && this.height > 0; - } - }); - - module.exports = Cropzone; - -/***/ }), -/* 77 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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 _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _component = __webpack_require__(74); - - var _component2 = _interopRequireDefault(_component); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** - * @author NHN Ent. FE Development Team - * @fileoverview Image flip module - */ - - - var componentNames = _consts2.default.componentNames, - rejectMessages = _consts2.default.rejectMessages; - - /** - * Flip - * @class Flip - * @param {Graphics} graphics - Graphics instance - * @extends {Component} - * @ignore - */ - - var Flip = function (_Component) { - _inherits(Flip, _Component); - - function Flip(graphics) { - _classCallCheck(this, Flip); - - return _possibleConstructorReturn(this, (Flip.__proto__ || Object.getPrototypeOf(Flip)).call(this, componentNames.FLIP, graphics)); - } - - /** - * Get current flip settings - * @returns {{flipX: Boolean, flipY: Boolean}} - */ - - - _createClass(Flip, [{ - key: 'getCurrentSetting', - value: function getCurrentSetting() { - var canvasImage = this.getCanvasImage(); - - return { - flipX: canvasImage.flipX, - flipY: canvasImage.flipY - }; - } - - /** - * Set flipX, flipY - * @param {{flipX: Boolean, flipY: Boolean}} newSetting - Flip setting - * @returns {jQuery.Deferred} - */ - - }, { - key: 'set', - value: function set(newSetting) { - var setting = this.getCurrentSetting(); - var isChangingFlipX = setting.flipX !== newSetting.flipX; - var isChangingFlipY = setting.flipY !== newSetting.flipY; - - if (!isChangingFlipX && !isChangingFlipY) { - return _promise2.default.reject(rejectMessages.flip); - } - - tui.util.extend(setting, newSetting); - this.setImageProperties(setting, true); - this._invertAngle(isChangingFlipX, isChangingFlipY); - this._flipObjects(isChangingFlipX, isChangingFlipY); - - return _promise2.default.resolve({ - flipX: setting.flipX, - flipY: setting.flipY, - angle: this.getCanvasImage().angle - }); - } - - /** - * Invert image angle for flip - * @param {boolean} isChangingFlipX - Change flipX - * @param {boolean} isChangingFlipY - Change flipY - */ - - }, { - key: '_invertAngle', - value: function _invertAngle(isChangingFlipX, isChangingFlipY) { - var canvasImage = this.getCanvasImage(); - var angle = canvasImage.angle; - - if (isChangingFlipX) { - angle *= -1; - } - if (isChangingFlipY) { - angle *= -1; - } - canvasImage.setAngle(parseFloat(angle)).setCoords(); // parseFloat for -0 to 0 - } - - /** - * Flip objects - * @param {boolean} isChangingFlipX - Change flipX - * @param {boolean} isChangingFlipY - Change flipY - * @private - */ - - }, { - key: '_flipObjects', - value: function _flipObjects(isChangingFlipX, isChangingFlipY) { - var canvas = this.getCanvas(); - - if (isChangingFlipX) { - canvas.forEachObject(function (obj) { - obj.set({ - angle: parseFloat(obj.angle * -1), // parseFloat for -0 to 0 - flipX: !obj.flipX, - left: canvas.width - obj.left - }).setCoords(); - }); - } - if (isChangingFlipY) { - canvas.forEachObject(function (obj) { - obj.set({ - angle: parseFloat(obj.angle * -1), // parseFloat for -0 to 0 - flipY: !obj.flipY, - top: canvas.height - obj.top - }).setCoords(); - }); - } - canvas.renderAll(); - } - - /** - * Reset flip settings - * @returns {jQuery.Deferred} - */ - - }, { - key: 'reset', - value: function reset() { - return this.set({ - flipX: false, - flipY: false - }); - } - - /** - * Flip x - * @returns {jQuery.Deferred} - */ - - }, { - key: 'flipX', - value: function flipX() { - var current = this.getCurrentSetting(); - - return this.set({ - flipX: !current.flipX, - flipY: current.flipY - }); - } - - /** - * Flip y - * @returns {jQuery.Deferred} - */ - - }, { - key: 'flipY', - value: function flipY() { - var current = this.getCurrentSetting(); - - return this.set({ - flipX: current.flipX, - flipY: !current.flipY - }); - } - }]); - - return Flip; - }(_component2.default); - - module.exports = Flip; - -/***/ }), -/* 78 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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 _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _component = __webpack_require__(74); - - var _component2 = _interopRequireDefault(_component); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** - * @author NHN Ent. FE Development Team - * @fileoverview Image rotation module - */ - - - var componentNames = _consts2.default.componentNames; - - /** - * Image Rotation component - * @class Rotation - * @extends {Component} - * @param {Graphics} graphics - Graphics instance - * @ignore - */ - - var Rotation = function (_Component) { - _inherits(Rotation, _Component); - - function Rotation(graphics) { - _classCallCheck(this, Rotation); - - return _possibleConstructorReturn(this, (Rotation.__proto__ || Object.getPrototypeOf(Rotation)).call(this, componentNames.ROTATION, graphics)); - } - - /** - * Get current angle - * @returns {Number} - */ - - - _createClass(Rotation, [{ - key: 'getCurrentAngle', - value: function getCurrentAngle() { - return this.getCanvasImage().angle; - } - - /** - * Set angle of the image - * - * Do not call "this.setImageProperties" for setting angle directly. - * Before setting angle, The originX,Y of image should be set to center. - * See "http://fabricjs.com/docs/fabric.Object.html#setAngle" - * - * @param {number} angle - Angle value - * @returns {jQuery.Deferred} - */ - - }, { - key: 'setAngle', - value: function setAngle(angle) { - var oldAngle = this.getCurrentAngle() % 360; // The angle is lower than 2*PI(===360 degrees) - - angle %= 360; - - var canvasImage = this.getCanvasImage(); - var oldImageCenter = canvasImage.getCenterPoint(); - canvasImage.setAngle(angle).setCoords(); - this.adjustCanvasDimension(); - var newImageCenter = canvasImage.getCenterPoint(); - this._rotateForEachObject(oldImageCenter, newImageCenter, angle - oldAngle); - - return _promise2.default.resolve(angle); - } - - /** - * Rotate for each object - * @param {fabric.Point} oldImageCenter - Image center point before rotation - * @param {fabric.Point} newImageCenter - Image center point after rotation - * @param {number} angleDiff - Image angle difference after rotation - * @private - */ - - }, { - key: '_rotateForEachObject', - value: function _rotateForEachObject(oldImageCenter, newImageCenter, angleDiff) { - var canvas = this.getCanvas(); - var centerDiff = { - x: oldImageCenter.x - newImageCenter.x, - y: oldImageCenter.y - newImageCenter.y - }; - - canvas.forEachObject(function (obj) { - var objCenter = obj.getCenterPoint(); - var radian = fabric.util.degreesToRadians(angleDiff); - var newObjCenter = fabric.util.rotatePoint(objCenter, oldImageCenter, radian); - - obj.set({ - left: newObjCenter.x - centerDiff.x, - top: newObjCenter.y - centerDiff.y, - angle: (obj.angle + angleDiff) % 360 - }); - obj.setCoords(); - }); - canvas.renderAll(); - } - - /** - * Rotate the image - * @param {number} additionalAngle - Additional angle - * @returns {jQuery.Deferred} - */ - - }, { - key: 'rotate', - value: function rotate(additionalAngle) { - var current = this.getCurrentAngle(); - - return this.setAngle(current + additionalAngle); - } - }]); - - return Rotation; - }(_component2.default); - - module.exports = Rotation; - -/***/ }), -/* 79 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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 _component = __webpack_require__(74); - - var _component2 = _interopRequireDefault(_component); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** - * @author NHN Ent. FE Development Team - * @fileoverview Free drawing module, Set brush - */ - - - /** - * FreeDrawing - * @class FreeDrawing - * @param {Graphics} graphics - Graphics instance - * @extends {Component} - * @ignore - */ - var FreeDrawing = function (_Component) { - _inherits(FreeDrawing, _Component); - - function FreeDrawing(graphics) { - _classCallCheck(this, FreeDrawing); - - /** - * Brush width - * @type {number} - */ - var _this = _possibleConstructorReturn(this, (FreeDrawing.__proto__ || Object.getPrototypeOf(FreeDrawing)).call(this, _consts2.default.componentNames.FREE_DRAWING, graphics)); - - _this.width = 12; - - /** - * fabric.Color instance for brush color - * @type {fabric.Color} - */ - _this.oColor = new fabric.Color('rgba(0, 0, 0, 0.5)'); - return _this; - } - - /** - * Start free drawing mode - * @param {{width: ?number, color: ?string}} [setting] - Brush width & color - */ - - - _createClass(FreeDrawing, [{ - key: 'start', - value: function start(setting) { - var canvas = this.getCanvas(); - - canvas.isDrawingMode = true; - this.setBrush(setting); - } - - /** - * Set brush - * @param {{width: ?number, color: ?string}} [setting] - Brush width & color - */ - - }, { - key: 'setBrush', - value: function setBrush(setting) { - var brush = this.getCanvas().freeDrawingBrush; - - setting = setting || {}; - this.width = setting.width || this.width; - if (setting.color) { - this.oColor = new fabric.Color(setting.color); - } - brush.width = this.width; - brush.color = this.oColor.toRgba(); - } - - /** - * End free drawing mode - */ - - }, { - key: 'end', - value: function end() { - var canvas = this.getCanvas(); - - canvas.isDrawingMode = false; - } - }]); - - return FreeDrawing; - }(_component2.default); - - module.exports = FreeDrawing; - -/***/ }), -/* 80 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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 _component = __webpack_require__(74); - - var _component2 = _interopRequireDefault(_component); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** - * @author NHN Ent. FE Development Team - * @fileoverview Free drawing module, Set brush - */ - - - var eventNames = _consts2.default.eventNames; - - /** - * Line - * @class Line - * @param {Graphics} graphics - Graphics instance - * @extends {Component} - * @ignore - */ - - var Line = function (_Component) { - _inherits(Line, _Component); - - function Line(graphics) { - _classCallCheck(this, Line); - - /** - * Brush width - * @type {number} - * @private - */ - var _this = _possibleConstructorReturn(this, (Line.__proto__ || Object.getPrototypeOf(Line)).call(this, _consts2.default.componentNames.LINE, graphics)); - - _this._width = 12; - - /** - * fabric.Color instance for brush color - * @type {fabric.Color} - * @private - */ - _this._oColor = new fabric.Color('rgba(0, 0, 0, 0.5)'); - - /** - * Listeners - * @type {object.} - * @private - */ - _this._listeners = { - mousedown: _this._onFabricMouseDown.bind(_this), - mousemove: _this._onFabricMouseMove.bind(_this), - mouseup: _this._onFabricMouseUp.bind(_this) - }; - return _this; - } - - /** - * Start drawing line mode - * @param {{width: ?number, color: ?string}} [setting] - Brush width & color - */ - - - _createClass(Line, [{ - key: 'start', - value: function start(setting) { - var canvas = this.getCanvas(); - - canvas.defaultCursor = 'crosshair'; - canvas.selection = false; - - this.setBrush(setting); - - canvas.forEachObject(function (obj) { - obj.set({ - evented: false - }); - }); - - canvas.on({ - 'mouse:down': this._listeners.mousedown - }); - } - - /** - * Set brush - * @param {{width: ?number, color: ?string}} [setting] - Brush width & color - */ - - }, { - key: 'setBrush', - value: function setBrush(setting) { - var brush = this.getCanvas().freeDrawingBrush; - - setting = setting || {}; - this._width = setting.width || this._width; - - if (setting.color) { - this._oColor = new fabric.Color(setting.color); - } - brush.width = this._width; - brush.color = this._oColor.toRgba(); - } - - /** - * End drawing line mode - */ - - }, { - key: 'end', - value: function end() { - var canvas = this.getCanvas(); - - canvas.defaultCursor = 'default'; - canvas.selection = true; - - canvas.forEachObject(function (obj) { - obj.set({ - evented: true - }); - }); - - canvas.off('mouse:down', this._listeners.mousedown); - } - - /** - * Mousedown event handler in fabric canvas - * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event object - * @private - */ - - }, { - key: '_onFabricMouseDown', - value: function _onFabricMouseDown(fEvent) { - var canvas = this.getCanvas(); - var pointer = canvas.getPointer(fEvent.e); - var points = [pointer.x, pointer.y, pointer.x, pointer.y]; - - this._line = new fabric.Line(points, { - stroke: this._oColor.toRgba(), - strokeWidth: this._width, - evented: false - }); - - this._line.set(_consts2.default.fObjectOptions.SELECTION_STYLE); - - canvas.add(this._line); - - canvas.on({ - 'mouse:move': this._listeners.mousemove, - 'mouse:up': this._listeners.mouseup - }); - } - - /** - * Mousemove event handler in fabric canvas - * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event object - * @private - */ - - }, { - key: '_onFabricMouseMove', - value: function _onFabricMouseMove(fEvent) { - var canvas = this.getCanvas(); - var pointer = canvas.getPointer(fEvent.e); - - this._line.set({ - x2: pointer.x, - y2: pointer.y - }); - - this._line.setCoords(); - - canvas.renderAll(); - } - - /** - * Mouseup event handler in fabric canvas - * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event object - * @private - */ - - }, { - key: '_onFabricMouseUp', - value: function _onFabricMouseUp() { - var canvas = this.getCanvas(); - var params = this.graphics.createObjectProperties(this._line); - - this.fire(eventNames.ADD_OBJECT, params); - - this._line = null; - - canvas.off({ - 'mouse:move': this._listeners.mousemove, - 'mouse:up': this._listeners.mouseup - }); - } - }]); - - return Line; - }(_component2.default); - - module.exports = Line; - -/***/ }), -/* 81 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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 _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _component = __webpack_require__(74); - - var _component2 = _interopRequireDefault(_component); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - var _util = __webpack_require__(70); - - var _util2 = _interopRequireDefault(_util); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** - * @author NHN Ent. FE Development Team - * @fileoverview Text module - */ - - - var events = _consts2.default.eventNames; - - var defaultStyles = { - fill: '#000000', - left: 0, - top: 0 - }; - var resetStyles = { - fill: '#000000', - fontStyle: 'normal', - fontWeight: 'normal', - textAlign: 'left', - textDecoraiton: '' - }; - var browser = tui.util.browser; - - var TEXTAREA_CLASSNAME = 'tui-image-eidtor-textarea'; - var TEXTAREA_STYLES = _util2.default.makeStyleText({ - position: 'absolute', - padding: 0, - display: 'none', - border: '1px dotted red', - overflow: 'hidden', - resize: 'none', - outline: 'none', - 'border-radius': 0, - 'background-color': 'transparent', - '-webkit-appearance': 'none', - 'z-index': 9999, - 'white-space': 'pre' - }); - var EXTRA_PIXEL_LINEHEIGHT = 0.1; - var DBCLICK_TIME = 500; - - /** - * Text - * @class Text - * @param {Graphics} graphics - Graphics instance - * @extends {Component} - * @ignore - */ - - var Text = function (_Component) { - _inherits(Text, _Component); - - function Text(graphics) { - _classCallCheck(this, Text); - - /** - * Default text style - * @type {Object} - */ - var _this = _possibleConstructorReturn(this, (Text.__proto__ || Object.getPrototypeOf(Text)).call(this, _consts2.default.componentNames.TEXT, graphics)); - - _this._defaultStyles = defaultStyles; - - /** - * Selected state - * @type {boolean} - */ - _this._isSelected = false; - - /** - * Selected text object - * @type {Object} - */ - _this._selectedObj = {}; - - /** - * Editing text object - * @type {Object} - */ - _this._editingObj = {}; - - /** - * Listeners for fabric event - * @type {Object} - */ - _this._listeners = { - mousedown: _this._onFabricMouseDown.bind(_this), - select: _this._onFabricSelect.bind(_this), - selectClear: _this._onFabricSelectClear.bind(_this), - scaling: _this._onFabricScaling.bind(_this) - }; - - /** - * Textarea element for editing - * @type {HTMLElement} - */ - _this._textarea = null; - - /** - * Ratio of current canvas - * @type {number} - */ - _this._ratio = 1; - - /** - * Last click time - * @type {Date} - */ - _this._lastClickTime = new Date().getTime(); - - /** - * Text object infos before editing - * @type {Object} - */ - _this._editingObjInfos = {}; - - /** - * Previous state of editing - * @type {boolean} - */ - _this.isPrevEditing = false; - return _this; - } - - /** - * Start input text mode - */ - - - _createClass(Text, [{ - key: 'start', - value: function start() { - var canvas = this.getCanvas(); - - canvas.selection = false; - canvas.defaultCursor = 'text'; - canvas.on({ - 'mouse:down': this._listeners.mousedown, - 'object:selected': this._listeners.select, - 'before:selection:cleared': this._listeners.selectClear, - 'object:scaling': this._listeners.scaling - }); - - this._createTextarea(); - - this.setCanvasRatio(); - } - - /** - * End input text mode - */ - - }, { - key: 'end', - value: function end() { - var canvas = this.getCanvas(); - - canvas.selection = true; - canvas.defaultCursor = 'default'; - canvas.deactivateAllWithDispatch(); // action for undo stack - canvas.off({ - 'mouse:down': this._listeners.mousedown, - 'object:selected': this._listeners.select, - 'before:selection:cleared': this._listeners.selectClear, - 'object:scaling': this._listeners.scaling - }); - - this._removeTextarea(); - } - - /** - * Add new text on canvas image - * @param {string} text - Initial input text - * @param {Object} options - Options for generating text - * @param {Object} [options.styles] Initial styles - * @param {string} [options.styles.fill] Color - * @param {string} [options.styles.fontFamily] Font type for text - * @param {number} [options.styles.fontSize] Size - * @param {string} [options.styles.fontStyle] Type of inclination (normal / italic) - * @param {string} [options.styles.fontWeight] Type of thicker or thinner looking (normal / bold) - * @param {string} [options.styles.textAlign] Type of text align (left / center / right) - * @param {string} [options.styles.textDecoraiton] Type of line (underline / line-throgh / overline) - * @param {{x: number, y: number}} [options.position] - Initial position - * @returns {Promise} - */ - - }, { - key: 'add', - value: function add(text, options) { - var _this2 = this; - - return new _promise2.default(function (resolve) { - var canvas = _this2.getCanvas(); - var styles = _this2._defaultStyles; - - _this2._setInitPos(options.position); - - if (options.styles) { - styles = tui.util.extend(options.styles, styles); - } - - var newText = new fabric.Text(text, styles); - newText.set(_consts2.default.fObjectOptions.SELECTION_STYLE); - newText.on({ - mouseup: _this2._onFabricMouseUp.bind(_this2) - }); - - canvas.add(newText); - - if (!canvas.getActiveObject()) { - canvas.setActiveObject(newText); - } - - _this2.isPrevEditing = true; - resolve(_this2.graphics.createObjectProperties(newText)); - }); - } - - /** - * Change text of activate object on canvas image - * @param {Object} activeObj - Current selected text object - * @param {string} text - Changed text - * @returns {Promise} - */ - - }, { - key: 'change', - value: function change(activeObj, text) { - var _this3 = this; - - return new _promise2.default(function (resolve) { - activeObj.set('text', text); - - _this3.getCanvas().renderAll(); - resolve(); - }); - } - - /** - * Set style - * @param {Object} activeObj - Current selected text object - * @param {Object} styleObj - Initial styles - * @param {string} [styleObj.fill] Color - * @param {string} [styleObj.fontFamily] Font type for text - * @param {number} [styleObj.fontSize] Size - * @param {string} [styleObj.fontStyle] Type of inclination (normal / italic) - * @param {string} [styleObj.fontWeight] Type of thicker or thinner looking (normal / bold) - * @param {string} [styleObj.textAlign] Type of text align (left / center / right) - * @param {string} [styleObj.textDecoraiton] Type of line (underline / line-throgh / overline) - * @returns {Promise} - */ - - }, { - key: 'setStyle', - value: function setStyle(activeObj, styleObj) { - var _this4 = this; - - return new _promise2.default(function (resolve) { - tui.util.forEach(styleObj, function (val, key) { - if (activeObj[key] === val) { - styleObj[key] = resetStyles[key] || ''; - } - }, _this4); - - activeObj.set(styleObj); - - _this4.getCanvas().renderAll(); - resolve(); - }); - } - - /** - * Get the text - * @param {Object} activeObj - Current selected text object - * @returns {String} text - */ - - }, { - key: 'getText', - value: function getText(activeObj) { - return activeObj.getText(); - } - - /** - * Set infos of the current selected object - * @param {fabric.Text} obj - Current selected text object - * @param {boolean} state - State of selecting - */ - - }, { - key: 'setSelectedInfo', - value: function setSelectedInfo(obj, state) { - this._selectedObj = obj; - this._isSelected = state; - } - - /** - * Whether object is selected or not - * @returns {boolean} State of selecting - */ - - }, { - key: 'isSelected', - value: function isSelected() { - return this._isSelected; - } - - /** - * Get current selected text object - * @returns {fabric.Text} Current selected text object - */ - - }, { - key: 'getSelectedObj', - value: function getSelectedObj() { - return this._selectedObj; - } - - /** - * Set ratio value of canvas - */ - - }, { - key: 'setCanvasRatio', - value: function setCanvasRatio() { - var canvasElement = this.getCanvasElement(); - var cssWidth = parseInt(canvasElement.style.maxWidth, 10); - var originWidth = canvasElement.width; - var ratio = originWidth / cssWidth; - - this._ratio = ratio; - } - - /** - * Get ratio value of canvas - * @returns {number} Ratio value - */ - - }, { - key: 'getCanvasRatio', - value: function getCanvasRatio() { - return this._ratio; - } - - /** - * Set initial position on canvas image - * @param {{x: number, y: number}} [position] - Selected position - * @private - */ - - }, { - key: '_setInitPos', - value: function _setInitPos(position) { - position = position || this.getCanvasImage().getCenterPoint(); - - this._defaultStyles.left = position.x; - this._defaultStyles.top = position.y; - } - - /** - * Create textarea element on canvas container - * @private - */ - - }, { - key: '_createTextarea', - value: function _createTextarea() { - var container = this.getCanvasElement().parentNode; - var textarea = document.createElement('textarea'); - - textarea.className = TEXTAREA_CLASSNAME; - textarea.setAttribute('style', TEXTAREA_STYLES); - textarea.setAttribute('wrap', 'off'); - - container.appendChild(textarea); - - this._textarea = textarea; - - this._listeners = tui.util.extend(this._listeners, { - input: this._onInput.bind(this), - keydown: this._onKeyDown.bind(this), - blur: this._onBlur.bind(this), - scroll: this._onScroll.bind(this) - }); - - if (browser.msie && browser.version === 9) { - fabric.util.addListener(textarea, 'keydown', this._listeners.keydown); - } else { - fabric.util.addListener(textarea, 'input', this._listeners.input); - } - fabric.util.addListener(textarea, 'blur', this._listeners.blur); - fabric.util.addListener(textarea, 'scroll', this._listeners.scroll); - } - - /** - * Remove textarea element on canvas container - * @private - */ - - }, { - key: '_removeTextarea', - value: function _removeTextarea() { - var container = this.getCanvasElement().parentNode; - var textarea = container.querySelector('textarea'); - - container.removeChild(textarea); - - this._textarea = null; - - if (browser.msie && browser.version < 10) { - fabric.util.removeListener(textarea, 'keydown', this._listeners.keydown); - } else { - fabric.util.removeListener(textarea, 'input', this._listeners.input); - } - fabric.util.removeListener(textarea, 'blur', this._listeners.blur); - fabric.util.removeListener(textarea, 'scroll', this._listeners.scroll); - } - - /** - * Input event handler - * @private - */ - - }, { - key: '_onInput', - value: function _onInput() { - var ratio = this.getCanvasRatio(); - var obj = this._editingObj; - var textareaStyle = this._textarea.style; - - textareaStyle.width = Math.ceil(obj.getWidth() / ratio) + 'px'; - textareaStyle.height = Math.ceil(obj.getHeight() / ratio) + 'px'; - } - - /** - * Keydown event handler - * @private - */ - - }, { - key: '_onKeyDown', - value: function _onKeyDown() { - var _this5 = this; - - var ratio = this.getCanvasRatio(); - var obj = this._editingObj; - var textareaStyle = this._textarea.style; - - setTimeout(function () { - obj.setText(_this5._textarea.value); - - textareaStyle.width = Math.ceil(obj.getWidth() / ratio) + 'px'; - textareaStyle.height = Math.ceil(obj.getHeight() / ratio) + 'px'; - }, 0); - } - - /** - * Blur event handler - * @private - */ - - }, { - key: '_onBlur', - value: function _onBlur() { - var ratio = this.getCanvasRatio(); - var editingObj = this._editingObj; - var editingObjInfos = this._editingObjInfos; - var textContent = this._textarea.value; - var transWidth = editingObj.getWidth() / ratio - editingObjInfos.width / ratio; - var transHeight = editingObj.getHeight() / ratio - editingObjInfos.height / ratio; - - if (ratio === 1) { - transWidth /= 2; - transHeight /= 2; - } - - this._textarea.style.display = 'none'; - - editingObj.set({ - left: editingObjInfos.left + transWidth, - top: editingObjInfos.top + transHeight - }); - - if (textContent.length) { - this.getCanvas().add(editingObj); - - var params = { - id: tui.util.stamp(editingObj), - type: editingObj.type, - text: textContent - }; - - this.fire(events.TEXT_CHANGED, params); - } - } - - /** - * Scroll event handler - * @private - */ - - }, { - key: '_onScroll', - value: function _onScroll() { - this._textarea.scrollLeft = 0; - this._textarea.scrollTop = 0; - } - - /** - * Fabric scaling event handler - * @param {fabric.Event} fEvent - Current scaling event on selected object - * @private - */ - - }, { - key: '_onFabricScaling', - value: function _onFabricScaling(fEvent) { - var obj = fEvent.target; - var scalingSize = obj.getFontSize() * obj.getScaleY(); - - obj.setFontSize(scalingSize); - obj.setScaleX(1); - obj.setScaleY(1); - } - - /** - * onSelectClear handler in fabric canvas - * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event - * @private - */ - - }, { - key: '_onFabricSelectClear', - value: function _onFabricSelectClear(fEvent) { - var obj = this.getSelectedObj(); - - this.isPrevEditing = true; - - this.setSelectedInfo(fEvent.target, false); - - if (obj) { - // obj is empty object at initial time, will be set fabric object - if (obj.text === '') { - obj.remove(); - } - } - } - - /** - * onSelect handler in fabric canvas - * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event - * @private - */ - - }, { - key: '_onFabricSelect', - value: function _onFabricSelect(fEvent) { - this.isPrevEditing = true; - - this.setSelectedInfo(fEvent.target, true); - } - - /** - * Fabric 'mousedown' event handler - * @param {fabric.Event} fEvent - Current mousedown event on selected object - * @private - */ - - }, { - key: '_onFabricMouseDown', - value: function _onFabricMouseDown(fEvent) { - var obj = fEvent.target; - if (obj && !obj.isType('text')) { - return; - } - - if (this.isPrevEditing) { - this.isPrevEditing = false; - - return; - } - - this._fireAddText(fEvent); - } - - /** - * Fire 'addText' event if object is not selected. - * @param {fabric.Event} fEvent - Current mousedown event on selected object - * @private - */ - - }, { - key: '_fireAddText', - value: function _fireAddText(fEvent) { - var obj = fEvent.target; - var e = fEvent.e || {}; - var originPointer = this.getCanvas().getPointer(e); - - if (!obj) { - this.fire(events.ADD_TEXT, { - originPosition: { - x: originPointer.x, - y: originPointer.y - }, - clientPosition: { - x: e.clientX || 0, - y: e.clientY || 0 - } - }); - } - } - - /** - * Fabric mouseup event handler - * @param {fabric.Event} fEvent - Current mousedown event on selected object - * @private - */ - - }, { - key: '_onFabricMouseUp', - value: function _onFabricMouseUp(fEvent) { - var newClickTime = new Date().getTime(); - - if (this._isDoubleClick(newClickTime)) { - this._changeToEditingMode(fEvent.target); - this.fire(events.TEXT_EDITING); // fire editing text event - } - - this._lastClickTime = newClickTime; - } - - /** - * Get state of firing double click event - * @param {Date} newClickTime - Current clicked time - * @returns {boolean} Whether double clicked or not - * @private - */ - - }, { - key: '_isDoubleClick', - value: function _isDoubleClick(newClickTime) { - return newClickTime - this._lastClickTime < DBCLICK_TIME; - } - - /** - * Change state of text object for editing - * @param {fabric.Text} obj - Text object fired event - * @private - */ - - }, { - key: '_changeToEditingMode', - value: function _changeToEditingMode(obj) { - var ratio = this.getCanvasRatio(); - var textareaStyle = this._textarea.style; - - this.isPrevEditing = true; - - obj.remove(); - - this._editingObj = obj; - this._textarea.value = obj.getText(); - - this._editingObjInfos = { - left: this._editingObj.getLeft(), - top: this._editingObj.getTop(), - width: this._editingObj.getWidth(), - height: this._editingObj.getHeight() - }; - - textareaStyle.display = 'block'; - textareaStyle.left = obj.oCoords.tl.x / ratio + 'px'; - textareaStyle.top = obj.oCoords.tl.y / ratio + 'px'; - textareaStyle.width = Math.ceil(obj.getWidth() / ratio) + 'px'; - textareaStyle.height = Math.ceil(obj.getHeight() / ratio) + 'px'; - textareaStyle.transform = 'rotate(' + obj.getAngle() + 'deg)'; - textareaStyle.color = obj.getFill(); - - textareaStyle['font-size'] = obj.getFontSize() / ratio + 'px'; - textareaStyle['font-family'] = obj.getFontFamily(); - textareaStyle['font-style'] = obj.getFontStyle(); - textareaStyle['font-weight'] = obj.getFontWeight(); - textareaStyle['text-align'] = obj.getTextAlign(); - textareaStyle['line-height'] = obj.getLineHeight() + EXTRA_PIXEL_LINEHEIGHT; - textareaStyle['transform-origin'] = 'left top'; - - this._textarea.focus(); - } - }]); - - return Text; - }(_component2.default); - - module.exports = Text; - -/***/ }), -/* 82 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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 _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _component = __webpack_require__(74); - - var _component2 = _interopRequireDefault(_component); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** - * @author NHN Ent. FE Development Team - * @fileoverview Add icon module - */ - - - var rejectMessages = _consts2.default.rejectMessages; - - - var pathMap = { - arrow: 'M 0 90 H 105 V 120 L 160 60 L 105 0 V 30 H 0 Z', - cancel: 'M 0 30 L 30 60 L 0 90 L 30 120 L 60 90 L 90 120 L 120 90 ' + 'L 90 60 L 120 30 L 90 0 L 60 30 L 30 0 Z' - }; - - /** - * Icon - * @class Icon - * @param {Graphics} graphics - Graphics instance - * @extends {Component} - * @ignore - */ - - var Icon = function (_Component) { - _inherits(Icon, _Component); - - function Icon(graphics) { - _classCallCheck(this, Icon); - - /** - * Default icon color - * @type {string} - */ - var _this = _possibleConstructorReturn(this, (Icon.__proto__ || Object.getPrototypeOf(Icon)).call(this, _consts2.default.componentNames.ICON, graphics)); - - _this._oColor = '#000000'; - - /** - * Path value of each icon type - * @type {Object} - */ - _this._pathMap = pathMap; - return _this; - } - - /** - * Add icon - * @param {string} type - Icon type - * @param {Object} options - Icon options - * @param {string} [options.fill] - Icon foreground color - * @param {string} [options.left] - Icon x position - * @param {string} [options.top] - Icon y position - * @returns {Promise} - */ - - - _createClass(Icon, [{ - key: 'add', - value: function add(type, options) { - var _this2 = this; - - return new _promise2.default(function (resolve, reject) { - var canvas = _this2.getCanvas(); - var path = _this2._pathMap[type]; - var selectionStyle = _consts2.default.fObjectOptions.SELECTION_STYLE; - - if (!path) { - reject(rejectMessages.invalidParameters); - } - - var icon = _this2._createIcon(path); - - icon.set(tui.util.extend({ - type: 'icon', - fill: _this2._oColor - }, selectionStyle, options)); - - canvas.add(icon).setActiveObject(icon); - resolve(_this2.graphics.createObjectProperties(icon)); - }); - } - - /** - * Register icon paths - * @param {{key: string, value: string}} pathInfos - Path infos - */ - - }, { - key: 'registerPaths', - value: function registerPaths(pathInfos) { - var _this3 = this; - - tui.util.forEach(pathInfos, function (path, type) { - _this3._pathMap[type] = path; - }, this); - } - - /** - * Set icon object color - * @param {string} color - Color to set - * @param {fabric.Path}[obj] - Current activated path object - */ - - }, { - key: 'setColor', - value: function setColor(color, obj) { - this._oColor = color; - - if (obj && obj.get('type') === 'icon') { - obj.setFill(this._oColor); - this.getCanvas().renderAll(); - } - } - - /** - * Get icon color - * @param {fabric.Path}[obj] - Current activated path object - * @returns {string} color - */ - - }, { - key: 'getColor', - value: function getColor(obj) { - return obj.fill; - } - - /** - * Create icon object - * @param {string} path - Path value to create icon - * @returns {fabric.Path} Path object - */ - - }, { - key: '_createIcon', - value: function _createIcon(path) { - return new fabric.Path(path); - } - }]); - - return Icon; - }(_component2.default); - - module.exports = Icon; - -/***/ }), -/* 83 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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 _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _component = __webpack_require__(74); - - var _component2 = _interopRequireDefault(_component); - - var _mask = __webpack_require__(84); - - var _mask2 = _interopRequireDefault(_mask); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - var _blur = __webpack_require__(85); - - var _blur2 = _interopRequireDefault(_blur); - - var _sharpen = __webpack_require__(86); - - var _sharpen2 = _interopRequireDefault(_sharpen); - - var _emboss = __webpack_require__(87); - - var _emboss2 = _interopRequireDefault(_emboss); - - var _colorFilter = __webpack_require__(88); - - var _colorFilter2 = _interopRequireDefault(_colorFilter); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** - * @author NHN Ent. FE Development Team - * @fileoverview Add filter module - */ - - - var rejectMessages = _consts2.default.rejectMessages; - var _tui$util = tui.util, - isUndefined = _tui$util.isUndefined, - extend = _tui$util.extend, - forEach = _tui$util.forEach, - defineNamespace = _tui$util.defineNamespace; - - defineNamespace('fabric.Image.filters.Mask', _mask2.default, true); - defineNamespace('fabric.Image.filters.Blur', _blur2.default, true); - defineNamespace('fabric.Image.filters.Sharpen', _sharpen2.default, true); - defineNamespace('fabric.Image.filters.Emboss', _emboss2.default, true); - defineNamespace('fabric.Image.filters.ColorFilter', _colorFilter2.default, true); - - /** - * Filter - * @class Filter - * @param {Graphics} graphics - Graphics instance - * @extends {Component} - * @ignore - */ - - var Filter = function (_Component) { - _inherits(Filter, _Component); - - function Filter(graphics) { - _classCallCheck(this, Filter); - - return _possibleConstructorReturn(this, (Filter.__proto__ || Object.getPrototypeOf(Filter)).call(this, _consts2.default.componentNames.FILTER, graphics)); - } - - /** - * Add filter to source image (a specific filter is added on fabric.js) - * @param {string} type - Filter type - * @param {Object} [options] - Options of filter - * @returns {Promise} - */ - - - _createClass(Filter, [{ - key: 'add', - value: function add(type, options) { - var _this2 = this; - - return new _promise2.default(function (resolve, reject) { - var sourceImg = _this2._getSourceImage(); - var canvas = _this2.getCanvas(); - var filter = _this2._getFilter(sourceImg, type); - if (!filter) { - filter = _this2._createFilter(sourceImg, type, options); - } - - if (!filter) { - reject(rejectMessages.invalidParameters); - } - - _this2._changeFilterValues(filter, options); - - _this2._apply(sourceImg, function () { - canvas.renderAll(); - resolve({ - type: type, - action: 'add' - }); - }); - }); - } - - /** - * Remove filter to source image - * @param {string} type - Filter type - * @returns {Promise} - */ - - }, { - key: 'remove', - value: function remove(type) { - var _this3 = this; - - return new _promise2.default(function (resolve, reject) { - var sourceImg = _this3._getSourceImage(); - var canvas = _this3.getCanvas(); - - if (!sourceImg.filters.length) { - reject(rejectMessages.unsupportedOperation); - } - - _this3._removeFilter(sourceImg, type); - - _this3._apply(sourceImg, function () { - canvas.renderAll(); - resolve({ - type: type, - action: 'remove' - }); - }); - }); - } - - /** - * Whether this has the filter or not - * @param {string} type - Filter type - * @returns {boolean} true if it has the filter - */ - - }, { - key: 'hasFilter', - value: function hasFilter(type) { - return !!this._getFilter(this._getSourceImage(), type); - } - - /** - * Get a filter options - * @param {string} type - Filter type - * @returns {Object} filter options or null if there is no that filter - */ - - }, { - key: 'getOptions', - value: function getOptions(type) { - var sourceImg = this._getSourceImage(); - var filter = this._getFilter(sourceImg, type); - if (!filter) { - return null; - } - - return extend({}, filter.options); - } - - /** - * Change filter values - * @param {Object} filter object of filter - * @param {Object} options object - * @private - */ - - }, { - key: '_changeFilterValues', - value: function _changeFilterValues(filter, options) { - forEach(options, function (value, key) { - if (!isUndefined(filter[key])) { - filter[key] = value; - } - }); - forEach(filter.options, function (value, key) { - if (!isUndefined(options[key])) { - filter.options[key] = options[key]; - } - }); - } - - /** - * Apply filter - * @param {fabric.Image} sourceImg - Source image to apply filter - * @param {function} callback - Executed function after applying filter - * @private - */ - - }, { - key: '_apply', - value: function _apply(sourceImg, callback) { - sourceImg.applyFilters(callback); - } - - /** - * Get source image on canvas - * @returns {fabric.Image} Current source image on canvas - * @private - */ - - }, { - key: '_getSourceImage', - value: function _getSourceImage() { - return this.getCanvasImage(); - } - - /** - * Create filter instance - * @param {fabric.Image} sourceImg - Source image to apply filter - * @param {string} type - Filter type - * @param {Object} [options] - Options of filter - * @returns {Object} Fabric object of filter - * @private - */ - - }, { - key: '_createFilter', - value: function _createFilter(sourceImg, type, options) { - var filterObj = void 0; - // capitalize first letter for matching with fabric image filter name - var fabricType = this._getFabricFilterType(type); - var ImageFilter = fabric.Image.filters[fabricType]; - if (ImageFilter) { - filterObj = new ImageFilter(options); - filterObj.options = options; - sourceImg.filters.push(filterObj); - } - - return filterObj; - } - - /** - * Get applied filter instance - * @param {fabric.Image} sourceImg - Source image to apply filter - * @param {string} type - Filter type - * @returns {Object} Fabric object of filter - * @private - */ - - }, { - key: '_getFilter', - value: function _getFilter(sourceImg, type) { - var filter = null, - item = void 0, - i = void 0, - length = void 0; - var fabricType = this._getFabricFilterType(type); - if (sourceImg) { - length = sourceImg.filters.length; - for (i = 0; i < length; i += 1) { - item = sourceImg.filters[i]; - if (item.type === fabricType) { - filter = item; - break; - } - } - } - - return filter; - } - - /** - * Remove applied filter instance - * @param {fabric.Image} sourceImg - Source image to apply filter - * @param {string} type - Filter type - * @private - */ - - }, { - key: '_removeFilter', - value: function _removeFilter(sourceImg, type) { - var fabricType = this._getFabricFilterType(type); - sourceImg.filters = tui.util.filter(sourceImg.filters, function (value) { - return value.type !== fabricType; - }); - } - - /** - * Change filter class name to fabric's, especially capitalizing first letter - * @param {string} type - Filter type - * @example - * 'grayscale' -> 'Grayscale' - * @returns {string} Fabric filter class name - */ - - }, { - key: '_getFabricFilterType', - value: function _getFabricFilterType(type) { - return type.charAt(0).toUpperCase() + type.slice(1); - } - }]); - - return Filter; - }(_component2.default); - - module.exports = Filter; - -/***/ }), -/* 84 */ -/***/ (function(module, exports) { - - 'use strict'; - - /** - * @author NHN Ent. FE Development Team - * @fileoverview Mask extending fabric.Image.filters.Mask - */ - /** - * Mask object - * @class Mask - * @extends {fabric.Image.filters.Mask} - * @ignore - */ - var Mask = fabric.util.createClass(fabric.Image.filters.Mask, /** @lends Mask.prototype */{ - /** - * Apply filter to canvas element - * @param {Object} canvasEl - Canvas element to apply filter - * @override - */ - applyTo: function applyTo(canvasEl) { - if (!this.mask) { - return; - } - - var width = canvasEl.width; - var height = canvasEl.height; - var maskCanvasEl = this._createCanvasOfMask(width, height); - var ctx = canvasEl.getContext('2d'); - var maskCtx = maskCanvasEl.getContext('2d'); - var imageData = ctx.getImageData(0, 0, width, height); - - this._drawMask(maskCtx, canvasEl, ctx); - this._mapData(maskCtx, imageData, width, height); - - ctx.putImageData(imageData, 0, 0); - }, - - - /** - * Create canvas of mask image - * @param {number} width - Width of main canvas - * @param {number} height - Height of main canvas - * @returns {HTMLElement} Canvas element - * @private - */ - _createCanvasOfMask: function _createCanvasOfMask(width, height) { - var maskCanvasEl = fabric.util.createCanvasElement(); - - maskCanvasEl.width = width; - maskCanvasEl.height = height; - - return maskCanvasEl; - }, - - - /** - * Draw mask image on canvas element - * @param {Object} maskCtx - Context of mask canvas - * @private - */ - _drawMask: function _drawMask(maskCtx) { - var mask = this.mask; - var maskImg = mask.getElement(); - - var left = mask.getLeft(); - var top = mask.getTop(); - var angle = mask.getAngle(); - - maskCtx.save(); - maskCtx.translate(left, top); - maskCtx.rotate(angle * Math.PI / 180); - maskCtx.scale(mask.scaleX, mask.scaleY); - maskCtx.drawImage(maskImg, -maskImg.width / 2, -maskImg.height / 2); - maskCtx.restore(); - }, - - - /** - * Map mask image data to source image data - * @param {Object} maskCtx - Context of mask canvas - * @param {Object} imageData - Data of source image - * @param {number} width - Width of main canvas - * @param {number} height - Height of main canvas - * @private - */ - _mapData: function _mapData(maskCtx, imageData, width, height) { - var sourceData = imageData.data; - var maskData = maskCtx.getImageData(0, 0, width, height).data; - var channel = this.channel; - var len = imageData.width * imageData.height * 4; - - for (var i = 0; i < len; i += 4) { - sourceData[i + 3] = maskData[i + channel]; // adjust value of alpha data - } - } - }); - - module.exports = Mask; - -/***/ }), -/* 85 */ -/***/ (function(module, exports) { - - 'use strict'; - - /** - * @author NHN Ent. FE Development Team - * @fileoverview Blur extending fabric.Image.filters.Convolute - */ - /** - * Blur object - * @class Blur - * @extends {fabric.Image.filters.Convolute} - * @ignore - */ - var Blur = fabric.util.createClass(fabric.Image.filters.Convolute, /** @lends Convolute.prototype */{ - /** - * Filter type - * @param {String} type - * @default - */ - type: 'Blur', - - /** - * constructor - * @override - */ - initialize: function initialize() { - var matrix = [1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9]; - this.matrix = matrix; - } - }); - - module.exports = Blur; - -/***/ }), -/* 86 */ -/***/ (function(module, exports) { - - 'use strict'; - - /** - * @author NHN Ent. FE Development Team - * @fileoverview Sharpen extending fabric.Image.filters.Convolute - */ - /** - * Sharpen object - * @class Sharpen - * @extends {fabric.Image.filters.Convolute} - * @ignore - */ - var Sharpen = fabric.util.createClass(fabric.Image.filters.Convolute, /** @lends Convolute.prototype */{ - /** - * Filter type - * @param {String} type - * @default - */ - type: 'Sharpen', - - /** - * constructor - * @override - */ - initialize: function initialize() { - var matrix = [0, -1, 0, -1, 5, -1, 0, -1, 0]; - this.matrix = matrix; - } - }); - - module.exports = Sharpen; - -/***/ }), -/* 87 */ -/***/ (function(module, exports) { - - 'use strict'; - - /** - * @author NHN Ent. FE Development Team - * @fileoverview Emboss extending fabric.Image.filters.Convolute - */ - /** - * Emboss object - * @class Emboss - * @extends {fabric.Image.filters.Convolute} - * @ignore - */ - var Emboss = fabric.util.createClass(fabric.Image.filters.Convolute, /** @lends Convolute.prototype */{ - /** - * Filter type - * @param {String} type - * @default - */ - type: 'Emboss', - - /** - * constructor - * @override - */ - initialize: function initialize() { - var matrix = [1, 1, 1, 1, 0.7, -1, -1, -1, -1]; - this.matrix = matrix; - } - }); - - module.exports = Emboss; - -/***/ }), -/* 88 */ -/***/ (function(module, exports) { - - 'use strict'; - - /** - * @author NHN Ent. FE Development Team - * @fileoverview ColorFilter extending fabric.Image.filters.BaseFilter - */ - /** - * ColorFilter object - * @class ColorFilter - * @extends {fabric.Image.filters.BaseFilter} - * @ignore - */ - var ColorFilter = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends BaseFilter.prototype */{ - /** - * Filter type - * @param {String} type - * @default - */ - type: 'ColorFilter', - - /** - * Constructor - * @member fabric.Image.filters.ColorFilter.prototype - * @param {Object} [options] Options object - * @param {Number} [options.color='#FFFFFF'] Value of color (0...255) - * @param {Number} [options.threshold=45] Value of threshold (0...255) - * @override - */ - initialize: function initialize(options) { - if (!options) { - options = {}; - } - this.color = options.color || '#FFFFFF'; - this.threshold = options.threshold || 45; - this.x = options.x || null; - this.y = options.y || null; - }, - - - /** - * Applies filter to canvas element - * @param {Object} canvasEl Canvas element to apply filter to - */ - applyTo: function applyTo(canvasEl) { - var context = canvasEl.getContext('2d'), - imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), - data = imageData.data, - threshold = this.threshold; - var i = void 0, - len = void 0, - filterColor = fabric.Color.sourceFromHex(this.color); - - if (this.x && this.y) { - filterColor = this._getColor(imageData, this.x, this.y); - } - - for (i = 0, len = data.length; i < len; i += 4) { - if (this._isOutsideThreshold(data[i], filterColor[0], threshold) || this._isOutsideThreshold(data[i + 1], filterColor[1], threshold) || this._isOutsideThreshold(data[i + 2], filterColor[2], threshold)) { - continue; - } - data[i] = data[i + 1] = data[i + 2] = data[i + 3] = 0; - } - context.putImageData(imageData, 0, 0); - }, - - - /** - * Check color if it is within threshold - * @param {Number} color1 source color - * @param {Number} color2 filtering color - * @param {Number} threshold threshold - * @returns {boolean} true if within threshold or false - */ - _isOutsideThreshold: function _isOutsideThreshold(color1, color2, threshold) { - var diff = color1 - color2; - - return Math.abs(diff) > threshold; - }, - - - /** - * Get color at (x, y) - * @param {Object} imageData of canvas - * @param {Number} x left position - * @param {Number} y top position - * @returns {Array} color array - */ - _getColor: function _getColor(imageData, x, y) { - var color = [0, 0, 0, 0], - data = imageData.data, - width = imageData.width, - bytes = 4, - position = (width * y + x) * bytes; - color[0] = data[position]; - color[1] = data[position + 1]; - color[2] = data[position + 2]; - color[3] = data[position + 3]; - - return color; - } - }); - - module.exports = ColorFilter; - -/***/ }), -/* 89 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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 _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _component = __webpack_require__(74); - - var _component2 = _interopRequireDefault(_component); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - var _shapeResizeHelper = __webpack_require__(90); - - var _shapeResizeHelper2 = _interopRequireDefault(_shapeResizeHelper); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** - * @author NHN Ent. FE Development Team - * @fileoverview Shape component - */ - - - var _tui$util = tui.util, - extend = _tui$util.extend, - inArray = _tui$util.inArray; - var rejectMessages = _consts2.default.rejectMessages, - eventNames = _consts2.default.eventNames; - - var KEY_CODES = _consts2.default.keyCodes; - var DEFAULT_TYPE = 'rect'; - var DEFAULT_OPTIONS = { - strokeWidth: 1, - stroke: '#000000', - fill: '#ffffff', - width: 1, - height: 1, - rx: 0, - ry: 0, - lockSkewingX: true, - lockSkewingY: true, - lockUniScaling: false, - bringForward: true, - isRegular: false - }; - - var shapeType = ['rect', 'circle', 'triangle']; - - /** - * Shape - * @class Shape - * @param {Graphics} graphics - Graphics instance - * @extends {Component} - * @ignore - */ - - var Shape = function (_Component) { - _inherits(Shape, _Component); - - function Shape(graphics) { - _classCallCheck(this, Shape); - - /** - * Object of The drawing shape - * @type {fabric.Object} - * @private - */ - var _this = _possibleConstructorReturn(this, (Shape.__proto__ || Object.getPrototypeOf(Shape)).call(this, _consts2.default.componentNames.SHAPE, graphics)); - - _this._shapeObj = null; - - /** - * Type of the drawing shape - * @type {string} - * @private - */ - _this._type = DEFAULT_TYPE; - - /** - * Options to draw the shape - * @type {Object} - * @private - */ - _this._options = extend({}, DEFAULT_OPTIONS); - - /** - * Whether the shape object is selected or not - * @type {boolean} - * @private - */ - _this._isSelected = false; - - /** - * Pointer for drawing shape (x, y) - * @type {Object} - * @private - */ - _this._startPoint = {}; - - /** - * Using shortcut on drawing shape - * @type {boolean} - * @private - */ - _this._withShiftKey = false; - - /** - * Event handler list - * @type {Object} - * @private - */ - _this._handlers = { - mousedown: _this._onFabricMouseDown.bind(_this), - mousemove: _this._onFabricMouseMove.bind(_this), - mouseup: _this._onFabricMouseUp.bind(_this), - keydown: _this._onKeyDown.bind(_this), - keyup: _this._onKeyUp.bind(_this) - }; - return _this; - } - - /** - * Start to draw the shape on canvas - * @ignore - */ - - - _createClass(Shape, [{ - key: 'start', - value: function start() { - var canvas = this.getCanvas(); - - this._isSelected = false; - - canvas.defaultCursor = 'crosshair'; - canvas.selection = false; - canvas.uniScaleTransform = true; - canvas.on({ - 'mouse:down': this._handlers.mousedown - }); - - fabric.util.addListener(document, 'keydown', this._handlers.keydown); - fabric.util.addListener(document, 'keyup', this._handlers.keyup); - } - - /** - * End to draw the shape on canvas - * @ignore - */ - - }, { - key: 'end', - value: function end() { - var canvas = this.getCanvas(); - - this._isSelected = false; - - canvas.defaultCursor = 'default'; - canvas.selection = true; - canvas.uniScaleTransform = false; - canvas.off({ - 'mouse:down': this._handlers.mousedown - }); - - fabric.util.removeListener(document, 'keydown', this._handlers.keydown); - fabric.util.removeListener(document, 'keyup', this._handlers.keyup); - } - - /** - * Set states of the current drawing shape - * @ignore - * @param {string} type - Shape type (ex: 'rect', 'circle') - * @param {Object} [options] - Shape options - * @param {string} [options.fill] - Shape foreground color (ex: '#fff', 'transparent') - * @param {string} [options.stoke] - Shape outline color - * @param {number} [options.strokeWidth] - Shape outline width - * @param {number} [options.width] - Width value (When type option is 'rect', this options can use) - * @param {number} [options.height] - Height value (When type option is 'rect', this options can use) - * @param {number} [options.rx] - Radius x value (When type option is 'circle', this options can use) - * @param {number} [options.ry] - Radius y value (When type option is 'circle', this options can use) - */ - - }, { - key: 'setStates', - value: function setStates(type, options) { - this._type = type; - - if (options) { - this._options = extend(this._options, options); - } - } - - /** - * Add the shape - * @ignore - * @param {string} type - Shape type (ex: 'rect', 'circle') - * @param {Object} options - Shape options - * @param {string} [options.fill] - Shape foreground color (ex: '#fff', 'transparent') - * @param {string} [options.stroke] - Shape outline color - * @param {number} [options.strokeWidth] - Shape outline width - * @param {number} [options.width] - Width value (When type option is 'rect', this options can use) - * @param {number} [options.height] - Height value (When type option is 'rect', this options can use) - * @param {number} [options.rx] - Radius x value (When type option is 'circle', this options can use) - * @param {number} [options.ry] - Radius y value (When type option is 'circle', this options can use) - * @param {number} [options.isRegular] - Whether scaling shape has 1:1 ratio or not - * @returns {Promise} - */ - - }, { - key: 'add', - value: function add(type, options) { - var _this2 = this; - - return new _promise2.default(function (resolve) { - var canvas = _this2.getCanvas(); - options = _this2._createOptions(options); - var shapeObj = _this2._createInstance(type, options); - - _this2._bindEventOnShape(shapeObj); - - canvas.add(shapeObj).setActiveObject(shapeObj); - resolve(_this2.graphics.createObjectProperties(shapeObj)); - }); - } - - /** - * Change the shape - * @ignore - * @param {fabric.Object} shapeObj - Selected shape object on canvas - * @param {Object} options - Shape options - * @param {string} [options.fill] - Shape foreground color (ex: '#fff', 'transparent') - * @param {string} [options.stroke] - Shape outline color - * @param {number} [options.strokeWidth] - Shape outline width - * @param {number} [options.width] - Width value (When type option is 'rect', this options can use) - * @param {number} [options.height] - Height value (When type option is 'rect', this options can use) - * @param {number} [options.rx] - Radius x value (When type option is 'circle', this options can use) - * @param {number} [options.ry] - Radius y value (When type option is 'circle', this options can use) - * @param {number} [options.isRegular] - Whether scaling shape has 1:1 ratio or not - * @returns {Promise} - */ - - }, { - key: 'change', - value: function change(shapeObj, options) { - var _this3 = this; - - return new _promise2.default(function (resolve, reject) { - if (inArray(shapeObj.get('type'), shapeType) < 0) { - reject(rejectMessages.unsupportedType); - } - - shapeObj.set(options); - _this3.getCanvas().renderAll(); - resolve(); - }); - } - - /** - * Create the instance of shape - * @param {string} type - Shape type - * @param {Object} options - Options to creat the shape - * @returns {fabric.Object} Shape instance - * @private - */ - - }, { - key: '_createInstance', - value: function _createInstance(type, options) { - var instance = void 0; - - switch (type) { - case 'rect': - instance = new fabric.Rect(options); - break; - case 'circle': - instance = new fabric.Ellipse(extend({ - type: 'circle' - }, options)); - break; - case 'triangle': - instance = new fabric.Triangle(options); - break; - default: - instance = {}; - } - - return instance; - } - - /** - * Get the options to create the shape - * @param {Object} options - Options to creat the shape - * @returns {Object} Shape options - * @private - */ - - }, { - key: '_createOptions', - value: function _createOptions(options) { - var selectionStyles = _consts2.default.fObjectOptions.SELECTION_STYLE; - - options = extend({}, DEFAULT_OPTIONS, this._options, selectionStyles, options); - - if (options.isRegular) { - options.lockUniScaling = true; - } - - return options; - } - - /** - * Bind fabric events on the creating shape object - * @param {fabric.Object} shapeObj - Shape object - * @private - */ - - }, { - key: '_bindEventOnShape', - value: function _bindEventOnShape(shapeObj) { - var self = this; - var canvas = this.getCanvas(); - - shapeObj.on({ - added: function added() { - self._shapeObj = this; - _shapeResizeHelper2.default.setOrigins(self._shapeObj); - }, - selected: function selected() { - self._isSelected = true; - self._shapeObj = this; - canvas.uniScaleTransform = true; - canvas.defaultCursor = 'default'; - _shapeResizeHelper2.default.setOrigins(self._shapeObj); - }, - deselected: function deselected() { - self._isSelected = false; - self._shapeObj = null; - canvas.defaultCursor = 'crosshair'; - canvas.uniScaleTransform = false; - }, - modified: function modified() { - var currentObj = self._shapeObj; - - _shapeResizeHelper2.default.adjustOriginToCenter(currentObj); - _shapeResizeHelper2.default.setOrigins(currentObj); - }, - scaling: function scaling(fEvent) { - var pointer = canvas.getPointer(fEvent.e); - var currentObj = self._shapeObj; - - canvas.setCursor('crosshair'); - _shapeResizeHelper2.default.resize(currentObj, pointer, true); - } - }); - } - - /** - * MouseDown event handler on canvas - * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event object - * @private - */ - - }, { - key: '_onFabricMouseDown', - value: function _onFabricMouseDown(fEvent) { - if (!this._isSelected && !this._shapeObj) { - var canvas = this.getCanvas(); - this._startPoint = canvas.getPointer(fEvent.e); - - canvas.on({ - 'mouse:move': this._handlers.mousemove, - 'mouse:up': this._handlers.mouseup - }); - } - } - - /** - * MouseDown event handler on canvas - * @param {{target: fabric.Object, e: MouseEvent}} fEvent - Fabric event object - * @private - */ - - }, { - key: '_onFabricMouseMove', - value: function _onFabricMouseMove(fEvent) { - var _this4 = this; - - var canvas = this.getCanvas(); - var pointer = canvas.getPointer(fEvent.e); - var startPointX = this._startPoint.x; - var startPointY = this._startPoint.y; - var width = startPointX - pointer.x; - var height = startPointY - pointer.y; - var shape = this._shapeObj; - - if (!shape) { - this.add(this._type, { - left: startPointX, - top: startPointY, - width: width, - height: height - }).then(function (objectProps) { - _this4.fire(eventNames.ADD_OBJECT, objectProps); - }); - } else { - this._shapeObj.set({ - isRegular: this._withShiftKey - }); - _shapeResizeHelper2.default.resize(shape, pointer); - canvas.renderAll(); - } - } - - /** - * MouseUp event handler on canvas - * @private - */ - - }, { - key: '_onFabricMouseUp', - value: function _onFabricMouseUp() { - var canvas = this.getCanvas(); - var shape = this._shapeObj; - - if (shape) { - _shapeResizeHelper2.default.adjustOriginToCenter(shape); - } - - canvas.off({ - 'mouse:move': this._handlers.mousemove, - 'mouse:up': this._handlers.mouseup - }); - } - - /** - * Keydown event handler on document - * @param {KeyboardEvent} e - Event object - * @private - */ - - }, { - key: '_onKeyDown', - value: function _onKeyDown(e) { - if (e.keyCode === KEY_CODES.SHIFT) { - this._withShiftKey = true; - - if (this._shapeObj) { - this._shapeObj.isRegular = true; - } - } - } - - /** - * Keyup event handler on document - * @param {KeyboardEvent} e - Event object - * @private - */ - - }, { - key: '_onKeyUp', - value: function _onKeyUp(e) { - if (e.keyCode === KEY_CODES.SHIFT) { - this._withShiftKey = false; - - if (this._shapeObj) { - this._shapeObj.isRegular = false; - } - } - } - }]); - - return Shape; - }(_component2.default); - - module.exports = Shape; - -/***/ }), -/* 90 */ -/***/ (function(module, exports) { - - 'use strict'; - - /** - * @author NHN Ent. FE Development Team - * @fileoverview Shape resize helper - */ - var DIVISOR = { - rect: 1, - circle: 2, - triangle: 1 - }; - var DIMENSION_KEYS = { - rect: { - w: 'width', - h: 'height' - }, - circle: { - w: 'rx', - h: 'ry' - }, - triangle: { - w: 'width', - h: 'height' - } - }; - - /** - * Set the start point value to the shape object - * @param {fabric.Object} shape - Shape object - * @ignore - */ - function setStartPoint(shape) { - var originX = shape.getOriginX(); - var originY = shape.getOriginY(); - var originKey = originX.substring(0, 1) + originY.substring(0, 1); - - shape.startPoint = shape.origins[originKey]; - } - - /** - * Get the positions of ratated origin by the pointer value - * @param {{x: number, y: number}} origin - Origin value - * @param {{x: number, y: number}} pointer - Pointer value - * @param {number} angle - Rotating angle - * @returns {Object} Postions of origin - * @ignore - */ - function getPositionsOfRotatedOrigin(origin, pointer, angle) { - var sx = origin.x; - var sy = origin.y; - var px = pointer.x; - var py = pointer.y; - var r = angle * Math.PI / 180; - var rx = (px - sx) * Math.cos(r) - (py - sy) * Math.sin(r) + sx; - var ry = (px - sx) * Math.sin(r) + (py - sy) * Math.cos(r) + sy; - - return { - originX: sx > rx ? 'right' : 'left', - originY: sy > ry ? 'bottom' : 'top' - }; - } - - /** - * Whether the shape has the center origin or not - * @param {fabric.Object} shape - Shape object - * @returns {boolean} State - * @ignore - */ - function hasCenterOrigin(shape) { - return shape.getOriginX() === 'center' && shape.getOriginY() === 'center'; - } - - /** - * Adjust the origin of shape by the start point - * @param {{x: number, y: number}} pointer - Pointer value - * @param {fabric.Object} shape - Shape object - * @ignore - */ - function adjustOriginByStartPoint(pointer, shape) { - var centerPoint = shape.getPointByOrigin('center', 'center'); - var angle = -shape.getAngle(); - var originPositions = getPositionsOfRotatedOrigin(centerPoint, pointer, angle); - var originX = originPositions.originX; - var originY = originPositions.originY; - var origin = shape.getPointByOrigin(originX, originY); - var left = shape.getLeft() - (centerPoint.x - origin.x); - var top = shape.getTop() - (centerPoint.x - origin.y); - - shape.set({ - originX: originX, - originY: originY, - left: left, - top: top - }); - - shape.setCoords(); - } - - /** - * Adjust the origin of shape by the moving pointer value - * @param {{x: number, y: number}} pointer - Pointer value - * @param {fabric.Object} shape - Shape object - * @ignore - */ - function adjustOriginByMovingPointer(pointer, shape) { - var origin = shape.startPoint; - var angle = -shape.getAngle(); - var originPositions = getPositionsOfRotatedOrigin(origin, pointer, angle); - var originX = originPositions.originX; - var originY = originPositions.originY; - - shape.setPositionByOrigin(origin, originX, originY); - } - - /** - * Adjust the dimension of shape on firing scaling event - * @param {fabric.Object} shape - Shape object - * @ignore - */ - function adjustDimensionOnScaling(shape) { - var type = shape.type; - var dimensionKeys = DIMENSION_KEYS[type]; - var scaleX = shape.scaleX; - var scaleY = shape.scaleY; - var width = shape[dimensionKeys.w] * scaleX; - var height = shape[dimensionKeys.h] * scaleY; - - if (shape.isRegular) { - var maxScale = Math.max(scaleX, scaleY); - - width = shape[dimensionKeys.w] * maxScale; - height = shape[dimensionKeys.h] * maxScale; - } - - var options = { - hasControls: false, - hasBorders: false, - scaleX: 1, - scaleY: 1 - }; - - options[dimensionKeys.w] = width; - options[dimensionKeys.h] = height; - - shape.set(options); - } - - /** - * Adjust the dimension of shape on firing mouse move event - * @param {{x: number, y: number}} pointer - Pointer value - * @param {fabric.Object} shape - Shape object - * @ignore - */ - function adjustDimensionOnMouseMove(pointer, shape) { - var origin = shape.startPoint; - var type = shape.type; - var divisor = DIVISOR[type]; - var dimensionKeys = DIMENSION_KEYS[type]; - var strokeWidth = shape.strokeWidth; - var isTriangle = !!(shape.type === 'triangle'); - var options = {}; - var width = Math.abs(origin.x - pointer.x) / divisor; - var height = Math.abs(origin.y - pointer.y) / divisor; - - if (width > strokeWidth) { - width -= strokeWidth / divisor; - } - - if (height > strokeWidth) { - height -= strokeWidth / divisor; - } - - if (shape.isRegular) { - width = height = Math.max(width, height); - - if (isTriangle) { - height = Math.sqrt(3) / 2 * width; - } - } - - options[dimensionKeys.w] = width; - options[dimensionKeys.h] = height; - - shape.set(options); - } - - module.exports = { - /** - * Set each origin value to shape - * @param {fabric.Object} shape - Shape object - */ - setOrigins: function setOrigins(shape) { - var leftTopPoint = shape.getPointByOrigin('left', 'top'); - var rightTopPoint = shape.getPointByOrigin('right', 'top'); - var rightBottomPoint = shape.getPointByOrigin('right', 'bottom'); - var leftBottomPoint = shape.getPointByOrigin('left', 'bottom'); - - shape.origins = { - lt: leftTopPoint, - rt: rightTopPoint, - rb: rightBottomPoint, - lb: leftBottomPoint - }; - }, - - - /** - * Resize the shape - * @param {fabric.Object} shape - Shape object - * @param {{x: number, y: number}} pointer - Mouse pointer values on canvas - * @param {boolean} isScaling - Whether the resizing action is scaling or not - */ - resize: function resize(shape, pointer, isScaling) { - if (hasCenterOrigin(shape)) { - adjustOriginByStartPoint(pointer, shape); - setStartPoint(shape); - } - - if (isScaling) { - adjustDimensionOnScaling(shape, pointer); - } else { - adjustDimensionOnMouseMove(pointer, shape); - } - - adjustOriginByMovingPointer(pointer, shape); - }, - - - /** - * Adjust the origin position of shape to center - * @param {fabric.Object} shape - Shape object - */ - adjustOriginToCenter: function adjustOriginToCenter(shape) { - var centerPoint = shape.getPointByOrigin('center', 'center'); - var originX = shape.getOriginX(); - var originY = shape.getOriginY(); - var origin = shape.getPointByOrigin(originX, originY); - var left = shape.getLeft() + (centerPoint.x - origin.x); - var top = shape.getTop() + (centerPoint.y - origin.y); - - shape.set({ - hasControls: true, - hasBorders: true, - originX: 'center', - originY: 'center', - left: left, - top: top - }); - - shape.setCoords(); // For left, top properties - } - }; - -/***/ }), -/* 91 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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 _drawingMode = __webpack_require__(92); - - var _drawingMode2 = _interopRequireDefault(_drawingMode); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** - * @author NHN Ent. FE Development Team - * @fileoverview CropperDrawingMode class - */ - - - var drawingModes = _consts2.default.drawingModes; - - var components = _consts2.default.componentNames; - - /** - * CropperDrawingMode class - * @class - * @ignore - */ - - var CropperDrawingMode = function (_DrawingMode) { - _inherits(CropperDrawingMode, _DrawingMode); - - function CropperDrawingMode() { - _classCallCheck(this, CropperDrawingMode); - - return _possibleConstructorReturn(this, (CropperDrawingMode.__proto__ || Object.getPrototypeOf(CropperDrawingMode)).call(this, drawingModes.CROPPER)); - } - - /** - * start this drawing mode - * @param {Graphics} graphics - Graphics instance - * @override - */ - - - _createClass(CropperDrawingMode, [{ - key: 'start', - value: function start(graphics) { - var cropper = graphics.getComponent(components.CROPPER); - cropper.start(); - } - - /** - * stop this drawing mode - * @param {Graphics} graphics - Graphics instance - * @override - */ - - }, { - key: 'end', - value: function end(graphics) { - var cropper = graphics.getComponent(components.CROPPER); - cropper.end(); - } - }]); - - return CropperDrawingMode; - }(_drawingMode2.default); - - module.exports = CropperDrawingMode; - -/***/ }), -/* 92 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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; }; }(); /** - * @author NHN Ent. FE Development Team - * @fileoverview DrawingMode interface - */ - - - var _errorMessage = __webpack_require__(69); - - var _errorMessage2 = _interopRequireDefault(_errorMessage); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - var createMessage = _errorMessage2.default.create; - var errorTypes = _errorMessage2.default.types; - - /** - * DrawingMode interface - * @class - * @param {string} name - drawing mode name - * @ignore - */ - - var DrawingMode = function () { - function DrawingMode(name) { - _classCallCheck(this, DrawingMode); - - /** - * the name of drawing mode - * @type {string} - */ - this.name = name; - } - - /** - * Get this drawing mode name; - * @returns {string} drawing mode name - */ - - - _createClass(DrawingMode, [{ - key: 'getName', - value: function getName() { - return this.name; - } - - /** - * start this drawing mode - * @param {Object} options - drawing mode options - * @abstract - */ - - }, { - key: 'start', - value: function start() { - throw new Error(createMessage(errorTypes.UN_IMPLEMENTATION, 'start')); - } - - /** - * stop this drawing mode - * @abstract - */ - - }, { - key: 'stop', - value: function stop() { - throw new Error(createMessage(errorTypes.UN_IMPLEMENTATION, 'stop')); - } - }]); - - return DrawingMode; - }(); - - module.exports = DrawingMode; - -/***/ }), -/* 93 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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 _drawingMode = __webpack_require__(92); - - var _drawingMode2 = _interopRequireDefault(_drawingMode); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** - * @author NHN Ent. FE Development Team - * @fileoverview FreeDrawingMode class - */ - - - var drawingModes = _consts2.default.drawingModes; - - var components = _consts2.default.componentNames; - - /** - * FreeDrawingMode class - * @class - * @ignore - */ - - var FreeDrawingMode = function (_DrawingMode) { - _inherits(FreeDrawingMode, _DrawingMode); - - function FreeDrawingMode() { - _classCallCheck(this, FreeDrawingMode); - - return _possibleConstructorReturn(this, (FreeDrawingMode.__proto__ || Object.getPrototypeOf(FreeDrawingMode)).call(this, drawingModes.FREE_DRAWING)); - } - - /** - * start this drawing mode - * @param {Graphics} graphics - Graphics instance - * @param {{width: ?number, color: ?string}} [options] - Brush width & color - * @override - */ - - - _createClass(FreeDrawingMode, [{ - key: 'start', - value: function start(graphics, options) { - var freeDrawing = graphics.getComponent(components.FREE_DRAWING); - freeDrawing.start(options); - } - - /** - * stop this drawing mode - * @param {Graphics} graphics - Graphics instance - * @override - */ - - }, { - key: 'end', - value: function end(graphics) { - var freeDrawing = graphics.getComponent(components.FREE_DRAWING); - freeDrawing.end(); - } - }]); - - return FreeDrawingMode; - }(_drawingMode2.default); - - module.exports = FreeDrawingMode; - -/***/ }), -/* 94 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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 _drawingMode = __webpack_require__(92); - - var _drawingMode2 = _interopRequireDefault(_drawingMode); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** - * @author NHN Ent. FE Development Team - * @fileoverview LineDrawingMode class - */ - - - var drawingModes = _consts2.default.drawingModes; - - var components = _consts2.default.componentNames; - - /** - * LineDrawingMode class - * @class - * @ignore - */ - - var LineDrawingMode = function (_DrawingMode) { - _inherits(LineDrawingMode, _DrawingMode); - - function LineDrawingMode() { - _classCallCheck(this, LineDrawingMode); - - return _possibleConstructorReturn(this, (LineDrawingMode.__proto__ || Object.getPrototypeOf(LineDrawingMode)).call(this, drawingModes.LINE_DRAWING)); - } - - /** - * start this drawing mode - * @param {Graphics} graphics - Graphics instance - * @param {{width: ?number, color: ?string}} [options] - Brush width & color - * @override - */ - - - _createClass(LineDrawingMode, [{ - key: 'start', - value: function start(graphics, options) { - var lineDrawing = graphics.getComponent(components.LINE); - lineDrawing.start(options); - } - - /** - * stop this drawing mode - * @param {Graphics} graphics - Graphics instance - * @override - */ - - }, { - key: 'end', - value: function end(graphics) { - var lineDrawing = graphics.getComponent(components.LINE); - lineDrawing.end(); - } - }]); - - return LineDrawingMode; - }(_drawingMode2.default); - - module.exports = LineDrawingMode; - -/***/ }), -/* 95 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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 _drawingMode = __webpack_require__(92); - - var _drawingMode2 = _interopRequireDefault(_drawingMode); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** - * @author NHN Ent. FE Development Team - * @fileoverview ShapeDrawingMode class - */ - - - var drawingModes = _consts2.default.drawingModes; - - var components = _consts2.default.componentNames; - - /** - * ShapeDrawingMode class - * @class - * @ignore - */ - - var ShapeDrawingMode = function (_DrawingMode) { - _inherits(ShapeDrawingMode, _DrawingMode); - - function ShapeDrawingMode() { - _classCallCheck(this, ShapeDrawingMode); - - return _possibleConstructorReturn(this, (ShapeDrawingMode.__proto__ || Object.getPrototypeOf(ShapeDrawingMode)).call(this, drawingModes.SHAPE)); - } - - /** - * start this drawing mode - * @param {Graphics} graphics - Graphics instance - * @override - */ - - - _createClass(ShapeDrawingMode, [{ - key: 'start', - value: function start(graphics) { - var shape = graphics.getComponent(components.SHAPE); - shape.start(); - } - - /** - * stop this drawing mode - * @param {Graphics} graphics - Graphics instance - * @override - */ - - }, { - key: 'end', - value: function end(graphics) { - var shape = graphics.getComponent(components.SHAPE); - shape.end(); - } - }]); - - return ShapeDrawingMode; - }(_drawingMode2.default); - - module.exports = ShapeDrawingMode; - -/***/ }), -/* 96 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - 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 _drawingMode = __webpack_require__(92); - - var _drawingMode2 = _interopRequireDefault(_drawingMode); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** - * @author NHN Ent. FE Development Team - * @fileoverview TextDrawingMode class - */ - - - var drawingModes = _consts2.default.drawingModes; - - var components = _consts2.default.componentNames; - - /** - * TextDrawingMode class - * @class - * @ignore - */ - - var TextDrawingMode = function (_DrawingMode) { - _inherits(TextDrawingMode, _DrawingMode); - - function TextDrawingMode() { - _classCallCheck(this, TextDrawingMode); - - return _possibleConstructorReturn(this, (TextDrawingMode.__proto__ || Object.getPrototypeOf(TextDrawingMode)).call(this, drawingModes.TEXT)); - } - - /** - * start this drawing mode - * @param {Graphics} graphics - Graphics instance - * @override - */ - - - _createClass(TextDrawingMode, [{ - key: 'start', - value: function start(graphics) { - var text = graphics.getComponent(components.TEXT); - text.start(); - } - - /** - * stop this drawing mode - * @param {Graphics} graphics - Graphics instance - * @override - */ - - }, { - key: 'end', - value: function end(graphics) { - var text = graphics.getComponent(components.TEXT); - text.end(); - } - }]); - - return TextDrawingMode; - }(_drawingMode2.default); - - module.exports = TextDrawingMode; - -/***/ }), -/* 97 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var componentNames = _consts2.default.componentNames, - commandNames = _consts2.default.commandNames; /** - * @author NHN Ent. FE Development Team - * @fileoverview Add an icon - */ - - var ICON = componentNames.ICON; - - - var command = { - name: commandNames.ADD_ICON, - - /** - * Add an icon - * @param {Graphics} graphics - Graphics instance - * @param {string} type - Icon type ('arrow', 'cancel', custom icon name) - * @param {Object} options - Icon options - * @param {string} [options.fill] - Icon foreground color - * @param {string} [options.left] - Icon x position - * @param {string} [options.top] - Icon y position - * @returns {Promise} - */ - execute: function execute(graphics, type, options) { - var iconComp = graphics.getComponent(ICON); - var undoData = this.undoData; - - return iconComp.add(type, options).then(function (objectProps) { - undoData.object = graphics.getObject(objectProps.id); - - return objectProps; - }); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @returns {Promise} - */ - undo: function undo(graphics) { - graphics.remove(this.undoData.object); - - return _promise2.default.resolve(); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 98 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var commandNames = _consts2.default.commandNames; /** - * @author NHN Ent. FE Development Team - * @fileoverview Add an image object - */ - - var command = { - name: commandNames.ADD_IMAGE_OBJECT, - - /** - * Add an image object - * @param {Graphics} graphics - Graphics instance - * @param {string} imgUrl - Image url to make object - * @returns {Promise} - */ - execute: function execute(graphics, imgUrl) { - var undoData = this.undoData; - - return graphics.addImageObject(imgUrl).then(function (objectProps) { - undoData.object = graphics.getObject(objectProps.id); - - return objectProps; - }); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @returns {Promise} - */ - undo: function undo(graphics) { - graphics.remove(this.undoData.object); - - return _promise2.default.resolve(); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 99 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var commandNames = _consts2.default.commandNames, - rejectMessages = _consts2.default.rejectMessages; /** - * @author NHN Ent. FE Development Team - * @fileoverview Add an object - */ - - var command = { - name: commandNames.ADD_OBJECT, - - /** - * Add an object - * @param {Graphics} graphics - Graphics instance - * @param {Object} object - Fabric object - * @returns {Promise} - */ - execute: function execute(graphics, object) { - return new _promise2.default(function (resolve, reject) { - if (!graphics.contains(object)) { - graphics.add(object); - resolve(object); - } else { - reject(rejectMessages.addedObject); - } - }); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @param {Object} object - Fabric object - * @returns {Promise} - */ - undo: function undo(graphics, object) { - return new _promise2.default(function (resolve, reject) { - if (graphics.contains(object)) { - graphics.remove(object); - resolve(object); - } else { - reject(rejectMessages.noObject); - } - }); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 100 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var componentNames = _consts2.default.componentNames, - commandNames = _consts2.default.commandNames; /** - * @author NHN Ent. FE Development Team - * @fileoverview Add a shape - */ - - var SHAPE = componentNames.SHAPE; - - - var command = { - name: commandNames.ADD_SHAPE, - - /** - * Add a shape - * @param {Graphics} graphics - Graphics instance - * @param {string} type - Shape type (ex: 'rect', 'circle', 'triangle') - * @param {Object} options - Shape options - * @param {string} [options.fill] - Shape foreground color (ex: '#fff', 'transparent') - * @param {string} [options.stroke] - Shape outline color - * @param {number} [options.strokeWidth] - Shape outline width - * @param {number} [options.width] - Width value (When type option is 'rect', this options can use) - * @param {number} [options.height] - Height value (When type option is 'rect', this options can use) - * @param {number} [options.rx] - Radius x value (When type option is 'circle', this options can use) - * @param {number} [options.ry] - Radius y value (When type option is 'circle', this options can use) - * @param {number} [options.left] - Shape x position - * @param {number} [options.top] - Shape y position - * @param {number} [options.isRegular] - Whether resizing shape has 1:1 ratio or not - * @returns {Promise} - */ - execute: function execute(graphics, type, options) { - var shapeComp = graphics.getComponent(SHAPE); - var undoData = this.undoData; - - return shapeComp.add(type, options).then(function (objectProps) { - undoData.object = graphics.getObject(objectProps.id); - - return objectProps; - }); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @returns {Promise} - */ - undo: function undo(graphics) { - graphics.remove(this.undoData.object); - - return _promise2.default.resolve(); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 101 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var componentNames = _consts2.default.componentNames, - commandNames = _consts2.default.commandNames; /** - * @author NHN Ent. FE Development Team - * @fileoverview Add a text object - */ - - var TEXT = componentNames.TEXT; - - - var command = { - name: commandNames.ADD_TEXT, - - /** - * Add a text object - * @param {Graphics} graphics - Graphics instance - * @param {string} text - Initial input text - * @param {Object} [options] Options for text styles - * @param {Object} [options.styles] Initial styles - * @param {string} [options.styles.fill] Color - * @param {string} [options.styles.fontFamily] Font type for text - * @param {number} [options.styles.fontSize] Size - * @param {string} [options.styles.fontStyle] Type of inclination (normal / italic) - * @param {string} [options.styles.fontWeight] Type of thicker or thinner looking (normal / bold) - * @param {string} [options.styles.textAlign] Type of text align (left / center / right) - * @param {string} [options.styles.textDecoraiton] Type of line (underline / line-throgh / overline) - * @param {{x: number, y: number}} [options.position] - Initial position - * @returns {Promise} - */ - execute: function execute(graphics, text, options) { - var textComp = graphics.getComponent(TEXT); - var undoData = this.undoData; - - return textComp.add(text, options).then(function (objectProps) { - undoData.object = graphics.getObject(objectProps.id); - - return objectProps; - }); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @returns {Promise} - */ - undo: function undo(graphics) { - graphics.remove(this.undoData.object); - - return _promise2.default.resolve(); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 102 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * @author NHN Ent. FE Development Team - * @fileoverview Apply a filter into an image - */ - var componentNames = _consts2.default.componentNames, - rejectMessages = _consts2.default.rejectMessages, - commandNames = _consts2.default.commandNames; - var FILTER = componentNames.FILTER; - - - var command = { - name: commandNames.APPLY_FILTER, - - /** - * Apply a filter into an image - * @param {Graphics} graphics - Graphics instance - * @param {string} type - Filter type - * @param {Object} options - Filter options - * @param {number} options.maskObjId - masking image object id - * @returns {Promise} - */ - execute: function execute(graphics, type, options) { - var filterComp = graphics.getComponent(FILTER); - - if (type === 'mask') { - var maskObj = graphics.getObject(options.maskObjId); - - if (!(maskObj && maskObj.isType('image'))) { - return Promise.reject(rejectMessages.invalidParameters); - } - - options = { - mask: maskObj - }; - } - - if (type === 'mask') { - this.undoData.object = options.mask; - graphics.remove(options.mask); - } else { - this.undoData.options = filterComp.getOptions(type); - } - - return filterComp.add(type, options); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @param {string} type - Filter type - * @returns {Promise} - */ - undo: function undo(graphics, type) { - var filterComp = graphics.getComponent(FILTER); - - if (type === 'mask') { - var mask = this.undoData.object; - graphics.add(mask); - graphics.setActiveObject(mask); - - return filterComp.remove(type); - } - - // options changed case - if (this.undoData.options) { - return filterComp.add(type, this.undoData.options); - } - - // filter added case - return filterComp.remove(type); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 103 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var componentNames = _consts2.default.componentNames, - rejectMessages = _consts2.default.rejectMessages, - commandNames = _consts2.default.commandNames; /** - * @author NHN Ent. FE Development Team - * @fileoverview Change icon color - */ - - var ICON = componentNames.ICON; - - - var command = { - name: commandNames.CHANGE_ICON_COLOR, - - /** - * Change icon color - * @param {Graphics} graphics - Graphics instance - * @param {number} id - object id - * @param {string} color - Color for icon - * @returns {Promise} - */ - execute: function execute(graphics, id, color) { - var _this = this; - - return new _promise2.default(function (resolve, reject) { - var iconComp = graphics.getComponent(ICON); - var targetObj = graphics.getObject(id); - - if (!targetObj) { - reject(rejectMessages.noObject); - } - - _this.undoData.object = targetObj; - _this.undoData.color = iconComp.getColor(targetObj); - iconComp.setColor(color, targetObj); - resolve(); - }); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @returns {Promise} - */ - undo: function undo(graphics) { - var iconComp = graphics.getComponent(ICON); - var icon = this.undoData.object; - var color = this.undoData.color; - - iconComp.setColor(color, icon); - - return _promise2.default.resolve(); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 104 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var componentNames = _consts2.default.componentNames, - rejectMessages = _consts2.default.rejectMessages, - commandNames = _consts2.default.commandNames; /** - * @author NHN Ent. FE Development Team - * @fileoverview change a shape - */ - - var SHAPE = componentNames.SHAPE; - - - var command = { - name: commandNames.CHANGE_SHAPE, - - /** - * Change a shape - * @param {Graphics} graphics - Graphics instance - * @param {number} id - object id - * @param {Object} options - Shape options - * @param {string} [options.fill] - Shape foreground color (ex: '#fff', 'transparent') - * @param {string} [options.stroke] - Shape outline color - * @param {number} [options.strokeWidth] - Shape outline width - * @param {number} [options.width] - Width value (When type option is 'rect', this options can use) - * @param {number} [options.height] - Height value (When type option is 'rect', this options can use) - * @param {number} [options.rx] - Radius x value (When type option is 'circle', this options can use) - * @param {number} [options.ry] - Radius y value (When type option is 'circle', this options can use) - * @param {number} [options.left] - Shape x position - * @param {number} [options.top] - Shape y position - * @param {number} [options.isRegular] - Whether resizing shape has 1:1 ratio or not - * @returns {Promise} - */ - execute: function execute(graphics, id, options) { - var shapeComp = graphics.getComponent(SHAPE); - var targetObj = graphics.getObject(id); - var undoData = this.undoData; - - if (!targetObj) { - return _promise2.default.reject(rejectMessages.noObject); - } - - undoData.object = targetObj; - undoData.options = {}; - tui.util.forEachOwnProperties(options, function (value, key) { - undoData.options[key] = targetObj[key]; - }); - - return shapeComp.change(targetObj, options); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @returns {Promise} - */ - undo: function undo(graphics) { - var shapeComp = graphics.getComponent(SHAPE); - var shape = this.undoData.object; - var options = this.undoData.options; - - return shapeComp.change(shape, options); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 105 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var componentNames = _consts2.default.componentNames, - rejectMessages = _consts2.default.rejectMessages, - commandNames = _consts2.default.commandNames; /** - * @author NHN Ent. FE Development Team - * @fileoverview Change a text - */ - - var TEXT = componentNames.TEXT; - - - var command = { - name: commandNames.CHANGE_TEXT, - - /** - * Change a text - * @param {Graphics} graphics - Graphics instance - * @param {number} id - object id - * @param {string} text - Changing text - * @returns {Promise} - */ - execute: function execute(graphics, id, text) { - var textComp = graphics.getComponent(TEXT); - var targetObj = graphics.getObject(id); - var undoData = this.undoData; - - if (!targetObj) { - return _promise2.default.reject(rejectMessages.noObject); - } - - undoData.object = targetObj; - undoData.text = textComp.getText(targetObj); - - return textComp.change(targetObj, text); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @returns {Promise} - */ - undo: function undo(graphics) { - var textComp = graphics.getComponent(TEXT); - var textObj = this.undoData.object; - var text = this.undoData.text; - - return textComp.change(textObj, text); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 106 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var componentNames = _consts2.default.componentNames, - rejectMessages = _consts2.default.rejectMessages, - commandNames = _consts2.default.commandNames; /** - * @author NHN Ent. FE Development Team - * @fileoverview Change text styles - */ - - var TEXT = componentNames.TEXT; - - - var command = { - name: commandNames.CHANGE_TEXT_STYLE, - - /** - * Change text styles - * @param {Graphics} graphics - Graphics instance - * @param {number} id - object id - * @param {Object} styles - text styles - * @param {string} [styles.fill] Color - * @param {string} [styles.fontFamily] Font type for text - * @param {number} [styles.fontSize] Size - * @param {string} [styles.fontStyle] Type of inclination (normal / italic) - * @param {string} [styles.fontWeight] Type of thicker or thinner looking (normal / bold) - * @param {string} [styles.textAlign] Type of text align (left / center / right) - * @param {string} [styles.textDecoraiton] Type of line (underline / line-throgh / overline) - * @returns {Promise} - */ - execute: function execute(graphics, id, styles) { - var textComp = graphics.getComponent(TEXT); - var targetObj = graphics.getObject(id); - var undoData = this.undoData; - - if (!targetObj) { - return _promise2.default.reject(rejectMessages.noObject); - } - - undoData.object = targetObj; - undoData.styles = {}; - tui.util.forEachOwnProperties(styles, function (value, key) { - undoData.styles[key] = targetObj[key]; - }); - - return textComp.setStyle(targetObj, styles); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @returns {Promise} - */ - undo: function undo(graphics) { - var textComp = graphics.getComponent(TEXT); - var textObj = this.undoData.object; - var styles = this.undoData.styles; - - return textComp.setStyle(textObj, styles); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 107 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var commandNames = _consts2.default.commandNames; /** - * @author NHN Ent. FE Development Team - * @fileoverview Clear all objects - */ - - var command = { - name: commandNames.CLEAR_OBJECTS, - - /** - * Clear all objects without background (main) image - * @param {Graphics} graphics - Graphics instance - * @returns {Promise} - */ - execute: function execute(graphics) { - var _this = this; - - return new _promise2.default(function (resolve) { - _this.undoData.objects = graphics.removeAll(); - resolve(); - }); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @returns {Promise} - * @ignore - */ - undo: function undo(graphics) { - graphics.add(this.undoData.objects); - - return _promise2.default.resolve(); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 108 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * @author NHN Ent. FE Development Team - * @fileoverview Flip an image - */ - var componentNames = _consts2.default.componentNames, - commandNames = _consts2.default.commandNames; - var FLIP = componentNames.FLIP; - - - var command = { - name: commandNames.FLIP_IMAGE, - - /** - * flip an image - * @param {Graphics} graphics - Graphics instance - * @param {string} type - 'flipX' or 'flipY' or 'reset' - * @returns {Promise} - */ - execute: function execute(graphics, type) { - var flipComp = graphics.getComponent(FLIP); - - this.undoData.setting = flipComp.getCurrentSetting(); - - return flipComp[type](); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @returns {Promise} - */ - undo: function undo(graphics) { - var flipComp = graphics.getComponent(FLIP); - - return flipComp.set(this.undoData.setting); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 109 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * @author NHN Ent. FE Development Team - * @fileoverview Load a background (main) image - */ - var componentNames = _consts2.default.componentNames, - commandNames = _consts2.default.commandNames; - var IMAGE_LOADER = componentNames.IMAGE_LOADER; - - - var command = { - name: commandNames.LOAD_IMAGE, - - /** - * Load a background (main) image - * @param {Graphics} graphics - Graphics instance - * @param {string} imageName - Image name - * @param {string} imgUrl - Image Url - * @returns {Promise} - */ - execute: function execute(graphics, imageName, imgUrl) { - var loader = graphics.getComponent(IMAGE_LOADER); - var prevImage = loader.getCanvasImage(); - var prevImageWidth = prevImage ? prevImage.width : 0; - var prevImageHeight = prevImage ? prevImage.height : 0; - - this.undoData = { - name: loader.getImageName(), - image: prevImage, - objects: graphics.removeAll(true) - }; - - return loader.load(imageName, imgUrl).then(function (newImage) { - return { - oldWidth: prevImageWidth, - oldHeight: prevImageHeight, - newWidth: newImage.width, - newHeight: newImage.height - }; - }); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @returns {Promise} - */ - undo: function undo(graphics) { - var loader = graphics.getComponent(IMAGE_LOADER); - var undoData = this.undoData; - - graphics.removeAll(true); - graphics.add(undoData.objects); - - return loader.load(undoData.name, undoData.image); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 110 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * @author NHN Ent. FE Development Team - * @fileoverview Remove a filter from an image - */ - var componentNames = _consts2.default.componentNames, - commandNames = _consts2.default.commandNames; - var FILTER = componentNames.FILTER; - - - var command = { - name: commandNames.REMOVE_FILTER, - - /** - * Remove a filter from an image - * @param {Graphics} graphics - Graphics instance - * @param {string} type - Filter type - * @returns {Promise} - */ - execute: function execute(graphics, type) { - var filterComp = graphics.getComponent(FILTER); - - this.undoData.options = filterComp.getOptions(type); - - return filterComp.remove(type); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @param {string} type - Filter type - * @returns {Promise} - */ - undo: function undo(graphics, type) { - var filterComp = graphics.getComponent(FILTER); - var options = this.undoData.options; - - return filterComp.add(type, options); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 111 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var commandNames = _consts2.default.commandNames, - rejectMessages = _consts2.default.rejectMessages; /** - * @author NHN Ent. FE Development Team - * @fileoverview Remove an object - */ - - var command = { - name: commandNames.REMOVE_OBJECT, - - /** - * Remove an object - * @param {Graphics} graphics - Graphics instance - * @param {number} id - object id - * @returns {Promise} - */ - execute: function execute(graphics, id) { - var _this = this; - - return new _promise2.default(function (resolve, reject) { - var undoData = _this.undoData; - undoData.objects = graphics.removeObjectById(id); - if (undoData.objects.length) { - resolve(); - } else { - reject(rejectMessages.noObject); - } - }); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @returns {Promise} - */ - undo: function undo(graphics) { - graphics.add(this.undoData.objects); - - return _promise2.default.resolve(); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 112 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var commandNames = _consts2.default.commandNames; /** - * @author NHN Ent. FE Development Team - * @fileoverview Resize a canvas - */ - - var command = { - name: commandNames.RESIZE_CANVAS_DIMENSION, - - /** - * resize the canvas with given dimension - * @param {Graphics} graphics - Graphics instance - * @param {{width: number, height: number}} dimension - Max width & height - * @returns {Promise} - */ - execute: function execute(graphics, dimension) { - var _this = this; - - return new _promise2.default(function (resolve) { - _this.undoData.size = { - width: graphics.cssMaxWidth, - height: graphics.cssMaxHeight - }; - - graphics.setCssMaxDimension(dimension); - graphics.adjustCanvasDimension(); - resolve(); - }); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @returns {Promise} - */ - undo: function undo(graphics) { - graphics.setCssMaxDimension(this.undoData.size); - graphics.adjustCanvasDimension(); - - return _promise2.default.resolve(); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 113 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * @author NHN Ent. FE Development Team - * @fileoverview Rotate an image - */ - var componentNames = _consts2.default.componentNames, - commandNames = _consts2.default.commandNames; - var ROTATION = componentNames.ROTATION; - - - var command = { - name: commandNames.ROTATE_IMAGE, - - /** - * Rotate an image - * @param {Graphics} graphics - Graphics instance - * @param {string} type - 'rotate' or 'setAngle' - * @param {number} angle - angle value (degree) - * @returns {Promise} - */ - execute: function execute(graphics, type, angle) { - var rotationComp = graphics.getComponent(ROTATION); - - this.undoData.angle = rotationComp.getCurrentAngle(); - - return rotationComp[type](angle); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @returns {Promise} - */ - undo: function undo(graphics) { - var rotationComp = graphics.getComponent(ROTATION); - var angle = this.undoData.angle; - - return rotationComp.setAngle(angle); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 114 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var commandNames = _consts2.default.commandNames, - rejectMessages = _consts2.default.rejectMessages; /** - * @author NHN Ent. FE Development Team - * @fileoverview Set object properties - */ - - var command = { - name: commandNames.SET_OBJECT_PROPERTIES, - - /** - * Set object properties - * @param {Graphics} graphics - Graphics instance - * @param {number} id - object id - * @param {Object} props - properties - * @param {string} [props.fill] Color - * @param {string} [props.fontFamily] Font type for text - * @param {number} [props.fontSize] Size - * @param {string} [props.fontStyle] Type of inclination (normal / italic) - * @param {string} [props.fontWeight] Type of thicker or thinner looking (normal / bold) - * @param {string} [props.textAlign] Type of text align (left / center / right) - * @param {string} [props.textDecoraiton] Type of line (underline / line-throgh / overline) - * @returns {Promise} - */ - execute: function execute(graphics, id, props) { - var targetObj = graphics.getObject(id); - var undoData = this.undoData; - - if (!targetObj) { - return _promise2.default.reject(rejectMessages.noObject); - } - - undoData.props = {}; - tui.util.forEachOwnProperties(props, function (value, key) { - undoData.props[key] = targetObj[key]; - }); - - graphics.setObjectProperties(id, props); - - return _promise2.default.resolve(); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @param {number} id - object id - * @returns {Promise} - */ - undo: function undo(graphics, id) { - var props = this.undoData.props; - - graphics.setObjectProperties(id, props); - - return _promise2.default.resolve(); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }), -/* 115 */ -/***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - var _command = __webpack_require__(67); - - var _command2 = _interopRequireDefault(_command); - - var _promise = __webpack_require__(3); - - var _promise2 = _interopRequireDefault(_promise); - - var _consts = __webpack_require__(71); - - var _consts2 = _interopRequireDefault(_consts); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var commandNames = _consts2.default.commandNames, - rejectMessages = _consts2.default.rejectMessages; /** - * @author NHN Ent. FE Development Team - * @fileoverview Set object properties - */ - - var command = { - name: commandNames.SET_OBJECT_POSITION, - - /** - * Set object properties - * @param {Graphics} graphics - Graphics instance - * @param {number} id - object id - * @param {Object} posInfo - position object - * @param {number} posInfo.x - x position - * @param {number} posInfo.y - y position - * @param {string} posInfo.originX - can be 'left', 'center', 'right' - * @param {string} posInfo.originY - can be 'top', 'center', 'bottom' - * @returns {Promise} - */ - execute: function execute(graphics, id, posInfo) { - var targetObj = graphics.getObject(id); - var undoData = this.undoData; - - if (!targetObj) { - return _promise2.default.reject(rejectMessages.noObject); - } - - undoData.objectId = id; - undoData.props = graphics.getObjectProperties(id, ['left', 'top']); - - graphics.setObjectPosition(id, posInfo); - graphics.renderAll(); - - return _promise2.default.resolve(); - }, - - /** - * @param {Graphics} graphics - Graphics instance - * @returns {Promise} - */ - undo: function undo(graphics) { - var objectId = this.undoData.objectId; - var props = this.undoData.props; - - graphics.setObjectProperties(objectId, props); - graphics.renderAll(); - - return _promise2.default.resolve(); - } - }; - - _command2.default.register(command); - - module.exports = command; - -/***/ }) -/******/ ]); \ No newline at end of file diff --git a/dist/tui-image-editor.min.js b/dist/tui-image-editor.min.js deleted file mode 100644 index e693a6ae8..000000000 --- a/dist/tui-image-editor.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * tui-image-editor.min.js - * @version 2.0.0 - * @author NHNEnt FE Development Lab - * @license MIT - */ -!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="dist",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(81),o=r(i);n(39),n(40),n(41),n(42),n(43),n(44),n(45),n(46),n(47),n(48),n(49),n(50),n(51),n(52),n(53),n(54),n(55),n(57),n(56),tui.util.defineNamespace("tui.component.ImageEditor",o.default,!0)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(7),o=r(i);e.exports={componentNames:o.default.keyMirror("IMAGE_LOADER","CROPPER","FLIP","ROTATION","FREE_DRAWING","LINE","TEXT","ICON","FILTER","SHAPE"),commandNames:{CLEAR_OBJECTS:"clearObjects",LOAD_IMAGE:"loadImage",FLIP_IMAGE:"flip",ROTATE_IMAGE:"rotate",ADD_OBJECT:"addObject",REMOVE_OBJECT:"removeObject",APPLY_FILTER:"applyFilter",REMOVE_FILTER:"removeFilter",ADD_ICON:"addIcon",CHANGE_ICON_COLOR:"changeIconColor",ADD_SHAPE:"addShape",CHANGE_SHAPE:"changeShape",ADD_TEXT:"addText",CHANGE_TEXT:"changeText",CHANGE_TEXT_STYLE:"changeTextStyle",ADD_IMAGE_OBJECT:"addImageObject",RESIZE_CANVAS_DIMENSION:"resizeCanvasDimension",SET_OBJECT_PROPERTIES:"setObjectProperties",SET_OBJECT_POSITION:"setObjectPosition"},eventNames:{OBJECT_ACTIVATED:"objectActivated",OBJECT_MOVED:"objectMoved",OBJECT_SCALED:"objectScaled",TEXT_EDITING:"textEditing",TEXT_CHANGED:"textChanged",ADD_TEXT:"addText",ADD_OBJECT:"addObject",MOUSE_DOWN:"mousedown",REDO_STACK_CHANGED:"redoStackChanged",UNDO_STACK_CHANGED:"undoStackChanged"},drawingModes:o.default.keyMirror("NORMAL","CROPPER","FREE_DRAWING","LINE_DRAWING","TEXT","SHAPE"),keyCodes:{Z:90,Y:89,SHIFT:16,BACKSPACE:8,DEL:46},fObjectOptions:{SELECTION_STYLE:{borderColor:"red",cornerColor:"green",cornerSize:10,originX:"center",originY:"center",transparentCorners:!1}},rejectMessages:{flip:"The flipX and flipY setting values are not changed.",rotation:"The current angle is same the old angle.",loadImage:"The background image is empty.",isLock:"The executing command state is locked.",undo:"The promise of undo command is reject.",redo:"The promise of redo command is reject.",invalidDrawingMode:"This operation is not supported in the drawing mode",invalidParameters:"Invalid parameters",noActiveObject:"There is no active object.",unsupportedType:"Unsupported object type",noObject:"The object is not in canvas.",addedObject:"The object is already added."}}},function(e,t,n){n(112),n(114),n(115),n(113),e.exports=n(11).Promise},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=u[e];if(t){for(var n=arguments.length,r=Array(n>1?n-1:0),i=1;ii&&(o=t,t=i,i=o),r(t,n(e,i))},keyMirror:function(){for(var e={},t=arguments.length,n=Array(t),r=0;r0?r:n)(e)}},function(e,t,n){var r=n(90),i=n(20);e.exports=function(e){return r(i(e))}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(7),o=r(i),a=o.default.keyMirror,s=a("UN_IMPLEMENTATION","NO_COMPONENT_NAME"),u={UN_IMPLEMENTATION:"Should implement a method: ",NO_COMPONENT_NAME:"Should set a component name"},c={UN_IMPLEMENTATION:function(e){return u.UN_IMPLEMENTATION+e},NO_COMPONENT_NAME:function(){return u.NO_COMPONENT_NAME}};e.exports={types:tui.util.extend({},s),create:function(e){e=e.toLowerCase();for(var t=c[e],n=arguments.length,r=Array(n>1?n-1:0),i=1;in;)t.push(arguments[n++]);return g[++v]=function(){s("function"==typeof e?e:Function(e),t)},r(v),v},d=function(e){delete g[e]},"process"==n(14)(f)?r=function(e){f.nextTick(a(y,e,1))}:p?(i=new p,o=i.port2,i.port1.onmessage=m,r=a(o.postMessage,o,1)):l.addEventListener&&"function"==typeof postMessage&&!l.importScripts?(r=function(e){l.postMessage(e+"","*")},l.addEventListener("message",m,!1)):r=_ in c("script")?function(e){u.appendChild(c("script"))[_]=function(){u.removeChild(this),y.call(e)}}:function(e){setTimeout(a(y,e,1),0)}),e.exports={set:h,clear:d}},function(e,t,n){var r=n(24),i=Math.min;e.exports=function(e){return e>0?i(r(e),9007199254740991):0}},function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),s=r(a),u=n(1),c=r(u),l=c.default.componentNames,f=c.default.commandNames,h=l.ICON,d={name:f.ADD_ICON,execute:function(e,t,n){var r=e.getComponent(h),i=this.undoData;return r.add(t,n).then(function(t){return i.object=e.getObject(t.id),t})},undo:function(e){return e.remove(this.undoData.object),s.default.resolve()}};o.default.register(d),e.exports=d},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),s=r(a),u=n(1),c=r(u),l=c.default.commandNames,f={name:l.ADD_IMAGE_OBJECT,execute:function(e,t){var n=this.undoData;return e.addImageObject(t).then(function(t){return n.object=e.getObject(t.id),t})},undo:function(e){return e.remove(this.undoData.object),s.default.resolve()}};o.default.register(f),e.exports=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),s=r(a),u=n(1),c=r(u),l=c.default.commandNames,f=c.default.rejectMessages,h={name:l.ADD_OBJECT,execute:function(e,t){return new s.default(function(n,r){e.contains(t)?r(f.addedObject):(e.add(t),n(t))})},undo:function(e,t){return new s.default(function(n,r){e.contains(t)?(e.remove(t),n(t)):r(f.noObject)})}};o.default.register(h),e.exports=h},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),s=r(a),u=n(1),c=r(u),l=c.default.componentNames,f=c.default.commandNames,h=l.SHAPE,d={name:f.ADD_SHAPE,execute:function(e,t,n){var r=e.getComponent(h),i=this.undoData;return r.add(t,n).then(function(t){return i.object=e.getObject(t.id),t})},undo:function(e){return e.remove(this.undoData.object),s.default.resolve()}};o.default.register(d),e.exports=d},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),s=r(a),u=n(1),c=r(u),l=c.default.componentNames,f=c.default.commandNames,h=l.TEXT,d={name:f.ADD_TEXT,execute:function(e,t,n){var r=e.getComponent(h),i=this.undoData;return r.add(t,n).then(function(t){return i.object=e.getObject(t.id),t})},undo:function(e){return e.remove(this.undoData.object),s.default.resolve()}};o.default.register(d),e.exports=d},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(1),s=r(a),u=s.default.componentNames,c=s.default.rejectMessages,l=s.default.commandNames,f=u.FILTER,h={name:l.APPLY_FILTER,execute:function(e,t,n){var r=e.getComponent(f);if("mask"===t){var i=e.getObject(n.maskObjId);if(!i||!i.isType("image"))return Promise.reject(c.invalidParameters);n={mask:i}}return"mask"===t?(this.undoData.object=n.mask,e.remove(n.mask)):this.undoData.options=r.getOptions(t),r.add(t,n)},undo:function(e,t){var n=e.getComponent(f);if("mask"===t){var r=this.undoData.object;return e.add(r),e.setActiveObject(r),n.remove(t)}return this.undoData.options?n.add(t,this.undoData.options):n.remove(t)}};o.default.register(h),e.exports=h},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),s=r(a),u=n(1),c=r(u),l=c.default.componentNames,f=c.default.rejectMessages,h=c.default.commandNames,d=l.ICON,p={name:h.CHANGE_ICON_COLOR,execute:function(e,t,n){var r=this;return new s.default(function(i,o){var a=e.getComponent(d),s=e.getObject(t);s||o(f.noObject),r.undoData.object=s,r.undoData.color=a.getColor(s),a.setColor(n,s),i()})},undo:function(e){var t=e.getComponent(d),n=this.undoData.object,r=this.undoData.color;return t.setColor(r,n),s.default.resolve()}};o.default.register(p),e.exports=p},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),s=r(a),u=n(1),c=r(u),l=c.default.componentNames,f=c.default.rejectMessages,h=c.default.commandNames,d=l.SHAPE,p={name:h.CHANGE_SHAPE,execute:function(e,t,n){var r=e.getComponent(d),i=e.getObject(t),o=this.undoData;return i?(o.object=i,o.options={},tui.util.forEachOwnProperties(n,function(e,t){o.options[t]=i[t]}),r.change(i,n)):s.default.reject(f.noObject)},undo:function(e){var t=e.getComponent(d),n=this.undoData.object,r=this.undoData.options;return t.change(n,r)}};o.default.register(p),e.exports=p},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),s=r(a),u=n(1),c=r(u),l=c.default.componentNames,f=c.default.rejectMessages,h=c.default.commandNames,d=l.TEXT,p={name:h.CHANGE_TEXT,execute:function(e,t,n){var r=e.getComponent(d),i=e.getObject(t),o=this.undoData;return i?(o.object=i,o.text=r.getText(i),r.change(i,n)):s.default.reject(f.noObject)},undo:function(e){var t=e.getComponent(d),n=this.undoData.object,r=this.undoData.text;return t.change(n,r)}};o.default.register(p),e.exports=p},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),s=r(a),u=n(1),c=r(u),l=c.default.componentNames,f=c.default.rejectMessages,h=c.default.commandNames,d=l.TEXT,p={name:h.CHANGE_TEXT_STYLE,execute:function(e,t,n){var r=e.getComponent(d),i=e.getObject(t),o=this.undoData;return i?(o.object=i,o.styles={},tui.util.forEachOwnProperties(n,function(e,t){o.styles[t]=i[t]}),r.setStyle(i,n)):s.default.reject(f.noObject)},undo:function(e){var t=e.getComponent(d),n=this.undoData.object,r=this.undoData.styles;return t.setStyle(n,r)}};o.default.register(p),e.exports=p},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),s=r(a),u=n(1),c=r(u),l=c.default.commandNames,f={name:l.CLEAR_OBJECTS,execute:function(e){var t=this;return new s.default(function(n){t.undoData.objects=e.removeAll(),n()})},undo:function(e){return e.add(this.undoData.objects),s.default.resolve()}};o.default.register(f),e.exports=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(1),s=r(a),u=s.default.componentNames,c=s.default.commandNames,l=u.FLIP,f={name:c.FLIP_IMAGE,execute:function(e,t){var n=e.getComponent(l);return this.undoData.setting=n.getCurrentSetting(),n[t]()},undo:function(e){var t=e.getComponent(l);return t.set(this.undoData.setting)}};o.default.register(f),e.exports=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(1),s=r(a),u=s.default.componentNames,c=s.default.commandNames,l=u.IMAGE_LOADER,f={name:c.LOAD_IMAGE,execute:function(e,t,n){var r=e.getComponent(l),i=r.getCanvasImage(),o=i?i.width:0,a=i?i.height:0;return this.undoData={name:r.getImageName(),image:i,objects:e.removeAll(!0)},r.load(t,n).then(function(e){return{oldWidth:o,oldHeight:a,newWidth:e.width,newHeight:e.height}})},undo:function(e){var t=e.getComponent(l),n=this.undoData;return e.removeAll(!0),e.add(n.objects),t.load(n.name,n.image)}};o.default.register(f),e.exports=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(1),s=r(a),u=s.default.componentNames,c=s.default.commandNames,l=u.FILTER,f={name:c.REMOVE_FILTER,execute:function(e,t){var n=e.getComponent(l);return this.undoData.options=n.getOptions(t),n.remove(t)},undo:function(e,t){var n=e.getComponent(l),r=this.undoData.options;return n.add(t,r)}};o.default.register(f),e.exports=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),s=r(a),u=n(1),c=r(u),l=c.default.commandNames,f=c.default.rejectMessages,h={name:l.REMOVE_OBJECT,execute:function(e,t){var n=this;return new s.default(function(r,i){var o=n.undoData;o.objects=e.removeObjectById(t),o.objects.length?r():i(f.noObject)})},undo:function(e){return e.add(this.undoData.objects),s.default.resolve()}};o.default.register(h),e.exports=h},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),s=r(a),u=n(1),c=r(u),l=c.default.commandNames,f={name:l.RESIZE_CANVAS_DIMENSION,execute:function(e,t){var n=this;return new s.default(function(r){n.undoData.size={width:e.cssMaxWidth,height:e.cssMaxHeight},e.setCssMaxDimension(t),e.adjustCanvasDimension(),r()})},undo:function(e){return e.setCssMaxDimension(this.undoData.size),e.adjustCanvasDimension(),s.default.resolve()}};o.default.register(f),e.exports=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(1),s=r(a),u=s.default.componentNames,c=s.default.commandNames,l=u.ROTATION,f={name:c.ROTATE_IMAGE,execute:function(e,t,n){var r=e.getComponent(l);return this.undoData.angle=r.getCurrentAngle(),r[t](n)},undo:function(e){var t=e.getComponent(l),n=this.undoData.angle;return t.setAngle(n)}};o.default.register(f),e.exports=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),s=r(a),u=n(1),c=r(u),l=c.default.commandNames,f=c.default.rejectMessages,h={name:l.SET_OBJECT_POSITION,execute:function(e,t,n){var r=e.getObject(t),i=this.undoData;return r?(i.objectId=t,i.props=e.getObjectProperties(t,["left","top"]),e.setObjectPosition(t,n),e.renderAll(),s.default.resolve()):s.default.reject(f.noObject)},undo:function(e){var t=this.undoData.objectId,n=this.undoData.props;return e.setObjectProperties(t,n),e.renderAll(),s.default.resolve()}};o.default.register(h),e.exports=h},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),s=r(a),u=n(1),c=r(u),l=c.default.commandNames,f=c.default.rejectMessages,h={name:l.SET_OBJECT_PROPERTIES,execute:function(e,t,n){var r=e.getObject(t),i=this.undoData;return r?(i.props={},tui.util.forEachOwnProperties(n,function(e,t){i.props[t]=r[t]}),e.setObjectProperties(t,n),s.default.resolve()):s.default.reject(f.noObject)},undo:function(e,t){var n=this.undoData.props;return e.setObjectProperties(t,n),s.default.resolve()}};o.default.register(h),e.exports=h},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var s=function(){function e(e,t){for(var n=0;ng&&(o.remove(),o.set(this._calcRectDimensionFromPoint(r,i)),t.add(o))}},{key:"_calcRectDimensionFromPoint",value:function(e,t){var n=this.getCanvas(),r=n.getWidth(),i=n.getHeight(),o=this._startX,a=this._startY,s=y(e,0,o),u=y(t,0,a),c=y(e,o,r)-s,l=y(t,a,i)-u;return this._withShiftKey&&(c>l?l=c:l>c&&(c=l),o>=e&&(s=o-c),a>=t&&(u=a-l)),{left:s,top:u,width:c,height:l}}},{key:"_onFabricMouseUp",value:function(){var e=this._cropzone,t=this._listeners,n=this.getCanvas();n.setActiveObject(e),n.off({"mouse:move":t.mousemove,"mouse:up":t.mouseup})}},{key:"getCroppedImageData",value:function(e){var t=this.getCanvas(),n=t.contains(this._cropzone);if(!e)return null;n&&this._cropzone.remove();var r={imageName:this.getImageName(),url:t.toDataURL(e)};return n&&t.add(this._cropzone),r}},{key:"getCropzoneRect",value:function(){var e=this._cropzone;return e.isValid()?{left:e.getLeft(),top:e.getTop(),width:e.getWidth(),height:e.getHeight()}:null}},{key:"_onKeyDown",value:function(e){e.keyCode===m.SHIFT&&(this._withShiftKey=!0)}},{key:"_onKeyUp",value:function(e){e.keyCode===m.SHIFT&&(this._withShiftKey=!1)}}]),t}(c.default);e.exports=b},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var s=function(){function e(e,t){for(var n=0;nn},_getColor:function(e,t,n){var r=[0,0,0,0],i=e.data,o=e.width,a=4,s=(o*n+t)*a;return r[0]=i[s],r[1]=i[s+1],r[2]=i[s+2],r[3]=i[s+3],r}});e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(7),o=r(i),a=o.default.clamp,s="tl",u="tr",c="mt",l="ml",f="mr",h="mb",d="bl",p="br",v=fabric.util.createClass(fabric.Rect,{initialize:function(e){e.type="cropzone",this.callSuper("initialize",e),this.on({moving:this._onMoving,scaling:this._onScaling})},_render:function(e){var t=7,n=7;this.callSuper("_render",e);var r=this.flipX?-1:1,i=this.flipY?-1:1,o=r/this.scaleX,a=i/this.scaleY;e.scale(o,a),this._fillOuterRect(e,"rgba(0, 0, 0, 0.55)"),this._strokeBorder(e,"rgb(0, 0, 0)",t),this._strokeBorder(e,"rgb(255, 255, 255)",t,n),e.scale(1/o,1/a)},_fillOuterRect:function(e,t){var n=this._getCoordinates(e),r=n.x,i=n.y;e.save(),e.fillStyle=t,e.beginPath(),e.moveTo(r[0]-1,i[0]-1),e.lineTo(r[3]+1,i[0]-1),e.lineTo(r[3]+1,i[3]+1),e.lineTo(r[0]-1,i[3]-1),e.lineTo(r[0]-1,i[0]-1),e.closePath(),e.moveTo(r[1],i[1]),e.lineTo(r[1],i[2]),e.lineTo(r[2],i[2]),e.lineTo(r[2],i[1]),e.lineTo(r[1],i[1]),e.closePath(),e.fill(),e.restore()},_getCoordinates:function(e){var t=Math.ceil,n=this.getWidth(),r=this.getHeight(),i=n/2,o=r/2,a=this.getLeft(),s=this.getTop(),u=e.canvas;return{x:tui.util.map([-(i+a),-i,i,i+(u.width-a-n)],t),y:tui.util.map([-(o+s),-o,o,o+(u.height-s-r)],t)}},_strokeBorder:function(e,t,n,r){var i=this.getWidth()/2,o=this.getHeight()/2;e.save(),e.strokeStyle=t,e.setLineDash&&e.setLineDash([n,n]),r&&(e.lineDashOffset=r),e.beginPath(),e.moveTo(-i,-o),e.lineTo(i,-o),e.lineTo(i,o),e.lineTo(-i,o),e.lineTo(-i,-o),e.stroke(),e.restore()},_onMoving:function(){var e=this.canvas,t=this.getLeft(),n=this.getTop(),r=this.getWidth(),i=this.getHeight(),o=e.getWidth()-r,s=e.getHeight()-i;this.setLeft(a(t,0,o)),this.setTop(a(n,0,s))},_onScaling:function(e){var t=this.canvas.getPointer(e.e),n=this._calcScalingSizeFromPointer(t);this.scale(1).set(n)},_calcScalingSizeFromPointer:function(e){var t=e.x,n=e.y,r=this._calcTopLeftScalingSizeFromPointer(t,n),i=this._calcBottomRightScalingSizeFromPointer(t,n);return this._makeScalingSettings(r,i)},_calcTopLeftScalingSizeFromPointer:function(e,t){var n=this.getHeight()+this.top,r=this.getWidth()+this.left,i=a(t,0,n-1),o=a(e,0,r-1);return{top:i,left:o,width:r-o,height:n-i}},_calcBottomRightScalingSizeFromPointer:function(e,t){var n=this.canvas,r=n.width,i=n.height,o=this.left,s=this.top;return{width:a(e,o+1,r)-o,height:a(t,s+1,i)-s}},_makeScalingSettings:function(e,t){var n=e.width,r=e.height,i=t.height,o=t.width,a=e.left,v=e.top,g=void 0;switch(this.__corner){ -case s:g=e;break;case u:g={width:o,height:r,top:v};break;case d:g={width:n,height:i,left:a};break;case p:g=t;break;case l:g={width:n,left:a};break;case c:g={height:r,top:v};break;case f:g={width:o};break;case h:g={height:i}}return g},isValid:function(){return this.left>=0&&this.top>=0&&this.width>0&&this.height>0}});e.exports=v},function(e,t){"use strict";var n=fabric.util.createClass(fabric.Image.filters.Convolute,{type:"Emboss",initialize:function(){var e=[1,1,1,1,.7,-1,-1,-1,-1];this.matrix=e}});e.exports=n},function(e,t){"use strict";var n=fabric.util.createClass(fabric.Image.filters.Mask,{applyTo:function(e){if(this.mask){var t=e.width,n=e.height,r=this._createCanvasOfMask(t,n),i=e.getContext("2d"),o=r.getContext("2d"),a=i.getImageData(0,0,t,n);this._drawMask(o,e,i),this._mapData(o,a,t,n),i.putImageData(a,0,0)}},_createCanvasOfMask:function(e,t){var n=fabric.util.createCanvasElement();return n.width=e,n.height=t,n},_drawMask:function(e){var t=this.mask,n=t.getElement(),r=t.getLeft(),i=t.getTop(),o=t.getAngle();e.save(),e.translate(r,i),e.rotate(o*Math.PI/180),e.scale(t.scaleX,t.scaleY),e.drawImage(n,-n.width/2,-n.height/2),e.restore()},_mapData:function(e,t,n,r){for(var i=t.data,o=e.getImageData(0,0,n,r).data,a=this.channel,s=t.width*t.height*4,u=0;uu?"right":"left",originY:i>c?"bottom":"top"}}function i(e){return"center"===e.getOriginX()&&"center"===e.getOriginY()}function o(e,t){var n=t.getPointByOrigin("center","center"),i=-t.getAngle(),o=r(n,e,i),a=o.originX,s=o.originY,u=t.getPointByOrigin(a,s),c=t.getLeft()-(n.x-u.x),l=t.getTop()-(n.x-u.y);t.set({originX:a,originY:s,left:c,top:l}),t.setCoords()}function a(e,t){var n=t.startPoint,i=-t.getAngle(),o=r(n,e,i),a=o.originX,s=o.originY;t.setPositionByOrigin(n,a,s)}function s(e){var t=e.type,n=l[t],r=e.scaleX,i=e.scaleY,o=e[n.w]*r,a=e[n.h]*i;if(e.isRegular){var s=Math.max(r,i);o=e[n.w]*s,a=e[n.h]*s}var u={hasControls:!1,hasBorders:!1,scaleX:1,scaleY:1};u[n.w]=o,u[n.h]=a,e.set(u)}function u(e,t){var n=t.startPoint,r=t.type,i=c[r],o=l[r],a=t.strokeWidth,s=!("triangle"!==t.type),u={},f=Math.abs(n.x-e.x)/i,h=Math.abs(n.y-e.y)/i;f>a&&(f-=a/i),h>a&&(h-=a/i),t.isRegular&&(f=h=Math.max(f,h),s&&(h=Math.sqrt(3)/2*f)),u[o.w]=f,u[o.h]=h,t.set(u)}var c={rect:1,circle:2,triangle:1},l={rect:{w:"width",h:"height"},circle:{w:"rx",h:"ry"},triangle:{w:"width",h:"height"}};e.exports={setOrigins:function(e){var t=e.getPointByOrigin("left","top"),n=e.getPointByOrigin("right","top"),r=e.getPointByOrigin("right","bottom"),i=e.getPointByOrigin("left","bottom");e.origins={lt:t,rt:n,rb:r,lb:i}},resize:function(e,t,r){i(e)&&(o(t,e),n(e)),r?s(e,t):u(t,e),a(t,e)},adjustOriginToCenter:function(e){var t=e.getPointByOrigin("center","center"),n=e.getOriginX(),r=e.getOriginY(),i=e.getPointByOrigin(n,r),o=e.getLeft()+(t.x-i.x),a=e.getTop()+(t.y-i.y);e.set({hasControls:!0,hasBorders:!0,originX:"center",originY:"center",left:o,top:a}),e.setCoords()}}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?n-1:0),o=1;ol;)if(s=u[l++],s!=s)return!0}else for(;c>l;l++)if((e||l in u)&&u[l]===n)return e||l||0;return!e&&-1}}},function(e,t,n){var r=n(15),i=n(92),o=n(91),a=n(8),s=n(37),u=n(110),c={},l={},t=e.exports=function(e,t,n,f,h){var d,p,v,g,_=h?function(){return e}:u(e),y=r(n,f,t?2:1),m=0;if("function"!=typeof _)throw TypeError(e+" is not iterable!");if(o(_)){for(d=s(e.length);d>m;m++)if(g=t?y(a(p=e[m])[0],p[1]):y(e[m]),g===c||g===l)return g}else for(v=_.call(e);!(p=v.next()).done;)if(g=i(v,y,p.value,t),g===c||g===l)return g};t.BREAK=c,t.RETURN=l},function(e,t,n){e.exports=!n(12)&&!n(30)(function(){return 7!=Object.defineProperty(n(21)("div"),"a",{get:function(){return 7}}).a})},function(e,t){e.exports=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},function(e,t,n){var r=n(14);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t,n){var r=n(13),i=n(4)("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||o[i]===e)}},function(e,t,n){var r=n(8);e.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&r(o.call(e)),t}}},function(e,t,n){"use strict";var r=n(97),i=n(34),o=n(22),a={};n(9)(a,n(4)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(a,{next:i(1,n)}),o(e,t+" Iterator")}},function(e,t,n){var r=n(4)("iterator"),i=!1;try{var o=[7][r]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!i)return!1;var n=!1;try{var o=[7],a=o[r]();a.next=function(){return{done:n=!0}},o[r]=function(){return a},e(o)}catch(e){}return n}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){var r=n(6),i=n(36).set,o=r.MutationObserver||r.WebKitMutationObserver,a=r.process,s=r.Promise,u="process"==n(14)(a);e.exports=function(){var e,t,n,c=function(){var r,i;for(u&&(r=a.domain)&&r.exit();e;){i=e.fn,e=e.next;try{i()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(u)n=function(){a.nextTick(c)};else if(o){var l=!0,f=document.createTextNode("");new o(c).observe(f,{characterData:!0}),n=function(){f.data=l=!l}}else if(s&&s.resolve){var h=s.resolve();n=function(){h.then(c)}}else n=function(){i.call(r,c)};return function(r){var i={fn:r,next:void 0};t&&(t.next=i),e||(e=i,n()),t=i}}},function(e,t,n){var r=n(8),i=n(98),o=n(28),a=n(23)("IE_PROTO"),s=function(){},u="prototype",c=function(){var e,t=n(21)("iframe"),r=o.length,i="<",a=">";for(t.style.display="none",n(31).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(i+"script"+a+"document.F=Object"+i+"/script"+a),e.close(),c=e.F;r--;)delete c[u][o[r]];return c()};e.exports=Object.create||function(e,t){var n;return null!==e?(s[u]=r(e),n=new s,s[u]=null,n[a]=e):n=c(),void 0===t?n:i(n,t)}},function(e,t,n){var r=n(18),i=n(8),o=n(101);e.exports=n(12)?Object.defineProperties:function(e,t){i(e);for(var n,a=o(t),s=a.length,u=0;s>u;)r.f(e,n=a[u++],t[n]);return e}},function(e,t,n){var r=n(16),i=n(108),o=n(23)("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=i(e),r(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},function(e,t,n){var r=n(16),i=n(25),o=n(86)(!1),a=n(23)("IE_PROTO");e.exports=function(e,t){var n,s=i(e),u=0,c=[];for(n in s)n!=a&&r(s,n)&&c.push(n);for(;t.length>u;)r(s,n=t[u++])&&(~o(c,n)||c.push(n));return c}},function(e,t,n){var r=n(100),i=n(28);e.exports=Object.keys||function(e){return r(e,i)}},function(e,t,n){var r=n(9);e.exports=function(e,t,n){for(var i in t)n&&e[i]?e[i]=t[i]:r(e,i,t[i]);return e}},function(e,t,n){e.exports=n(9)},function(e,t,n){"use strict";var r=n(6),i=n(11),o=n(18),a=n(12),s=n(4)("species");e.exports=function(e){var t="function"==typeof i[e]?i[e]:r[e];a&&t&&!t[s]&&o.f(t,s,{configurable:!0,get:function(){return this}})}},function(e,t,n){var r=n(8),i=n(19),o=n(4)("species");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||void 0==(n=r(a)[o])?t:i(n)}},function(e,t,n){var r=n(24),i=n(20);e.exports=function(e){return function(t,n){var o,a,s=String(i(t)),u=r(n),c=s.length;return u<0||u>=c?e?"":void 0:(o=s.charCodeAt(u),o<55296||o>56319||u+1===c||(a=s.charCodeAt(u+1))<56320||a>57343?e?s.charAt(u):o:e?s.slice(u,u+2):(o-55296<<10)+(a-56320)+65536)}}},function(e,t,n){var r=n(24),i=Math.max,o=Math.min;e.exports=function(e,t){return e=r(e),e<0?i(e+t,0):o(e,t)}},function(e,t,n){var r=n(20);e.exports=function(e){return Object(r(e))}},function(e,t,n){var r=n(17);e.exports=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){var r=n(27),i=n(4)("iterator"),o=n(13);e.exports=n(11).getIteratorMethod=function(e){if(void 0!=e)return e[i]||e["@@iterator"]||o[r(e)]}},function(e,t,n){"use strict";var r=n(84),i=n(95),o=n(13),a=n(25);e.exports=n(32)(Array,"Array",function(e,t){this._t=a(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,i(1)):"keys"==t?i(0,n):"values"==t?i(0,e[n]):i(0,[n,e[n]])},"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},function(e,t){},function(e,t,n){"use strict";var r,i,o,a=n(33),s=n(6),u=n(15),c=n(27),l=n(29),f=n(17),h=n(19),d=n(85),p=n(87),v=n(105),g=n(36).set,_=n(96)(),y="Promise",m=s.TypeError,b=s.process,O=s[y],b=s.process,k="process"==c(b),w=function(){},C=!!function(){ -try{var e=O.resolve(1),t=(e.constructor={})[n(4)("species")]=function(e){e(w,w)};return(k||"function"==typeof PromiseRejectionEvent)&&e.then(w)instanceof t}catch(e){}}(),E=function(e,t){return e===t||e===O&&t===o},j=function(e){var t;return!(!f(e)||"function"!=typeof(t=e.then))&&t},x=function(e){return E(O,e)?new T(e):new i(e)},T=i=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw m("Bad Promise constructor");t=e,n=r}),this.resolve=h(t),this.reject=h(n)},S=function(e){try{e()}catch(e){return{error:e}}},M=function(e,t){if(!e._n){e._n=!0;var n=e._c;_(function(){for(var r=e._v,i=1==e._s,o=0,a=function(t){var n,o,a=i?t.ok:t.fail,s=t.resolve,u=t.reject,c=t.domain;try{a?(i||(2==e._h&&D(e),e._h=1),a===!0?n=r:(c&&c.enter(),n=a(r),c&&c.exit()),n===t.promise?u(m("Promise-chain cycle")):(o=j(n))?o.call(n,s,u):s(n)):u(r)}catch(e){u(e)}};n.length>o;)a(n[o++]);e._c=[],e._n=!1,t&&!e._h&&P(e)})}},P=function(e){g.call(s,function(){var t,n,r,i=e._v;if(A(e)&&(t=S(function(){k?b.emit("unhandledRejection",i,e):(n=s.onunhandledrejection)?n({promise:e,reason:i}):(r=s.console)&&r.error&&r.error("Unhandled promise rejection",i)}),e._h=k||A(e)?2:1),e._a=void 0,t)throw t.error})},A=function(e){if(1==e._h)return!1;for(var t,n=e._a||e._c,r=0;n.length>r;)if(t=n[r++],t.fail||!A(t.promise))return!1;return!0},D=function(e){g.call(s,function(){var t;k?b.emit("rejectionHandled",e):(t=s.onrejectionhandled)&&t({promise:e,reason:e._v})})},I=function(e){var t=this;t._d||(t._d=!0,t=t._w||t,t._v=e,t._s=2,t._a||(t._a=t._c.slice()),M(t,!0))},N=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw m("Promise can't be resolved itself");(t=j(e))?_(function(){var r={_w:n,_d:!1};try{t.call(e,u(N,r,1),u(I,r,1))}catch(e){I.call(r,e)}}):(n._v=e,n._s=1,M(n,!1))}catch(e){I.call({_w:n,_d:!1},e)}}};C||(O=function(e){d(this,O,y,"_h"),h(e),r.call(this);try{e(u(N,this,1),u(I,this,1))}catch(e){I.call(this,e)}},r=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},r.prototype=n(102)(O.prototype,{then:function(e,t){var n=x(v(this,O));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=k?b.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&M(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),T=function(){var e=new r;this.promise=e,this.resolve=u(N,e,1),this.reject=u(I,e,1)}),l(l.G+l.W+l.F*!C,{Promise:O}),n(22)(O,y),n(104)(y),o=n(11)[y],l(l.S+l.F*!C,y,{reject:function(e){var t=x(this),n=t.reject;return n(e),t.promise}}),l(l.S+l.F*(a||!C),y,{resolve:function(e){if(e instanceof O&&E(e.constructor,this))return e;var t=x(this),n=t.resolve;return n(e),t.promise}}),l(l.S+l.F*!(C&&n(94)(function(e){O.all(e).catch(w)})),y,{all:function(e){var t=this,n=x(t),r=n.resolve,i=n.reject,o=S(function(){var n=[],o=0,a=1;p(e,!1,function(e){var s=o++,u=!1;n.push(void 0),a++,t.resolve(e).then(function(e){u||(u=!0,n[s]=e,--a||r(n))},i)}),--a||r(n)});return o&&i(o.error),n.promise},race:function(e){var t=this,n=x(t),r=n.reject,i=S(function(){p(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return i&&r(i.error),n.promise}})},function(e,t,n){"use strict";var r=n(106)(!0);n(32)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t,n){n(111);for(var r=n(6),i=n(9),o=n(13),a=n(4)("toStringTag"),s=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],u=0;u<5;u++){var c=s[u],l=r[c],f=l&&l.prototype;f&&!f[a]&&i(f,a,c),o[c]=o.Array}}]); \ No newline at end of file diff --git a/examples/basic.html b/examples/example01-basic.html similarity index 99% rename from examples/basic.html rename to examples/example01-basic.html index 6c18171b8..9c1b03884 100644 --- a/examples/basic.html +++ b/examples/example01-basic.html @@ -222,10 +222,10 @@
+ + - - diff --git a/examples/mobile.html b/examples/example02-mobile.html similarity index 98% rename from examples/mobile.html rename to examples/example02-mobile.html index 3aa9c71af..776eb80d3 100644 --- a/examples/mobile.html +++ b/examples/example02-mobile.html @@ -171,10 +171,10 @@

Menu Scrolling Left ⇔ Right

+ + - - diff --git a/examples/sample.json b/examples/examples.json similarity index 60% rename from examples/sample.json rename to examples/examples.json index 5f50f1047..31c9bbf98 100644 --- a/examples/sample.json +++ b/examples/examples.json @@ -1,8 +1,8 @@ { - "basic": { + "example01-basic": { "title": "Basic Example" }, - "mobile": { + "example02-mobile": { "title": "Mobile Example" } } diff --git a/examples/js/basic.js b/examples/js/basic.js index 9493074b2..455e2a72a 100644 --- a/examples/js/basic.js +++ b/examples/js/basic.js @@ -100,7 +100,7 @@ var $selectColorType = $('[name="select-color-type"]'); var $selectBlendType = $('[name="select-blend-type"]'); // Image editor -var imageEditor = new tui.component.ImageEditor('.tui-image-editor', { +var imageEditor = new tui.ImageEditor('.tui-image-editor', { cssMaxWidth: 700, cssMaxHeight: 500, selectionStyle: { diff --git a/examples/js/mobile.js b/examples/js/mobile.js index 22840c910..3c0e4bc81 100644 --- a/examples/js/mobile.js +++ b/examples/js/mobile.js @@ -87,7 +87,7 @@ var shapeColorpicker = tui.component.colorpicker.create({ }); // Create image editor -var imageEditor = new tui.component.ImageEditor('.tui-image-editor', { +var imageEditor = new tui.ImageEditor('.tui-image-editor', { cssMaxWidth: document.documentElement.clientWidth, cssMaxHeight: document.documentElement.clientHeight, selectionStyle: { diff --git a/jsdoc-conf.json b/jsdoc-conf.json deleted file mode 100644 index e5ea8f03f..000000000 --- a/jsdoc-conf.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "source": { - "include": ["src", "README.md"], - "exclude": [], - "includePattern": ".+\\.js(doc)?$", - "excludePattern": "(^|\\/|\\\\)_" - }, - "plugins": ["plugins/markdown"], - "templates": { - "name": "ImageEditor", - "logo": { - "url": "https://cloud.githubusercontent.com/assets/12269563/20029815/01133928-a39a-11e6-80f3-12500a91c755.png", - "width": "150px" - } - }, - "opts": { - "recurse": true, - "destination": "doc", - "tutorials": "examples", - "template": "./node_modules/tui-jsdoc-template" - } -} diff --git a/jsdoc.conf.json b/jsdoc.conf.json new file mode 100644 index 000000000..66495dc15 --- /dev/null +++ b/jsdoc.conf.json @@ -0,0 +1,31 @@ +{ + "source": { + "include": [ + "src", + "README.md" + ], + "exclude": [], + "includePattern": ".+\\.js(doc)?$", + "excludePattern": "(^|\\/|\\\\)_" + }, + "plugins": [ + "plugins/markdown" + ], + "templates": { + "name": "ImageEditor", + "logo": { + "url": "https://cloud.githubusercontent.com/assets/12269563/20029815/01133928-a39a-11e6-80f3-12500a91c755.png", + "width": "150px", + "height": "13px", + "link": "https://github.com/nhnent/tui.jsdoc-template" + } + }, + "opts": { + "private": false, + "recurse": true, + "destination": "doc", + "tutorials": "examples", + "template": "./node_modules/tui-jsdoc-template", + "package": "package.json" + } +} diff --git a/karma.conf.js b/karma.conf.js index 0af96caaf..26d40852b 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,6 +1,7 @@ -var pkg = require('./package.json'); -var webpack = require('webpack'); -var webdriverConfig = { +/* eslint-disable consts-on-top, no-process-env, require-jsdoc */ +/* eslint-disable no-process-env, require-jsdoc */ + +const webdriverConfig = { hostname: 'fe.nhnent.com', port: 4444, remoteHost: true @@ -13,19 +14,24 @@ function setConfig(defaultConfig, server) { base: 'WebDriver', config: webdriverConfig, browserName: 'internet explorer', - version: 9 + version: '9' }, 'IE10': { base: 'WebDriver', config: webdriverConfig, browserName: 'internet explorer', - version: 10 + version: '10' }, 'IE11': { base: 'WebDriver', config: webdriverConfig, browserName: 'internet explorer', - version: 11 + version: '11' + }, + 'Edge': { + base: 'WebDriver', + config: webdriverConfig, + browserName: 'MicrosoftEdge' }, 'Chrome-WebDriver': { base: 'WebDriver', @@ -36,14 +42,21 @@ function setConfig(defaultConfig, server) { base: 'WebDriver', config: webdriverConfig, browserName: 'firefox' + }, + 'Safari-WebDriver': { + base: 'WebDriver', + config: webdriverConfig, + browserName: 'safari' } }; defaultConfig.browsers = [ 'IE9', 'IE10', 'IE11', + 'Edge', 'Chrome-WebDriver', - 'Firefox-WebDriver' + 'Firefox-WebDriver', + 'Safari-WebDriver' ]; defaultConfig.reporters.push('coverage'); defaultConfig.reporters.push('junit'); @@ -52,14 +65,14 @@ function setConfig(defaultConfig, server) { reporters: [ { type: 'html', - subdir: function(browser) { - return 'report-html/' + browser; + subdir(browser) { + return `report-html/${browser}`; } }, { type: 'cobertura', - subdir: function(browser) { - return 'report-cobertura/' + browser; + subdir(browser) { + return `report-cobertura/${browser}`; }, file: 'cobertura.txt' } @@ -69,84 +82,25 @@ function setConfig(defaultConfig, server) { outputDir: 'report', suite: '' }; - } else if (server === 'bs') { - defaultConfig.browserStack = { - username: process.env.BROWSER_STACK_USERNAME, - accessKey: process.env.BROWSER_STACK_ACCESS_KEY, - project: pkg.name - }; - - defaultConfig.customLaunchers = { - bs_ie9: { - base: 'BrowserStack', - os: 'Windows', - os_version: '7', - browser_version: '9.0', - browser: 'ie' - }, - bs_ie10: { - base: 'BrowserStack', - os: 'Windows', - os_version: '7', - browser_version: '10.0', - browser: 'ie' - }, - bs_ie11: { - base: 'BrowserStack', - os: 'Windows', - os_version: '7', - browser_version: '11.0', - browser: 'ie' - }, - bs_edge: { - base: 'BrowserStack', - os: 'Windows', - os_version: '10', - browser: 'edge', - browser_version: 'latest' - }, - bs_chrome_mac: { - base: 'BrowserStack', - os: 'OS X', - os_version: 'sierra', - browser: 'chrome', - browser_version: 'latest' - }, - bs_firefox_mac: { - base: 'BrowserStack', - os: 'OS X', - os_version: 'sierra', - browser: 'firefox', - browser_version: 'latest' - } - }; - defaultConfig.browsers = [ - 'bs_ie9', - 'bs_ie10', - 'bs_ie11', - 'bs_edge', - 'bs_chrome_mac', - 'bs_firefox_mac' - ]; - defaultConfig.browserNoActivityTimeout = 30000; } else { defaultConfig.browsers = [ - 'PhantomJS', - 'Chrome' + 'ChromeHeadless' ]; } } module.exports = function(config) { - var defaultConfig = { + const defaultConfig = { basePath: './', - frameworks: ['jasmine'], + frameworks: [ + 'jasmine', + 'jquery-3.2.1', + 'es5-shim' + ], files: [ - 'bower_components/jquery/jquery.min.js', + // reason for not using karma-jasmine-jquery framework is that including older jasmine-karma file + // included jasmine-karma version is 2.0.5 and this version don't support ie8 'node_modules/jasmine-jquery/lib/jasmine-jquery.js', - 'bower_components/tui-code-snippet/dist/code-snippet.js', - 'bower_components/fabric/dist/fabric.js', - 'node_modules/es5-shim/es5-shim.js', 'test/index.js', { pattern: 'test/fixtures/*.jpg', @@ -169,6 +123,14 @@ module.exports = function(config) { devtool: 'inline-source-map', module: { preLoaders: [ + { + test: /\.js$/, + exclude: /(test|bower_components|node_modules)/, + loader: 'istanbul-instrumenter', + query: { + esModules: true + } + }, { test: /\.js$/, include: /src/, @@ -183,10 +145,7 @@ module.exports = function(config) { loader: 'babel' } ] - }, - plugins: [ - new webpack.HotModuleReplacementPlugin() - ] + } }, port: 9876, colors: true, @@ -195,6 +154,7 @@ module.exports = function(config) { singleRun: true }; + /* eslint-disable */ setConfig(defaultConfig, process.env.KARMA_SERVER); config.set(defaultConfig); }; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..4537fb9f5 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6959 @@ +{ + "name": "tui-image-editor", + "version": "3.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "dev": true, + "requires": { + "mime-types": "2.1.16", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz", + "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "ajv": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz", + "integrity": "sha1-R8aNaehvXZUxA7AHSpQw3GPaXjk=", + "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" + } + }, + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-escapes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", + "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "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 + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "archiver": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-0.14.4.tgz", + "integrity": "sha1-W53bn17hzu8hy487Ag5iQOy0MVw=", + "dev": true, + "requires": { + "async": "0.9.2", + "buffer-crc32": "0.2.13", + "glob": "4.3.5", + "lazystream": "0.1.0", + "lodash": "3.2.0", + "readable-stream": "1.0.34", + "tar-stream": "1.1.5", + "zip-stream": "0.5.2" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, + "glob": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-4.3.5.tgz", + "integrity": "sha1-gPuwjKVA8jiszl0R0em8QedRc9M=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "2.0.10", + "once": "1.4.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "lodash": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.2.0.tgz", + "integrity": "sha1-S/UKMkP5rrC6xBpV09WZBnWkYvs=", + "dev": true + }, + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "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 + } + } + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "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", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", + "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", + "dev": true + }, + "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": "0.1.5", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", + "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "aws-sign2": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", + "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.0", + "debug": "2.6.8", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.7", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "babel-eslint": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", + "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0" + } + }, + "babel-generator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", + "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-loader": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-6.4.1.tgz", + "integrity": "sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=", + "dev": true, + "requires": { + "find-cache-dir": "0.1.1", + "loader-utils": "0.2.17", + "mkdirp": "0.5.1", + "object-assign": "4.1.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.0", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.16" + }, + "dependencies": { + "core-js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz", + "integrity": "sha1-VpwFCRi+ZIazg3VSAorgRmtxcIY=", + "dev": true + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.4.1", + "regenerator-runtime": "0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.8", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "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", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": 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.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "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" + } + }, + "big.js": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz", + "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=", + "dev": true + }, + "binary-extensions": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", + "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", + "dev": true + }, + "bl": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", + "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", + "dev": true, + "requires": { + "readable-stream": "1.0.34" + }, + "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 + } + } + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, + "bluebird": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "dev": true + }, + "body-parser": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", + "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", + "dev": true, + "requires": { + "bytes": "2.4.0", + "content-type": "1.0.2", + "debug": "2.6.7", + "depd": "1.1.1", + "http-errors": "1.6.2", + "iconv-lite": "0.4.15", + "on-finished": "2.3.0", + "qs": "6.4.0", + "raw-body": "2.2.0", + "type-is": "1.6.15" + }, + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "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 + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": 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" + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "browserify-aes": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz", + "integrity": "sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true, + "requires": { + "pako": "0.2.9" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.2.1", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "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": "2.4.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", + "dev": true + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "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", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "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" + } + }, + "caseless": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.9.0.tgz", + "integrity": "sha1-t7Zc5r8UE4hlOc/VM/CzDv+pz4g=", + "dev": true + }, + "catharsis": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", + "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", + "dev": true, + "requires": { + "underscore-contrib": "0.3.0" + } + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "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" + } + }, + "cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-serializer": "0.1.0", + "entities": "1.1.1", + "htmlparser2": "3.9.2", + "lodash.assignin": "4.2.0", + "lodash.bind": "4.2.1", + "lodash.defaults": "4.2.0", + "lodash.filter": "4.6.0", + "lodash.flatten": "4.4.0", + "lodash.foreach": "4.5.0", + "lodash.map": "4.6.0", + "lodash.merge": "4.6.0", + "lodash.pick": "4.4.0", + "lodash.reduce": "4.6.0", + "lodash.reject": "4.6.0", + "lodash.some": "4.6.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.1.2", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + } + } + }, + "clone": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "color-convert": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", + "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "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.4" + } + }, + "combined-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", + "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", + "dev": true, + "requires": { + "delayed-stream": "0.0.5" + } + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "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": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "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 + }, + "compress-commons": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-0.2.9.tgz", + "integrity": "sha1-Qi2SdDDAGr0GzUVbbfwEy0z4ADw=", + "dev": true, + "requires": { + "buffer-crc32": "0.2.13", + "crc32-stream": "0.3.4", + "node-int64": "0.3.3", + "readable-stream": "1.0.34" + }, + "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 + } + } + }, + "compressible": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.11.tgz", + "integrity": "sha1-FnGKdd4oPtjmBAQWJaIGRYZ5fYo=", + "dev": true, + "requires": { + "mime-db": "1.29.0" + } + }, + "compression": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.0.tgz", + "integrity": "sha1-AwyfGY8WQ6BX13anOOki2kNzAS0=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "bytes": "2.5.0", + "compressible": "2.0.11", + "debug": "2.6.8", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.1" + }, + "dependencies": { + "bytes": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.5.0.tgz", + "integrity": "sha1-TJQj6i0lLCcMQbK97+/5u2tiwGo=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "typedarray": "0.0.6" + } + }, + "connect": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.3.tgz", + "integrity": "sha512-GLSZqgjVxPvGYVD/2vz//gS201MEXk4b7t3nHV6OVnTdDNWi/Gm7Rpxs/ybvljPWvULys/wrzIV3jB3YvEc3nQ==", + "dev": true, + "requires": { + "debug": "2.6.8", + "finalhandler": "1.0.4", + "parseurl": "1.3.1", + "utils-merge": "1.0.0" + } + }, + "connect-history-api-fallback": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz", + "integrity": "sha1-5R0X+PDvDbkKZP20feMFFVbp8Wk=", + "dev": true + }, + "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 + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=", + "dev": true + }, + "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=", + "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 + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "core-js": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "crc32-stream": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-0.3.4.tgz", + "integrity": "sha1-c7wltF+sHbZjIjGnv86JJ+nwZVI=", + "dev": true, + "requires": { + "buffer-crc32": "0.2.13", + "readable-stream": "1.0.34" + }, + "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 + } + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "crypto-browserify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.3.0.tgz", + "integrity": "sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=", + "dev": true, + "requires": { + "browserify-aes": "0.4.0", + "pbkdf2-compat": "2.0.1", + "ripemd160": "0.2.0", + "sha.js": "2.2.6" + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "ctype": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", + "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "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 + }, + "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 + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "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.1" + } + }, + "delayed-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", + "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", + "dev": true + }, + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "doctrine": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", + "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + }, + "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" + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "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 + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", + "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "engine.io": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", + "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "ws": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", + "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.2", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.7", + "wtf-8": "1.0.0" + } + }, + "enhanced-resolve": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", + "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.2.0", + "tapable": "0.1.10" + }, + "dependencies": { + "memory-fs": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", + "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=", + "dev": true + } + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "errno": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "dev": true, + "requires": { + "prr": "0.0.0" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es5-shim": { + "version": "4.5.9", + "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.9.tgz", + "integrity": "sha1-Kh4rnlg/9f7Qwgo+4svz91IwpcA=", + "dev": true + }, + "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": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "eslint": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.5.0.tgz", + "integrity": "sha1-u3XTuL3pf7XhPvzVOXRGd/6wGcM=", + "dev": true, + "requires": { + "ajv": "5.2.2", + "babel-code-frame": "6.26.0", + "chalk": "2.1.0", + "concat-stream": "1.6.0", + "cross-spawn": "5.1.0", + "debug": "2.6.8", + "doctrine": "2.0.0", + "eslint-scope": "3.7.1", + "espree": "3.5.0", + "esquery": "1.0.0", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.2", + "globals": "9.18.0", + "ignore": "3.3.3", + "imurmurhash": "0.1.4", + "inquirer": "3.2.2", + "is-resolvable": "1.0.0", + "js-yaml": "3.9.1", + "json-stable-stringify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "4.0.0", + "progress": "2.0.0", + "require-uncached": "1.0.3", + "semver": "5.4.1", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", + "table": "4.0.1", + "text-table": "0.2.0" + }, + "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 + }, + "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.2.1" + } + }, + "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" + } + }, + "supports-color": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "eslint-config-tui": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-tui/-/eslint-config-tui-1.0.1.tgz", + "integrity": "sha1-JucANlNMi6izlRJP7cgN3wros1I=", + "dev": true + }, + "eslint-loader": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-1.9.0.tgz", + "integrity": "sha512-40aN976qSNPyb9ejTqjEthZITpls1SVKtwguahmH1dzGCwQU/vySE+xX33VZmD8csU0ahVNCtFlsPgKqRBiqgg==", + "dev": true, + "requires": { + "loader-fs-cache": "1.0.1", + "loader-utils": "1.1.0", + "object-assign": "4.1.1", + "object-hash": "1.1.8", + "rimraf": "2.6.1" + }, + "dependencies": { + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + } + } + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "4.2.0", + "estraverse": "4.2.0" + } + }, + "espree": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.0.tgz", + "integrity": "sha1-mDWGJb3QVYYeon4oZ+pyn69GPY0=", + "dev": true, + "requires": { + "acorn": "5.1.1", + "acorn-jsx": "3.0.1" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "esquery": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "esrecurse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "dev": true, + "requires": { + "estraverse": "4.2.0", + "object-assign": "4.1.1" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", + "integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE=", + "dev": true + }, + "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 + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true, + "requires": { + "original": "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", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "express": { + "version": "4.15.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.15.4.tgz", + "integrity": "sha1-Ay4iU0ic+PzgJma+yj0R7XotrtE=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "array-flatten": "1.1.1", + "content-disposition": "0.5.2", + "content-type": "1.0.2", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.8", + "depd": "1.1.1", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.0", + "finalhandler": "1.0.4", + "fresh": "0.5.0", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.1", + "path-to-regexp": "0.1.7", + "proxy-addr": "1.1.5", + "qs": "6.5.0", + "range-parser": "1.2.0", + "send": "0.15.4", + "serve-static": "1.12.4", + "setprototypeof": "1.0.3", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.0", + "vary": "1.1.1" + }, + "dependencies": { + "qs": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz", + "integrity": "sha512-fjVFjW9yhqMhVGwRExCXLhJKrLlkYSaxNWdyc9rmHlrVZbk35YHH312dFd7191uQeXkI3mKLZTIbSvIeFwFemg==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "external-editor": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz", + "integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=", + "dev": true, + "requires": { + "iconv-lite": "0.4.18", + "jschardet": "1.5.1", + "tmp": "0.0.31" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "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=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": "0.6.5" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "1.2.2", + "object-assign": "4.1.1" + } + }, + "file-saver": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.3.tgz", + "integrity": "sha1-zdTETTqiZOrC9o7BZbx5HDSvEjI=", + "dev": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "finalhandler": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.4.tgz", + "integrity": "sha512-16l/r8RgzlXKmFOhZpHBztvye+lAhC5SU7hXavnerC9UfZqZxxXl3BzL8MhffPT3kF61lj9Oav2LKEzh0ei7tg==", + "dev": true, + "requires": { + "debug": "2.6.8", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.1", + "statuses": "1.3.1", + "unpipe": "1.0.0" + } + }, + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + } + }, + "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" + } + }, + "flat-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", + "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, + "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", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz", + "integrity": "sha1-Jvi8JtpkQOKZy9z7aQNcT3em5GY=", + "dev": true, + "requires": { + "async": "0.9.2", + "combined-stream": "0.0.7", + "mime-types": "2.0.14" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, + "mime-db": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", + "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=", + "dev": true + }, + "mime-types": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", + "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", + "dev": true, + "requires": { + "mime-db": "1.12.0" + } + } + } + }, + "forwarded": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz", + "integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M=", + "dev": true + }, + "fresh": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", + "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=", + "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.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.6.2", + "node-pre-gyp": "0.6.36" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "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" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "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", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.36", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "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.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "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 + }, + "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, + "requires": { + "is-property": "1.0.2" + } + }, + "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 + }, + "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-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "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" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "handlebars": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", + "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "har-validator": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-1.8.0.tgz", + "integrity": "sha1-2DhCsOtMQ1lgrrEIoGejqpTA7rI=", + "dev": true, + "requires": { + "bluebird": "2.11.0", + "chalk": "1.1.3", + "commander": "2.11.0", + "is-my-json-valid": "2.16.1" + }, + "dependencies": { + "bluebird": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", + "dev": true + } + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "dev": true, + "requires": { + "isarray": "0.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 + } + } + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "hawk": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz", + "integrity": "sha1-HnMc45RH+h0PbXB/e87r7A/R7B8=", + "dev": 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 + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.4.1", + "domutils": "1.5.1", + "entities": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "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.3.1" + } + }, + "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-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "dev": true, + "requires": { + "http-proxy": "1.16.2", + "is-glob": "3.1.0", + "lodash": "4.17.4", + "micromatch": "2.3.11" + }, + "dependencies": { + "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": "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" + } + } + } + }, + "http-signature": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", + "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", + "dev": true, + "requires": { + "asn1": "0.1.11", + "assert-plus": "0.1.5", + "ctype": "0.5.3" + } + }, + "https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", + "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==", + "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.3", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.3.tgz", + "integrity": "sha1-QyNS5XrM2HqzEQ6C0/6g5HgSFW0=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "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" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "inquirer": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.2.tgz", + "integrity": "sha512-bTKLzEHJVATimZO/YFdLrom0lRx1BHfRYskFHfIMVkGdp8+dIZaxuU+4yrsS1lcu6YWywVQVVsfvdwESzbeqHw==", + "dev": true, + "requires": { + "ansi-escapes": "2.0.0", + "chalk": "2.1.0", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.0.4", + "figures": "2.0.0", + "lodash": "4.17.4", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + }, + "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 + }, + "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.2.1" + } + }, + "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" + } + }, + "supports-color": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", + "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "interpret": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz", + "integrity": "sha1-/s16GOfOXKar+5U+H4YhOknxYls=", + "dev": true + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "ip": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/ip/-/ip-0.3.3.tgz", + "integrity": "sha1-jugwnpLwsEDSh/cu+soaIXAtP7Q=", + "dev": true + }, + "ipaddr.js": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", + "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.10.0" + } + }, + "is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-my-json-valid": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", + "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "1.0.0" + } + }, + "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=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "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 + }, + "is-resolvable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", + "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", + "dev": true, + "requires": { + "tryit": "1.0.3" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "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", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "requires": { + "abbrev": "1.0.9", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "2.7.3", + "glob": "5.0.15", + "handlebars": "4.0.10", + "js-yaml": "3.9.1", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "once": "1.4.0", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "1.3.0", + "wordwrap": "1.0.0" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "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" + } + }, + "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", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-instrumenter-loader": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-1.2.0.tgz", + "integrity": "sha1-vvRpBJuBsjWB0NTbN6JxIGAzzFI=", + "dev": true, + "requires": { + "convert-source-map": "1.5.0", + "istanbul-lib-instrument": "1.7.5", + "loader-utils": "0.2.17", + "object-assign": "4.1.1" + } + }, + "istanbul-lib-coverage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", + "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.5.tgz", + "integrity": "sha1-rbWW+PDLi5XnOSBjUaOKWGryGx4=", + "dev": true, + "requires": { + "babel-generator": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.1.1", + "semver": "5.4.1" + } + }, + "jasmine-core": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", + "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", + "dev": true + }, + "jasmine-jquery": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/jasmine-jquery/-/jasmine-jquery-2.1.1.tgz", + "integrity": "sha1-1AleZGlEomdjI1dpqwGNnzDw1Hs=", + "dev": true + }, + "jquery": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", + "integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c=", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz", + "integrity": "sha512-CbcG379L1e+mWBnLvHWWeLs8GyV/EMw862uLI3c+GxVyDHWZcjZinwuBd3iW2pgxgIlksW/1vNJa4to+RvDOww==", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } + }, + "js2xmlparser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", + "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", + "dev": true, + "requires": { + "xmlcreate": "1.0.2" + } + }, + "jschardet": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.5.1.tgz", + "integrity": "sha512-vE2hT1D0HLZCLLclfBSfkfTTedhVj0fubHpJBHKwwUWX0nSbhPAfk+SG9rTX95BYNmau8rGFfCeaT6T5OW1C2A==", + "dev": true + }, + "jsdoc": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.4.tgz", + "integrity": "sha512-VmTw0J+2L16IxAe0JSDSAcH0F+DbZxaj8wN1AjHtKMQU/hO0ciIl5ZE93XqrrFIbknobuqHKJCXZj6+Hk57MjA==", + "dev": true, + "requires": { + "babylon": "7.0.0-beta.20", + "bluebird": "3.5.0", + "catharsis": "0.8.9", + "escape-string-regexp": "1.0.5", + "js2xmlparser": "3.0.0", + "klaw": "2.0.0", + "marked": "0.3.6", + "mkdirp": "0.5.1", + "requizzle": "0.2.1", + "strip-json-comments": "2.0.1", + "taffydb": "2.6.2", + "underscore": "1.8.3" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.20", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.20.tgz", + "integrity": "sha512-kkMTbo/6QmDD+ggF4KaeMLNvf+RfHVtC4mZJcGDZsbQvRqUgG4yWdy6fh3FZbwwLX9BD6PGmAeKN08P5O8pGLQ==", + "dev": true + } + } + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "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=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "karma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.0.tgz", + "integrity": "sha1-b3oaQGRG+i4YfslTmGmPTO5HYmk=", + "dev": true, + "requires": { + "bluebird": "3.5.0", + "body-parser": "1.17.2", + "chokidar": "1.7.0", + "colors": "1.1.2", + "combine-lists": "1.0.1", + "connect": "3.6.3", + "core-js": "2.4.1", + "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": "3.10.1", + "log4js": "0.6.38", + "mime": "1.3.6", + "minimatch": "3.0.4", + "optimist": "0.6.1", + "qjobs": "1.1.5", + "range-parser": "1.2.0", + "rimraf": "2.6.1", + "safe-buffer": "5.1.1", + "socket.io": "1.7.3", + "source-map": "0.5.7", + "tmp": "0.0.31", + "useragent": "2.2.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "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": { + "fs-access": "1.0.1", + "which": "1.3.0" + } + }, + "karma-coverage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.1.tgz", + "integrity": "sha1-Wv+LOc9plNwi3kyENix2ABtjfPY=", + "dev": true, + "requires": { + "dateformat": "1.0.12", + "istanbul": "0.4.5", + "lodash": "3.10.1", + "minimatch": "3.0.4", + "source-map": "0.5.7" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "karma-es5-shim": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/karma-es5-shim/-/karma-es5-shim-0.0.4.tgz", + "integrity": "sha1-zdADM8znfC5M4D46yT8vjs0fuVI=", + "dev": true, + "requires": { + "es5-shim": "4.5.9" + } + }, + "karma-jasmine": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.0.tgz", + "integrity": "sha1-IuTAa/mhguUpTR9wXjczgRuBCs8=", + "dev": true + }, + "karma-jquery": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/karma-jquery/-/karma-jquery-0.2.2.tgz", + "integrity": "sha1-a+6TRU2LCWvMeBVXCoHnP93bXW8=", + "dev": true + }, + "karma-junit-reporter": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/karma-junit-reporter/-/karma-junit-reporter-1.2.0.tgz", + "integrity": "sha1-T5xAzt+xo5X4rvh2q/lhiZF8Y5Y=", + "dev": true, + "requires": { + "path-is-absolute": "1.0.1", + "xmlbuilder": "8.2.2" + } + }, + "karma-sourcemap-loader": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", + "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "karma-webdriver-launcher": { + "version": "git+https://github.com/nhnent/karma-webdriver-launcher.git#a9126efddabc0e20005091349a678fc211db3bcb", + "dev": true, + "requires": { + "ip": "0.3.3", + "wd": "0.3.12" + } + }, + "karma-webpack": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-1.8.1.tgz", + "integrity": "sha1-OdX9Lt7qPMPvW0BZibN9Ww5qO04=", + "dev": true, + "requires": { + "async": "0.9.2", + "loader-utils": "0.2.17", + "lodash": "3.10.1", + "source-map": "0.1.43", + "webpack-dev-middleware": "1.12.0" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", + "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lazystream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-0.1.0.tgz", + "integrity": "sha1-GyXWPHcqTCDwpe0KnXf0hLbhaSA=", + "dev": true, + "requires": { + "readable-stream": "1.0.34" + }, + "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 + } + } + }, + "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" + } + }, + "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" + } + }, + "loader-fs-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz", + "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", + "dev": true, + "requires": { + "find-cache-dir": "0.1.1", + "mkdirp": "0.5.1" + } + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.1.3", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", + "dev": true + }, + "lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", + "dev": true + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", + "dev": true + }, + "lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz", + "integrity": "sha1-aYhLoUSsM/5plzemCG3v+t0PicU=", + "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.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", + "dev": true + }, + "lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", + "dev": true + }, + "lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", + "dev": true + }, + "log4js": { + "version": "0.6.38", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "semver": "4.3.6" + }, + "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" + } + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "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 + } + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "marked": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz", + "integrity": "sha1-ssbGGPzOzk74bE/Gy4p8v1rtqNc=", + "dev": true + }, + "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 + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "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=", + "dev": true + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.3" + } + }, + "mime": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "dev": true + }, + "mime-db": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", + "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=", + "dev": true + }, + "mime-types": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", + "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", + "dev": true, + "requires": { + "mime-db": "1.29.0" + } + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", + "dev": true, + "optional": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "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 + }, + "node-int64": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.3.3.tgz", + "integrity": "sha1-LW5rLs5d6FiLQ9iNG8QbJs0fqE0=", + "dev": true + }, + "node-libs-browser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.7.0.tgz", + "integrity": "sha1-PicsCBnjCJNeJmdECNevDhSRuDs=", + "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.1.4", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.3.0", + "domain-browser": "1.1.7", + "events": "1.1.1", + "https-browserify": "0.0.1", + "os-browserify": "0.2.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.3", + "stream-browserify": "2.0.1", + "stream-http": "2.7.2", + "string_decoder": "0.10.31", + "timers-browserify": "2.0.4", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.0.9" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.4.1", + "validate-npm-package-license": "3.0.1" + } + }, + "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" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "1.0.0" + } + }, + "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 + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.6.0.tgz", + "integrity": "sha1-fb6uRPbKRU4fFoRR1jB0ZzWBPOM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "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-hash": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.1.8.tgz", + "integrity": "sha1-KKZZz5h9lqTavnhgKJ87UybEoDw=", + "dev": true + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "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" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, + "open": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/open/-/open-0.0.5.tgz", + "integrity": "sha1-QsPhjslUZra/DcQvOilFw/DK2Pw=", + "dev": true + }, + "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.8", + "wordwrap": "0.0.3" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "original": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", + "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", + "dev": true, + "requires": { + "url-parse": "1.0.5" + }, + "dependencies": { + "url-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", + "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", + "dev": true, + "requires": { + "querystringify": "0.0.4", + "requires-port": "1.0.0" + } + } + } + }, + "os-browserify": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", + "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.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" + } + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "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": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", + "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-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-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "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" + } + }, + "pbkdf2-compat": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz", + "integrity": "sha1-tuDI+plJTZTgURV1gCpZpcFC8og=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "1.1.2" + } + }, + "pluralize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-4.0.0.tgz", + "integrity": "sha1-WbcIwcAZCi9pLxx2GMRGsFL9F2I=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "private": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", + "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", + "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=", + "dev": true + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "proxy-addr": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", + "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=", + "dev": true, + "requires": { + "forwarded": "0.1.0", + "ipaddr.js": "1.4.0" + } + }, + "prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", + "dev": true + }, + "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=", + "dev": true + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true + }, + "qjobs": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", + "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", + "dev": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", + "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "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.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", + "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", + "dev": true, + "requires": { + "bytes": "2.4.0", + "iconv-lite": "0.4.15", + "unpipe": "1.0.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 + } + } + }, + "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" + } + }, + "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==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "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=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "regenerate": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", + "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=", + "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==", + "dev": true + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.7" + } + }, + "regex-cache": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3", + "is-primitive": "2.0.0" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "1.3.2", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.55.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.55.0.tgz", + "integrity": "sha1-11wc32eddrsQD5v/4f5VG1wk6T0=", + "dev": true, + "requires": { + "aws-sign2": "0.5.0", + "bl": "0.9.5", + "caseless": "0.9.0", + "combined-stream": "0.0.7", + "forever-agent": "0.6.1", + "form-data": "0.2.0", + "har-validator": "1.8.0", + "hawk": "2.3.1", + "http-signature": "0.10.1", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.0.14", + "node-uuid": "1.4.8", + "oauth-sign": "0.6.0", + "qs": "2.4.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3" + }, + "dependencies": { + "mime-db": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", + "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=", + "dev": true + }, + "mime-types": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", + "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", + "dev": true, + "requires": { + "mime-db": "1.12.0" + } + }, + "qs": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-2.4.2.tgz", + "integrity": "sha1-9854jld33wtQENp/fE5zujJHD1o=", + "dev": true + } + } + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "requizzle": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", + "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", + "dev": true, + "requires": { + "underscore": "1.6.0" + }, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "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 + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "ripemd160": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz", + "integrity": "sha1-K/GYveFnys+lHAqSjoS2i74XH84=", + "dev": true + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "2.1.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "4.0.8" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "safe-umd-webpack-plugin": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/safe-umd-webpack-plugin/-/safe-umd-webpack-plugin-0.0.2.tgz", + "integrity": "sha512-DqukDpy05ov+d3uVIqSXIsyqc4dPB4pUxlezEdEWT5RgE3CDpcwouTUOns0u/QyvdugIrtodngMp+VYWXrxA9A==", + "dev": true, + "requires": { + "webpack-core": "0.6.9" + } + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + }, + "send": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/send/-/send-0.15.4.tgz", + "integrity": "sha1-mF+qPihLAnPHkzZKNcZze9k5Bbk=", + "dev": true, + "requires": { + "debug": "2.6.8", + "depd": "1.1.1", + "destroy": "1.0.4", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.0", + "fresh": "0.5.0", + "http-errors": "1.6.2", + "mime": "1.3.4", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + }, + "dependencies": { + "mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.0.tgz", + "integrity": "sha1-0rKA/FYNYW7oG0i/D6gqvtJIXOc=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "batch": "0.6.1", + "debug": "2.6.8", + "escape-html": "1.0.3", + "http-errors": "1.6.2", + "mime-types": "2.1.16", + "parseurl": "1.3.1" + } + }, + "serve-static": { + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.4.tgz", + "integrity": "sha1-m2qpjutyU8Tu3Ewfb9vKYJkBqWE=", + "dev": true, + "requires": { + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "parseurl": "1.3.1", + "send": "0.15.4" + } + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "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.2.6", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.2.6.tgz", + "integrity": "sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "simulant": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simulant/-/simulant-0.2.2.tgz", + "integrity": "sha1-8bzlJxK2p6DaON392n6DsgsdoB4=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "socket.io": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", + "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "dev": true, + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.3", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.7.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "dev": true, + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-client": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", + "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.3", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "dev": true, + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "sockjs": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", + "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=", + "dev": true, + "requires": { + "faye-websocket": "0.10.0", + "uuid": "2.0.3" + } + }, + "sockjs-client": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "dev": true, + "requires": { + "debug": "2.6.8", + "eventsource": "0.1.6", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.1.9" + }, + "dependencies": { + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true, + "requires": { + "websocket-driver": "0.6.5" + } + } + } + }, + "source-list-map": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", + "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.16.tgz", + "integrity": "sha512-A6vlydY7H/ljr4L2UOhDSajQdZQ6dMD7cLH0pzwcmwLyc9u8PNI4WGtnfDDzX7uzGL6c/T+ORL97Zlh+S4iOrg==", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "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=", + "dev": true + }, + "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=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "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.3" + } + }, + "stream-cache": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stream-cache/-/stream-cache-0.0.2.tgz", + "integrity": "sha1-GsWtaDJCjKVWZ9ve45Xa1ObbEY8=", + "dev": true + }, + "stream-http": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "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 + }, + "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" + } + } + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.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" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "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 + }, + "table": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.1.tgz", + "integrity": "sha1-qBFsEz+sLGH0pCCrbN9cTWHw5DU=", + "dev": true, + "requires": { + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "chalk": "1.1.3", + "lodash": "4.17.4", + "slice-ansi": "0.0.4", + "string-width": "2.1.1" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + } + } + }, + "taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true + }, + "tapable": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", + "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=", + "dev": true + }, + "tar-stream": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.1.5.tgz", + "integrity": "sha1-vpIYwTDCACnhB7D5Z/sj3gV50Tw=", + "dev": true, + "requires": { + "bl": "0.9.5", + "end-of-stream": "1.4.0", + "readable-stream": "1.0.34", + "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 + } + } + }, + "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 + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "time-stamp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", + "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true, + "requires": { + "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", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "dev": 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=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tryit": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", + "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tui-code-snippet": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/tui-code-snippet/-/tui-code-snippet-1.2.5.tgz", + "integrity": "sha512-QnDL8t3ltXPhc1v7FQj9DrzGIiw+MKgNBpd4Q9DZnqmAnFUEko3ZigheP7moU+7/v/EeASGj+tCOy2Ru4CUR3g==" + }, + "tui-jsdoc-template": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tui-jsdoc-template/-/tui-jsdoc-template-1.2.2.tgz", + "integrity": "sha512-oqw0IYaot86VJ2owKBozJnilgta0Z55x8r9PeHj7vb+jDoSvJGRUQUcgs56SZh9HE20fx54Pe75p84X85/ygLA==", + "dev": true, + "requires": { + "cheerio": "0.22.0" + } + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.16" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "dev": true + }, + "underscore-contrib": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", + "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", + "dev": true, + "requires": { + "underscore": "1.6.0" + }, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, + "underscore.string": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.0.3.tgz", + "integrity": "sha1-Rhe4waJQz25QZPu7Nj0PqWzxRVI=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "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": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz", + "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=", + "dev": true, + "requires": { + "querystringify": "1.0.0", + "requires-port": "1.0.0" + }, + "dependencies": { + "querystringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", + "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", + "dev": true + } + } + }, + "useragent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", + "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", + "dev": true, + "requires": { + "lru-cache": "2.2.4", + "tmp": "0.0.31" + }, + "dependencies": { + "lru-cache": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", + "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", + "dev": true + } + } + }, + "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 + }, + "utils-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", + "dev": true + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": 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=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "vargs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vargs/-/vargs-0.1.0.tgz", + "integrity": "sha1-a2GE2mUgzDIEzhtAfKwm2SYJ6/8=", + "dev": true + }, + "vary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", + "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=", + "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 + }, + "watchpack": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz", + "integrity": "sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=", + "dev": true, + "requires": { + "async": "0.9.2", + "chokidar": "1.7.0", + "graceful-fs": "4.1.11" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + } + } + }, + "wd": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/wd/-/wd-0.3.12.tgz", + "integrity": "sha1-P7Tx11n4yF3eU5PRczT/4D6bsyk=", + "dev": true, + "requires": { + "archiver": "0.14.4", + "async": "1.0.0", + "lodash": "3.9.3", + "q": "1.4.1", + "request": "2.55.0", + "underscore.string": "3.0.3", + "vargs": "0.1.0" + }, + "dependencies": { + "async": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=", + "dev": true + }, + "lodash": { + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.9.3.tgz", + "integrity": "sha1-AVnoaDL+/8bWHYUrEqlTuZSWvTI=", + "dev": true + } + } + }, + "webpack": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.15.0.tgz", + "integrity": "sha1-T/MfU9sDM55VFkqdRo7gMklo/pg=", + "dev": true, + "requires": { + "acorn": "3.3.0", + "async": "1.5.2", + "clone": "1.0.2", + "enhanced-resolve": "0.9.1", + "interpret": "0.6.6", + "loader-utils": "0.2.17", + "memory-fs": "0.3.0", + "mkdirp": "0.5.1", + "node-libs-browser": "0.7.0", + "optimist": "0.6.1", + "supports-color": "3.2.3", + "tapable": "0.1.10", + "uglify-js": "2.7.5", + "watchpack": "0.2.9", + "webpack-core": "0.6.9" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "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 + }, + "memory-fs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz", + "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=", + "dev": true, + "requires": { + "errno": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + }, + "uglify-js": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz", + "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=", + "dev": true, + "requires": { + "async": "0.2.10", + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + } + } + } + } + }, + "webpack-core": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", + "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", + "dev": true, + "requires": { + "source-list-map": "0.1.8", + "source-map": "0.4.4" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "webpack-dev-middleware": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz", + "integrity": "sha1-007++y7dp+HTtdvgcolRMhllFwk=", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.3.6", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "time-stamp": "2.0.0" + } + }, + "webpack-dev-server": { + "version": "1.16.5", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-1.16.5.tgz", + "integrity": "sha1-DL1fLSrI1OWTqs1clwLnu9XlmJI=", + "dev": true, + "requires": { + "compression": "1.7.0", + "connect-history-api-fallback": "1.3.0", + "express": "4.15.4", + "http-proxy-middleware": "0.17.4", + "open": "0.0.5", + "optimist": "0.6.1", + "serve-index": "1.9.0", + "sockjs": "0.3.18", + "sockjs-client": "1.1.4", + "stream-cache": "0.0.2", + "strip-ansi": "3.0.1", + "supports-color": "3.2.3", + "webpack-dev-middleware": "1.12.0" + }, + "dependencies": { + "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", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dev": true, + "requires": { + "websocket-extensions": "0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", + "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=", + "dev": true + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } + }, + "ws": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "dev": true, + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", + "dev": true + }, + "xmlbuilder": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", + "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=", + "dev": true + }, + "xmlcreate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", + "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + } + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + }, + "zip-stream": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-0.5.2.tgz", + "integrity": "sha1-Mty8UG0Nq00hNyYlvX66rDwv/1Y=", + "dev": true, + "requires": { + "compress-commons": "0.2.9", + "lodash": "3.2.0", + "readable-stream": "1.0.34" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "lodash": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.2.0.tgz", + "integrity": "sha1-S/UKMkP5rrC6xBpV09WZBnWkYvs=", + "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 + } + } + } + } +} diff --git a/package.json b/package.json index 4e9e6cb50..d855db9c0 100644 --- a/package.json +++ b/package.json @@ -1,32 +1,46 @@ { "name": "tui-image-editor", "author": "NHNEnt FE Development Lab ", - "version": "2.0.0", + "version": "3.0.0", "license": "MIT", - "repository": "https://github.com/nhnent/tui.component.image-editor", - "description": "", + "repository": "https://github.com/nhnent/tui.image-editor", + "main": "dist/tui-image-editor.js", + "description": "TOAST UI Component: ImageEditor", + "keywords": [ + "nhnent", + "tui", + "component", + "image", + "editor", + "canvas", + "fabric" + ], "devDependencies": { "babel-core": "^6.18.2", "babel-eslint": "^7.1.0", "babel-loader": "^6.2.7", "babel-preset-es2015": "^6.18.0", "es5-shim": "^4.5.9", - "eslint": "^3.10.2", + "eslint": "^4.5.0", + "eslint-config-tui": "^1.0.1", "eslint-loader": "^1.6.1", + "file-saver": "^1.3.3", "istanbul-instrumenter-loader": "^1.0.0", "jasmine-core": "^2.4.1", "jasmine-jquery": "^2.1.0", + "jquery": "^3.2.1", + "jsdoc": "^3.5.4", "karma": "^1.3.0", - "karma-browserstack-launcher": "^1.1.1", "karma-chrome-launcher": "^2.0.0", - "karma-coverage": "latest", + "karma-coverage": "^1.1.1", + "karma-es5-shim": "0.0.4", "karma-jasmine": "^1.0.2", - "karma-junit-reporter": "latest", - "karma-phantomjs-launcher": "^1.0.0", + "karma-jquery": "^0.2.2", + "karma-junit-reporter": "^1.2.0", "karma-sourcemap-loader": "^0.3.7", - "karma-webdriver-launcher": "git+https://github.com/everedifice/karma-webdriver-launcher.git", + "karma-webdriver-launcher": "git+https://github.com/nhnent/karma-webdriver-launcher.git#v1.1.0", "karma-webpack": "^1.8.0", - "phantomjs-prebuilt": "^2.1.5", + "safe-umd-webpack-plugin": "0.0.2", "simulant": "^0.2.2", "tui-jsdoc-template": "^1.0.4", "webpack": "^1.13.3", @@ -34,14 +48,15 @@ }, "scripts": { "test": "karma start --no-single-run", - "test:bs": "KARMA_SERVER=bs karma start", "test:ne": "KARMA_SERVER=ne karma start", "bundle": "webpack && webpack -p", - "serve": "webpack-dev-server -d", - "cpy-dist2doc": "mkdir -p doc/dist && cp -f dist/tui-image-editor.js doc/dist", - "doc": "./node_modules/.bin/jsdoc -c jsdoc-conf.json && npm run cpy-dist2doc" + "serve": "webpack-dev-server --inline --hot -d", + "cpy-dist2doc": "mkdir -p doc/dist && cp -f -r dist doc", + "doc": "jsdoc -c jsdoc.conf.json && npm run cpy-dist2doc", + "postinstall": "npm install --no-save --no-optional fabric@~1.6.7" }, "dependencies": { - "core-js": "2.4.1" + "core-js": "2.4.1", + "tui-code-snippet": "^1.2.5" } } diff --git a/src/index.js b/src/index.js index 3395f5f92..cc3a028bd 100644 --- a/src/index.js +++ b/src/index.js @@ -21,4 +21,4 @@ import './js/command/rotate'; import './js/command/setObjectProperties'; import './js/command/setObjectPosition'; -tui.util.defineNamespace('tui.component.ImageEditor', ImageEditor, true); +module.exports = ImageEditor; diff --git a/src/js/command/addIcon.js b/src/js/command/addIcon.js index 67fe39e81..2eae5b0d7 100644 --- a/src/js/command/addIcon.js +++ b/src/js/command/addIcon.js @@ -24,10 +24,9 @@ const command = { */ execute(graphics, type, options) { const iconComp = graphics.getComponent(ICON); - const undoData = this.undoData; return iconComp.add(type, options).then(objectProps => { - undoData.object = graphics.getObject(objectProps.id); + this.undoData.object = graphics.getObject(objectProps.id); return objectProps; }); diff --git a/src/js/command/addImageObject.js b/src/js/command/addImageObject.js index be824d3fe..5c262a779 100644 --- a/src/js/command/addImageObject.js +++ b/src/js/command/addImageObject.js @@ -18,10 +18,8 @@ const command = { * @returns {Promise} */ execute(graphics, imgUrl) { - const undoData = this.undoData; - return graphics.addImageObject(imgUrl).then(objectProps => { - undoData.object = graphics.getObject(objectProps.id); + this.undoData.object = graphics.getObject(objectProps.id); return objectProps; }); diff --git a/src/js/command/addShape.js b/src/js/command/addShape.js index 1aab0adba..0a6f804ac 100644 --- a/src/js/command/addShape.js +++ b/src/js/command/addShape.js @@ -31,10 +31,9 @@ const command = { */ execute(graphics, type, options) { const shapeComp = graphics.getComponent(SHAPE); - const undoData = this.undoData; return shapeComp.add(type, options).then(objectProps => { - undoData.object = graphics.getObject(objectProps.id); + this.undoData.object = graphics.getObject(objectProps.id); return objectProps; }); diff --git a/src/js/command/addText.js b/src/js/command/addText.js index bdf8cbab8..2adb8d14b 100644 --- a/src/js/command/addText.js +++ b/src/js/command/addText.js @@ -30,10 +30,9 @@ const command = { */ execute(graphics, text, options) { const textComp = graphics.getComponent(TEXT); - const undoData = this.undoData; return textComp.add(text, options).then(objectProps => { - undoData.object = graphics.getObject(objectProps.id); + this.undoData.object = graphics.getObject(objectProps.id); return objectProps; }); diff --git a/src/js/command/changeIconColor.js b/src/js/command/changeIconColor.js index 9ea249f2f..2c5c70aac 100644 --- a/src/js/command/changeIconColor.js +++ b/src/js/command/changeIconColor.js @@ -40,8 +40,7 @@ const command = { */ undo(graphics) { const iconComp = graphics.getComponent(ICON); - const icon = this.undoData.object; - const color = this.undoData.color; + const {object: icon, color} = this.undoData.object; iconComp.setColor(color, icon); diff --git a/src/js/command/changeShape.js b/src/js/command/changeShape.js index f105f34cf..9266d11ea 100644 --- a/src/js/command/changeShape.js +++ b/src/js/command/changeShape.js @@ -2,6 +2,7 @@ * @author NHN Ent. FE Development Team * @fileoverview change a shape */ +import snippet from 'tui-code-snippet'; import commandFactory from '../factory/command'; import Promise from 'core-js/library/es6/promise'; import consts from '../consts'; @@ -32,16 +33,15 @@ const command = { execute(graphics, id, options) { const shapeComp = graphics.getComponent(SHAPE); const targetObj = graphics.getObject(id); - const undoData = this.undoData; if (!targetObj) { return Promise.reject(rejectMessages.noObject); } - undoData.object = targetObj; - undoData.options = {}; - tui.util.forEachOwnProperties(options, (value, key) => { - undoData.options[key] = targetObj[key]; + this.undoData.object = targetObj; + this.undoData.options = {}; + snippet.forEachOwnProperties(options, (value, key) => { + this.undoData.options[key] = targetObj[key]; }); return shapeComp.change(targetObj, options); @@ -52,8 +52,7 @@ const command = { */ undo(graphics) { const shapeComp = graphics.getComponent(SHAPE); - const shape = this.undoData.object; - const options = this.undoData.options; + const {object: shape, options} = this.undoData; return shapeComp.change(shape, options); } diff --git a/src/js/command/changeText.js b/src/js/command/changeText.js index 326c9c6f3..b7ad4b60a 100644 --- a/src/js/command/changeText.js +++ b/src/js/command/changeText.js @@ -22,14 +22,13 @@ const command = { execute(graphics, id, text) { const textComp = graphics.getComponent(TEXT); const targetObj = graphics.getObject(id); - const undoData = this.undoData; if (!targetObj) { return Promise.reject(rejectMessages.noObject); } - undoData.object = targetObj; - undoData.text = textComp.getText(targetObj); + this.undoData.object = targetObj; + this.undoData.text = textComp.getText(targetObj); return textComp.change(targetObj, text); }, @@ -39,8 +38,7 @@ const command = { */ undo(graphics) { const textComp = graphics.getComponent(TEXT); - const textObj = this.undoData.object; - const text = this.undoData.text; + const {object: textObj, text} = this.undoData; return textComp.change(textObj, text); } diff --git a/src/js/command/changeTextStyle.js b/src/js/command/changeTextStyle.js index 985ff02a5..551ffbfa3 100644 --- a/src/js/command/changeTextStyle.js +++ b/src/js/command/changeTextStyle.js @@ -2,6 +2,7 @@ * @author NHN Ent. FE Development Team * @fileoverview Change text styles */ +import snippet from 'tui-code-snippet'; import commandFactory from '../factory/command'; import Promise from 'core-js/library/es6/promise'; import consts from '../consts'; @@ -29,16 +30,15 @@ const command = { execute(graphics, id, styles) { const textComp = graphics.getComponent(TEXT); const targetObj = graphics.getObject(id); - const undoData = this.undoData; if (!targetObj) { return Promise.reject(rejectMessages.noObject); } - undoData.object = targetObj; - undoData.styles = {}; - tui.util.forEachOwnProperties(styles, (value, key) => { - undoData.styles[key] = targetObj[key]; + this.undoData.object = targetObj; + this.undoData.styles = {}; + snippet.forEachOwnProperties(styles, (value, key) => { + this.undoData.styles[key] = targetObj[key]; }); return textComp.setStyle(targetObj, styles); @@ -49,8 +49,7 @@ const command = { */ undo(graphics) { const textComp = graphics.getComponent(TEXT); - const textObj = this.undoData.object; - const styles = this.undoData.styles; + const {object: textObj, styles} = this.undoData; return textComp.setStyle(textObj, styles); } diff --git a/src/js/command/loadImage.js b/src/js/command/loadImage.js index 5c8d297e7..9e14c5d6c 100644 --- a/src/js/command/loadImage.js +++ b/src/js/command/loadImage.js @@ -43,12 +43,12 @@ const command = { */ undo(graphics) { const loader = graphics.getComponent(IMAGE_LOADER); - const undoData = this.undoData; + const {objects, name, image} = this.undoData; graphics.removeAll(true); - graphics.add(undoData.objects); + graphics.add(objects); - return loader.load(undoData.name, undoData.image); + return loader.load(name, image); } }; diff --git a/src/js/command/removeFilter.js b/src/js/command/removeFilter.js index 20e4fdb49..e68e86950 100644 --- a/src/js/command/removeFilter.js +++ b/src/js/command/removeFilter.js @@ -31,7 +31,7 @@ const command = { */ undo(graphics, type) { const filterComp = graphics.getComponent(FILTER); - const options = this.undoData.options; + const {options} = this.undoData; return filterComp.add(type, options); } diff --git a/src/js/command/removeObject.js b/src/js/command/removeObject.js index 26879df3e..39142688b 100644 --- a/src/js/command/removeObject.js +++ b/src/js/command/removeObject.js @@ -19,9 +19,8 @@ const command = { */ execute(graphics, id) { return new Promise((resolve, reject) => { - const undoData = this.undoData; - undoData.objects = graphics.removeObjectById(id); - if (undoData.objects.length) { + this.undoData.objects = graphics.removeObjectById(id); + if (this.undoData.objects.length) { resolve(); } else { reject(rejectMessages.noObject); diff --git a/src/js/command/rotate.js b/src/js/command/rotate.js index 4b0d33fad..051585790 100644 --- a/src/js/command/rotate.js +++ b/src/js/command/rotate.js @@ -31,7 +31,7 @@ const command = { */ undo(graphics) { const rotationComp = graphics.getComponent(ROTATION); - const angle = this.undoData.angle; + const {angle} = this.undoData; return rotationComp.setAngle(angle); } diff --git a/src/js/command/setObjectPosition.js b/src/js/command/setObjectPosition.js index 86b5cd57b..63883819e 100644 --- a/src/js/command/setObjectPosition.js +++ b/src/js/command/setObjectPosition.js @@ -24,14 +24,13 @@ const command = { */ execute(graphics, id, posInfo) { const targetObj = graphics.getObject(id); - const undoData = this.undoData; if (!targetObj) { return Promise.reject(rejectMessages.noObject); } - undoData.objectId = id; - undoData.props = graphics.getObjectProperties(id, ['left', 'top']); + this.undoData.objectId = id; + this.undoData.props = graphics.getObjectProperties(id, ['left', 'top']); graphics.setObjectPosition(id, posInfo); graphics.renderAll(); @@ -43,8 +42,7 @@ const command = { * @returns {Promise} */ undo(graphics) { - const objectId = this.undoData.objectId; - const props = this.undoData.props; + const {objectId, props} = this.undoData; graphics.setObjectProperties(objectId, props); graphics.renderAll(); diff --git a/src/js/command/setObjectProperties.js b/src/js/command/setObjectProperties.js index 1964640df..24209927d 100644 --- a/src/js/command/setObjectProperties.js +++ b/src/js/command/setObjectProperties.js @@ -2,6 +2,7 @@ * @author NHN Ent. FE Development Team * @fileoverview Set object properties */ +import snippet from 'tui-code-snippet'; import commandFactory from '../factory/command'; import Promise from 'core-js/library/es6/promise'; import consts from '../consts'; @@ -27,15 +28,14 @@ const command = { */ execute(graphics, id, props) { const targetObj = graphics.getObject(id); - const undoData = this.undoData; if (!targetObj) { return Promise.reject(rejectMessages.noObject); } - undoData.props = {}; - tui.util.forEachOwnProperties(props, (value, key) => { - undoData.props[key] = targetObj[key]; + this.undoData.props = {}; + snippet.forEachOwnProperties(props, (value, key) => { + this.undoData.props[key] = targetObj[key]; }); graphics.setObjectProperties(id, props); @@ -48,7 +48,7 @@ const command = { * @returns {Promise} */ undo(graphics, id) { - const props = this.undoData.props; + const {props} = this.undoData; graphics.setObjectProperties(id, props); diff --git a/src/js/component/cropper.js b/src/js/component/cropper.js index 69e423b29..658dff2b4 100644 --- a/src/js/component/cropper.js +++ b/src/js/component/cropper.js @@ -2,15 +2,13 @@ * @author NHN Ent. FE Development Team * @fileoverview Image crop module (start cropping, end cropping) */ +import {fabric} from 'fabric'; import Component from '../interface/component'; import Cropzone from '../extension/cropzone'; -import consts from '../consts'; -import util from '../util'; +import {keyCodes, componentNames} from '../consts'; +import {clamp} from '../util'; const MOUSE_MOVE_THRESHOLD = 10; -const abs = Math.abs; -const clamp = util.clamp; -const keyCodes = consts.keyCodes; /** * Cropper components @@ -21,7 +19,7 @@ const keyCodes = consts.keyCodes; */ class Cropper extends Component { constructor(graphics) { - super(consts.componentNames.CROPPER, graphics); + super(componentNames.CROPPER, graphics); /** * Cropzone @@ -156,11 +154,10 @@ class Cropper extends Component { _onFabricMouseMove(fEvent) { const canvas = this.getCanvas(); const pointer = canvas.getPointer(fEvent.e); - const x = pointer.x; - const y = pointer.y; + const {x, y} = pointer; const cropzone = this._cropzone; - if (abs(x - this._startX) + abs(y - this._startY) > MOUSE_MOVE_THRESHOLD) { + if (Math.abs(x - this._startX) + Math.abs(y - this._startY) > MOUSE_MOVE_THRESHOLD) { cropzone.remove(); cropzone.set(this._calcRectDimensionFromPoint(x, y)); diff --git a/src/js/component/filter.js b/src/js/component/filter.js index a9a7e6af1..69ed58e2b 100644 --- a/src/js/component/filter.js +++ b/src/js/component/filter.js @@ -2,7 +2,9 @@ * @author NHN Ent. FE Development Team * @fileoverview Add filter module */ +import {isUndefined, extend, forEach, filter} from 'tui-code-snippet'; import Promise from 'core-js/library/es6/promise'; +import {fabric} from 'fabric'; import Component from '../interface/component'; import Mask from '../extension/mask'; import consts from '../consts'; @@ -12,12 +14,12 @@ import Emboss from '../extension/emboss'; import ColorFilter from '../extension/colorFilter'; const {rejectMessages} = consts; -const {isUndefined, extend, forEach, defineNamespace} = tui.util; -defineNamespace('fabric.Image.filters.Mask', Mask, true); -defineNamespace('fabric.Image.filters.Blur', Blur, true); -defineNamespace('fabric.Image.filters.Sharpen', Sharpen, true); -defineNamespace('fabric.Image.filters.Emboss', Emboss, true); -defineNamespace('fabric.Image.filters.ColorFilter', ColorFilter, true); +const {filters} = fabric.Image; +filters.Mask = Mask; +filters.Blur = Blur; +filters.Sharpen = Sharpen; +filters.Emboss = Emboss; +filters.ColorFilter = ColorFilter; /** * Filter @@ -41,16 +43,16 @@ class Filter extends Component { return new Promise((resolve, reject) => { const sourceImg = this._getSourceImage(); const canvas = this.getCanvas(); - let filter = this._getFilter(sourceImg, type); - if (!filter) { - filter = this._createFilter(sourceImg, type, options); + let imgFilter = this._getFilter(sourceImg, type); + if (!imgFilter) { + imgFilter = this._createFilter(sourceImg, type, options); } - if (!filter) { + if (!imgFilter) { reject(rejectMessages.invalidParameters); } - this._changeFilterValues(filter, options); + this._changeFilterValues(imgFilter, options); this._apply(sourceImg, () => { canvas.renderAll(); @@ -104,29 +106,29 @@ class Filter extends Component { */ getOptions(type) { const sourceImg = this._getSourceImage(); - const filter = this._getFilter(sourceImg, type); - if (!filter) { + const imgFilter = this._getFilter(sourceImg, type); + if (!imgFilter) { return null; } - return extend({}, filter.options); + return extend({}, imgFilter.options); } /** * Change filter values - * @param {Object} filter object of filter + * @param {Object} imgFilter object of filter * @param {Object} options object * @private */ - _changeFilterValues(filter, options) { + _changeFilterValues(imgFilter, options) { forEach(options, (value, key) => { - if (!isUndefined(filter[key])) { - filter[key] = value; + if (!isUndefined(imgFilter[key])) { + imgFilter[key] = value; } }); - forEach(filter.options, (value, key) => { + forEach(imgFilter.options, (value, key) => { if (!isUndefined(options[key])) { - filter.options[key] = options[key]; + imgFilter.options[key] = options[key]; } }); } @@ -180,21 +182,23 @@ class Filter extends Component { * @private */ _getFilter(sourceImg, type) { - let filter = null, - item, i, length; - const fabricType = this._getFabricFilterType(type); + let imgFilter = null; + if (sourceImg) { - length = sourceImg.filters.length; + const fabricType = this._getFabricFilterType(type); + const {length} = sourceImg.filters; + let item, i; + for (i = 0; i < length; i += 1) { item = sourceImg.filters[i]; if (item.type === fabricType) { - filter = item; + imgFilter = item; break; } } } - return filter; + return imgFilter; } /** @@ -205,7 +209,7 @@ class Filter extends Component { */ _removeFilter(sourceImg, type) { const fabricType = this._getFabricFilterType(type); - sourceImg.filters = tui.util.filter(sourceImg.filters, value => value.type !== fabricType); + sourceImg.filters = filter(sourceImg.filters, value => value.type !== fabricType); } /** diff --git a/src/js/component/flip.js b/src/js/component/flip.js index 42c2505bd..8f74d8a73 100644 --- a/src/js/component/flip.js +++ b/src/js/component/flip.js @@ -2,6 +2,7 @@ * @author NHN Ent. FE Development Team * @fileoverview Image flip module */ +import snippet from 'tui-code-snippet'; import Promise from 'core-js/library/es6/promise'; import Component from '../interface/component'; import consts from '../consts'; @@ -47,7 +48,7 @@ class Flip extends Component { return Promise.reject(rejectMessages.flip); } - tui.util.extend(setting, newSetting); + snippet.extend(setting, newSetting); this.setImageProperties(setting, true); this._invertAngle(isChangingFlipX, isChangingFlipY); this._flipObjects(isChangingFlipX, isChangingFlipY); @@ -66,7 +67,7 @@ class Flip extends Component { */ _invertAngle(isChangingFlipX, isChangingFlipY) { const canvasImage = this.getCanvasImage(); - let angle = canvasImage.angle; + let {angle} = canvasImage; if (isChangingFlipX) { angle *= -1; diff --git a/src/js/component/freeDrawing.js b/src/js/component/freeDrawing.js index 754e5bdfb..635a6e304 100644 --- a/src/js/component/freeDrawing.js +++ b/src/js/component/freeDrawing.js @@ -2,6 +2,7 @@ * @author NHN Ent. FE Development Team * @fileoverview Free drawing module, Set brush */ +import {fabric} from 'fabric'; import Component from '../interface/component'; import consts from '../consts'; diff --git a/src/js/component/icon.js b/src/js/component/icon.js index 6ef707f05..7271ac7dc 100644 --- a/src/js/component/icon.js +++ b/src/js/component/icon.js @@ -2,6 +2,8 @@ * @author NHN Ent. FE Development Team * @fileoverview Add icon module */ +import {fabric} from 'fabric'; +import snippet from 'tui-code-snippet'; import Promise from 'core-js/library/es6/promise'; import Component from '../interface/component'; import consts from '../consts'; @@ -59,7 +61,7 @@ class Icon extends Component { const icon = this._createIcon(path); - icon.set(tui.util.extend({ + icon.set(snippet.extend({ type: 'icon', fill: this._oColor }, selectionStyle, options)); @@ -74,7 +76,7 @@ class Icon extends Component { * @param {{key: string, value: string}} pathInfos - Path infos */ registerPaths(pathInfos) { - tui.util.forEach(pathInfos, (path, type) => { + snippet.forEach(pathInfos, (path, type) => { this._pathMap[type] = path; }, this); } diff --git a/src/js/component/line.js b/src/js/component/line.js index ad1e4687b..8d9d6b06b 100644 --- a/src/js/component/line.js +++ b/src/js/component/line.js @@ -2,6 +2,7 @@ * @author NHN Ent. FE Development Team * @fileoverview Free drawing module, Set brush */ +import {fabric} from 'fabric'; import Component from '../interface/component'; import consts from '../consts'; diff --git a/src/js/component/rotation.js b/src/js/component/rotation.js index 041bd9f5a..3df339895 100644 --- a/src/js/component/rotation.js +++ b/src/js/component/rotation.js @@ -2,6 +2,7 @@ * @author NHN Ent. FE Development Team * @fileoverview Image rotation module */ +import {fabric} from 'fabric'; import Promise from 'core-js/library/es6/promise'; import Component from '../interface/component'; import consts from '../consts'; diff --git a/src/js/component/shape.js b/src/js/component/shape.js index 1a8b1f4fc..616c90777 100644 --- a/src/js/component/shape.js +++ b/src/js/component/shape.js @@ -2,12 +2,12 @@ * @author NHN Ent. FE Development Team * @fileoverview Shape component */ +import {fabric} from 'fabric'; import Promise from 'core-js/library/es6/promise'; import Component from '../interface/component'; import consts from '../consts'; import resizeHelper from '../helper/shapeResizeHelper'; - -const {extend, inArray} = tui.util; +import {extend, inArray} from 'tui-code-snippet'; const {rejectMessages, eventNames} = consts; const KEY_CODES = consts.keyCodes; @@ -82,7 +82,6 @@ class Shape extends Component { */ this._withShiftKey = false; - /** * Event handler list * @type {Object} diff --git a/src/js/component/text.js b/src/js/component/text.js index b578b5fcf..5143353b0 100644 --- a/src/js/component/text.js +++ b/src/js/component/text.js @@ -2,6 +2,8 @@ * @author NHN Ent. FE Development Team * @fileoverview Text module */ +import {fabric} from 'fabric'; +import snippet from 'tui-code-snippet'; import Promise from 'core-js/library/es6/promise'; import Component from '../interface/component'; import consts from '../consts'; @@ -21,7 +23,7 @@ const resetStyles = { textAlign: 'left', textDecoraiton: '' }; -const browser = tui.util.browser; +const {browser} = snippet; const TEXTAREA_CLASSNAME = 'tui-image-eidtor-textarea'; const TEXTAREA_STYLES = util.makeStyleText({ @@ -180,7 +182,7 @@ class Text extends Component { this._setInitPos(options.position); if (options.styles) { - styles = tui.util.extend(options.styles, styles); + styles = snippet.extend(options.styles, styles); } const newText = new fabric.Text(text, styles); @@ -230,7 +232,7 @@ class Text extends Component { */ setStyle(activeObj, styleObj) { return new Promise(resolve => { - tui.util.forEach(styleObj, (val, key) => { + snippet.forEach(styleObj, (val, key) => { if (activeObj[key] === val) { styleObj[key] = resetStyles[key] || ''; } @@ -326,7 +328,7 @@ class Text extends Component { this._textarea = textarea; - this._listeners = tui.util.extend(this._listeners, { + this._listeners = snippet.extend(this._listeners, { input: this._onInput.bind(this), keydown: this._onKeyDown.bind(this), blur: this._onBlur.bind(this), @@ -421,7 +423,7 @@ class Text extends Component { this.getCanvas().add(editingObj); const params = { - id: tui.util.stamp(editingObj), + id: snippet.stamp(editingObj), type: editingObj.type, text: textContent }; diff --git a/src/js/extension/blur.js b/src/js/extension/blur.js index 674c0ad37..74b348736 100644 --- a/src/js/extension/blur.js +++ b/src/js/extension/blur.js @@ -2,6 +2,8 @@ * @author NHN Ent. FE Development Team * @fileoverview Blur extending fabric.Image.filters.Convolute */ +import {fabric} from 'fabric'; + /** * Blur object * @class Blur diff --git a/src/js/extension/colorFilter.js b/src/js/extension/colorFilter.js index 9f052330a..8ada319a8 100644 --- a/src/js/extension/colorFilter.js +++ b/src/js/extension/colorFilter.js @@ -2,6 +2,8 @@ * @author NHN Ent. FE Development Team * @fileoverview ColorFilter extending fabric.Image.filters.BaseFilter */ +import {fabric} from 'fabric'; + /** * ColorFilter object * @class ColorFilter @@ -39,12 +41,12 @@ const ColorFilter = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** * @param {Object} canvasEl Canvas element to apply filter to */ applyTo(canvasEl) { - const context = canvasEl.getContext('2d'), - imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), - data = imageData.data, - threshold = this.threshold; - let i, len, - filterColor = fabric.Color.sourceFromHex(this.color); + const context = canvasEl.getContext('2d'); + const imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height); + const {data} = imageData; + const {threshold} = this; + let filterColor = fabric.Color.sourceFromHex(this.color); + let i, len; if (this.x && this.y) { filterColor = this._getColor(imageData, this.x, this.y); @@ -82,11 +84,11 @@ const ColorFilter = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** * @returns {Array} color array */ _getColor(imageData, x, y) { - const color = [0, 0, 0, 0], - data = imageData.data, - width = imageData.width, - bytes = 4, - position = ((width * y) + x) * bytes; + const color = [0, 0, 0, 0]; + const {data, width} = imageData; + const bytes = 4; + const position = ((width * y) + x) * bytes; + color[0] = data[position]; color[1] = data[position + 1]; color[2] = data[position + 2]; diff --git a/src/js/extension/cropzone.js b/src/js/extension/cropzone.js index 789abf14e..7c2b3f8e6 100644 --- a/src/js/extension/cropzone.js +++ b/src/js/extension/cropzone.js @@ -2,9 +2,9 @@ * @author NHN Ent. FE Development Team * @fileoverview Cropzone extending fabric.Rect */ -import util from '../util'; - -const clamp = util.clamp; +import snippet from 'tui-code-snippet'; +import {fabric} from 'fabric'; +import {clamp} from '../util'; const CORNER_TYPE_TOP_LEFT = 'tl'; const CORNER_TYPE_TOP_RIGHT = 'tr'; @@ -97,9 +97,7 @@ const Cropzone = fabric.util.createClass(fabric.Rect, /** @lends Cropzone.protot * @private */ _fillOuterRect(ctx, fillStyle) { - const coordinates = this._getCoordinates(ctx), - x = coordinates.x, - y = coordinates.y; + const {x, y} = this._getCoordinates(ctx); ctx.save(); ctx.fillStyle = fillStyle; @@ -133,8 +131,7 @@ const Cropzone = fabric.util.createClass(fabric.Rect, /** @lends Cropzone.protot * @private */ _getCoordinates(ctx) { - const ceil = Math.ceil, - width = this.getWidth(), + const width = this.getWidth(), height = this.getHeight(), halfWidth = width / 2, halfHeight = height / 2, @@ -143,18 +140,18 @@ const Cropzone = fabric.util.createClass(fabric.Rect, /** @lends Cropzone.protot canvasEl = ctx.canvas; // canvas element, not fabric object return { - x: tui.util.map([ - -(halfWidth + left), // x0 - -(halfWidth), // x1 - halfWidth, // x2 + x: snippet.map([ + -(halfWidth + left), // x0 + -(halfWidth), // x1 + halfWidth, // x2 halfWidth + (canvasEl.width - left - width) // x3 - ], ceil), - y: tui.util.map([ - -(halfHeight + top), // y0 - -(halfHeight), // y1 - halfHeight, // y2 - halfHeight + (canvasEl.height - top - height) // y3 - ], ceil) + ], Math.ceil), + y: snippet.map([ + -(halfHeight + top), // y0 + -(halfHeight), // y1 + halfHeight, // y2 + halfHeight + (canvasEl.height - top - height) // y3 + ], Math.ceil) }; }, @@ -195,13 +192,12 @@ const Cropzone = fabric.util.createClass(fabric.Rect, /** @lends Cropzone.protot * @private */ _onMoving() { - const canvas = this.canvas, - left = this.getLeft(), + const left = this.getLeft(), top = this.getTop(), width = this.getWidth(), height = this.getHeight(), - maxLeft = canvas.getWidth() - width, - maxTop = canvas.getHeight() - height; + maxLeft = this.canvas.getWidth() - width, + maxTop = this.canvas.getHeight() - height; this.setLeft(clamp(left, 0, maxLeft)); this.setTop(clamp(top, 0, maxTop)); @@ -250,8 +246,8 @@ const Cropzone = fabric.util.createClass(fabric.Rect, /** @lends Cropzone.protot _calcTopLeftScalingSizeFromPointer(x, y) { const bottom = this.getHeight() + this.top, right = this.getWidth() + this.left, - top = clamp(y, 0, bottom - 1), // 0 <= top <= (bottom - 1) - left = clamp(x, 0, right - 1); // 0 <= left <= (right - 1) + top = clamp(y, 0, bottom - 1), // 0 <= top <= (bottom - 1) + left = clamp(x, 0, right - 1); // 0 <= left <= (right - 1) // When scaling "Top-Left corner": It fixes right and bottom coordinates return { @@ -270,16 +266,13 @@ const Cropzone = fabric.util.createClass(fabric.Rect, /** @lends Cropzone.protot * @private */ _calcBottomRightScalingSizeFromPointer(x, y) { - const canvas = this.canvas, - maxX = canvas.width, - maxY = canvas.height, - left = this.left, - top = this.top; + const {width: maxX, height: maxY} = this.canvas; + const {left, top} = this; // When scaling "Bottom-Right corner": It fixes left and top coordinates return { - width: clamp(x, (left + 1), maxX) - left, // (width = x - left), (left + 1 <= x <= maxX) - height: clamp(y, (top + 1), maxY) - top // (height = y - top), (top + 1 <= y <= maxY) + width: clamp(x, (left + 1), maxX) - left, // (width = x - left), (left + 1 <= x <= maxX) + height: clamp(y, (top + 1), maxY) - top // (height = y - top), (top + 1 <= y <= maxY) }; }, diff --git a/src/js/extension/emboss.js b/src/js/extension/emboss.js index 92a464823..b79f9d1fc 100644 --- a/src/js/extension/emboss.js +++ b/src/js/extension/emboss.js @@ -2,6 +2,8 @@ * @author NHN Ent. FE Development Team * @fileoverview Emboss extending fabric.Image.filters.Convolute */ +import {fabric} from 'fabric'; + /** * Emboss object * @class Emboss diff --git a/src/js/extension/mask.js b/src/js/extension/mask.js index fe6838eca..9ca66d402 100644 --- a/src/js/extension/mask.js +++ b/src/js/extension/mask.js @@ -2,6 +2,8 @@ * @author NHN Ent. FE Development Team * @fileoverview Mask extending fabric.Image.filters.Mask */ +import {fabric} from 'fabric'; + /** * Mask object * @class Mask @@ -19,8 +21,7 @@ const Mask = fabric.util.createClass(fabric.Image.filters.Mask, /** @lends Mask. return; } - const width = canvasEl.width; - const height = canvasEl.height; + const {width, height} = canvasEl; const maskCanvasEl = this._createCanvasOfMask(width, height); const ctx = canvasEl.getContext('2d'); const maskCtx = maskCanvasEl.getContext('2d'); @@ -54,7 +55,7 @@ const Mask = fabric.util.createClass(fabric.Image.filters.Mask, /** @lends Mask. * @private */ _drawMask(maskCtx) { - const mask = this.mask; + const {mask} = this; const maskImg = mask.getElement(); const left = mask.getLeft(); @@ -80,7 +81,7 @@ const Mask = fabric.util.createClass(fabric.Image.filters.Mask, /** @lends Mask. _mapData(maskCtx, imageData, width, height) { const sourceData = imageData.data; const maskData = maskCtx.getImageData(0, 0, width, height).data; - const channel = this.channel; + const {channel} = this; const len = imageData.width * imageData.height * 4; for (let i = 0; i < len; i += 4) { diff --git a/src/js/extension/sharpen.js b/src/js/extension/sharpen.js index fa1ce8d13..bc41e28ba 100644 --- a/src/js/extension/sharpen.js +++ b/src/js/extension/sharpen.js @@ -2,6 +2,8 @@ * @author NHN Ent. FE Development Team * @fileoverview Sharpen extending fabric.Image.filters.Convolute */ +import {fabric} from 'fabric'; + /** * Sharpen object * @class Sharpen diff --git a/src/js/factory/errorMessage.js b/src/js/factory/errorMessage.js index 1ea49e089..fd7201b38 100644 --- a/src/js/factory/errorMessage.js +++ b/src/js/factory/errorMessage.js @@ -2,9 +2,9 @@ * @author NHN Ent. FE Development Team * @fileoverview Error-message factory */ -import util from '../util'; +import snippet from 'tui-code-snippet'; +import {keyMirror} from '../util'; -const keyMirror = util.keyMirror; const types = keyMirror( 'UN_IMPLEMENTATION', 'NO_COMPONENT_NAME' @@ -23,7 +23,7 @@ const map = { }; module.exports = { - types: tui.util.extend({}, types), + types: snippet.extend({}, types), create(type, ...args) { type = type.toLowerCase(); diff --git a/src/js/graphics.js b/src/js/graphics.js index 0663d95ee..4d98945a9 100644 --- a/src/js/graphics.js +++ b/src/js/graphics.js @@ -2,7 +2,9 @@ * @author NHN Ent. FE Development Team * @fileoverview Graphics module */ +import snippet from 'tui-code-snippet'; import Promise from 'core-js/library/es6/promise'; +import {fabric} from 'fabric'; import ImageLoader from './component/imageLoader'; import Cropper from './component/cropper'; import Flip from './component/flip'; @@ -24,7 +26,7 @@ import util from './util'; const components = consts.componentNames; const events = consts.eventNames; const {drawingModes, fObjectOptions} = consts; -const {extend, stamp} = tui.util; +const {extend, stamp, isArray, isString, forEachArray, forEachOwnProperties, CustomEvents} = snippet; const DEFAULT_CSS_MAX_WIDTH = 1000; const DEFAULT_CSS_MAX_HEIGHT = 800; @@ -131,7 +133,7 @@ class Graphics { * Destroy canvas element */ destroy() { - const wrapperEl = this._canvas.wrapperEl; + const {wrapperEl} = this._canvas; this._canvas.clear(); @@ -164,7 +166,7 @@ class Graphics { */ add(objects) { let theArgs = []; - if (tui.util.isArray(objects)) { + if (isArray(objects)) { theArgs = objects; } else { theArgs.push(objects); @@ -417,7 +419,7 @@ class Graphics { * @param {boolean} [withRendering] - If true, The changed image will be reflected in the canvas */ setImageProperties(setting, withRendering) { - const canvasImage = this.canvasImage; + const {canvasImage} = this; if (!canvasImage) { return; @@ -605,14 +607,14 @@ class Graphics { const object = this.getObject(id); const props = {}; - if (tui.util.isString(keys)) { + if (isString(keys)) { props[keys] = object[keys]; - } else if (tui.util.isArray(keys)) { - tui.util.forEachArray(keys, value => { + } else if (isArray(keys)) { + forEachArray(keys, value => { props[value] = object[value]; }); } else { - tui.util.forEachOwnProperties(keys, (value, key) => { + forEachOwnProperties(keys, (value, key) => { props[key] = object[key]; }); } @@ -699,7 +701,7 @@ class Graphics { let canvasElement; if (element.jquery) { - selectedElement = element[0]; + [selectedElement] = element; } else if (element.nodeType) { selectedElement = element; } else { @@ -870,7 +872,7 @@ class Graphics { * @private */ _onObjectMoved(fEvent) { - const target = fEvent.target; + const {target} = fEvent; const params = this.createObjectProperties(target); this.fire(events.OBJECT_MOVED, params); @@ -882,7 +884,7 @@ class Graphics { * @private */ _onObjectScaled(fEvent) { - const target = fEvent.target; + const {target} = fEvent; const params = this.createObjectProperties(target); this.fire(events.OBJECT_SCALED, params); @@ -894,7 +896,7 @@ class Graphics { * @private */ _onObjectSelected(fEvent) { - const target = fEvent.target; + const {target} = fEvent; const params = this.createObjectProperties(target); this.fire(events.OBJECT_ACTIVATED, params); @@ -985,5 +987,5 @@ class Graphics { } } -tui.util.CustomEvents.mixin(Graphics); +CustomEvents.mixin(Graphics); module.exports = Graphics; diff --git a/src/js/helper/shapeResizeHelper.js b/src/js/helper/shapeResizeHelper.js index 654eb3fd2..3ad7c826f 100644 --- a/src/js/helper/shapeResizeHelper.js +++ b/src/js/helper/shapeResizeHelper.js @@ -79,8 +79,7 @@ function adjustOriginByStartPoint(pointer, shape) { const centerPoint = shape.getPointByOrigin('center', 'center'); const angle = -shape.getAngle(); const originPositions = getPositionsOfRotatedOrigin(centerPoint, pointer, angle); - const originX = originPositions.originX; - const originY = originPositions.originY; + const {originX, originY} = originPositions; const origin = shape.getPointByOrigin(originX, originY); const left = shape.getLeft() - (centerPoint.x - origin.x); const top = shape.getTop() - (centerPoint.x - origin.y); @@ -105,8 +104,7 @@ function adjustOriginByMovingPointer(pointer, shape) { const origin = shape.startPoint; const angle = -shape.getAngle(); const originPositions = getPositionsOfRotatedOrigin(origin, pointer, angle); - const originX = originPositions.originX; - const originY = originPositions.originY; + const {originX, originY} = originPositions; shape.setPositionByOrigin(origin, originX, originY); } @@ -117,10 +115,8 @@ function adjustOriginByMovingPointer(pointer, shape) { * @ignore */ function adjustDimensionOnScaling(shape) { - const type = shape.type; + const {type, scaleX, scaleY} = shape; const dimensionKeys = DIMENSION_KEYS[type]; - const scaleX = shape.scaleX; - const scaleY = shape.scaleY; let width = shape[dimensionKeys.w] * scaleX; let height = shape[dimensionKeys.h] * scaleY; @@ -151,11 +147,9 @@ function adjustDimensionOnScaling(shape) { * @ignore */ function adjustDimensionOnMouseMove(pointer, shape) { - const origin = shape.startPoint; - const type = shape.type; + const {type, strokeWidth, startPoint: origin} = shape; const divisor = DIVISOR[type]; const dimensionKeys = DIMENSION_KEYS[type]; - const strokeWidth = shape.strokeWidth; const isTriangle = !!(shape.type === 'triangle'); const options = {}; let width = Math.abs(origin.x - pointer.x) / divisor; diff --git a/src/js/imageEditor.js b/src/js/imageEditor.js index a720e6949..a20e226bb 100644 --- a/src/js/imageEditor.js +++ b/src/js/imageEditor.js @@ -2,6 +2,7 @@ * @author NHN Ent. FE Development Team * @fileoverview Image-editor application class */ +import snippet from 'tui-code-snippet'; import Invoker from './invoker'; import commandFactory from './factory/command'; import Graphics from './graphics'; @@ -10,7 +11,7 @@ import consts from './consts'; const events = consts.eventNames; const commands = consts.commandNames; const {keyCodes, rejectMessages} = consts; -const {isUndefined, forEach} = tui.util; +const {isUndefined, forEach, CustomEvents} = snippet; /** * Image editor @@ -200,19 +201,19 @@ class ImageEditor { * @param {KeyboardEvent} e - Event object * @private */ - /* eslint-disable complexity */ + /* eslint-disable complexity */ _onKeyDown(e) { const activeObject = this._graphics.getActiveObject(); const activeObjectId = this._graphics.getObjectId(activeObject); if ((e.ctrlKey || e.metaKey) && e.keyCode === keyCodes.Z) { // There is no error message on shortcut when it's empty - this.undo().catch(() => {}); + this.undo()['catch'](() => {}); } if ((e.ctrlKey || e.metaKey) && e.keyCode === keyCodes.Y) { // There is no error message on shortcut when it's empty - this.redo().catch(() => {}); + this.redo()['catch'](() => {}); } if ((e.keyCode === keyCodes.BACKSPACE || e.keyCode === keyCodes.DEL) && @@ -1241,5 +1242,5 @@ class ImageEditor { } } -tui.util.CustomEvents.mixin(ImageEditor); +CustomEvents.mixin(ImageEditor); module.exports = ImageEditor; diff --git a/src/js/invoker.js b/src/js/invoker.js index 41747115f..b20c78ab2 100644 --- a/src/js/invoker.js +++ b/src/js/invoker.js @@ -2,11 +2,13 @@ * @author NHN Ent. FE Development Team * @fileoverview Invoker - invoke commands */ +import snippet from 'tui-code-snippet'; import Promise from 'core-js/library/es6/promise'; import commandFactory from './factory/command'; import consts from './consts'; const {eventNames, rejectMessages} = consts; +const {isFunction, isString, CustomEvents} = snippet; /** * Invoker @@ -46,22 +48,21 @@ class Invoker { _invokeExecution(command) { this.lock(); - let args = []; - if (command.args) { - args = command.args; + let {args} = command; + if (!args) { + args = []; } return command.execute(...args) .then(value => { this.pushUndoStack(command); this.unlock(); - if (tui.util.isFunction(command.executeCallback)) { + if (isFunction(command.executeCallback)) { command.executeCallback(value); } return value; - }) - .catch(message => { + })['catch'](message => { this.unlock(); return Promise.reject(message); @@ -77,22 +78,21 @@ class Invoker { _invokeUndo(command) { this.lock(); - let args = []; - if (command.args) { - args = command.args; + let {args} = command; + if (!args) { + args = []; } return command.undo(...args) .then(value => { this.pushRedoStack(command); this.unlock(); - if (tui.util.isFunction(command.undoCallback)) { + if (isFunction(command.undoCallback)) { command.undoCallback(value); } return value; - }) - .catch(message => { + })['catch'](message => { this.unlock(); return Promise.reject(message); @@ -142,8 +142,8 @@ class Invoker { return Promise.reject(rejectMessages.isLock); } - let command = args[0]; - if (tui.util.isString(args[0])) { + let [command] = args; + if (isString(command)) { command = commandFactory.create(...args); } @@ -274,5 +274,5 @@ class Invoker { } } -tui.util.CustomEvents.mixin(Invoker); +CustomEvents.mixin(Invoker); module.exports = Invoker; diff --git a/src/js/util.js b/src/js/util.js index 3629daa85..7da74c8bd 100644 --- a/src/js/util.js +++ b/src/js/util.js @@ -2,6 +2,7 @@ * @author NHN Ent. FE Development Team * @fileoverview Util */ +import {forEach} from 'tui-code-snippet'; const {min, max} = Math; module.exports = { @@ -30,7 +31,7 @@ module.exports = { keyMirror(...args) { const obj = {}; - tui.util.forEach(args, key => { + forEach(args, key => { obj[key] = key; }); @@ -45,7 +46,7 @@ module.exports = { makeStyleText(styleObj) { let styleStr = ''; - tui.util.forEach(styleObj, (value, prop) => { + forEach(styleObj, (value, prop) => { styleStr += `${prop}: ${value};`; }); @@ -60,7 +61,7 @@ module.exports = { */ getProperties(obj, keys) { const props = {}; - const length = keys.length; + const {length} = keys; let i = 0; let key; diff --git a/test/.eslintrc b/test/.eslintrc deleted file mode 100644 index af299b0dd..000000000 --- a/test/.eslintrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "rules": { - "max-nested-callbacks": 0, - "require-jsdoc": 0 - } -} diff --git a/test/.eslintrc.js b/test/.eslintrc.js new file mode 100644 index 000000000..3f6c165ce --- /dev/null +++ b/test/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + "rules": { + "max-nested-callbacks": 0 + } +}; diff --git a/test/command.spec.js b/test/command.spec.js index 718aad3e3..1b79691bc 100644 --- a/test/command.spec.js +++ b/test/command.spec.js @@ -2,7 +2,10 @@ * @author NHN Ent. FE Development Team * @fileoverview Tests command with command-factory */ +import snippet from 'tui-code-snippet'; import Promise from 'core-js/library/es6/promise'; +import {fabric} from 'fabric'; +import $ from 'jquery'; import Invoker from '../src/js/invoker'; import commandFactory from '../src/js/factory/command'; import Graphics from '../src/js/graphics'; @@ -44,7 +47,7 @@ describe('commandFactory', () => { expect(commandName).toBe('testCommand'); expect(testCommand.execute).toHaveBeenCalledWith(graphics); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -64,7 +67,7 @@ describe('commandFactory', () => { invoker.execute('testCommand', graphics, 1, 2, 3).then(() => { done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -88,7 +91,7 @@ describe('commandFactory', () => { invoker.execute('testCommand', graphics, 1, 2, 3).then(() => invoker.undo() ).then(() => done() - ).catch(message => { + )['catch'](message => { fail(message); done(); }); @@ -104,7 +107,7 @@ describe('commandFactory', () => { it('should stamp object', done => { invoker.execute(commands.ADD_OBJECT, graphics, obj).then(() => { - expect(tui.util.hasStamp(obj)).toBe(true); + expect(snippet.hasStamp(obj)).toBe(true); done(); }); }); @@ -311,14 +314,14 @@ describe('commandFactory', () => { it('should remove an object', () => { graphics.setActiveObject(object); - invoker.execute(commands.REMOVE_OBJECT, graphics, tui.util.stamp(object)); + invoker.execute(commands.REMOVE_OBJECT, graphics, snippet.stamp(object)); expect(canvas.contains(object)).toBe(false); }); it('should remove objects group', () => { canvas.setActiveObject(group); - invoker.execute(commands.REMOVE_OBJECT, graphics, tui.util.stamp(group)); + invoker.execute(commands.REMOVE_OBJECT, graphics, snippet.stamp(group)); expect(canvas.contains(object)).toBe(false); expect(canvas.contains(object2)).toBe(false); @@ -327,7 +330,7 @@ describe('commandFactory', () => { it('"undo()" should restore the removed object', done => { canvas.setActiveObject(object); - invoker.execute(commands.REMOVE_OBJECT, graphics, tui.util.stamp(object)).then(() => + invoker.execute(commands.REMOVE_OBJECT, graphics, snippet.stamp(object)).then(() => invoker.undo() ).then(() => { expect(canvas.contains(object)).toBe(true); @@ -337,7 +340,7 @@ describe('commandFactory', () => { it('"undo()" should restore the removed objects (group)', done => { canvas.setActiveObject(group); - invoker.execute(commands.REMOVE_OBJECT, graphics, tui.util.stamp(group)).then(() => + invoker.execute(commands.REMOVE_OBJECT, graphics, snippet.stamp(group)).then(() => invoker.undo() ).then(() => { expect(canvas.contains(object)).toBe(true); diff --git a/test/cropper.spec.js b/test/cropper.spec.js index 3b6d23373..ab8d0d438 100644 --- a/test/cropper.spec.js +++ b/test/cropper.spec.js @@ -2,6 +2,9 @@ * @author NHN Ent. FE Development Team * @fileoverview Test cases of "src/js/component/cropper.js" */ +import snippet from 'tui-code-snippet'; +import {fabric} from 'fabric'; +import $ from 'jquery'; import Cropper from '../src/js/component/cropper'; import Graphics from '../src/js/graphics'; @@ -123,7 +126,7 @@ describe('Cropper', () => { beforeEach(() => { cropper._startX = 10; cropper._startY = 20; - tui.util.extend(canvas, { + snippet.extend(canvas, { getWidth() { return 100; }, @@ -173,7 +176,6 @@ describe('Cropper', () => { expect(actual).toEqual(expected); }); - it('should create cropzone that has fixed ratio during shift key is pressed.', () => { const x = 100; const y = 200; diff --git a/test/drawingMode.spec.js b/test/drawingMode.spec.js index 8e4a15d5e..36cb01948 100644 --- a/test/drawingMode.spec.js +++ b/test/drawingMode.spec.js @@ -2,6 +2,7 @@ * @author NHN Ent. FE Development Team * @fileoverview Test cases of "src/js/imageEditor.js" */ +import $ from 'jquery'; import ImageEditor from '../src/js/imageEditor'; describe('DrawingMode', () => { @@ -35,8 +36,8 @@ describe('DrawingMode', () => { }); it('enter all drawing mode with startDrawingMode in consecutive order', () => { - const drawingModes = ['CROPPER', 'FREE_DRAWING', 'LINE_DRAWING', 'TEXT', 'SHAPE'], - length = drawingModes.length; + const drawingModes = ['CROPPER', 'FREE_DRAWING', 'LINE_DRAWING', 'TEXT', 'SHAPE']; + const {length} = drawingModes; let i; for (i = 0; i < length; i += 1) { diff --git a/test/filter.spec.js b/test/filter.spec.js index 4ffae96e8..d4d578e64 100644 --- a/test/filter.spec.js +++ b/test/filter.spec.js @@ -2,6 +2,7 @@ * @author NHN Ent. FE Development Team * @fileoverview Test cases of "src/js/component/filter.js" */ +import $ from 'jquery'; import ImageEditor from '../src/js/imageEditor'; describe('Filter', () => { @@ -26,7 +27,7 @@ describe('Filter', () => { imageEditor.applyFilter('colorFilter').then(() => { expect(imageEditor.isEmptyUndoStack()).toBe(false); done(); - }).catch(() => { + })['catch'](() => { fail(); done(); }); @@ -44,7 +45,7 @@ describe('Filter', () => { expect(imageEditor.hasFilter('colorFilter')).toBe(false); expect(imageEditor.isEmptyUndoStack()).toBe(false); done(); - }).catch(() => { + })['catch'](() => { fail(); done(); }); diff --git a/test/flip.spec.js b/test/flip.spec.js index 3b717c3d8..8ae8687f4 100644 --- a/test/flip.spec.js +++ b/test/flip.spec.js @@ -2,6 +2,8 @@ * @author NHN Ent. FE Development Team * @fileoverview Test cases of "src/js/component/flip.js" */ +import {fabric} from 'fabric'; +import $ from 'jquery'; import Graphics from '../src/js/graphics'; import Flip from '../src/js/component/flip'; diff --git a/test/graphics.spec.js b/test/graphics.spec.js index 2eb594091..a068fc5d4 100644 --- a/test/graphics.spec.js +++ b/test/graphics.spec.js @@ -2,6 +2,9 @@ * @author NHN Ent. FE Development Team * @fileoverview Tests command with command-factory */ +import snippet from 'tui-code-snippet'; +import {fabric} from 'fabric'; +import $ from 'jquery'; import Graphics from '../src/js/graphics'; import consts from '../src/js/consts'; @@ -89,7 +92,7 @@ describe('Graphics', () => { }); graphics.add(triangle); - const objectId = tui.util.stamp(triangle); + const objectId = snippet.stamp(triangle); graphics.removeObjectById(objectId); expect(graphics.getObjects().length).toBe(0); }); diff --git a/test/icon.spec.js b/test/icon.spec.js index 2d959a663..96d55af7b 100644 --- a/test/icon.spec.js +++ b/test/icon.spec.js @@ -2,6 +2,8 @@ * @author NHN Ent. FE Development Team * @fileoverview Test cases of "src/js/component/icon.js" */ +import {fabric} from 'fabric'; +import $ from 'jquery'; import Graphics from '../src/js/graphics'; import Icon from '../src/js/component/icon'; diff --git a/test/index.js b/test/index.js index 8160f4775..5e2080963 100644 --- a/test/index.js +++ b/test/index.js @@ -1,5 +1,8 @@ +/** + * @fileoverview Test env + * @author NHN Ent. FE Development Lab + */ +import '../src'; + const testsContext = require.context('.', true, /spec\.js$/); testsContext.keys().forEach(testsContext); - -const srcContexts = require.context('../src', true, /index\.js$/); -srcContexts.keys().forEach(srcContexts); diff --git a/test/invoker.spec.js b/test/invoker.spec.js index 58bf7e785..5a58d1238 100644 --- a/test/invoker.spec.js +++ b/test/invoker.spec.js @@ -110,17 +110,17 @@ describe('Invoker', () => { it('"redo()" should fire a event - ' + ' "pushUndoStack" (when redoStack is not empty after)', done => { invoker.execute(cmd).then(() => invoker.execute(cmd)) - .then(() => invoker.undo()) - .then(() => invoker.undo()) - .then(() => { - invoker.on(spyEvents); - - return invoker.redo(); - }).then(() => { - expect(spyEvents.undoStackChanged).toHaveBeenCalledWith(1); - expect(spyEvents.redoStackChanged).not.toHaveBeenCalled(); - done(); - }); + .then(() => invoker.undo()) + .then(() => invoker.undo()) + .then(() => { + invoker.on(spyEvents); + + return invoker.redo(); + }).then(() => { + expect(spyEvents.undoStackChanged).toHaveBeenCalledWith(1); + expect(spyEvents.redoStackChanged).not.toHaveBeenCalled(); + done(); + }); }); it('"redo()" should fire events - ' + diff --git a/test/line.spec.js b/test/line.spec.js index 34e6d95ed..ffba51e34 100644 --- a/test/line.spec.js +++ b/test/line.spec.js @@ -2,6 +2,8 @@ * @author NHN Ent. FE Development Team * @fileoverview Test cases of "src/js/component/line.js" */ +import {fabric} from 'fabric'; +import $ from 'jquery'; import Graphics from '../src/js/graphics'; import Line from '../src/js/component/line'; diff --git a/test/promiseApi.spec.js b/test/promiseApi.spec.js index 1a1f6ebbe..9caa5cc71 100644 --- a/test/promiseApi.spec.js +++ b/test/promiseApi.spec.js @@ -2,6 +2,7 @@ * @author NHN Ent. FE Development Team * @fileoverview Test cases of "src/js/component/filter.js" */ +import $ from 'jquery'; import ImageEditor from '../src/js/imageEditor'; describe('Promise API', () => { @@ -26,7 +27,7 @@ describe('Promise API', () => { beforeEach(done => { imageEditor.loadImageFromURL(imageURL, 'sampleImage').then(() => done() - ).catch(() => + )['catch'](() => done() ); }); @@ -38,7 +39,7 @@ describe('Promise API', () => { }).then(() => { expect(canvas.getObjects().length).toBe(1); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -53,7 +54,7 @@ describe('Promise API', () => { ).then(() => { expect(canvas.getObjects().length).toBe(0); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -67,7 +68,7 @@ describe('Promise API', () => { ).then(() => { expect(canvas.getObjects()[0].getFill()).toBe('#FFFF00'); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -79,13 +80,13 @@ describe('Promise API', () => { height: 100, fill: '#FFFF00' }).then(() => { - const shape = canvas.getObjects()[0]; + const [shape] = canvas.getObjects(); expect(shape.type).toBe('rect'); expect(shape.width).toBe(100); expect(shape.height).toBe(100); expect(shape.getFill()).toBe('#FFFF00'); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -101,12 +102,12 @@ describe('Promise API', () => { width: 200, fill: '#FF0000' })).then(() => { - const shape = canvas.getObjects()[0]; + const [shape] = canvas.getObjects(); expect(shape.type).toBe('triangle'); expect(shape.width).toBe(200); expect(shape.getFill()).toBe('#FF0000'); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -128,7 +129,7 @@ describe('Promise API', () => { }).then(() => { fail(); done(); - }).catch(message => { + })['catch'](message => { expect(message).toBe('The object is not in canvas.'); done(); }); @@ -140,7 +141,7 @@ describe('Promise API', () => { expect(canvas.getObjects().length).toBe(1); expect(objectProps.id).toBe(activeObjectId); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -153,7 +154,7 @@ describe('Promise API', () => { }).then(() => // There is no way to get canvas dimension done() - ).catch(message => { + )['catch'](message => { fail(message); done(); }); @@ -169,7 +170,7 @@ describe('Promise API', () => { ).then(() => { expect(canvas.getObjects().length).toBe(0); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -183,7 +184,7 @@ describe('Promise API', () => { angle: 0 }); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -197,7 +198,7 @@ describe('Promise API', () => { angle: 0 }); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -212,7 +213,7 @@ describe('Promise API', () => { }); fail(); done(); - }).catch(message => { + })['catch'](message => { expect(message).toBe('The flipX and flipY setting values are not changed.'); done(); }); @@ -222,7 +223,7 @@ describe('Promise API', () => { imageEditor.rotate(10).then(angle => { expect(angle).toBe(10); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -232,7 +233,7 @@ describe('Promise API', () => { imageEditor.setAngle(10).then(angle => { expect(angle).toBe(10); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -247,7 +248,7 @@ describe('Promise API', () => { ).then(() => { expect(canvas.getObjects().length).toBe(0); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -270,7 +271,7 @@ describe('Promise API', () => { it('setObjectProperties() should change object\'s properties', done => { imageEditor.setObjectProperties(activeObjectId, properties).then(() => { done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -292,7 +293,7 @@ describe('Promise API', () => { top: 30 })); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -314,7 +315,7 @@ describe('Promise API', () => { expect(result).toBe(null); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -334,7 +335,7 @@ describe('Promise API', () => { expect(result).not.toBe(null); expect(result).toEqual(jasmine.objectContaining(properties)); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -349,7 +350,7 @@ describe('Promise API', () => { fill: 'rgba(255, 255, 0, 0.5)' })); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); @@ -396,7 +397,7 @@ describe('Promise API', () => { expect(result.top).toBe(50); done(); - }).catch(message => { + })['catch'](message => { fail(message); done(); }); diff --git a/test/rotation.spec.js b/test/rotation.spec.js index b7194f861..947673e56 100644 --- a/test/rotation.spec.js +++ b/test/rotation.spec.js @@ -2,6 +2,8 @@ * @author NHN Ent. FE Development Team * @fileoverview Test cases of "src/js/component/rotation.js" */ +import {fabric} from 'fabric'; +import $ from 'jquery'; import Graphics from '../src/js/graphics'; import Rotation from '../src/js/component/rotation'; diff --git a/test/shape.spec.js b/test/shape.spec.js index 4e5a58486..3a2376d14 100644 --- a/test/shape.spec.js +++ b/test/shape.spec.js @@ -2,6 +2,8 @@ * @author NHN Ent. FE Development Team * @fileoverview Test cases of "src/js/component/line.js" */ +import {fabric} from 'fabric'; +import $ from 'jquery'; import Graphics from '../src/js/graphics'; import Shape from '../src/js/component/shape'; @@ -33,7 +35,7 @@ describe('Shape', () => { it('The rectagle object is created on canvas.', () => { shape.add('rect'); - shapeObj = canvas.getObjects()[0]; + [shapeObj] = canvas.getObjects(); expect(shapeObj.type).toBe('rect'); }); @@ -41,7 +43,7 @@ describe('Shape', () => { it('The circle object(ellipse) is created on canvas.', () => { shape.add('circle'); - shapeObj = canvas.getObjects()[0]; + [shapeObj] = canvas.getObjects(); expect(shapeObj.type).toBe('circle'); }); @@ -49,16 +51,15 @@ describe('Shape', () => { it('The triangle object is created on canvas.', () => { shape.add('triangle'); - shapeObj = canvas.getObjects()[0]; + [shapeObj] = canvas.getObjects(); expect(shapeObj.type).toBe('triangle'); }); - it('When add() is called with no options, the default options set the rectangle object.', () => { shape.add('rect'); - shapeObj = canvas.getObjects()[0]; + [shapeObj] = canvas.getObjects(); expect(shapeObj.getWidth()).toBe(2); // strokeWidth: 1, width: 1 expect(shapeObj.getHeight()).toBe(2); // strokeWidth: 1, height: 1 @@ -67,7 +68,7 @@ describe('Shape', () => { it('When add() is called with no options, the default options set the circle object.', () => { shape.add('circle'); - shapeObj = canvas.getObjects()[0]; + [shapeObj] = canvas.getObjects(); expect(shapeObj.getWidth()).toBe(1); expect(shapeObj.getHeight()).toBe(1); @@ -76,7 +77,7 @@ describe('Shape', () => { it('When add() is called with no options, the default options set the triangle object.', () => { shape.add('triangle'); - shapeObj = canvas.getObjects()[0]; + [shapeObj] = canvas.getObjects(); expect(shapeObj.getWidth()).toBe(2); // strokeWidth: 1, width: 1 expect(shapeObj.getHeight()).toBe(2); // strokeWidth: 1, height: 1 @@ -93,7 +94,7 @@ describe('Shape', () => { }; shape.add('rect', settings); - shapeObj = canvas.getObjects()[0]; + [shapeObj] = canvas.getObjects(); expect(shapeObj.getFill()).toBe('blue'); expect(shapeObj.getStroke()).toBe('red'); @@ -113,7 +114,7 @@ describe('Shape', () => { }; shape.add('circle', settings); - shapeObj = canvas.getObjects()[0]; + [shapeObj] = canvas.getObjects(); expect(shapeObj.getFill()).toBe('blue'); expect(shapeObj.getStroke()).toBe('red'); @@ -133,7 +134,7 @@ describe('Shape', () => { }; shape.add('triangle', settings); - shapeObj = canvas.getObjects()[0]; + [shapeObj] = canvas.getObjects(); expect(shapeObj.getFill()).toBe('blue'); expect(shapeObj.getStroke()).toBe('red'); @@ -145,7 +146,7 @@ describe('Shape', () => { it('When change() is called, the style of the rectagle object is changed.', () => { shape.add('rect'); - shapeObj = canvas.getObjects()[0]; + [shapeObj] = canvas.getObjects(); shape.change(shapeObj, { fill: 'blue', @@ -163,7 +164,7 @@ describe('Shape', () => { it('When change() is called, the style of the circle object is changed.', () => { shape.add('circle'); - shapeObj = canvas.getObjects()[0]; + [shapeObj] = canvas.getObjects(); shape.change(shapeObj, { fill: 'blue', @@ -181,7 +182,7 @@ describe('Shape', () => { it('When change() is called, the style of the triangle object is changed.', () => { shape.add('triangle'); - shapeObj = canvas.getObjects()[0]; + [shapeObj] = canvas.getObjects(); shape.change(shapeObj, { width: 10, @@ -201,7 +202,8 @@ describe('Shape', () => { top: 100 }); - shape._shapeObj = shapeObj = canvas.getObjects()[0]; + [shapeObj] = canvas.getObjects(); + shape._shapeObj = shapeObj; }); it('When the mouse direction is in 1th quadrant,' + @@ -266,7 +268,8 @@ describe('Shape', () => { top: 100 }); - shape._shapeObj = shapeObj = canvas.getObjects()[0]; + [shapeObj] = canvas.getObjects(); + shape._shapeObj = shapeObj; }); it('When the drawing shape is in 1th quadrant, "left" and "top" are the same as start point.', () => { @@ -346,7 +349,8 @@ describe('Shape', () => { }); shape._withShiftKey = true; - shape._shapeObj = shapeObj = canvas.getObjects()[0]; + [shapeObj] = canvas.getObjects(); + shape._shapeObj = shapeObj; spyOn(canvas, 'getPointer').and.returnValue({ x: 200, @@ -368,7 +372,8 @@ describe('Shape', () => { }); shape._withShiftKey = true; - shape._shapeObj = shapeObj = canvas.getObjects()[0]; + [shapeObj] = canvas.getObjects(); + shape._shapeObj = shapeObj; spyOn(canvas, 'getPointer').and.returnValue({ x: 100, diff --git a/test/text.spec.js b/test/text.spec.js index 9211c9c58..c92fe4efc 100644 --- a/test/text.spec.js +++ b/test/text.spec.js @@ -2,6 +2,8 @@ * @author NHN Ent. FE Development Team * @fileoverview Test cases of "src/js/component/text.js" */ +import {fabric} from 'fabric'; +import $ from 'jquery'; import Graphics from '../src/js/graphics'; import Text from '../src/js/component/text'; diff --git a/webpack.config.js b/webpack.config.js index c1d06201d..a38802531 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,33 +1,48 @@ /** - * webpack.config.js.js created on 2016. 12. 01. + * webpack.config.js created on 2016. 12. 01. * @author NHN Ent. FE Development Lab */ -'use strict'; -/* eslint-disable vars-on-top, no-process-env, require-jsdoc */ -var pkg = require('./package.json'); -var webpack = require('webpack'); +const pkg = require('./package.json'); +const webpack = require('webpack'); +const SafeUmdPlugin = require('safe-umd-webpack-plugin'); -var isProduction = process.argv.indexOf('-p') > -1; +const isProduction = process.argv.indexOf('-p') > -1; -var FILENAME = pkg.name + (isProduction ? '.min.js' : '.js'); -var BANNER = [ +const FILENAME = pkg.name + (isProduction ? '.min.js' : '.js'); +const BANNER = [ FILENAME, - '@version ' + pkg.version, - '@author ' + pkg.author, - '@license ' + pkg.license + `@version ${pkg.version}`, + `@author ${pkg.author}`, + `@license ${pkg.license}` ].join('\n'); module.exports = { eslint: { - failOnError: true + failOnError: isProduction }, entry: './src/index.js', output: { + library: ['tui', 'ImageEditor'], + libraryTarget: 'umd', path: 'dist', publicPath: 'dist', filename: FILENAME }, + externals: { + 'tui-code-snippet': { + 'commonjs': 'tui-code-snippet', + 'commonjs2': 'tui-code-snippet', + 'amd': 'tui-code-snippet', + 'root': ['tui', 'util'] + }, + 'fabric': { + 'commonjs': 'fabric', + 'commonjs2': 'fabric', + 'amd': 'fabric', + 'root': ['fabric'] + } + }, module: { preLoaders: [ { @@ -45,12 +60,14 @@ module.exports = { ] }, plugins: [ - new webpack.BannerPlugin(BANNER) + new webpack.BannerPlugin(BANNER), + new SafeUmdPlugin() ], devServer: { historyApiFallback: false, progress: true, inline: true, - host: '0.0.0.0' + host: '0.0.0.0', + disableHostCheck: true } };