[youtube.com] Arrow keys hate focus

No focus depending arrow keys binding. Left/Right - always playback, down/up - always volume.

Verzia zo dňa 19.12.2019. Pozri najnovšiu verziu.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name            [youtube.com] Arrow keys hate focus
// @name:ru         [youtube.com] Клавиши стрелок гнобят фокус
// @description     No focus depending arrow keys binding. Left/Right - always playback, down/up - always volume.
// @description:ru  Клавиши стрелок не зависят от фокуса. Влево/Вправо - всегда перемотка, вниз/вверх - всегда громкость.
// @namespace       youtube.com/arrows.hate.focus
// @author          Zaytsev Artem
// @version         0.0.1.1
// @match           https://*.youtube.com/*
// ==/UserScript==

/*
document.addEventListener('focusin', (event) => {
	console.log("GM-youtube-novf: Focusin: " + event.target.className);
});
*/

//Sound volume panel.
//console.log("GM-youtube-novf: Quering the .ytp-volume-panel...");
var q_vp = document.querySelector(".ytp-volume-panel");
if (q_vp) {
	q_vp.addEventListener('focus', (event) => {
		//console.log("GM-youtube-novf: .ytp-volume-panel tried to get focus.");
		//event.target.focusout();
		//event.target.blur();
		document.querySelector(".html5-video-player").focus({preventScroll:true});
	});
	console.log("GM-youtube-novf: .ytp-volume-panel element found.");
	window.setTimeout(function(){
		//console.log("GM-youtube-novf: Setting .ytp-volume-panel's tabindex to -1...");
		q_vp.setAttribute("tabindex", "-1");
	}, 3000)
}

//Somehow the slider also wants to get the focus although it doesn't have a tabindex set.
var q_vsh = document.querySelector(".ytp-volume-slider-handle");
if (q_vsh) {
	q_vsh.addEventListener('focus', (event) => {
		//console.log("GM-youtube-novf: .ytp-volume-slider-handle tried to get focus.");
		document.querySelector(".html5-video-player").focus({preventScroll:true});
	});
	window.setTimeout(function(){
		//console.log("GM-youtube-novf: Setting .ytp-volume-slider-handle's tabindex to -1...");
		q_vsh.setAttribute("tabindex", "-1");
	}, 3000)
}

//The player playback seekbar.
var q_pb = document.querySelector(".ytp-progress-bar");
if (q_pb) {
	q_pb.addEventListener('focus', (event) => {
		//console.log("GM-youtube-novf: .ytp-progress-bar tried to get focus.");
		document.querySelector(".html5-video-player").focus({preventScroll:true});
	});
	window.setTimeout(function(){
		//console.log("GM-youtube-novf: Setting .ytp-progress-bar's tabindex to -1...");
		q_pb.setAttribute("tabindex", "-1");
	}, 3000)
}