Moves episode list under player, auto expands player, auto 1080p (requires CORS), removes some unnecessary stuff, other UI changes.
// ==UserScript== // @name AniWave QoL // @namespace https://greasyfork.org/en/users/1262395-grinnch // @version 1.2 // @description Moves episode list under player, auto expands player, auto 1080p (requires CORS), removes some unnecessary stuff, other UI changes. // @author grinnch // @license MIT // @match https://aniwave.to/* // @icon https://cdn2.steamgriddb.com/icon_thumb/21b203a02c91d5272135dbbebe6afc00.png // ==/UserScript== (async () => { 'use strict'; function waitForElement(selector, baseElement = document.body) { return new Promise(resolve => { if (baseElement.querySelector(selector)) { return resolve(baseElement.querySelector(selector)); } const observer = new MutationObserver(mutations => { if (baseElement.querySelector(selector)) { resolve(baseElement.querySelector(selector)); observer.disconnect(); } }); observer.observe(baseElement, { childList: true, subtree: true }); }); } function modifyStyle() { // Places episode-panel underneath player let element = document.querySelector('#w-media'); if (element) { element.style.flexDirection = 'column'; } let episodesElement = document.querySelector('#w-media #w-episodes'); if (episodesElement) { episodesElement.style.order = '3'; episodesElement.style.maxWidth = 'unset'; episodesElement.style.marginTop = '10px'; episodesElement.style.marginLeft = '85px'; episodesElement.style.marginRight = '85px'; } let episodesBodyElement = document.querySelector('#w-media #w-episodes .body .episodes'); if (episodesBodyElement) { episodesBodyElement.style.position = 'static'; episodesBodyElement.style.maxHeight = '300px'; episodesBodyElement.style.overflowY = 'auto'; } // Adds padding to player to fit on-screen let wplayerElement = document.querySelector('#w-media #w-player'); if (wplayerElement) { wplayerElement.style.marginLeft = '96px'; wplayerElement.style.marginRight = '96px'; } // Reduces width of player to remove black bars let playerElement = document.querySelector('#w-media #w-player #player-wrapper #player'); if (playerElement) { playerElement.style.width = '98%'; playerElement.style.left = '15px'; } // Reduces width of controls underneath player to align with player let controlsElement = document.querySelector('#w-media #controls'); if (controlsElement) { controlsElement.style.width = '98%'; controlsElement.style.left = '15px'; controlsElement.style.position = 'relative'; } // Adds left-padding to related panel let sidebarElement = document.querySelector('#watch-main aside.sidebar'); if (sidebarElement) { sidebarElement.style.marginLeft = '10px'; sidebarElement.style.marginRight = '10px'; } // Adds left-padding to info let descriptionElement = document.querySelector('#w-info'); if (descriptionElement) { descriptionElement.style.marginLeft = '10px'; descriptionElement.style.marginRight = '10px'; } } modifyStyle(); // Watches for changes in the element let observer = new MutationObserver(modifyStyle); // Starts observing the target element let target = document.querySelector('#w-media'); if (target) { observer.observe(target, { attributes: true, childList: true, subtree: true }); } window.onload = function() { // Removes built-in ad var elements = document.getElementsByClassName('mb-4 text-center'); while(elements.length > 0){ while(elements[0].firstChild) { elements[0].removeChild(elements[0].firstChild); } elements[0].classList.remove('mb-4', 'text-center'); } // Removes sharing var bsharingElements = document.getElementsByClassName('bsharing mb-4'); while(bsharingElements.length > 0){ while(bsharingElements[0].firstChild) { bsharingElements[0].removeChild(bsharingElements[0].firstChild); } bsharingElements[0].classList.remove('bsharing', 'mb-4'); } // Auto expands var expandElement = document.querySelector('.ctrl.expand'); if (expandElement) { expandElement.click(); } // Auto selects highest quality (requires CORS) setTimeout(function() { let iframe = document.querySelector("#player > iframe"); let command = "jwplayer().setCurrentQuality(1)"; if (iframe) { iframe.contentWindow.eval(command); } }, 3000); }; })();