NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name khanacademy-disable-sub
// @description disable youtube subs by default
// @namespace https://gitlab.com/zalent
// @homepageURL https://gitlab.com/zalent/khanacademy-disable-sub
// @include https://www.khanacademy.org/*
// @version 0.1.0.5
// @license MIT
// @author rixils
// @run-at document-end
// @grant none
// @downloadURL https://gitlab.com/zalent/khanacademy-disable-sub/raw/master/khanacademy-disable-sub.user.js
// @updateURL https://gitlab.com/zalent/khanacademy-disable-sub/raw/master/khanacademy-disable-sub.meta.js
// ==/UserScript==
(() => {
addOnChangeEventListenerTo(document.body, () => {
if (isVideoPlayerLoaded()) {
disableVideoPlayerSubtitles();
}
});
function addOnChangeEventListenerTo(element, listener) {
let observer = new MutationObserver(listener);
observer.observe(
element,
{
childList: true,
subtree: true,
attributes: false,
characterData: false,
}
);
}
function isVideoPlayerLoaded() {
let playerContainer = getVideoPlayerContainer();
return playerContainer !== null;
}
function disableVideoPlayerSubtitles() {
let playerIframe = getVideoPlayerContainer().firstChild;
let isSubEnabled = playerIframe.src.includes(SUB_ENABLED_URL_PARAM);
if (isSubEnabled) {
let srcUrlWithSubDisabled = playerIframe.src.replace(
SUB_ENABLED_URL_PARAM,
SUB_DISABLED_URL_PARAM
);
playerIframe.src = srcUrlWithSubDisabled;
}
}
function getVideoPlayerContainer() {
return document.querySelector(PLAYER_CONTAINER_SELECTOR);
}
const PLAYER_CONTAINER_SELECTOR = '.ka-video-player-container';
const SUB_ENABLED_URL_PARAM = 'cc_load_policy=1';
const SUB_DISABLED_URL_PARAM = 'cc_load_policy=0';
})();