// ==UserScript== // @name youtube-noscript-shim // @namespace systemreboot.net // @description Use YouTube with NoScript // @include https://www.youtube.com/* // @version 0.1 // @grant none // ==/UserScript== // Copyright (C) 2017 Arun Isaac // This program is free software: you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see . /** * Add/remove classes on one or more elements * @param {string} selector - CSS selector for the elements * @param {...string} classes - Classes to add/remove */ function toggleClasses (selector, ...classes) { document.querySelectorAll(selector).forEach(function (element) { classes.forEach(function (cls) { element.classList.toggle(cls); }); }); } /** * Toggle boolean attributes on one or more elements * @param {string} selector - CSS selector for the elements * @param {...string} classes - Boolean attributes to toggle */ function toggleBooleanAttributes (selector, ...attributes) { document.querySelectorAll(selector).forEach(function (element) { attributes.forEach(function (attribute) { element.setAttribute(attribute, element.getAttribute(attribute) == "true" ? "false" : "true"); }); }); } }); } // Load thumbnails Array.from(document.querySelectorAll("img[data-thumb]")).forEach(function (img) { img.setAttribute("src", img.getAttribute("data-thumb")); }); // Search filters document.querySelector(".filter-button").addEventListener("click", function () { toggleClasses(".filter-button", "yt-uix-button-toggled"); toggleClasses(".search-header", "yt-uix-expander-collapsed"); toggleBooleanAttributes(".filter-button", "aria-pressed"); }); // Menu document.querySelector("#appbar-guide-button").addEvenetListener("click", function () { toggleClasses("html", "show-guide"); toggleBooleanAttributes("#appbar-guide-button", "aria-expanded"); });