all files / DEV/lib/commands/ setViewportSize.js

91.67% Statements 22/24
33.33% Branches 8/24
16.67% Functions 1/6
80% Lines 4/5
11 statements, 5 branches Ignored     
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99                                                                                                                                                                                               
/**
 *
 * 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