(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i max) { return max; } return value; } module.exports = assertBetween; },{}],27:[function(require,module,exports){ 'use strict'; function assertKeyValuePair(key, value) { if (typeof key === 'object') { return key; } var returnValue = {}; returnValue[key] = value; return returnValue; } module.exports = assertKeyValuePair; },{}],28:[function(require,module,exports){ 'use strict'; /** * @param {fabric.Image} obj * @param {int} width * @param {int} height * @param {string} units * @return {Object} * axis: STRING, * dim: OBJECT( width: NUMBER, height: NUMBER), * width: NUMBER, * height: NUMBER, * ppmm: NUMBER */ function calcCrop(obj, width, height, units) { var cropRatio = width / height; var objRatio = obj.width / obj.height; var inchToCm = units === 'inch' ? 2.54 : 1; var returnValue = { image: obj, axis: objRatio > cropRatio ? 'x' : 'y', dim: { width: Number(width), height: Number(height), units: units }, width: obj.width * obj.scaleX, height: obj.height * obj.scaleY, objectRatio: objRatio, cropRatio: cropRatio }; if (objRatio > cropRatio) { returnValue.width *= cropRatio / objRatio; } else { returnValue.height /= cropRatio / objRatio; } // Pixels per millimeter var ppmm = returnValue.width / ((returnValue.dim.width * inchToCm * obj.scaleX) * 10); //Round to four decimal places to avoid precision issues. At least 4 decimals is needed though //for correct calculation of number of gores on wide wallpaperes in editor. returnValue.ppmm = Math.round(ppmm * 1e4) / 1e4; return returnValue; } module.exports = calcCrop; },{}],29:[function(require,module,exports){ 'use strict'; function isAspectChanged(x1, y1, x2, y2) { return (Math.abs(x1 / y1 - x2 / y2) > 0.005); } module.exports = isAspectChanged; },{}],30:[function(require,module,exports){ 'use strict'; function isFullscreen() { return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement; } module.exports = isFullscreen; },{}],31:[function(require,module,exports){ 'use strict'; function isMobile() { return window.innerWidth < 768; } module.exports = isMobile; },{}],32:[function(require,module,exports){ 'use strict'; var MouseMetrics = { previousMouseData: { x: null, y: null }, deletePreviousMouseData: function() { MouseMetrics.previousMouseData = { x: null, y: null }; }, setPreviousMouseData: function(values) { MouseMetrics.previousMouseData = { x: values.x || null, y: values.y || null, }; }, }; module.exports = MouseMetrics; },{}],33:[function(require,module,exports){ 'use strict'; /** * @param {fabric.Object} obj * @param {Object} bounds * @return {fabric.Object} */ function setPositionInside(obj, bounds) { ['left', 'top'].forEach(function (v) { if (obj[v] < bounds[v].min) { obj.set(v, bounds[v].min).setCoords(); } if (obj[v] > bounds[v].max) { obj.set(v, bounds[v].max).setCoords(); } }); return obj; } module.exports = setPositionInside; },{}],34:[function(require,module,exports){ 'use strict'; /** * @param {Object} obj * @param {Object} properties */ function setProperties(obj, properties) { for (var o in properties) { if (Object.prototype.hasOwnProperty.call(properties, o) ) { Object.defineProperty(obj, o, properties[o]); } } } module.exports = setProperties; },{}],35:[function(require,module,exports){ 'use strict'; function supportsFullscreen() { return document.documentElement.requestFullscreen || document.documentElement.webkitRequestFullScreen || document.documentElement.mozRequestFullScreen || document.documentElement.msRequestFullscreen; } module.exports = supportsFullscreen; },{}],36:[function(require,module,exports){ 'use strict'; var isFullscreen = require('./is-fullscreen'); /** * Toggles the full screen state for passed DOM object * @param {HTMLElement} elem */ function toggleFullscreen(elem) { if (isFullscreen()) { if (document.exitFullscreen) { document.exitFullscreen(); } else if (document.msExitFullscreen) { document.msExitFullscreen(); } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if (document.webkitCancelFullScreen) { document.webkitCancelFullScreen(); } return; } if (elem.requestFullscreen) { elem.requestFullscreen(); } else if (elem.webkitRequestFullScreen) { elem.webkitRequestFullScreen(); } else if (elem.mozRequestFullScreen) { elem.mozRequestFullScreen(); } else if (elem.msRequestFullscreen) { elem.msRequestFullscreen(); } } module.exports = toggleFullscreen; },{"./is-fullscreen":30}]},{},[24]);