|
// ==UserScript== |
|
// @name YouTube Usability |
|
// @description Disable frequently mistyped shortcuts (e.g. 0-9 number keys) and auto-looping on shorts. |
|
// @license MIT |
|
// @icon https://m.youtube.com/static/apple-touch-icon-114x114-precomposed.png |
|
// @downloadURL https://gist.githubusercontent.com/msanders/ee774a1e4867911bb70ec7389bdbc9e8/raw/youtube-ux.user.js |
|
// @updateURL https://gist.githubusercontent.com/msanders/ee774a1e4867911bb70ec7389bdbc9e8/raw/youtube-ux.user.js |
|
// @namespace michaelsande.rs |
|
// @version 2024.04.14 |
|
// @match https://www.youtube.com/* |
|
// @match https://m.youtube.com/* |
|
// @run-at document-start |
|
// ==/UserScript== |
|
|
|
// Tested on Firefox Greasemonkey and Violentmonkey, and Safari Userscripts. |
|
(() => { |
|
"use strict"; |
|
const beforeLoad = () => { |
|
const ALLOWED_MODIFIER_KEYS = ["Alt", "Control", "Meta", "OS"]; |
|
const DISABLED_KEYS = new Set( |
|
"0123456789kjl".split("").concat(["Home", "End"]) |
|
); |
|
|
|
window.addEventListener( |
|
"keydown", |
|
event => { |
|
if ( |
|
DISABLED_KEYS.has(event.key) && |
|
!ALLOWED_MODIFIER_KEYS.some(event.getModifierState.bind(event)) && |
|
!event.isComposing |
|
) { |
|
event.stopImmediatePropagation(); |
|
} |
|
}, |
|
true |
|
); |
|
|
|
window.addEventListener("load", afterLoad); |
|
}; |
|
|
|
const afterLoad = () => { |
|
const pageManager = document.getElementById("page-manager"); |
|
if (pageManager !== null) { |
|
const disableShortLooping = () => { |
|
pageManager |
|
.querySelector("#shorts-player video") |
|
?.removeAttribute("loop"); |
|
}; |
|
|
|
disableShortLooping(); |
|
|
|
// Shorts player gets inserted dynamically by YouTube when navigating, so |
|
// can't be used as target. |
|
new MutationObserver(disableShortLooping).observe(pageManager, { |
|
attributeFilter: ["loop"], |
|
childList: true, |
|
subtree: true, |
|
}); |
|
} |
|
}; |
|
|
|
beforeLoad(); |
|
})(); |