parent
d5450f6284
commit
350cec5221
3 changed files with 54 additions and 3 deletions
@ -0,0 +1,46 @@ |
||||
(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(); |
||||
} |
||||
})(); |
||||
Loading…
Reference in new issue