(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("canvas")); else if(typeof define === 'function' && define.amd) define(["canvas"], factory); else if(typeof exports === 'object') exports["ImglyKit"] = factory(require("canvas")); else root["ImglyKit"] = factory(root["canvas"]); })(this, function(__WEBPACK_EXTERNAL_MODULE_7__) { return /******/ (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 = ""; /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { /* * !!!!! GENEROVANEJ SOUBOR! NESAHEJ NA NEJ! Místo toho upravuj v contrib/imgly !!!!!! */ /*! * Photo Editor SDK - photoeditorsdk.com * Copyright (c) 2013-2015 9elements GmbH * * Released under Attribution-NonCommercial 3.0 Unported * http://creativecommons.org/licenses/by-nc/3.0/ * * For commercial use, please contact us at contact@9elements.com */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); 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 _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; 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 _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; } var _libEventEmitter = __webpack_require__(1); var _libEventEmitter2 = _interopRequireDefault(_libEventEmitter); var _libRenderImage = __webpack_require__(2); var _libRenderImage2 = _interopRequireDefault(_libRenderImage); var _libImageExporter = __webpack_require__(17); var _libImageExporter2 = _interopRequireDefault(_libImageExporter); var _libVersionChecker = __webpack_require__(21); var _libVersionChecker2 = _interopRequireDefault(_libVersionChecker); var _constants = __webpack_require__(18); var _libUtils = __webpack_require__(14); var _libUtils2 = _interopRequireDefault(_libUtils); var _libExif = __webpack_require__(19); var _libExif2 = _interopRequireDefault(_libExif); var _operationsRotationOperation = __webpack_require__(22); var _operationsRotationOperation2 = _interopRequireDefault(_operationsRotationOperation); var _operationsFlipOperation = __webpack_require__(26); var _operationsFlipOperation2 = _interopRequireDefault(_operationsFlipOperation); /** * @class * @param {Object} options * @param {Image} [options.image] - The source image * @param {HTMLElement} [options.container] - Specifies where the UI should be * added to. If none is given, the UI * will automatically be disabled. * @param {Boolean} [options.ui.enabled=true] - Enables or disables the UI * @param {Boolean} [options.renderOnWindowResize] - Specifies whether the canvas * should re-render itself when * the window is being resized. * @param {String} [options.assetsUrl='assets'] - The base path for all external assets. * @param {String} [options.renderer='webgl'] - The renderer identifier. Can either * be 'webgl' or 'canvas'. */ var VERSION = '2.0.3-16'; var ImglyKit = (function (_EventEmitter) { _inherits(ImglyKit, _EventEmitter); function ImglyKit(options) { _classCallCheck(this, ImglyKit); _get(Object.getPrototypeOf(ImglyKit.prototype), 'constructor', this).call(this); // `options` is required if (typeof options === 'undefined') { throw new Error('No options given.'); } // Set default options options = _libUtils2['default'].defaults(options, { assetsUrl: 'assets', container: null, renderOnWindowResize: false, versionCheck: true }); options.ui = options.ui || {}; options.ui = _libUtils2['default'].defaults(options.ui, { enabled: true }); if (typeof options.image === 'undefined' && !options.ui.enabled) { throw new Error('`options.image` needs to be set when UI is disabled.'); } /** * @type {Object} * @private */ this._options = options; /** * The stack of {@link Operation} instances that will be used * to render the final Image * @type {Array.} */ this.operationsStack = []; /** * The registered UI types that can be selected via the `ui` option * @type {Object.} * @private */ this._registeredUIs = {}; // Register the default UIs this._registerUIs(); /** * The registered operations * @type {Object.} */ this._registeredOperations = {}; // Register the default operations this._registerOperations(); if (typeof window !== 'undefined' && this._options.versionCheck) { this._versionChecker = new _libVersionChecker2['default'](VERSION); } if (this._options.image) { this._parseExif(this._options.image); } if (this._options.ui.enabled) { this._initUI(); if (this._options.renderOnWindowResize) { this._handleWindowResize(); } } } /** * The current version of the SDK * @name ImglyKit.version * @internal Keep in sync with package.json */ /** * Renders the image * @param {ImglyKit.RenderType} [renderType=ImglyKit.RenderType.DATAURL] - The output type * @param {ImglyKit.ImageFormat} [imageFormat=ImglyKit.ImageFormat.PNG] - The output image format * @param {string} [dimensions] - The final dimensions of the image * @param {Number} [quality] - The image quality, between 0 and 1 * @return {Promise} */ _createClass(ImglyKit, [{ key: 'render', value: function render(renderType, imageFormat, dimensions, quality) { var _this = this; var settings = _libImageExporter2['default'].validateSettings(renderType, imageFormat); renderType = settings.renderType; imageFormat = settings.imageFormat; // Create a RenderImage var renderImage = new _libRenderImage2['default'](this._options.image, this.operationsStack, dimensions, this._options.renderer); // Set all operations to dirty, since we have another webgl renderer for (var i = 0; i < this.operationsStack.length; i++) { var operation = this.operationsStack[i]; if (!operation) { continue; } operation.dirty = true; } // Initiate image rendering return renderImage.render().then(function () { var canvas = renderImage.getRenderer().getCanvas(); return _libImageExporter2['default']['export'](_this, _this._options.image, canvas, renderType, imageFormat, quality); }); } /** * Sets the image and parses the exif data * @param {Image} image * @param {Exif} exif = null */ }, { key: 'setImage', value: function setImage(image) { var exif = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; this._options.image = image; if (!exif) { this._parseExif(image); } else { this._exif = exif; } } /** * Parses the exif data and fixes the orientation if necessary * @param {Image} image * @private */ }, { key: '_parseExif', value: function _parseExif(image) { if (_libExif2['default'].isJPEG(image.src)) { this._exif = null; try { this._exif = _libExif2['default'].fromBase64String(image.src); } catch (e) {} if (!this._exif) return; var exifTags = this._exif.getTags(); if (exifTags && exifTags.Orientation) { if (exifTags.Orientation !== 1 && exifTags.Orientation !== 2) { // We need to rotate var degrees = 0; switch (exifTags.Orientation) { case 7: case 8: degrees = -90; break; case 3: case 4: degrees = -180; break; case 5: case 6: degrees = 90; break; } var rotationOperation = new _operationsRotationOperation2['default'](this, { degrees: degrees }); this.operationsStack.push(rotationOperation); } if ([2, 4, 5, 7].indexOf(exifTags.Orientation) !== -1) { var flipOperation = new _operationsFlipOperation2['default'](this, { horizontal: true }); this.operationsStack.push(flipOperation); } this._exif.setOrientation(1); } } } /** * Resets all custom and selected operations */ }, { key: 'reset', value: function reset() {} /** * Returns the asset path for the given filename * @param {String} asset * @return {String} */ }, { key: 'getAssetPath', value: function getAssetPath(asset) { var isBrowser = typeof window !== 'undefined'; if (isBrowser) { /* istanbul ignore next */ return this._options.assetsUrl + '/' + asset; } else { var path = __webpack_require__(27); return path.resolve(this._options.assetsUrl, asset); } } /** * If `options.renderOnWindowResize` is set to true, this function * will re-render the canvas with a slight delay so that it won't * cause lagging of the resize * @private */ }, { key: '_handleWindowResize', value: function _handleWindowResize() { var _this2 = this; var timer = null; window.addEventListener('resize', function () { if (timer !== null) { clearTimeout(timer); } timer = setTimeout(function () { timer = null; _this2.ui.render(); }, 300); }); } /** * Registers all default UIs * @private */ }, { key: '_registerUIs', value: function _registerUIs() { this.registerUI(ImglyKit.NightUI); } /** * Registers all default operations * @private */ }, { key: '_registerOperations', value: function _registerOperations() { for (var operationName in ImglyKit.Operations) { this.registerOperation(ImglyKit.Operations[operationName]); } } /** * Registers the given operation * @param {ImglyKit.Operation} operation - The operation class */ }, { key: 'registerOperation', value: function registerOperation(operation) { this._registeredOperations[operation.prototype.identifier] = operation; if (this.ui) { this.ui.addOperation(operation); } } /** * Registers the given UI * @param {UI} ui */ }, { key: 'registerUI', value: function registerUI(ui) { this._registeredUIs[ui.prototype.identifier] = ui; } /** * Initializes the UI * @private */ /* istanbul ignore next */ }, { key: '_initUI', value: function _initUI() { var UI; if (this._options.ui.enabled === true) { // Select the first UI by default UI = _libUtils2['default'].values(this._registeredUIs)[0]; } if (!UI) { return; } /** * @type {ImglyKit.UI} */ this.ui = new UI(this, this._options); this.ui.pipeEvents(this); } /** * Returns the Operation instance with the given identifier, * if it exists * @param {String} identifier * @returns {Operation} */ }, { key: 'getOperationFromStack', value: function getOperationFromStack(identifier) { var operation = this.operationsStack.filter(function (operation) { return operation.identifier === identifier; })[0]; return operation; } /** * Runs the UI, if present */ }, { key: 'run', value: function run() { if (typeof this.ui !== 'undefined') { this.ui.run(); } } }, { key: 'dispose', value: function dispose() { if (this._exif) { this._exif.dispose(); this._exif = null; } } }, { key: 'exif', get: function get() { return this._exif; } }, { key: 'registeredOperations', get: function get() { return this._registeredOperations; } }]); return ImglyKit; })(_libEventEmitter2['default']); ImglyKit.version = VERSION; // Exposed classes ImglyKit.RenderImage = _libRenderImage2['default']; ImglyKit.Color = __webpack_require__(24); ImglyKit.Filter = __webpack_require__(32); ImglyKit.Operation = __webpack_require__(23); ImglyKit.Operations = {}; ImglyKit.Operations.Filters = __webpack_require__(46); ImglyKit.Operations.Crop = __webpack_require__(48); ImglyKit.Operations.Rotation = __webpack_require__(22); ImglyKit.Operations.Saturation = __webpack_require__(49); ImglyKit.Operations.Contrast = __webpack_require__(50); ImglyKit.Operations.Brightness = __webpack_require__(51); ImglyKit.Operations.Flip = __webpack_require__(26); ImglyKit.Operations.TiltShift = __webpack_require__(52); ImglyKit.Operations.RadialBlur = __webpack_require__(54); ImglyKit.Operations.Text = __webpack_require__(55); ImglyKit.Operations.Stickers = __webpack_require__(56); ImglyKit.Operations.Frames = __webpack_require__(57); ImglyKit.Operations.Brush = __webpack_require__(58); ImglyKit.Filters = {}; ImglyKit.Filters.A15 = __webpack_require__(59); ImglyKit.Filters.Breeze = __webpack_require__(60); ImglyKit.Filters.BW = __webpack_require__(61); ImglyKit.Filters.BWHard = __webpack_require__(62); ImglyKit.Filters.Celsius = __webpack_require__(63); ImglyKit.Filters.Chest = __webpack_require__(64); ImglyKit.Filters.Fixie = __webpack_require__(65); ImglyKit.Filters.Food = __webpack_require__(66); ImglyKit.Filters.Fridge = __webpack_require__(67); ImglyKit.Filters.Front = __webpack_require__(68); ImglyKit.Filters.Glam = __webpack_require__(69); ImglyKit.Filters.Gobblin = __webpack_require__(70); ImglyKit.Filters.K1 = __webpack_require__(71); ImglyKit.Filters.K2 = __webpack_require__(72); ImglyKit.Filters.K6 = __webpack_require__(73); ImglyKit.Filters.KDynamic = __webpack_require__(74); ImglyKit.Filters.Lenin = __webpack_require__(75); ImglyKit.Filters.Lomo = __webpack_require__(76); ImglyKit.Filters.Mellow = __webpack_require__(77); ImglyKit.Filters.Morning = __webpack_require__(78); ImglyKit.Filters.Orchid = __webpack_require__(79); ImglyKit.Filters.Pola = __webpack_require__(80); ImglyKit.Filters.Pola669 = __webpack_require__(81); ImglyKit.Filters.Quozi = __webpack_require__(82); ImglyKit.Filters.Semired = __webpack_require__(83); ImglyKit.Filters.Sunny = __webpack_require__(84); ImglyKit.Filters.Texas = __webpack_require__(85); ImglyKit.Filters.X400 = __webpack_require__(86); // Exposed constants ImglyKit.RenderType = _constants.RenderType; ImglyKit.ImageFormat = _constants.ImageFormat; ImglyKit.Vector2 = __webpack_require__(4); // UI ImglyKit.NightUI = __webpack_require__(87); exports['default'] = ImglyKit; module.exports = exports['default']; /***/ }), /* 1 */ /***/ (function(module, exports) { /** * EventEmitter (ES6) from: * https://gist.github.com/bloodyowl/41b1de3388c626796eca */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); 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'); } } var DEFAULT_MAX_LISTENERS = 12; function error(message) { for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } console.error.apply(console, [message].concat(args)); console.trace(); } var EventEmitter = (function () { function EventEmitter() { _classCallCheck(this, EventEmitter); this._maxListeners = DEFAULT_MAX_LISTENERS; this._events = {}; this._pipeDestinations = []; } _createClass(EventEmitter, [{ key: 'pipeEvents', value: function pipeEvents(destination) { this._pipeDestinations.push(destination); } }, { key: 'unpipeEvents', value: function unpipeEvents(destination) { var i = this._pipeDestinations.indexOf(destination); if (i === -1) return; this._pipeDestinations.splice(i, 1); } }, { key: 'on', value: function on(type, listener) { if (typeof listener !== 'function') { throw new TypeError(); } var listeners = this._events[type] || (this._events[type] = []); if (listeners.indexOf(listener) !== -1) { return this; } listeners.push(listener); if (listeners.length > this._maxListeners) { error('possible memory leak, added %i %s listeners,\n use EventEmitter#setMaxListeners(number) if you\n want to increase the limit (%i now)', listeners.length, type, this._maxListeners); } return this; } }, { key: 'once', value: function once(type, listener) { var eventsInstance = this; function onceCallback() { eventsInstance.off(type, onceCallback); listener.apply(null, arguments); } return this.on(type, onceCallback); } }, { key: 'off', value: function off(type) { for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { args[_key2 - 1] = arguments[_key2]; } if (args.length === 0) { this._events[type] = null; return this; } var listener = args[0]; if (typeof listener !== 'function') { throw new TypeError(); } var listeners = this._events[type]; if (!listeners || !listeners.length) { return this; } var indexOfListener = listeners.indexOf(listener); if (indexOfListener === -1) { return this; } listeners.splice(indexOfListener, 1); return this; } }, { key: 'emit', value: function emit(type) { for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { args[_key3 - 1] = arguments[_key3]; } this._pipeDestinations.forEach(function (dest) { dest.emit.apply(dest, [type].concat(args)); }); var listeners = this._events[type]; if (!listeners || !listeners.length) { return false; } listeners.forEach(function (fn) { return fn.apply(null, args); }); return true; } }, { key: 'setMaxListeners', value: function setMaxListeners(newMaxListeners) { if (parseInt(newMaxListeners, 10) !== newMaxListeners) { throw new TypeError(); } this._maxListeners = newMaxListeners; } }]); return EventEmitter; })(); exports['default'] = EventEmitter; module.exports = exports['default']; /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { /* * Photo Editor SDK - photoeditorsdk.com * Copyright (c) 2013-2015 9elements GmbH * * Released under Attribution-NonCommercial 3.0 Unported * http://creativecommons.org/licenses/by-nc/3.0/ * * For commercial use, please contact us at contact@9elements.com */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); 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 _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; 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 _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; } var _eventEmitter = __webpack_require__(1); var _eventEmitter2 = _interopRequireDefault(_eventEmitter); var _imageDimensions = __webpack_require__(3); var _imageDimensions2 = _interopRequireDefault(_imageDimensions); var _mathVector2 = __webpack_require__(4); var _mathVector22 = _interopRequireDefault(_mathVector2); var _renderersCanvasRenderer = __webpack_require__(5); var _renderersCanvasRenderer2 = _interopRequireDefault(_renderersCanvasRenderer); var _renderersWebglRenderer = __webpack_require__(13); var _renderersWebglRenderer2 = _interopRequireDefault(_renderersWebglRenderer); var _utils = __webpack_require__(14); var _utils2 = _interopRequireDefault(_utils); /** * Handles the image rendering process * @class * @alias ImglyKit.RenderImage * @param {Image} image * @param {Array.} operationsStack * @param {string} dimensions * @param {string} preferredRenderer * @private */ var RenderImage = (function (_EventEmitter) { _inherits(RenderImage, _EventEmitter); function RenderImage(image, operationsStack, dimensions, preferredRenderer) { _classCallCheck(this, RenderImage); _get(Object.getPrototypeOf(RenderImage.prototype), 'constructor', this).call(this); /** * @type {Object} * @private */ this._options = { preferredRenderer: preferredRenderer }; /** * @type {Boolean} * @private * @default false */ this._webglEnabled = false; /** * @type {Renderer} * @private */ this._renderer = null; /** * @type {Image} * @private */ this._image = image; /** * @type {Array.} * @private */ this._stack = operationsStack; /** * @type {ImglyKit.ImageDimensions} * @private */ this._dimensions = new _imageDimensions2['default'](dimensions); /** * @type {Vector2} * @private */ this._initialDimensions = new _mathVector22['default'](this._image.width, this._image.height); this._initRenderer(); } /** * Creates a renderer (canvas or webgl, depending on support) * @return {Promise} * @private */ _createClass(RenderImage, [{ key: '_initRenderer', value: function _initRenderer() { var _this = this; /* istanbul ignore if */ if (_renderersWebglRenderer2['default'].isSupported() && this._options.preferredRenderer !== 'canvas') { this._renderer = new _renderersWebglRenderer2['default'](this._initialDimensions, null, this._image); this._webglEnabled = true; } else if (_renderersCanvasRenderer2['default'].isSupported()) { this._renderer = new _renderersCanvasRenderer2['default'](this._initialDimensions, null, this._image); this._webglEnabled = false; } /* istanbul ignore if */ if (this._renderer === null) { throw new Error('Neither Canvas nor WebGL renderer are supported.'); } this._renderer.on('error', function (err) { return _this.emit('error', err); }); } /** * Renders the image * @return {Promise} */ }, { key: 'render', value: function render() { var _this2 = this; var stack = this.sanitizedStack; var initialDimensions = this._renderer.getInitialDimensionsForStack(stack, this._dimensions); this._renderer.resizeTo(initialDimensions); this._renderer.drawImage(this._image); var validationPromises = []; for (var i = 0; i < stack.length; i++) { var operation = stack[i]; validationPromises.push(operation.validateSettings()); } return Promise.all(validationPromises).then(function () { var promise = Promise.resolve(); var _loop = function (i) { var operation = stack[i]; promise = promise.then(function () { return new Promise(function (resolve, reject) { _utils2['default'].requestAnimationFrame(function () { operation.render(_this2._renderer); resolve(); }); }); }); }; for (var i = 0; i < stack.length; i++) { _loop(i); } return promise; }).then(function () { return _this2._renderer.renderFinal(); }).then(function () { return _this2._renderer.postRender(_this2._dimensions); }); } /** * Returns the renderer * @return {Renderer} */ }, { key: 'getRenderer', value: function getRenderer() { return this._renderer; } /** * Returns the operations stack without falsy values * @type {Array.} */ }, { key: 'sanitizedStack', get: function get() { var sanitizedStack = []; for (var i = 0; i < this._stack.length; i++) { var operation = this._stack[i]; if (!operation) continue; sanitizedStack.push(operation); } return sanitizedStack; } }]); return RenderImage; })(_eventEmitter2['default']); exports['default'] = RenderImage; module.exports = exports['default']; /***/ }), /* 3 */ /***/ (function(module, exports) { /* * Photo Editor SDK - photoeditorsdk.com * Copyright (c) 2013-2015 9elements GmbH * * Released under Attribution-NonCommercial 3.0 Unported * http://creativecommons.org/licenses/by-nc/3.0/ * * For commercial use, please contact us at contact@9elements.com */ /** * Parses the dimensions string and provides calculation functions * @class * @alias ImglyKit.ImageDimensions * @param {string} dimensions * @private */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); 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'); } } var ImageDimensions = (function () { function ImageDimensions(dimensions) { _classCallCheck(this, ImageDimensions); /** * The available dimension modifiers * @type {Object} * @private */ this._modifiers = { FIXED: '!' }; /** * @type {string} * @private */ this._dimensionsString = dimensions; /** * An object that represents the parsed dimensions string * @type {Object} */ this._rules = this._parse(); this._validateRules(); } /** * Parses the dimensions string * @private */ _createClass(ImageDimensions, [{ key: '_parse', value: function _parse() { if (typeof this._dimensionsString === 'undefined' || this._dimensionsString === null) { return null; } var match = this._dimensionsString.match(/^([0-9]+)?x([0-9]+)?([\!])?$/i); if (!match) { throw new Error('Invalid size option: ' + this._dimensionsString); } return { x: isNaN(match[1]) ? null : parseInt(match[1], 10), y: isNaN(match[2]) ? null : parseInt(match[2], 10), modifier: match[3] }; } /** * Validates the rules * @private */ }, { key: '_validateRules', value: function _validateRules() { if (this._rules === null) return; var xAvailable = this._rules.x !== null; var yAvailable = this._rules.y !== null; if (this._rules.modifier === this._modifiers.FIXED && !(xAvailable && yAvailable)) { throw new Error('Both `x` and `y` have to be set when using the fixed (!) modifier.'); } if (!xAvailable && !yAvailable) { throw new Error('Neither `x` nor `y` are given.'); } } /** * Calculates the final dimensions using the dimensions string and the * given initial dimensions * @param {Vector2} initialDimensions * @return {Vector2} */ }, { key: 'calculateFinalDimensions', value: function calculateFinalDimensions(initialDimensions) { var dimensions = initialDimensions.clone(), ratio; if (this._rules === null) return dimensions; /* istanbul ignore else */ if (this._rules.modifier === this._modifiers.FIXED) { // Fixed dimensions dimensions.set(this._rules.x, this._rules.y); } else if (this._rules.x !== null && this._rules.y !== null) { // Both x and y given, resize to fit ratio = Math.min(this._rules.x / dimensions.x, this._rules.y / dimensions.y); dimensions.multiply(ratio); } else if (this._rules.x !== null) { // Fixed x, y by ratio ratio = initialDimensions.y / initialDimensions.x; dimensions.x = this._rules.x; dimensions.y = dimensions.x * ratio; } else if (this._rules.y !== null) { // Fixed y, x by ratio ratio = initialDimensions.x / initialDimensions.y; dimensions.y = this._rules.y; dimensions.x = dimensions.y * ratio; } return dimensions; } }]); return ImageDimensions; })(); exports['default'] = ImageDimensions; module.exports = exports['default']; /***/ }), /* 4 */ /***/ (function(module, exports) { /* * Photo Editor SDK - photoeditorsdk.com * Copyright (c) 2013-2015 9elements GmbH * * Released under Attribution-NonCommercial 3.0 Unported * http://creativecommons.org/licenses/by-nc/3.0/ * * For commercial use, please contact us at contact@9elements.com */ /** * Represents a 2-dimensional vector while providing math functions to * modify / clone the vector. Fully chainable. * @class * @alias ImglyKit.Vector2 * @param {number} x * @param {number} y * @private */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); 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'); } } var Vector2 = (function () { function Vector2(x, y) { _classCallCheck(this, Vector2); this.x = x; this.y = y; if (typeof this.x === 'undefined') { this.x = 0; } if (typeof this.y === 'undefined') { this.y = 0; } } /** * Sets the given values * @param {number} x * @param {number} y * @return {Vector2} */ _createClass(Vector2, [{ key: 'set', value: function set(x, y) { this.x = x; this.y = y; return this; } /** * Creates a clone of this vector * @return {Vector2} */ }, { key: 'clone', value: function clone() { return new Vector2(this.x, this.y); } /** * Copies the values of the given vector * @param {Vector2} other * @return {Vector2} */ }, { key: 'copy', value: function copy(other) { this.x = other.x; this.y = other.y; return this; } /** * Clamps this vector with the given Vector2 / number * @param {(number|Vector2)} minimum * @param {(number|Vector2)} maximum * @return {Vector2} */ }, { key: 'clamp', value: function clamp(minimum, maximum) { var minimumSet = minimum !== null && typeof minimum !== 'undefined'; var maximumSet = maximum !== null && typeof maximum !== 'undefined'; /* istanbul ignore else */ if (!(minimum instanceof Vector2) && minimumSet) { minimum = new Vector2(minimum, minimum); } /* istanbul ignore else */ if (!(maximum instanceof Vector2) && maximumSet) { maximum = new Vector2(maximum, maximum); } if (minimumSet) { this.x = Math.max(minimum.x, this.x); this.y = Math.max(minimum.y, this.y); } if (maximumSet) { this.x = Math.min(maximum.x, this.x); this.y = Math.min(maximum.y, this.y); } return this; } /** * Divides this vector by the given Vector2 / number * @param {(number|Vector2)} divisor * @param {number} [y] * @return {Vector2} */ }, { key: 'divide', value: function divide(divisor, y) { if (divisor instanceof Vector2) { this.x /= divisor.x; this.y /= divisor.y; } else { this.x /= divisor; this.y /= typeof y === 'undefined' ? divisor : y; } return this; } /** * Subtracts the given Vector2 / number from this vector * @param {(number|Vector2)} subtrahend * @param {number} [y] * @return {Vector2} */ }, { key: 'subtract', value: function subtract(subtrahend, y) { if (subtrahend instanceof Vector2) { this.x -= subtrahend.x; this.y -= subtrahend.y; } else { this.x -= subtrahend; this.y -= typeof y === 'undefined' ? subtrahend : y; } return this; } /** * Multiplies the given Vector2 / number with this vector * @param {(number|Vector2)} subtrahend * @param {number} [y] * @return {Vector2} */ }, { key: 'multiply', value: function multiply(factor, y) { if (factor instanceof Vector2) { this.x *= factor.x; this.y *= factor.y; } else { this.x *= factor; this.y *= typeof y === 'undefined' ? factor : y; } return this; } /** * Adds the given Vector2 / numbers to this vector * @param {(number|Vector2)} addend * @param {number} [y] */ }, { key: 'add', value: function add(addend, y) { if (addend instanceof Vector2) { this.x += addend.x; this.y += addend.y; } else { this.x += addend; this.y += typeof y === 'undefined' ? addend : y; } return this; } /** * Checks whether the x and y value are the same as the given ones * @param {(number|Vector2)} vec * @param {number} y * @return {boolean} */ }, { key: 'equals', value: function equals(vec, y) { if (vec instanceof Vector2) { return vec.x === this.x && vec.y === this.y; } else { return vec === this.x && y === this.y; } } /** * Flips the x and y values of this vector * @return {Vector2} */ }, { key: 'flip', value: function flip() { var tempX = this.x; this.x = this.y; this.y = tempX; return this; } /** * Rounds the values of this vector * @returns {Vector2} */ }, { key: 'round', value: function round() { this.x = Math.round(this.x); this.y = Math.round(this.y); return this; } /** * Rounds up the values of this vector * @returns {Vector2} */ }, { key: 'ceil', value: function ceil() { this.x = Math.ceil(this.x); this.y = Math.ceil(this.y); return this; } /** * Rounds down the values of this vector * @returns {Vector2} */ }, { key: 'floor', value: function floor() { this.x = Math.floor(this.x); this.y = Math.floor(this.y); return this; } /** * Makes both numbers of this vector positive * @returns {Vector2} */ }, { key: 'abs', value: function abs() { this.x = Math.abs(this.x); this.y = Math.abs(this.y); return this; } /** * Returns a string representation of this vector * @return {String} */ }, { key: 'toString', value: function toString() { return 'Vector2({ x: ' + this.x + ', y: ' + this.y + ' })'; } }]); return Vector2; })(); exports['default'] = Vector2; module.exports = exports['default']; /***/ }), /* 5 */ /***/ (function(module, exports, __webpack_require__) { /* * Photo Editor SDK - photoeditorsdk.com * Copyright (c) 2013-2015 9elements GmbH * * Released under Attribution-NonCommercial 3.0 Unported * http://creativecommons.org/licenses/by-nc/3.0/ * * For commercial use, please contact us at contact@9elements.com */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); 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 _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; 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 _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; } var _renderer = __webpack_require__(6); var _renderer2 = _interopRequireDefault(_renderer); var _libMathVector2 = __webpack_require__(4); var _libMathVector22 = _interopRequireDefault(_libMathVector2); var _vendorPromise = __webpack_require__(8); var _vendorPromise2 = _interopRequireDefault(_vendorPromise); /** * @class * @alias ImglyKit.CanvasRenderer * @extends {ImglyKit.Renderer} * @private */ var CanvasRenderer = (function (_Renderer) { _inherits(CanvasRenderer, _Renderer); function CanvasRenderer() { _classCallCheck(this, CanvasRenderer); _get(Object.getPrototypeOf(CanvasRenderer.prototype), 'constructor', this).apply(this, arguments); } _createClass(CanvasRenderer, [{ key: 'cache', /** * Caches the current canvas content for the given identifier * @param {String} identifier */ value: function cache(identifier) { this._cache[identifier] = { data: this._context.getImageData(0, 0, this._canvas.width, this._canvas.height), size: new _libMathVector22['default'](this._canvas.width, this._canvas.height) }; } /** * Draws the stored texture / image data for the given identifier * @param {String} identifier */ }, { key: 'drawCached', value: function drawCached(identifier) { var _cache$identifier = this._cache[identifier]; var data = _cache$identifier.data; var size = _cache$identifier.size; this._canvas.width = size.x; this._canvas.height = size.y; this._context.putImageData(data, 0, 0); } /** * Checks whether this type of renderer is supported in the current environment * @abstract * @returns {boolean} */ }, { key: '_getContext', /** * Gets the rendering context from the Canva * @return {RenderingContext} * @abstract */ value: function _getContext() { /* istanbul ignore next */ return this._canvas.getContext('2d'); } /** * Draws the given image on the canvas * @param {Image} image * @returns {Promis} */ }, { key: 'drawImage', value: function drawImage(image) { this._context.drawImage(image, 0, 0, image.width, image.height, 0, 0, this._canvas.width, this._canvas.height); return _vendorPromise2['default'].resolve(); } /** * Resizes the current canvas picture to the given dimensions * @param {Vector2} dimensions * @return {Promise} */ }, { key: 'resizeTo', value: function resizeTo(dimensions) { dimensions = dimensions.clone().floor(); if (this._canvas.width === dimensions.x && this._canvas.height === dimensions.y) { return; } // Create a temporary canvas to draw to var newCanvas = this.createCanvas(); newCanvas.width = dimensions.x; newCanvas.height = dimensions.y; var newContext = newCanvas.getContext('2d'); // Draw the source canvas onto the new one newContext.drawImage(this._canvas, 0, 0, this._canvas.width, this._canvas.height, 0, 0, newCanvas.width, newCanvas.height); // Set the new canvas and context this.setCanvas(newCanvas); } /** * Returns a cloned version of the current canvas * @return {Canvas} */ }, { key: 'cloneCanvas', value: function cloneCanvas() { var canvas = this.createCanvas(); var context = canvas.getContext('2d'); // Resize the canvas canvas.width = this._canvas.width; canvas.height = this._canvas.height; // Draw the current canvas on the new one context.drawImage(this._canvas, 0, 0); return canvas; } /** * Resets the renderer * @param {Boolean} resetCache = false * @override */ }, { key: 'reset', value: function reset() { var resetCache = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0]; if (resetCache) { this._cache = []; } } /** * Returns the initial dimensions before any operations have been applied * @param {Array.} stack * @param {ImageDimensions} dimensions */ }, { key: 'getInitialDimensionsForStack', value: function getInitialDimensionsForStack(stack, dimensions) { // Since canvas operations resize the canvas, the initial // dimensions is the same as the image dimensions return new _libMathVector22['default'](this._image.width, this._image.height); } /** * Sets the canvas dimensions * @param {Vector2} dimensions */ }, { key: 'setSize', value: function setSize(dimensions) { dimensions = dimensions.clone().floor(); if (this._canvas.width === dimensions.x && this._canvas.height === dimensions.y) { return; } this._canvas.width = dimensions.x; this._canvas.height = dimensions.y; this._size.copy(dimensions); } /** * Gets called after the rendering has been done. Resizes the canvas * to its final size * @param {ImageDimensions} dimensions */ }, { key: 'postRender', value: function postRender(dimensions) { var canvasDimensions = new _libMathVector22['default'](this._canvas.width, this._canvas.height); var newDimensions = dimensions.calculateFinalDimensions(canvasDimensions); this.resizeTo(newDimensions); } }], [{ key: 'isSupported', value: function isSupported() { var elem = this.prototype.createCanvas(); return !!(elem.getContext && elem.getContext('2d')); } }, { key: 'identifier', /** * A unique string that identifies this renderer * @type {String} */ get: function get() { return 'canvas'; } }]); return CanvasRenderer; })(_renderer2['default']); exports['default'] = CanvasRenderer; module.exports = exports['default']; /***/ }), /* 6 */ /***/ (function(module, exports, __webpack_require__) { /*jshint unused:false */ /* * Photo Editor SDK - photoeditorsdk.com * Copyright (c) 2013-2015 9elements GmbH * * Released under Attribution-NonCommercial 3.0 Unported * http://creativecommons.org/licenses/by-nc/3.0/ * * For commercial use, please contact us at contact@9elements.com */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); 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 _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; 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 _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; } var _libMathVector2 = __webpack_require__(4); var _libMathVector22 = _interopRequireDefault(_libMathVector2); var _libEventEmitter = __webpack_require__(1); var _libEventEmitter2 = _interopRequireDefault(_libEventEmitter); /** * @class * @alias ImglyKit.Renderer * @param {Vector2} dimensions * @private */ var Renderer = (function (_EventEmitter) { _inherits(Renderer, _EventEmitter); function Renderer(dimensions, canvas, image) { _classCallCheck(this, Renderer); _get(Object.getPrototypeOf(Renderer.prototype), 'constructor', this).call(this); this._size = new _libMathVector22['default'](image.width, image.height); /** * @type {Canvas} * @private */ this._canvas = canvas || this.createCanvas(); if (!canvas) { this.setSize(dimensions); } /** * @type {RenderingContext} * @private */ this._context = this._getContext(); /** * The texture / image data cache * @type {Object.} */ this._cache = {}; this._image = image; } /** * A unique string that identifies this renderer * @type {String} */ _createClass(Renderer, [{ key: 'cache', /** * Caches the current canvas content for the given identifier * @param {String} identifier */ value: function cache(identifier) {} /** * Draws the stored texture / image data for the given identifier * @param {String} identifier */ }, { key: 'drawCached', value: function drawCached(identifier) {} /** * Creates a new canvas * @param {Number} [width] * @param {Number} [height] * @return {Canvas} * @private */ }, { key: 'createCanvas', value: function createCanvas(width, height) { var isBrowser = typeof window !== 'undefined'; var canvas; if (isBrowser) { /* istanbul ignore next */ canvas = document.createElement('canvas'); } else { var Canvas = __webpack_require__(7); canvas = new Canvas(); } // Apply width if (typeof width !== 'undefined') { canvas.width = width; } // Apply height if (typeof height !== 'undefined') { canvas.height = height; } return canvas; } /** * Returns the current size of the canvas * @return {Vector2} */ }, { key: 'getSize', value: function getSize() { return new _libMathVector22['default'](this._canvas.width, this._canvas.height); } /** * Gets the rendering context from the Canva * @return {RenderingContext} * @abstract */ }, { key: '_getContext', value: function _getContext() { /* istanbul ignore next */ throw new Error('Renderer#_getContext is abstract and not implemented in inherited class.'); } /** * Resizes the current canvas picture to the given dimensions * @param {Vector2} dimensions * @return {Promise} * @abstract */ }, { key: 'resizeTo', value: function resizeTo(dimensions) { /* istanbul ignore next */ throw new Error('Renderer#resizeTo is abstract and not implemented in inherited class.'); } /** * Draws the given image on the canvas * @param {Image} image * @abstract */ }, { key: 'drawImage', value: function drawImage(image) { /* istanbul ignore next */ throw new Error('Renderer#drawImage is abstract and not implemented in inherited class.'); } /** * Gets called after the stack has been rendered * @param {Image} image */ }, { key: 'renderFinal', value: function renderFinal() {} /** * Returns the canvas * @return {Canvas} */ }, { key: 'getCanvas', value: function getCanvas() { return this._canvas; } /** * Returns the context * @return {RenderingContext} */ }, { key: 'getContext', value: function getContext() { return this._context; } /** * Sets the current canvas to the given one * @param {Canvas} canvas */ }, { key: 'setCanvas', value: function setCanvas(canvas) { this._canvas = canvas; this._context = this._getContext(); this.emit('new-canvas', this._canvas); } /** * Returns the canvas size after all operations have been applied * @param {Array.} stack * @param {ImageDimensions} dimensions */ }, { key: 'getOutputDimensionsForStack', value: function getOutputDimensionsForStack(stack, dimensions) { var _this = this; var size = new _libMathVector22['default'](this._image.width, this._image.height); stack.forEach(function (operation) { size = operation.getNewDimensions(_this, size); }); if (dimensions) { size = dimensions.calculateFinalDimensions(size); } return size; } /** * Returns the initial dimensions before any operations have been applied * @param {Array.} stack * @param {ImageDimensions} dimensions */ }, { key: 'getInitialDimensionsForStack', value: function getInitialDimensionsForStack(stack, dimensions) { return this.getOutputDimensionsForStack(stack, dimensions); } /** * Sets the current context to the given one * @param {RenderingContext2D} context */ }, { key: 'setContext', value: function setContext(context) { this._context = context; } /** * Resets the renderer * @param {Boolean} resetCache = false */ }, { key: 'reset', value: function reset() { var resetCache = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0]; } /** * Gets called after the rendering has been done. */ }, { key: 'postRender', value: function postRender(dimensions) {} }, { key: 'setSize', value: function setSize(size) { this._size.copy(size); } }, { key: 'identifier', get: function get() { return null; } /** * Checks whether this type of renderer is supported in the current environment * @abstract * @returns {boolean} */ }], [{ key: 'isSupported', value: function isSupported() { /* istanbul ignore next */ throw new Error('Renderer#isSupported is abstract and not implemented in inherited class.'); } }]); return Renderer; })(_libEventEmitter2['default']); exports['default'] = Renderer; module.exports = exports['default']; /***/ }), /* 7 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_7__; /***/ }), /* 8 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {/* * Photo Editor SDK - photoeditorsdk.com * Copyright (c) 2013-2015 9elements GmbH * * Released under Attribution-NonCommercial 3.0 Unported * http://creativecommons.org/licenses/by-nc/3.0/ * * For commercial use, please contact us at contact@9elements.com */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var root = typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : null; var p = root.Promise; if (!p) { p = __webpack_require__(9); } exports['default'] = p; module.exports = exports['default']; /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) /***/ }), /* 9 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global, setImmediate) {/*! * Native Promise Only * v0.8.0-a (c) Kyle Simpson * MIT License: http://getify.mit-license.org * @license */ "use strict"; (function UMD(name, context, definition) { // special form of UMD for polyfilling across evironments context[name] = context[name] || definition(); if (typeof module != "undefined" && module.exports) { module.exports = context[name]; } else if (true) { !(__WEBPACK_AMD_DEFINE_RESULT__ = function $AMD$() { return context[name]; }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } })("Promise", typeof global != "undefined" ? global : undefined, function DEF() { /*jshint validthis:true */ "use strict"; var builtInProp, cycle, scheduling_queue, ToString = Object.prototype.toString, timer = typeof setImmediate != "undefined" ? function timer(fn) { return setImmediate(fn); } : setTimeout; // dammit, IE8. try { Object.defineProperty({}, "x", {}); builtInProp = function builtInProp(obj, name, val, config) { return Object.defineProperty(obj, name, { value: val, writable: true, configurable: config !== false }); }; } catch (err) { builtInProp = function builtInProp(obj, name, val) { obj[name] = val; return obj; }; } // Note: using a queue instead of array for efficiency scheduling_queue = (function Queue() { var first, last, item; function Item(fn, self) { this.fn = fn; this.self = self; this.next = void 0; } return { add: function add(fn, self) { item = new Item(fn, self); if (last) { last.next = item; } else { first = item; } last = item; item = void 0; }, drain: function drain() { var f = first; first = last = cycle = void 0; while (f) { f.fn.call(f.self); f = f.next; } } }; })(); function schedule(fn, self) { scheduling_queue.add(fn, self); if (!cycle) { cycle = timer(scheduling_queue.drain); } } // promise duck typing function isThenable(o) { var _then, o_type = typeof o; if (o != null && (o_type == "object" || o_type == "function")) { _then = o.then; } return typeof _then == "function" ? _then : false; } function notify() { for (var i = 0; i < this.chain.length; i++) { notifyIsolated(this, this.state === 1 ? this.chain[i].success : this.chain[i].failure, this.chain[i]); } this.chain.length = 0; } // NOTE: This is a separate function to isolate // the `try..catch` so that other code can be // optimized better function notifyIsolated(self, cb, chain) { var ret, _then; try { if (cb === false) { chain.reject(self.msg); } else { if (cb === true) { ret = self.msg; } else { ret = cb.call(void 0, self.msg); } if (ret === chain.promise) { chain.reject(TypeError("Promise-chain cycle")); } else if (_then = isThenable(ret)) { _then.call(ret, chain.resolve, chain.reject); } else { chain.resolve(ret); } } } catch (err) { chain.reject(err); } } function resolve(msg) { var _then, self = this; // already triggered? if (self.triggered) { return; } self.triggered = true; // unwrap if (self.def) { self = self.def; } try { if (_then = isThenable(msg)) { schedule(function () { var def_wrapper = new MakeDefWrapper(self); try { _then.call(msg, function $resolve$() { resolve.apply(def_wrapper, arguments); }, function $reject$() { reject.apply(def_wrapper, arguments); }); } catch (err) { reject.call(def_wrapper, err); } }); } else { self.msg = msg; self.state = 1; if (self.chain.length > 0) { schedule(notify, self); } } } catch (err) { reject.call(new MakeDefWrapper(self), err); } } function reject(msg) { var self = this; // already triggered? if (self.triggered) { return; } self.triggered = true; // unwrap if (self.def) { self = self.def; } self.msg = msg; self.state = 2; if (self.chain.length > 0) { schedule(notify, self); } } function iteratePromises(Constructor, arr, resolver, rejecter) { for (var idx = 0; idx < arr.length; idx++) { (function IIFE(idx) { Constructor.resolve(arr[idx]).then(function $resolver$(msg) { resolver(idx, msg); }, rejecter); })(idx); } } function MakeDefWrapper(self) { this.def = self; this.triggered = false; } function MakeDef(self) { this.promise = self; this.state = 0; this.triggered = false; this.chain = []; this.msg = void 0; } function Promise(executor) { if (typeof executor != "function") { throw TypeError("Not a function"); } if (this.__NPO__ !== 0) { throw TypeError("Not a promise"); } // instance shadowing the inherited "brand" // to signal an already "initialized" promise this.__NPO__ = 1; var def = new MakeDef(this); this["then"] = function then(success, failure) { var o = { success: typeof success == "function" ? success : true, failure: typeof failure == "function" ? failure : false }; // Note: `then(..)` itself can be borrowed to be used against // a different promise constructor for making the chained promise, // by substituting a different `this` binding. o.promise = new this.constructor(function extractChain(resolve, reject) { if (typeof resolve != "function" || typeof reject != "function") { throw TypeError("Not a function"); } o.resolve = resolve; o.reject = reject; }); def.chain.push(o); if (def.state !== 0) { schedule(notify, def); } return o.promise; }; this["catch"] = function $catch$(failure) { return this.then(void 0, failure); }; try { executor.call(void 0, function publicResolve(msg) { resolve.call(def, msg); }, function publicReject(msg) { reject.call(def, msg); }); } catch (err) { reject.call(def, err); } } var PromisePrototype = builtInProp({}, "constructor", Promise, /*configurable=*/false); // Note: Android 4 cannot use `Object.defineProperty(..)` here Promise.prototype = PromisePrototype; // built-in "brand" to signal an "uninitialized" promise builtInProp(PromisePrototype, "__NPO__", 0, /*configurable=*/false); builtInProp(Promise, "resolve", function Promise$resolve(msg) { var Constructor = this; // spec mandated checks // note: best "isPromise" check that's practical for now if (msg && typeof msg == "object" && msg.__NPO__ === 1) { return msg; } return new Constructor(function executor(resolve, reject) { if (typeof resolve != "function" || typeof reject != "function") { throw TypeError("Not a function"); } resolve(msg); }); }); builtInProp(Promise, "reject", function Promise$reject(msg) { return new this(function executor(resolve, reject) { if (typeof resolve != "function" || typeof reject != "function") { throw TypeError("Not a function"); } reject(msg); }); }); builtInProp(Promise, "all", function Promise$all(arr) { var Constructor = this; // spec mandated checks if (ToString.call(arr) != "[object Array]") { return Constructor.reject(TypeError("Not an array")); } if (arr.length === 0) { return Constructor.resolve([]); } return new Constructor(function executor(resolve, reject) { if (typeof resolve != "function" || typeof reject != "function") { throw TypeError("Not a function"); } var len = arr.length, msgs = Array(len), count = 0; iteratePromises(Constructor, arr, function resolver(idx, msg) { msgs[idx] = msg; if (++count === len) { resolve(msgs); } }, reject); }); }); builtInProp(Promise, "race", function Promise$race(arr) { var Constructor = this; // spec mandated checks if (ToString.call(arr) != "[object Array]") { return Constructor.reject(TypeError("Not an array")); } return new Constructor(function executor(resolve, reject) { if (typeof resolve != "function" || typeof reject != "function") { throw TypeError("Not a function"); } iteratePromises(Constructor, arr, function resolver(idx, msg) { resolve(msg); }, reject); }); }); return Promise; }); /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(10).setImmediate)) /***/ }), /* 10 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== "undefined" && global) || (typeof self !== "undefined" && self) || window; var apply = Function.prototype.apply; // DOM APIs, for completeness exports.setTimeout = function() { return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout); }; exports.setInterval = function() { return new Timeout(apply.call(setInterval, scope, arguments), clearInterval); }; exports.clearTimeout = exports.clearInterval = function(timeout) { if (timeout) { timeout.close(); } }; function Timeout(id, clearFn) { this._id = id; this._clearFn = clearFn; } Timeout.prototype.unref = Timeout.prototype.ref = function() {}; Timeout.prototype.close = function() { this._clearFn.call(scope, this._id); }; // Does not start the time, just sets up the members needed. exports.enroll = function(item, msecs) { clearTimeout(item._idleTimeoutId); item._idleTimeout = msecs; }; exports.unenroll = function(item) { clearTimeout(item._idleTimeoutId); item._idleTimeout = -1; }; exports._unrefActive = exports.active = function(item) { clearTimeout(item._idleTimeoutId); var msecs = item._idleTimeout; if (msecs >= 0) { item._idleTimeoutId = setTimeout(function onTimeout() { if (item._onTimeout) item._onTimeout(); }, msecs); } }; // setimmediate attaches itself to the global object __webpack_require__(11); // On some exotic environments, it's not clear which object `setimmediate` was // able to install onto. Search each possibility in the same order as the // `setimmediate` library. exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) || (typeof global !== "undefined" && global.setImmediate) || (this && this.setImmediate); exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) || (typeof global !== "undefined" && global.clearImmediate) || (this && this.clearImmediate); /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) /***/ }), /* 11 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) { "use strict"; if (global.setImmediate) { return; } var nextHandle = 1; // Spec says greater than zero var tasksByHandle = {}; var currentlyRunningATask = false; var doc = global.document; var registerImmediate; function setImmediate(callback) { // Callback can either be a function or a string if (typeof callback !== "function") { callback = new Function("" + callback); } // Copy function arguments var args = new Array(arguments.length - 1); for (var i = 0; i < args.length; i++) { args[i] = arguments[i + 1]; } // Store and register the task var task = { callback: callback, args: args }; tasksByHandle[nextHandle] = task; registerImmediate(nextHandle); return nextHandle++; } function clearImmediate(handle) { delete tasksByHandle[handle]; } function run(task) { var callback = task.callback; var args = task.args; switch (args.length) { case 0: callback(); break; case 1: callback(args[0]); break; case 2: callback(args[0], args[1]); break; case 3: callback(args[0], args[1], args[2]); break; default: callback.apply(undefined, args); break; } } function runIfPresent(handle) { // From the spec: "Wait until any invocations of this algorithm started before this one have completed." // So if we're currently running a task, we'll need to delay this invocation. if (currentlyRunningATask) { // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a // "too much recursion" error. setTimeout(runIfPresent, 0, handle); } else { var task = tasksByHandle[handle]; if (task) { currentlyRunningATask = true; try { run(task); } finally { clearImmediate(handle); currentlyRunningATask = false; } } } } function installNextTickImplementation() { registerImmediate = function(handle) { process.nextTick(function () { runIfPresent(handle); }); }; } function canUsePostMessage() { // The test against `importScripts` prevents this implementation from being installed inside a web worker, // where `global.postMessage` means something completely different and can't be used for this purpose. if (global.postMessage && !global.importScripts) { var postMessageIsAsynchronous = true; var oldOnMessage = global.onmessage; global.onmessage = function() { postMessageIsAsynchronous = false; }; global.postMessage("", "*"); global.onmessage = oldOnMessage; return postMessageIsAsynchronous; } } function installPostMessageImplementation() { // Installs an event handler on `global` for the `message` event: see // * https://developer.mozilla.org/en/DOM/window.postMessage // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages var messagePrefix = "setImmediate$" + Math.random() + "$"; var onGlobalMessage = function(event) { if (event.source === global && typeof event.data === "string" && event.data.indexOf(messagePrefix) === 0) { runIfPresent(+event.data.slice(messagePrefix.length)); } }; if (global.addEventListener) { global.addEventListener("message", onGlobalMessage, false); } else { global.attachEvent("onmessage", onGlobalMessage); } registerImmediate = function(handle) { global.postMessage(messagePrefix + handle, "*"); }; } function installMessageChannelImplementation() { var channel = new MessageChannel(); channel.port1.onmessage = function(event) { var handle = event.data; runIfPresent(handle); }; registerImmediate = function(handle) { channel.port2.postMessage(handle); }; } function installReadyStateChangeImplementation() { var html = doc.documentElement; registerImmediate = function(handle) { // Create a