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
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.
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.
## Installation
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/shibao/disable-youtube-autoplay/raw/branch/stable/disable-youtube-autoplay.user.js).
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).
## License
This userscript is licensed under GPL v3.0 or later.
## Contribution
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).
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).

View File

@ -1,59 +1,26 @@
// ==UserScript==
// @name Turn off Youtube Autoplay
// @namespace https://bubbletea.dev/
// @version 2.1.0
// @version 1.0
// @description Disables Youtube recommended videos from automatically playing
// @author shibao
// @include https://www.youtube.com/watch*
// @downloadURL https://gitea.bubbletea.dev/shibao/disable-youtube-autoplay/raw/branch/stable/disable-youtube-autoplay.user.js
// @updateURL 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/bubbletea.dev/disable-youtube-autoplay/raw/branch/master/disable-youtube-autoplay.user.js
// @grant none
// ==/UserScript==
// from https://developer.mozilla.org/en-US/docs/Web/API/Node#recurse_through_child_nodes
function eachNode(rootNode, callback) {
if (!callback) {
const nodes = [];
eachNode(rootNode, function (node) {
nodes.push(node);
});
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 disableAutoplay() {
var e = document.querySelector('button.ytp-button[data-tooltip-target-id="ytp-autonav-toggle-button"]');
if (e == null) {
console.error('Youtube checkbox could not be found!');
} else {
var isChecked = document.querySelector('.ytp-autonav-toggle-button').getAttribute('aria-checked') == "true";
if (isChecked) e.click();
}
}
(function () {
"use strict";
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,
});
})();
'use strict';
document.onLoad = setTimeout(disableAutoplay, 1000);
}) ();