Compare commits

..

No commits in common. "stable" and "32d64bf76bfd5aa7f890b6e3dc35cd9917ded971" have entirely different histories.

2 changed files with 16 additions and 58 deletions

View File

@ -1,20 +1,11 @@
# Disable Youtube Autoplay # Disable Youtube Autoplay
This userscript disables youtube recommended videos from automatically playing This userscript disables youtube recommended videos from automatically playing after your video has finished. With this userscript, you aren't reliant on Youtube's cookies in order to prevent videos from playing.
after your video has finished. With this userscript, you aren't reliant on
Youtube's cookies in order to prevent videos from playing.
## Installation ## Installation
First, install Violentmonkey for First, install Violentmonkey for [Firefox](https://addons.mozilla.org/en-US/firefox/addon/violentmonkey/) or [Chrome](https://chrome.google.com/webstore/detail/violentmonkey/jinjaccalgkegednnccohejagnlnfdag), or any other userscript manager of your choice, and then [click here to install the userscript](https://gitea.bubbletea.dev/bubbletea.dev/disable-youtube-autoplay/raw/branch/master/disable-youtube-autoplay.user.js).
[Firefox](https://addons.mozilla.org/en-US/firefox/addon/violentmonkey/) or
[Chrome](https://chrome.google.com/webstore/detail/violentmonkey/jinjaccalgkegednnccohejagnlnfdag),
or any other userscript manager of your choice, and then [click here to install
the
userscript](https://gitea.bubbletea.dev/shibao/disable-youtube-autoplay/raw/branch/stable/disable-youtube-autoplay.user.js).
## License ## License
This userscript is licensed under GPL v3.0 or later. This userscript is licensed under GPL v3.0 or later.
## Contribution ## Contribution
Contributers are highly encouraged! Feel free to open a pull request with any Contributers are highly encouraged! Feel free to open a pull request with any potential changes, and you can contact me at [shibao@bubbletea.dev](mailto:shibao@bubbletea.dev).
potential changes, and you can contact me at
[shibao@bubbletea.dev](mailto:shibao@bubbletea.dev).

View File

@ -1,59 +1,26 @@
// ==UserScript== // ==UserScript==
// @name Turn off Youtube Autoplay // @name Turn off Youtube Autoplay
// @namespace https://bubbletea.dev/ // @namespace https://bubbletea.dev/
// @version 2.1.0 // @version 1.0
// @description Disables Youtube recommended videos from automatically playing // @description Disables Youtube recommended videos from automatically playing
// @author shibao // @author shibao
// @include https://www.youtube.com/watch* // @include https://www.youtube.com/watch*
// @downloadURL https://gitea.bubbletea.dev/shibao/disable-youtube-autoplay/raw/branch/stable/disable-youtube-autoplay.user.js // @downloadURL https://gitea.bubbletea.dev/bubbletea.dev/disable-youtube-autoplay/raw/branch/master/disable-youtube-autoplay.user.js
// @updateURL https://gitea.bubbletea.dev/shibao/disable-youtube-autoplay/raw/branch/stable/disable-youtube-autoplay.user.js // @updateURL https://gitea.bubbletea.dev/bubbletea.dev/disable-youtube-autoplay/raw/branch/master/disable-youtube-autoplay.user.js
// @grant none // @grant none
// ==/UserScript== // ==/UserScript==
// from https://developer.mozilla.org/en-US/docs/Web/API/Node#recurse_through_child_nodes function disableAutoplay() {
function eachNode(rootNode, callback) { var e = document.querySelector('button.ytp-button[data-tooltip-target-id="ytp-autonav-toggle-button"]');
if (!callback) { if (e == null) {
const nodes = []; console.error('Youtube checkbox could not be found!');
eachNode(rootNode, function (node) { } else {
nodes.push(node); var isChecked = document.querySelector('.ytp-autonav-toggle-button').getAttribute('aria-checked') == "true";
}); if (isChecked) e.click();
return nodes;
}
if (false === callback(rootNode)) {
return false;
}
if (rootNode.hasChildNodes()) {
const nodes = rootNode.childNodes;
for (let i = 0, l = nodes.length; i < l; ++i) {
if (false === eachNode(nodes[i], callback)) {
return;
}
}
} }
} }
(function () { (function () {
"use strict"; 'use strict';
document.onLoad = setTimeout(disableAutoplay, 1000);
const observer = new MutationObserver(function (mutationList) { }) ();
for (const mutation of mutationList) {
for (const addedNode of mutation.addedNodes) {
// recurses through all child nodes as well
eachNode(addedNode, function (node) {
node.nodeName == "DIV" &&
node.classList.contains("ytp-autonav-toggle-button") &&
node.getAttribute("aria-checked") == "true" &&
node.click();
});
}
}
});
observer.observe(document, {
childList: true,
subtree: true,
attributes: true,
});
})();