/**
*
* This command changes the viewport size of the browser. When talking about browser size we have to differentiate
* between the actual window size of the browser application and the document/viewport size of the website. The
* window size will always be bigger since it includes the height of any menu or status bars.
*
* <example>
:setViewportSize.js
client
.setViewportSize({
width: 500,
height: 500
})
.windowHandleSize(function(err, res) {
console.log(res.value); // outputs: "{ width: 500, height: 602 }"
})
* </example>
*
* @param {Object} size window width/height
* @param {Boolean} type set to `false` to change window size, `true` (default) to change viewport size
*
* @uses protocol/execute, protocol/windowHandleSize
* @type window
*
*/
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
// istanbul ignore next
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _scriptsGetViewportSize = require('../scripts/getViewportSize');
var _scriptsGetViewportSize2 = _interopRequireDefault(_scriptsGetViewportSize);
var _utilsErrorHandler = require('../utils/ErrorHandler');
var MAX_TRIES = 5;
var setViewportSize = function setViewportSize(size, type) {
/**
* parameter check
*/
if (typeof size !== 'object' || typeof size.width !== 'number' || typeof size.height !== 'number' || typeof type !== 'undefined' && typeof type !== 'boolean') {
throw new _utilsErrorHandler.CommandError('number or type of arguments don\'t agree with setViewportSize command');
}
var shouldIndent = typeof type === 'undefined' ? true : type;
return shouldIndent ? _setViewportSize.call(this, size) : this.windowHandleSize(size);
};
/**
* to set viewport size properly we need to execute the process multiple times
* since the difference between the inner and outer size changes when browser
* switch between fullscreen modes or visibility of scrollbar
*/
var _setViewportSize = function _setViewportSize(size) {
// istanbul ignore next
var _this = this;
var retryNo = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];
/**
* get window size
*/
return this.windowHandleSize().then(function (windowHandleSize) {
/**
* get viewport size
*/
return _this.execute(_scriptsGetViewportSize2['default']).then(function (viewportSize) {
var widthDiff = windowHandleSize.value.width - viewportSize.value.screenWidth;
var heightDiff = windowHandleSize.value.height - viewportSize.value.screenHeight;
/**
* change window size with indent
*/
return _this.windowHandleSize({
width: size.width + widthDiff,
height: size.height + heightDiff
});
}).execute(_scriptsGetViewportSize2['default']).then(function (res) {
/**
* if viewport size not equals desired size, execute process again
*/
if (retryNo < MAX_TRIES && (res.value.screenWidth !== size.width || res.value.screenHeight !== size.height)) {
return _setViewportSize.call(_this, size, ++retryNo);
}
});
});
};
exports['default'] = setViewportSize;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvY29tbWFuZHMvc2V0Vmlld3BvcnRTaXplLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NDQTBCNEIsNEJBQTRCOzs7O2lDQUMzQix1QkFBdUI7O0FBRXBELElBQU0sU0FBUyxHQUFHLENBQUMsQ0FBQTs7QUFFbkIsSUFBSSxlQUFlLEdBQUcsU0FBbEIsZUFBZSxDQUFhLElBQUksRUFBRSxJQUFJLEVBQUU7Ozs7QUFJeEMsUUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQ3hCLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQzlCLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQzlCLE9BQU8sSUFBSSxLQUFLLFdBQVcsSUFBSSxPQUFPLElBQUksS0FBSyxTQUFTLEFBQUMsRUFBRTtBQUM1RCxjQUFNLDRHQUF3RixDQUFBO0tBQ2pHOztBQUVELFFBQUksWUFBWSxHQUFHLEFBQUMsT0FBTyxJQUFJLEtBQUssV0FBVyxHQUFJLElBQUksR0FBRyxJQUFJLENBQUE7QUFDOUQsV0FBTyxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUE7Q0FDeEYsQ0FBQTs7Ozs7OztBQU9ELElBQUksZ0JBQWdCLEdBQUcsU0FBbkIsZ0JBQWdCLENBQWEsSUFBSSxFQUFlOzs7OztRQUFiLE9BQU8seURBQUcsQ0FBQzs7Ozs7QUFJOUMsV0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBQyxnQkFBZ0IsRUFBSzs7OztBQUl0RCxlQUFPLE1BQUssT0FBTyxxQ0FBaUIsQ0FBQyxJQUFJLENBQUMsVUFBQyxZQUFZLEVBQUs7QUFDeEQsZ0JBQUksU0FBUyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUE7QUFDN0UsZ0JBQUksVUFBVSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUE7Ozs7O0FBS2hGLG1CQUFPLE1BQUssZ0JBQWdCLENBQUM7QUFDekIscUJBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVM7QUFDN0Isc0JBQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVU7YUFDbkMsQ0FBQyxDQUFBO1NBQ0wsQ0FBQyxDQUFDLE9BQU8scUNBQWlCLENBQUMsSUFBSSxDQUFDLFVBQUMsR0FBRyxFQUFLOzs7O0FBSXRDLGdCQUFJLE9BQU8sR0FBRyxTQUFTLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFBLEFBQUMsRUFBRTtBQUN6Ryx1QkFBTyxnQkFBZ0IsQ0FBQyxJQUFJLFFBQU8sSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7YUFDdEQ7U0FDSixDQUFDLENBQUE7S0FDTCxDQUFDLENBQUE7Q0FDTCxDQUFBOztxQkFFYyxlQUFlIiwiZmlsZSI6Ii9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvY29tbWFuZHMvc2V0Vmlld3BvcnRTaXplLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKlxuICogVGhpcyBjb21tYW5kIGNoYW5nZXMgdGhlIHZpZXdwb3J0IHNpemUgb2YgdGhlIGJyb3dzZXIuIFdoZW4gdGFsa2luZyBhYm91dCBicm93c2VyIHNpemUgd2UgaGF2ZSB0byBkaWZmZXJlbnRpYXRlXG4gKiBiZXR3ZWVuIHRoZSBhY3R1YWwgd2luZG93IHNpemUgb2YgdGhlIGJyb3dzZXIgYXBwbGljYXRpb24gYW5kIHRoZSBkb2N1bWVudC92aWV3cG9ydCBzaXplIG9mIHRoZSB3ZWJzaXRlLiBUaGVcbiAqIHdpbmRvdyBzaXplIHdpbGwgYWx3YXlzIGJlIGJpZ2dlciBzaW5jZSBpdCBpbmNsdWRlcyB0aGUgaGVpZ2h0IG9mIGFueSBtZW51IG9yIHN0YXR1cyBiYXJzLlxuICpcbiAqIDxleGFtcGxlPlxuIDpzZXRWaWV3cG9ydFNpemUuanNcbiBjbGllbnRcbiAuc2V0Vmlld3BvcnRTaXplKHtcbiAgICB3aWR0aDogNTAwLFxuICAgIGhlaWdodDogNTAwXG4gfSlcbiAud2luZG93SGFuZGxlU2l6ZShmdW5jdGlvbihlcnIsIHJlcykge1xuICAgIGNvbnNvbGUubG9nKHJlcy52YWx1ZSk7IC8vIG91dHB1dHM6IFwieyB3aWR0aDogNTAwLCBoZWlnaHQ6IDYwMiB9XCJcbiB9KVxuICogPC9leGFtcGxlPlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSAgIHNpemUgIHdpbmRvdyB3aWR0aC9oZWlnaHRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gIHR5cGUgIHNldCB0byBgZmFsc2VgIHRvIGNoYW5nZSB3aW5kb3cgc2l6ZSwgYHRydWVgIChkZWZhdWx0KSB0byBjaGFuZ2Ugdmlld3BvcnQgc2l6ZVxuICpcbiAqIEB1c2VzIHByb3RvY29sL2V4ZWN1dGUsIHByb3RvY29sL3dpbmRvd0hhbmRsZVNpemVcbiAqIEB0eXBlIHdpbmRvd1xuICpcbiAqL1xuXG5pbXBvcnQgZ2V0Vmlld3BvcnRTaXplIGZyb20gJy4uL3NjcmlwdHMvZ2V0Vmlld3BvcnRTaXplJ1xuaW1wb3J0IHsgQ29tbWFuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvRXJyb3JIYW5kbGVyJ1xuXG5jb25zdCBNQVhfVFJJRVMgPSA1XG5cbmxldCBzZXRWaWV3cG9ydFNpemUgPSBmdW5jdGlvbiAoc2l6ZSwgdHlwZSkge1xuICAgIC8qKlxuICAgICAqIHBhcmFtZXRlciBjaGVja1xuICAgICAqL1xuICAgIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgdHlwZW9mIHNpemUud2lkdGggIT09ICdudW1iZXInIHx8XG4gICAgICAgIHR5cGVvZiBzaXplLmhlaWdodCAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgKHR5cGVvZiB0eXBlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgdHlwZSAhPT0gJ2Jvb2xlYW4nKSkge1xuICAgICAgICB0aHJvdyBuZXcgQ29tbWFuZEVycm9yKGBudW1iZXIgb3IgdHlwZSBvZiBhcmd1bWVudHMgZG9uJ3QgYWdyZWUgd2l0aCBzZXRWaWV3cG9ydFNpemUgY29tbWFuZGApXG4gICAgfVxuXG4gICAgbGV0IHNob3VsZEluZGVudCA9ICh0eXBlb2YgdHlwZSA9PT0gJ3VuZGVmaW5lZCcpID8gdHJ1ZSA6IHR5cGVcbiAgICByZXR1cm4gc2hvdWxkSW5kZW50ID8gX3NldFZpZXdwb3J0U2l6ZS5jYWxsKHRoaXMsIHNpemUpIDogdGhpcy53aW5kb3dIYW5kbGVTaXplKHNpemUpXG59XG5cbi8qKlxuICogdG8gc2V0IHZpZXdwb3J0IHNpemUgcHJvcGVybHkgd2UgbmVlZCB0byBleGVjdXRlIHRoZSBwcm9jZXNzIG11bHRpcGxlIHRpbWVzXG4gKiBzaW5jZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBpbm5lciBhbmQgb3V0ZXIgc2l6ZSBjaGFuZ2VzIHdoZW4gYnJvd3NlclxuICogc3dpdGNoIGJldHdlZW4gZnVsbHNjcmVlbiBtb2RlcyBvciB2aXNpYmlsaXR5IG9mIHNjcm9sbGJhclxuICovXG5sZXQgX3NldFZpZXdwb3J0U2l6ZSA9IGZ1bmN0aW9uIChzaXplLCByZXRyeU5vID0gMCkge1xuICAgIC8qKlxuICAgICAqIGdldCB3aW5kb3cgc2l6ZVxuICAgICAqL1xuICAgIHJldHVybiB0aGlzLndpbmRvd0hhbmRsZVNpemUoKS50aGVuKCh3aW5kb3dIYW5kbGVTaXplKSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBnZXQgdmlld3BvcnQgc2l6ZVxuICAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShnZXRWaWV3cG9ydFNpemUpLnRoZW4oKHZpZXdwb3J0U2l6ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHdpZHRoRGlmZiA9IHdpbmRvd0hhbmRsZVNpemUudmFsdWUud2lkdGggLSB2aWV3cG9ydFNpemUudmFsdWUuc2NyZWVuV2lkdGhcbiAgICAgICAgICAgIGxldCBoZWlnaHREaWZmID0gd2luZG93SGFuZGxlU2l6ZS52YWx1ZS5oZWlnaHQgLSB2aWV3cG9ydFNpemUudmFsdWUuc2NyZWVuSGVpZ2h0XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogY2hhbmdlIHdpbmRvdyBzaXplIHdpdGggaW5kZW50XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHJldHVybiB0aGlzLndpbmRvd0hhbmRsZVNpemUoe1xuICAgICAgICAgICAgICAgIHdpZHRoOiBzaXplLndpZHRoICsgd2lkdGhEaWZmLFxuICAgICAgICAgICAgICAgIGhlaWdodDogc2l6ZS5oZWlnaHQgKyBoZWlnaHREaWZmXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KS5leGVjdXRlKGdldFZpZXdwb3J0U2l6ZSkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGlmIHZpZXdwb3J0IHNpemUgbm90IGVxdWFscyBkZXNpcmVkIHNpemUsIGV4ZWN1dGUgcHJvY2VzcyBhZ2FpblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAocmV0cnlObyA8IE1BWF9UUklFUyAmJiAocmVzLnZhbHVlLnNjcmVlbldpZHRoICE9PSBzaXplLndpZHRoIHx8IHJlcy52YWx1ZS5zY3JlZW5IZWlnaHQgIT09IHNpemUuaGVpZ2h0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfc2V0Vmlld3BvcnRTaXplLmNhbGwodGhpcywgc2l6ZSwgKytyZXRyeU5vKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldFZpZXdwb3J0U2l6ZVxuIl19 |