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

82.61% Statements 19/23
37.5% Branches 6/16
0% Functions 0/6
40% Lines 2/5
15 statements, 6 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                                                                                                                             
/**
 *
 * Move the mouse by an offset of the specificed element. If an element is provided but no
 * offset, the mouse will be moved to the center of the element. If the element is not
 * visible, it will be scrolled into view.
 *
 * @param {String} selector element to move to
 * @param {Number} xoffset  X offset to move to, relative to the top-left corner of the element. If not specified, the mouse will move to the middle of the element.
 * @param {Number} yoffset  Y offset to move to, relative to the top-left corner of the element. If not specified, the mouse will move to the middle of the element.
 *
 * @uses protocol/element, protocol/elementIdLocation
 * @type action
 *
 */
 
'use strict';
 
Object.defineProperty(exports, '__esModule', {
    value: true
});
var moveToObject = function moveToObject(selector) {
    // istanbul ignore next
 
    var _this = this;
 
    var xoffset = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];
    var yoffset = arguments.length <= 2 || arguments[2] === undefined ? 0 : arguments[2];

    /**
     * check for offset params
     */
    var hasOffsetParams = true;
    if (typeof xoffset !== 'number' && typeof yoffset !== 'number') {
        hasOffsetParams = false;
    }
 
    if (this.isMobile) {
        return this.element(selector).then(function (res) {
            return _this.elementIdSize(res.value.ELEMENT).then(function (size) {
                return _this.elementIdLocation(res.element.value.ELEMENT).then(function (location) {
                    return { size: size, location: location };
                });
            });
        }).then(function (res) {
            var x = res.location.value.x - res.size.value.width / 2;
            var y = res.location.value.y - res.size.value.height / 2;
 
            if (hasOffsetParams) {
                x = res.location.value.x + xoffset;
                y = res.location.value.y + yoffset;
            }
 
            return _this.touchMove(x, y);
        });
    }
 
    return this.element(selector).then(function (res) {
        return _this.moveTo(res.value.ELEMENT, xoffset, yoffset);
    });
};
 
