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
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(); |
|
} |
|
})();
|
|
|