MCPcopy Create free account
hub / github.com/Useful-Scripts-Extension/useful-script / keydown

Function keydown

scripts/smoothScroll.js:495–592  ·  view source on GitHub ↗

* Keydown event handler. * @param {Object} event

(event)

Source from the content-addressed store, hash-verified

493 * @param {Object} event
494 */
495 function keydown(event) {
496 let target = event.target;
497 let modifier =
498 event.ctrlKey ||
499 event.altKey ||
500 event.metaKey ||
501 (event.shiftKey && event.keyCode !== key.spacebar);
502 // our own tracked active element could've been removed from the DOM
503 if (!document.contains(activeElement)) {
504 activeElement = document.activeElement;
505 }
506 // do nothing if user is editing text
507 // or using a modifier key (except shift)
508 // or in a dropdown
509 // or inside interactive elements
510 let inputNodeNames = /^(textarea|select|embed|object)$/i;
511 let buttonTypes = /^(button|submit|radio|checkbox|file|color|image)$/i;
512 if (
513 event.defaultPrevented ||
514 inputNodeNames.test(target.nodeName) ||
515 (isNodeName(target, "input") && !buttonTypes.test(target.type)) ||
516 isNodeName(activeElement, "video") ||
517 isInsideYoutubeVideo(event) ||
518 target.isContentEditable ||
519 modifier
520 ) {
521 return true;
522 }
523 // [spacebar] should trigger button press, leave it alone
524 if (
525 (isNodeName(target, "button") ||
526 (isNodeName(target, "input") && buttonTypes.test(target.type))) &&
527 event.keyCode === key.spacebar
528 ) {
529 return true;
530 }
531 // [arrwow keys] on radio buttons should be left alone
532 if (
533 isNodeName(target, "input") &&
534 target.type == "radio" &&
535 arrowKeys[event.keyCode]
536 ) {
537 return true;
538 }
539 let xOnly = event.keyCode == key.left || event.keyCode == key.right;
540 let overflowing = overflowingAncestor(activeElement, xOnly);
541 if (!overflowing) {
542 // iframes seem to eat key events, which we need to propagate up
543 // if the iframe has nothing overflowing to scroll
544 return isFrame ? parent.keydown(event) : true;
545 }
546 let clientHeight = overflowing.clientHeight;
547 let shift,
548 x = 0,
549 y = 0;
550 if (overflowing == document.body) {
551 clientHeight = window.innerHeight;
552 }

Callers

nothing calls this directly

Calls 6

isNodeNameFunction · 0.85
isInsideYoutubeVideoFunction · 0.85
overflowingAncestorFunction · 0.85
scrollArrayFunction · 0.85
scheduleClearCacheFunction · 0.85
keydownMethod · 0.80

Tested by

no test coverage detected