/**
*
* Return true if the selected DOM-element found by given selector is visible and within the viewport.
*
* <example>
:index.html
<div id="notDisplayed" style="display: none"></div>
<div id="notVisible" style="visibility: hidden"></div>
<div id="notInViewport" style="position:absolute; left: 9999999"></div>
<div id="zeroOpacity" style="opacity: 0"></div>
:isVisibleWithinViewport.js
client
.isVisibleWithinViewport('#notDisplayed').then(function(isVisible) {
console.log(isVisible); // outputs: false
})
.isVisibleWithinViewport('#notVisible').then(function(isVisible) {
console.log(isVisible); // outputs: false
})
.isVisible('#notExisting').then(function(isVisible) {
console.log(isVisible); // outputs: false
})
.isVisibleWithinViewport('#notInViewport').then(function(isVisible) {
console.log(isVisible); // outputs: false
})
.isVisibleWithinViewport('#zeroOpacity').then(function(isVisible) {
console.log(isVisible); // outputs: false
});
* </example>
*
* @param {String} selector DOM-element
* @returns {Boolean|Boolean[]} true if element(s)* [is|are] visible
*
* @uses protocol/selectorExecute, protocol/timeoutsAsyncScript
* @type state
*
*/
'use strict';
// istanbul ignore next
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _scriptsIsWithinViewport = require('../scripts/isWithinViewport');
var _scriptsIsWithinViewport2 = _interopRequireDefault(_scriptsIsWithinViewport);
module.exports = function isVisibleWithinViewport(selector) {
return this.selectorExecute(selector, _scriptsIsWithinViewport2['default']).then(function (res) {
if (Array.isArray(res) && res.length === 1) {
return res[0];
}
return res;
}, function (err) {
/**
* if element does not exist it is automatically not visible :-)
*/
if (err.message.indexOf('NoSuchElement') > -1) {
return true;
}
throw err;
});
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9jaHJpc3RpYW5icm9tYW5uL1NpdGVzL1dlYnByb2pla3RlL3dlYmRyaXZlcmpzL0RFVi9saWIvY29tbWFuZHMvaXNWaXNpYmxlV2l0aGluVmlld3BvcnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dUNBc0N3Qyw2QkFBNkI7Ozs7QUFFckUsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLHVCQUF1QixDQUFFLFFBQVEsRUFBRTtBQUN6RCxXQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSx1Q0FBOEIsQ0FBQyxJQUFJLENBQUMsVUFBQyxHQUFHLEVBQUs7QUFDN0UsWUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3hDLG1CQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtTQUNoQjs7QUFFRCxlQUFPLEdBQUcsQ0FBQTtLQUNiLEVBQUUsVUFBQyxHQUFHLEVBQUs7Ozs7QUFJUixZQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQzNDLG1CQUFPLElBQUksQ0FBQTtTQUNkOztBQUVELGNBQU0sR0FBRyxDQUFBO0tBQ1osQ0FBQyxDQUFBO0NBQ0wsQ0FBQSIsImZpbGUiOiIvVXNlcnMvY2hyaXN0aWFuYnJvbWFubi9TaXRlcy9XZWJwcm9qZWt0ZS93ZWJkcml2ZXJqcy9ERVYvbGliL2NvbW1hbmRzL2lzVmlzaWJsZVdpdGhpblZpZXdwb3J0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIHNlbGVjdGVkIERPTS1lbGVtZW50IGZvdW5kIGJ5IGdpdmVuIHNlbGVjdG9yIGlzIHZpc2libGUgYW5kIHdpdGhpbiB0aGUgdmlld3BvcnQuXG4gKlxuICogPGV4YW1wbGU+XG4gICAgOmluZGV4Lmh0bWxcbiAgICA8ZGl2IGlkPVwibm90RGlzcGxheWVkXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+PC9kaXY+XG4gICAgPGRpdiBpZD1cIm5vdFZpc2libGVcIiBzdHlsZT1cInZpc2liaWxpdHk6IGhpZGRlblwiPjwvZGl2PlxuICAgIDxkaXYgaWQ9XCJub3RJblZpZXdwb3J0XCIgc3R5bGU9XCJwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDogOTk5OTk5OVwiPjwvZGl2PlxuICAgIDxkaXYgaWQ9XCJ6ZXJvT3BhY2l0eVwiIHN0eWxlPVwib3BhY2l0eTogMFwiPjwvZGl2PlxuXG4gICAgOmlzVmlzaWJsZVdpdGhpblZpZXdwb3J0LmpzXG4gICAgY2xpZW50XG4gICAgICAgIC5pc1Zpc2libGVXaXRoaW5WaWV3cG9ydCgnI25vdERpc3BsYXllZCcpLnRoZW4oZnVuY3Rpb24oaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhpc1Zpc2libGUpOyAvLyBvdXRwdXRzOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICAuaXNWaXNpYmxlV2l0aGluVmlld3BvcnQoJyNub3RWaXNpYmxlJykudGhlbihmdW5jdGlvbihpc1Zpc2libGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGlzVmlzaWJsZSk7IC8vIG91dHB1dHM6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICAgIC5pc1Zpc2libGUoJyNub3RFeGlzdGluZycpLnRoZW4oZnVuY3Rpb24oaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhpc1Zpc2libGUpOyAvLyBvdXRwdXRzOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICAuaXNWaXNpYmxlV2l0aGluVmlld3BvcnQoJyNub3RJblZpZXdwb3J0JykudGhlbihmdW5jdGlvbihpc1Zpc2libGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGlzVmlzaWJsZSk7IC8vIG91dHB1dHM6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICAgIC5pc1Zpc2libGVXaXRoaW5WaWV3cG9ydCgnI3plcm9PcGFjaXR5JykudGhlbihmdW5jdGlvbihpc1Zpc2libGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGlzVmlzaWJsZSk7IC8vIG91dHB1dHM6IGZhbHNlXG4gICAgICAgIH0pO1xuICogPC9leGFtcGxlPlxuICpcbiAqIEBwYXJhbSAgIHtTdHJpbmd9ICAgICAgICAgICAgIHNlbGVjdG9yICBET00tZWxlbWVudFxuICogQHJldHVybnMge0Jvb2xlYW58Qm9vbGVhbltdfSAgICAgICAgICAgIHRydWUgaWYgZWxlbWVudChzKSogW2lzfGFyZV0gdmlzaWJsZVxuICpcbiAqIEB1c2VzIHByb3RvY29sL3NlbGVjdG9yRXhlY3V0ZSwgcHJvdG9jb2wvdGltZW91dHNBc3luY1NjcmlwdFxuICogQHR5cGUgc3RhdGVcbiAqXG4gKi9cblxuaW1wb3J0IGlzVmlzaWJsZVdpdGhpblZpZXdwb3J0RnVuYyBmcm9tICcuLi9zY3JpcHRzL2lzV2l0aGluVmlld3BvcnQnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNWaXNpYmxlV2l0aGluVmlld3BvcnQgKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0b3JFeGVjdXRlKHNlbGVjdG9yLCBpc1Zpc2libGVXaXRoaW5WaWV3cG9ydEZ1bmMpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXMpICYmIHJlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNbMF1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNcbiAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBpZiBlbGVtZW50IGRvZXMgbm90IGV4aXN0IGl0IGlzIGF1dG9tYXRpY2FsbHkgbm90IHZpc2libGUgOi0pXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UuaW5kZXhPZignTm9TdWNoRWxlbWVudCcpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnJcbiAgICB9KVxufVxuIl19 |