@@ -274,25 +274,36 @@ chrome.storage.local.get(defaults, function (options) {
274274 }
275275
276276
277+ // TODO maybe handle `contentEditable` ?
277278 function isInvalid ( elem ) {
279+ return ( elem . localName === "a" && elem . href ) ||
280+ ( elem . localName === "textarea" ) ||
281+ // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input
282+ ( elem . localName === "input" &&
283+ ! ( elem . type === "button" ||
284+ elem . type === "checkbox" ||
285+ elem . type === "file" ||
286+ elem . type === "hidden" ||
287+ elem . type === "image" ||
288+ elem . type === "radio" ||
289+ elem . type === "reset" ||
290+ elem . type === "submit" ) ) ;
291+ }
292+
293+ function isValid ( elem ) {
278294 if ( options [ "scrollOnLinks" ] ) {
279- return false
280- // <input> tags can't have children, so the only time it will ever occur is as event.target
281- } else if ( elem . localName === "input" ) {
282- return ! ( elem . type === "button" ||
283- elem . type === "checkbox" ||
284- elem . type === "file" ||
285- elem . type === "hidden" ||
286- elem . type === "image" ||
287- elem . type === "radio" ||
288- elem . type === "reset" ||
289- elem . type === "submit" )
295+ return true
296+
290297 } else {
291298 while ( true ) {
292- if ( elem === document || elem === document . body || elem === htmlNode ) {
293- return false
294- } else if ( elem . localName === "a" && elem . href || elem . localName === "textarea" ) {
299+ if ( elem === document ||
300+ elem === document . body ||
301+ elem === htmlNode ) {
295302 return true
303+
304+ } else if ( isInvalid ( elem ) ) {
305+ return false
306+
296307 } else {
297308 elem = elem . parentNode
298309 }
@@ -446,7 +457,7 @@ chrome.storage.local.get(defaults, function (options) {
446457 if ( ( ( e . button === 1 && options . middleClick ) ||
447458 ( e . button === 0 && ( e . ctrlKey || e . metaKey ) && options . ctrlClick ) ) &&
448459 e . clientX < htmlNode . clientWidth &&
449- ! isInvalid ( e . target ) ) {
460+ isValid ( e . target ) ) {
450461
451462 var elem = findScroll ( e . target )
452463
0 commit comments