@@ -274,25 +274,36 @@ chrome.storage.local.get(defaults, function (options) {
274
274
}
275
275
276
276
277
+ // TODO maybe handle `contentEditable` ?
277
278
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 ) {
278
294
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
+
290
297
} else {
291
298
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 ) {
295
302
return true
303
+
304
+ } else if ( isInvalid ( elem ) ) {
305
+ return false
306
+
296
307
} else {
297
308
elem = elem . parentNode
298
309
}
@@ -446,7 +457,7 @@ chrome.storage.local.get(defaults, function (options) {
446
457
if ( ( ( e . button === 1 && options . middleClick ) ||
447
458
( e . button === 0 && ( e . ctrlKey || e . metaKey ) && options . ctrlClick ) ) &&
448
459
e . clientX < htmlNode . clientWidth &&
449
- ! isInvalid ( e . target ) ) {
460
+ isValid ( e . target ) ) {
450
461
451
462
var elem = findScroll ( e . target )
452
463
0 commit comments