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

93.1% Statements 27/29
62.5% Branches 10/16
0% Functions 0/4
50% Lines 2/4
22 statements, 10 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                                                                                                                                                                               
/**
 *
 * Get the width and height for an DOM-element based given selector.
 *
 * <example>
    :getElementSize.js
    client
        .getElementSize('.header-logo-wordmark').then(function(size) {
            console.log(size) // outputs: { width: 100, height: 200 }
        })
        .getElementSize('.header-logo-wordmark', 'width').then(function(width) {
            console.log(width) // outputs: 100
        })
        .getElementSize('.header-logo-wordmark', 'height').then(function(height) {
            console.log(height) // outputs: 200
        });
 * </example>
 *
 * @param   {String} selector element with requested size
 * @returns {Object}          requested element size (`{width:number, height:number}`)
 *
 * @uses protocol/elements, protocol/elementIdSize
 * @type property
 *
 */
 
'use strict';
 
Object.defineProperty(exports, '__esModule', {
    value: true
});
 
var _utilsErrorHandler = require('../utils/ErrorHandler');
 
var getElementSize = function getElementSize(selector, prop) {
    return this.elements(selector).then(function (res) {
        /**
         * throw NoSuchElement error if no element was found
         */
        if (!res.value || res.value.length === 0) {
            throw new _utilsErrorHandler.CommandError(7);
        }
 
        var elementIdSizeCommands = [];
        var _iteratorNormalCompletion = true;
        var _didIteratorError = false;
        var _iteratorError = undefined;
 
        try {
            for (var _iterator = res.value[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
                var elem = _step.value;
 
                elementIdSizeCommands.push(this.elementIdSize(elem.ELEMENT));
            }
        } catch (err) {
            _didIteratorError = true;
            _iteratorError = err;
        } finally {
            try {
                if (!_iteratorNormalCompletion && _iterator['return']) {
                    _iterator['return']();
                }
            } finally {
                if (_didIteratorError) {
                    throw _iteratorError;
                }
            }
        }
 
        return Promise.all(elementIdSizeCommands);
    }).then(function (sizes) {
        sizes = sizes.map(function (size) {
            if (typeof prop === 'string' && prop.match(/(width|height)/)) {
                return size.value[prop];
            }
 
            return {
                width: size.value.width,
                height: size.value.height
            };
        });
 
        return sizes.length === 1 ? sizes[0] : sizes;
    });
};
 
exports['default'] = getElementSize;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvY29tbWFuZHMvZ2V0RWxlbWVudFNpemUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBMEI2Qix1QkFBdUI7O0FBRXBELElBQUksY0FBYyxHQUFHLFNBQWpCLGNBQWMsQ0FBYSxRQUFRLEVBQUUsSUFBSSxFQUFFO0FBQzNDLFdBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUU7Ozs7QUFJL0MsWUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3RDLGtCQUFNLG9DQUFpQixDQUFDLENBQUMsQ0FBQTtTQUM1Qjs7QUFFRCxZQUFJLHFCQUFxQixHQUFHLEVBQUUsQ0FBQTs7Ozs7O0FBQzlCLGlDQUFpQixHQUFHLENBQUMsS0FBSyw4SEFBRTtvQkFBbkIsSUFBSTs7QUFDVCxxQ0FBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTthQUMvRDs7Ozs7Ozs7Ozs7Ozs7OztBQUVELGVBQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0tBQzVDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxLQUFLLEVBQUs7QUFDZixhQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFDLElBQUksRUFBSztBQUN4QixnQkFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO0FBQzFELHVCQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7YUFDMUI7O0FBRUQsbUJBQU87QUFDSCxxQkFBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSztBQUN2QixzQkFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTthQUM1QixDQUFBO1NBQ0osQ0FBQyxDQUFBOztBQUVGLGVBQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQTtLQUMvQyxDQUFDLENBQUE7Q0FDTCxDQUFBOztxQkFFYyxjQUFjIiwiZmlsZSI6Ii9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvY29tbWFuZHMvZ2V0RWxlbWVudFNpemUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqXG4gKiBHZXQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgZm9yIGFuIERPTS1lbGVtZW50IGJhc2VkIGdpdmVuIHNlbGVjdG9yLlxuICpcbiAqIDxleGFtcGxlPlxuICAgIDpnZXRFbGVtZW50U2l6ZS5qc1xuICAgIGNsaWVudFxuICAgICAgICAuZ2V0RWxlbWVudFNpemUoJy5oZWFkZXItbG9nby13b3JkbWFyaycpLnRoZW4oZnVuY3Rpb24oc2l6ZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coc2l6ZSkgLy8gb3V0cHV0czogeyB3aWR0aDogMTAwLCBoZWlnaHQ6IDIwMCB9XG4gICAgICAgIH0pXG4gICAgICAgIC5nZXRFbGVtZW50U2l6ZSgnLmhlYWRlci1sb2dvLXdvcmRtYXJrJywgJ3dpZHRoJykudGhlbihmdW5jdGlvbih3aWR0aCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2cod2lkdGgpIC8vIG91dHB1dHM6IDEwMFxuICAgICAgICB9KVxuICAgICAgICAuZ2V0RWxlbWVudFNpemUoJy5oZWFkZXItbG9nby13b3JkbWFyaycsICdoZWlnaHQnKS50aGVuKGZ1bmN0aW9uKGhlaWdodCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coaGVpZ2h0KSAvLyBvdXRwdXRzOiAyMDBcbiAgICAgICAgfSk7XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogQHBhcmFtICAge1N0cmluZ30gc2VsZWN0b3IgZWxlbWVudCB3aXRoIHJlcXVlc3RlZCBzaXplXG4gKiBAcmV0dXJucyB7T2JqZWN0fSAgICAgICAgICByZXF1ZXN0ZWQgZWxlbWVudCBzaXplIChge3dpZHRoOm51bWJlciwgaGVpZ2h0Om51bWJlcn1gKVxuICpcbiAqIEB1c2VzIHByb3RvY29sL2VsZW1lbnRzLCBwcm90b2NvbC9lbGVtZW50SWRTaXplXG4gKiBAdHlwZSBwcm9wZXJ0eVxuICpcbiAqL1xuXG5pbXBvcnQgeyBDb21tYW5kRXJyb3IgfSBmcm9tICcuLi91dGlscy9FcnJvckhhbmRsZXInXG5cbmxldCBnZXRFbGVtZW50U2l6ZSA9IGZ1bmN0aW9uIChzZWxlY3RvciwgcHJvcCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRzKHNlbGVjdG9yKS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIHRocm93IE5vU3VjaEVsZW1lbnQgZXJyb3IgaWYgbm8gZWxlbWVudCB3YXMgZm91bmRcbiAgICAgICAgICovXG4gICAgICAgIGlmICghcmVzLnZhbHVlIHx8IHJlcy52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tYW5kRXJyb3IoNylcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBlbGVtZW50SWRTaXplQ29tbWFuZHMgPSBbXVxuICAgICAgICBmb3IgKGxldCBlbGVtIG9mIHJlcy52YWx1ZSkge1xuICAgICAgICAgICAgZWxlbWVudElkU2l6ZUNvbW1hbmRzLnB1c2godGhpcy5lbGVtZW50SWRTaXplKGVsZW0uRUxFTUVOVCkpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZWxlbWVudElkU2l6ZUNvbW1hbmRzKVxuICAgIH0pLnRoZW4oKHNpemVzKSA9PiB7XG4gICAgICAgIHNpemVzID0gc2l6ZXMubWFwKChzaXplKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzdHJpbmcnICYmIHByb3AubWF0Y2goLyh3aWR0aHxoZWlnaHQpLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZS52YWx1ZVtwcm9wXVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBzaXplLnZhbHVlLndpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogc2l6ZS52YWx1ZS5oZWlnaHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gc2l6ZXMubGVuZ3RoID09PSAxID8gc2l6ZXNbMF0gOiBzaXplc1xuICAgIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldEVsZW1lbnRTaXplXG4iXX0=