exports['default'] = moveToObject;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvY29tbWFuZHMvbW92ZVRvT2JqZWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZUEsSUFBSSxZQUFZLEdBQUcsU0FBZixZQUFZLENBQWEsUUFBUSxFQUE0Qjs7Ozs7UUFBMUIsT0FBTyx5REFBRyxDQUFDO1FBQUUsT0FBTyx5REFBRyxDQUFDOzs7OztBQUkzRCxRQUFJLGVBQWUsR0FBRyxJQUFJLENBQUE7QUFDMUIsUUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzVELHVCQUFlLEdBQUcsS0FBSyxDQUFBO0tBQzFCOztBQUVELFFBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNmLGVBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxHQUFHO21CQUNuQyxNQUFLLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLElBQUk7dUJBQzVDLE1BQUssaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsUUFBUSxFQUFLO0FBQ2pFLDJCQUFPLEVBQUUsSUFBSSxFQUFKLElBQUksRUFBRSxRQUFRLEVBQVIsUUFBUSxFQUFFLENBQUE7aUJBQzVCLENBQUM7YUFBQSxDQUNMO1NBQUEsQ0FDSixDQUFDLElBQUksQ0FBQyxVQUFDLEdBQUcsRUFBSztBQUNaLGdCQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQUFBQyxDQUFBO0FBQ3pELGdCQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQUFBQyxDQUFBOztBQUUxRCxnQkFBSSxlQUFlLEVBQUU7QUFDakIsaUJBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFBO0FBQ2xDLGlCQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQTthQUNyQzs7QUFFRCxtQkFBTyxNQUFLLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7U0FDOUIsQ0FBQyxDQUFBO0tBQ0w7O0FBRUQsV0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLEdBQUcsRUFBSztBQUN4QyxlQUFPLE1BQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtLQUMxRCxDQUFDLENBQUE7Q0FDTCxDQUFBOztxQkFFYyxZQUFZIiwiZmlsZSI6Ii9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvY29tbWFuZHMvbW92ZVRvT2JqZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKlxuICogTW92ZSB0aGUgbW91c2UgYnkgYW4gb2Zmc2V0IG9mIHRoZSBzcGVjaWZpY2VkIGVsZW1lbnQuIElmIGFuIGVsZW1lbnQgaXMgcHJvdmlkZWQgYnV0IG5vXG4gKiBvZmZzZXQsIHRoZSBtb3VzZSB3aWxsIGJlIG1vdmVkIHRvIHRoZSBjZW50ZXIgb2YgdGhlIGVsZW1lbnQuIElmIHRoZSBlbGVtZW50IGlzIG5vdFxuICogdmlzaWJsZSwgaXQgd2lsbCBiZSBzY3JvbGxlZCBpbnRvIHZpZXcuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIGVsZW1lbnQgdG8gbW92ZSB0b1xuICogQHBhcmFtIHtOdW1iZXJ9IHhvZmZzZXQgIFggb2Zmc2V0IHRvIG1vdmUgdG8sIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGVsZW1lbnQuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBtb3VzZSB3aWxsIG1vdmUgdG8gdGhlIG1pZGRsZSBvZiB0aGUgZWxlbWVudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSB5b2Zmc2V0ICBZIG9mZnNldCB0byBtb3ZlIHRvLCByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIHRoZSBlbGVtZW50LiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgbW91c2Ugd2lsbCBtb3ZlIHRvIHRoZSBtaWRkbGUgb2YgdGhlIGVsZW1lbnQuXG4gKlxuICogQHVzZXMgcHJvdG9jb2wvZWxlbWVudCwgcHJvdG9jb2wvZWxlbWVudElkTG9jYXRpb25cbiAqIEB0eXBlIGFjdGlvblxuICpcbiAqL1xuXG5sZXQgbW92ZVRvT2JqZWN0ID0gZnVuY3Rpb24gKHNlbGVjdG9yLCB4b2Zmc2V0ID0gMCwgeW9mZnNldCA9IDApIHtcbiAgICAvKipcbiAgICAgKiBjaGVjayBmb3Igb2Zmc2V0IHBhcmFtc1xuICAgICAqL1xuICAgIHZhciBoYXNPZmZzZXRQYXJhbXMgPSB0cnVlXG4gICAgaWYgKHR5cGVvZiB4b2Zmc2V0ICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgeW9mZnNldCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgaGFzT2Zmc2V0UGFyYW1zID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc01vYmlsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50KHNlbGVjdG9yKS50aGVuKChyZXMpID0+XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRJZFNpemUocmVzLnZhbHVlLkVMRU1FTlQpLnRoZW4oKHNpemUpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50SWRMb2NhdGlvbihyZXMuZWxlbWVudC52YWx1ZS5FTEVNRU5UKS50aGVuKChsb2NhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBzaXplLCBsb2NhdGlvbiB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIGxldCB4ID0gcmVzLmxvY2F0aW9uLnZhbHVlLnggLSAocmVzLnNpemUudmFsdWUud2lkdGggLyAyKVxuICAgICAgICAgICAgbGV0IHkgPSByZXMubG9jYXRpb24udmFsdWUueSAtIChyZXMuc2l6ZS52YWx1ZS5oZWlnaHQgLyAyKVxuXG4gICAgICAgICAgICBpZiAoaGFzT2Zmc2V0UGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgeCA9IHJlcy5sb2NhdGlvbi52YWx1ZS54ICsgeG9mZnNldFxuICAgICAgICAgICAgICAgIHkgPSByZXMubG9jYXRpb24udmFsdWUueSArIHlvZmZzZXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG91Y2hNb3ZlKHgsIHkpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudChzZWxlY3RvcikudGhlbigocmVzKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vdmVUbyhyZXMudmFsdWUuRUxFTUVOVCwgeG9mZnNldCwgeW9mZnNldClcbiAgICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBtb3ZlVG9PYmplY3RcbiJdfQ==