You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

46 lines
1.6 KiB

(function() {
function getVisibleElements(filter) {
var all = Array.from(document.documentElement.getElementsByTagName("*"));
var visibleElements = [];
for (var i = 0; i < all.length; i++) {
var e = all[i];
// include elements in a shadowRoot.
if (e.shadowRoot) {
var cc = e.shadowRoot.querySelectorAll('*');
for (var j = 0; j < cc.length; j++) {
all.push(cc[j]);
}
}
var rect = e.getBoundingClientRect();
if ( (rect.top <= window.innerHeight) && (rect.bottom >= 0)
&& (rect.left <= window.innerWidth) && (rect.right >= 0)
&& rect.height > 0
&& getComputedStyle(e).visibility !== 'hidden'
) {
filter(e, visibleElements);
}
}
return visibleElements;
}
var cssSelector = "input";
var elements = getVisibleElements(function(e, v) {
if (e.matches(cssSelector) && !e.disabled && !e.readOnly
&& (e.type === "text" || e.type === "search" || e.type === "password")) {
v.push(e);
}
});
if (elements.length === 0 && document.querySelector(cssSelector) !== null) {
document.querySelector(cssSelector).scrollIntoView();
elements = getVisibleElements(function(e, v) {
if (e.matches(cssSelector) && !e.disabled && !e.readOnly) {
v.push(e);
}
});
}
if (elements.length >= 1) {
elements[0].focus();
}
})();