/**
*
* Determine an element’s location on the page. The point (0, 0) refers to
* the upper-left corner of the page.
*
* <example>
:getLocation.js
client
.url('http://github.com')
.getLocation('.header-logo-wordmark').then(function (location) {
console.log(location); // outputs: { x: 100, y: 200 }
})
.getLocation('.header-logo-wordmark', 'x').then(function (location) {
console.log(location); // outputs: 100
})
.getLocation('.header-logo-wordmark', 'y').then(function (location) {
console.log(location); // outputs: 200
});
* </example>
*
* @param {String} selector element with requested position offset
* @returns {Object|Object[]} The X and Y coordinates for the element on the page (`{x:number, y:number}`)
*
* @uses protocol/elements, protocol/elementIdLocation
* @type property
*
*/
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
var _utilsErrorHandler = require('../utils/ErrorHandler');
var getLocation = function getLocation(selector, prop) {
// istanbul ignore next
var _this = this;
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 elementIdLocationCommands = [];
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;
elementIdLocationCommands.push(_this.elementIdLocation(elem.ELEMENT));
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator['return']) {
_iterator['return']();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return Promise.all(elementIdLocationCommands);
}).then(function (locations) {
locations = locations.map(function (location) {
if (typeof prop === 'string' && prop.match(/(x|y)/)) {
return location.value[prop];
}
return {
x: location.value.x,
y: location.value.y
};
});
return locations.length === 1 ? locations[0] : locations;
});
};
exports['default'] = getLocation;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvY29tbWFuZHMvZ2V0TG9jYXRpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQ0E0QjZCLHVCQUF1Qjs7QUFFcEQsSUFBSSxXQUFXLEdBQUcsU0FBZCxXQUFXLENBQWEsUUFBUSxFQUFFLElBQUksRUFBRTs7Ozs7QUFDeEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLEdBQUcsRUFBSzs7OztBQUl6QyxZQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDdEMsa0JBQU0sb0NBQWlCLENBQUMsQ0FBQyxDQUFBO1NBQzVCOztBQUVELFlBQUkseUJBQXlCLEdBQUcsRUFBRSxDQUFBOzs7Ozs7QUFDbEMsaUNBQWlCLEdBQUcsQ0FBQyxLQUFLLDhIQUFFO29CQUFuQixJQUFJOztBQUNULHlDQUF5QixDQUFDLElBQUksQ0FBQyxNQUFLLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO2FBQ3ZFOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUQsZUFBTyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUE7S0FDaEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLFNBQVMsRUFBSztBQUNuQixpQkFBUyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBQyxRQUFRLEVBQUs7QUFDcEMsZ0JBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDakQsdUJBQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTthQUM5Qjs7QUFFRCxtQkFBTztBQUNILGlCQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25CLGlCQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3RCLENBQUE7U0FDSixDQUFDLENBQUE7O0FBRUYsZUFBTyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFBO0tBQzNELENBQUMsQ0FBQTtDQUNMLENBQUE7O3FCQUVjLFdBQVciLCJmaWxlIjoiL1VzZXJzL2NocmlzdGlhbmJyb21hbm4vU2l0ZXMvV2VicHJvamVrdGUvd2ViZHJpdmVyanMvREVWL2xpYi9jb21tYW5kcy9nZXRMb2NhdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICpcbiAqIERldGVybWluZSBhbiBlbGVtZW504oCZcyBsb2NhdGlvbiBvbiB0aGUgcGFnZS4gVGhlIHBvaW50ICgwLCAwKSByZWZlcnMgdG9cbiAqIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcGFnZS5cbiAqXG4gKiA8ZXhhbXBsZT5cbiAgICA6Z2V0TG9jYXRpb24uanNcbiAgICBjbGllbnRcbiAgICAgICAgLnVybCgnaHR0cDovL2dpdGh1Yi5jb20nKVxuICAgICAgICAuZ2V0TG9jYXRpb24oJy5oZWFkZXItbG9nby13b3JkbWFyaycpLnRoZW4oZnVuY3Rpb24gKGxvY2F0aW9uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhsb2NhdGlvbik7IC8vIG91dHB1dHM6IHsgeDogMTAwLCB5OiAyMDAgfVxuICAgICAgICB9KVxuICAgICAgICAuZ2V0TG9jYXRpb24oJy5oZWFkZXItbG9nby13b3JkbWFyaycsICd4JykudGhlbihmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGxvY2F0aW9uKTsgLy8gb3V0cHV0czogMTAwXG4gICAgICAgIH0pXG4gICAgICAgIC5nZXRMb2NhdGlvbignLmhlYWRlci1sb2dvLXdvcmRtYXJrJywgJ3knKS50aGVuKGZ1bmN0aW9uIChsb2NhdGlvbikge1xuICAgICAgICAgICAgY29uc29sZS5sb2cobG9jYXRpb24pOyAvLyBvdXRwdXRzOiAyMDBcbiAgICAgICAgfSk7XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yICAgIGVsZW1lbnQgd2l0aCByZXF1ZXN0ZWQgcG9zaXRpb24gb2Zmc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0fE9iamVjdFtdfSAgVGhlIFggYW5kIFkgY29vcmRpbmF0ZXMgZm9yIHRoZSBlbGVtZW50IG9uIHRoZSBwYWdlIChge3g6bnVtYmVyLCB5Om51bWJlcn1gKVxuICpcbiAqIEB1c2VzIHByb3RvY29sL2VsZW1lbnRzLCBwcm90b2NvbC9lbGVtZW50SWRMb2NhdGlvblxuICogQHR5cGUgcHJvcGVydHlcbiAqXG4gKi9cblxuaW1wb3J0IHsgQ29tbWFuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvRXJyb3JIYW5kbGVyJ1xuXG5sZXQgZ2V0TG9jYXRpb24gPSBmdW5jdGlvbiAoc2VsZWN0b3IsIHByb3ApIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50cyhzZWxlY3RvcikudGhlbigocmVzKSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiB0aHJvdyBOb1N1Y2hFbGVtZW50IGVycm9yIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoIXJlcy52YWx1ZSB8fCByZXMudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbWFuZEVycm9yKDcpXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZWxlbWVudElkTG9jYXRpb25Db21tYW5kcyA9IFtdXG4gICAgICAgIGZvciAobGV0IGVsZW0gb2YgcmVzLnZhbHVlKSB7XG4gICAgICAgICAgICBlbGVtZW50SWRMb2NhdGlvbkNvbW1hbmRzLnB1c2godGhpcy5lbGVtZW50SWRMb2NhdGlvbihlbGVtLkVMRU1FTlQpKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGVsZW1lbnRJZExvY2F0aW9uQ29tbWFuZHMpXG4gICAgfSkudGhlbigobG9jYXRpb25zKSA9PiB7XG4gICAgICAgIGxvY2F0aW9ucyA9IGxvY2F0aW9ucy5tYXAoKGxvY2F0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzdHJpbmcnICYmIHByb3AubWF0Y2goLyh4fHkpLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRpb24udmFsdWVbcHJvcF1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB4OiBsb2NhdGlvbi52YWx1ZS54LFxuICAgICAgICAgICAgICAgIHk6IGxvY2F0aW9uLnZhbHVlLnlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gbG9jYXRpb25zLmxlbmd0aCA9PT0gMSA/IGxvY2F0aW9uc1swXSA6IGxvY2F0aW9uc1xuICAgIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldExvY2F0aW9uXG4iXX0= |