/*
* 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
});
// istanbul ignore next
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; Eif ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { Eif (protoProps) defineProperties(Constructor.prototype, protoProps); Iif (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
// istanbul ignore next
function _classCallCheck(instance, Constructor) { Iif (!(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 Eif (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'];
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9yb290L1NFUlZFUi9pbWdseS1zZGstaHRtbDUvc3JjL2pzL2xpYi9pbWFnZS1kaW1lbnNpb25zLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQWlCTSxlQUFlO0FBQ1AsV0FEUixlQUFlLENBQ04sVUFBVSxFQUFFOzBCQURyQixlQUFlOzs7Ozs7O0FBT2pCLFFBQUksQ0FBQyxVQUFVLEdBQUc7QUFDaEIsV0FBSyxFQUFFLEdBQUc7S0FDWCxDQUFBOzs7Ozs7QUFNRCxRQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFBOzs7Ozs7QUFNbkMsUUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7O0FBRTNCLFFBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtHQUN0Qjs7Ozs7OztlQXhCRyxlQUFlOztXQThCWixrQkFBRztBQUNSLFVBQUksT0FBTyxJQUFJLENBQUMsaUJBQWlCLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLEVBQUU7QUFDcEYsZUFBTyxJQUFJLENBQUE7T0FDWjs7QUFFRCxVQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUE7QUFDekUsVUFBSSxDQUFDLEtBQUssRUFBRTtBQUNWLGNBQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUE7T0FDbEU7O0FBRUQsYUFBTztBQUNMLFNBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2xELFNBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2xELGdCQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztPQUNuQixDQUFBO0tBQ0Y7Ozs7Ozs7O1dBTWMsMEJBQUc7QUFDaEIsVUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxPQUFNOztBQUVoQyxVQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUE7QUFDdkMsVUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFBOztBQUV2QyxVQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUUsVUFBVSxJQUFJLFVBQVUsQ0FBQSxBQUFDLEVBQUU7QUFDakYsY0FBTSxJQUFJLEtBQUssQ0FBQyxvRUFBb0UsQ0FBQyxDQUFBO09BQ3RGOztBQUVELFVBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDOUIsY0FBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFBO09BQ2xEO0tBQ0Y7Ozs7Ozs7Ozs7V0FRd0Isa0NBQUMsaUJBQWlCLEVBQUU7QUFDM0MsVUFBSSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxFQUFFO1VBQUUsS0FBSyxDQUFBOztBQUVqRCxVQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLE9BQU8sVUFBVSxDQUFBOzs7QUFHM0MsVUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTs7QUFFbEQsa0JBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtPQUM3QyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTs7QUFFM0QsYUFBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDNUUsa0JBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7T0FDM0IsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTs7QUFFakMsYUFBSyxHQUFHLGlCQUFpQixDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUE7QUFDakQsa0JBQVUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDNUIsa0JBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUE7T0FDcEMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTs7QUFFakMsYUFBSyxHQUFHLGlCQUFpQixDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUE7QUFDakQsa0JBQVUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDNUIsa0JBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUE7T0FDcEM7O0FBRUQsYUFBTyxVQUFVLENBQUE7S0FDbEI7OztTQWxHRyxlQUFlOzs7cUJBcUdOLGVBQWUiLCJmaWxlIjoiL3Jvb3QvU0VSVkVSL2ltZ2x5LXNkay1odG1sNS9zcmMvanMvbGliL2ltYWdlLWRpbWVuc2lvbnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUGhvdG8gRWRpdG9yIFNESyAtIHBob3RvZWRpdG9yc2RrLmNvbVxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTUgOWVsZW1lbnRzIEdtYkhcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsIDMuMCBVbnBvcnRlZFxuICogaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMvMy4wL1xuICpcbiAqIEZvciBjb21tZXJjaWFsIHVzZSwgcGxlYXNlIGNvbnRhY3QgdXMgYXQgY29udGFjdEA5ZWxlbWVudHMuY29tXG4gKi9cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGRpbWVuc2lvbnMgc3RyaW5nIGFuZCBwcm92aWRlcyBjYWxjdWxhdGlvbiBmdW5jdGlvbnNcbiAqIEBjbGFzc1xuICogQGFsaWFzIEltZ2x5S2l0LkltYWdlRGltZW5zaW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGRpbWVuc2lvbnNcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIEltYWdlRGltZW5zaW9ucyB7XG4gIGNvbnN0cnVjdG9yIChkaW1lbnNpb25zKSB7XG4gICAgLyoqXG4gICAgICogVGhlIGF2YWlsYWJsZSBkaW1lbnNpb24gbW9kaWZpZXJzXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRoaXMuX21vZGlmaWVycyA9IHtcbiAgICAgIEZJWEVEOiAnISdcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5fZGltZW5zaW9uc1N0cmluZyA9IGRpbWVuc2lvbnNcblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIHBhcnNlZCBkaW1lbnNpb25zIHN0cmluZ1xuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgdGhpcy5fcnVsZXMgPSB0aGlzLl9wYXJzZSgpXG5cbiAgICB0aGlzLl92YWxpZGF0ZVJ1bGVzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIGRpbWVuc2lvbnMgc3RyaW5nXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGFyc2UgKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5fZGltZW5zaW9uc1N0cmluZyA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5fZGltZW5zaW9uc1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2ggPSB0aGlzLl9kaW1lbnNpb25zU3RyaW5nLm1hdGNoKC9eKFswLTldKyk/eChbMC05XSspPyhbXFwhXSk/JC9pKVxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaXplIG9wdGlvbjogJyArIHRoaXMuX2RpbWVuc2lvbnNTdHJpbmcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGlzTmFOKG1hdGNoWzFdKSA/IG51bGwgOiBwYXJzZUludChtYXRjaFsxXSwgMTApLFxuICAgICAgeTogaXNOYU4obWF0Y2hbMl0pID8gbnVsbCA6IHBhcnNlSW50KG1hdGNoWzJdLCAxMCksXG4gICAgICBtb2RpZmllcjogbWF0Y2hbM11cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBydWxlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ZhbGlkYXRlUnVsZXMgKCkge1xuICAgIGlmICh0aGlzLl9ydWxlcyA9PT0gbnVsbCkgcmV0dXJuXG5cbiAgICB2YXIgeEF2YWlsYWJsZSA9IHRoaXMuX3J1bGVzLnggIT09IG51bGxcbiAgICB2YXIgeUF2YWlsYWJsZSA9IHRoaXMuX3J1bGVzLnkgIT09IG51bGxcblxuICAgIGlmICh0aGlzLl9ydWxlcy5tb2RpZmllciA9PT0gdGhpcy5fbW9kaWZpZXJzLkZJWEVEICYmICEoeEF2YWlsYWJsZSAmJiB5QXZhaWxhYmxlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb3RoIGB4YCBhbmQgYHlgIGhhdmUgdG8gYmUgc2V0IHdoZW4gdXNpbmcgdGhlIGZpeGVkICghKSBtb2RpZmllci4nKVxuICAgIH1cblxuICAgIGlmICgheEF2YWlsYWJsZSAmJiAheUF2YWlsYWJsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZWl0aGVyIGB4YCBub3IgYHlgIGFyZSBnaXZlbi4nKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBmaW5hbCBkaW1lbnNpb25zIHVzaW5nIHRoZSBkaW1lbnNpb25zIHN0cmluZyBhbmQgdGhlXG4gICAqIGdpdmVuIGluaXRpYWwgZGltZW5zaW9uc1xuICAgKiBAcGFyYW0gIHtWZWN0b3IyfSBpbml0aWFsRGltZW5zaW9uc1xuICAgKiBAcmV0dXJuIHtWZWN0b3IyfVxuICAgKi9cbiAgY2FsY3VsYXRlRmluYWxEaW1lbnNpb25zIChpbml0aWFsRGltZW5zaW9ucykge1xuICAgIHZhciBkaW1lbnNpb25zID0gaW5pdGlhbERpbWVuc2lvbnMuY2xvbmUoKSwgcmF0aW9cblxuICAgIGlmICh0aGlzLl9ydWxlcyA9PT0gbnVsbCkgcmV0dXJuIGRpbWVuc2lvbnNcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuX3J1bGVzLm1vZGlmaWVyID09PSB0aGlzLl9tb2RpZmllcnMuRklYRUQpIHtcbiAgICAgIC8vIEZpeGVkIGRpbWVuc2lvbnNcbiAgICAgIGRpbWVuc2lvbnMuc2V0KHRoaXMuX3J1bGVzLngsIHRoaXMuX3J1bGVzLnkpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ydWxlcy54ICE9PSBudWxsICYmIHRoaXMuX3J1bGVzLnkgIT09IG51bGwpIHtcbiAgICAgIC8vIEJvdGggeCBhbmQgeSBnaXZlbiwgcmVzaXplIHRvIGZpdFxuICAgICAgcmF0aW8gPSBNYXRoLm1pbih0aGlzLl9ydWxlcy54IC8gZGltZW5zaW9ucy54LCB0aGlzLl9ydWxlcy55IC8gZGltZW5zaW9ucy55KVxuICAgICAgZGltZW5zaW9ucy5tdWx0aXBseShyYXRpbylcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3J1bGVzLnggIT09IG51bGwpIHtcbiAgICAgIC8vIEZpeGVkIHgsIHkgYnkgcmF0aW9cbiAgICAgIHJhdGlvID0gaW5pdGlhbERpbWVuc2lvbnMueSAvIGluaXRpYWxEaW1lbnNpb25zLnhcbiAgICAgIGRpbWVuc2lvbnMueCA9IHRoaXMuX3J1bGVzLnhcbiAgICAgIGRpbWVuc2lvbnMueSA9IGRpbWVuc2lvbnMueCAqIHJhdGlvXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ydWxlcy55ICE9PSBudWxsKSB7XG4gICAgICAvLyBGaXhlZCB5LCB4IGJ5IHJhdGlvXG4gICAgICByYXRpbyA9IGluaXRpYWxEaW1lbnNpb25zLnggLyBpbml0aWFsRGltZW5zaW9ucy55XG4gICAgICBkaW1lbnNpb25zLnkgPSB0aGlzLl9ydWxlcy55XG4gICAgICBkaW1lbnNpb25zLnggPSBkaW1lbnNpb25zLnkgKiByYXRpb1xuICAgIH1cblxuICAgIHJldHVybiBkaW1lbnNpb25zXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VEaW1lbnNpb25zXG4iXX0= |