您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Removes the annoying video player on youtube music, adds a screensaver feature, modifies the colors and adds fade colors too
// ==UserScript== // @name Youtube Music Mod // @namespace https://greasyfork.dpdns.org // @version 0.8 // @description Removes the annoying video player on youtube music, adds a screensaver feature, modifies the colors and adds fade colors too // @author Red & one other person // @match https://music.youtube.com/watch* // @match https://music.youtube.com/* // @icon https://music.youtube.com/favicon.ico // @grant GM_setValue // @grant GM_getValue // ==/UserScript== let watchModActive = false; let watchModSleepTime = GM_getValue("watchModSleepTime", 6000); let watchModSleepStart = 0; let watchModClicks = GM_getValue("watchModClicks", 3); let fadeModSleepTime = GM_getValue("fadehModSleepTime", 1000);; let fadeModSleepStart = 0; let backgroundColor = GM_getValue("backgroundColor", '#300606') let fadeColor = GM_getValue("fadeColor", '#000000') let textColor = GM_getValue("textColor", '#ffffff') let fadeTransition = GM_getValue("fadeTransition", 'background-color .3s ease') let fadeShadowTransition = GM_getValue("fadeShadowTransition", 'box-shadow .3s ease') let configOpen = false; let doneNonWatchStyles = false; let doneWatchStyles = false; let previewRotation = false; function doNonWatchStyles(initial=false, bg) { bg = bg ? bg : backgroundColor if (doneNonWatchStyles) return; const element_list_background = document.querySelector("ytmusic-section-list-renderer"); element_list_background.style.backgroundColor = bg; if (initial) addFade(element_list_background); doneNonWatchStyles = true; } function doWatchStyles(initial=false, bg) { bg = bg ? bg : backgroundColor if (doneWatchStyles) return; let element_favorites = document.getElementById("items"); if (element_favorites != null){ element_favorites.remove(); } doneWatchStyles = true; } function reset_watchModSleepStart(additionalTime = 0) { if (typeof additionalTime !== 'number' || isNaN(additionalTime)) additionalTime = 0; watchModSleepStart = Date.now() + additionalTime; fadeModSleepStart = Date.now() + additionalTime; } function updateWatchElement() { let watchElement = document.querySelector(".watch-element"); let contentInfo = document.querySelector(".content-info-wrapper.ytmusic-player-bar"); if (!watchElement) return; let clickCount = parseInt(watchElement.getAttribute('data-click-count'), 10); clickCount = isNaN(clickCount) ? 0 : clickCount; if (clickCount >= watchModClicks) return; if (!contentInfo) { setTimeout(updateWatchElement, 100); return; } watchElement.children[0].innerHTML = contentInfo.children[0].innerHTML; setTimeout(updateWatchElement, 5000); } function checkWatchElement() { let watchElement = document.querySelector(".watch-element"); if (!watchElement) return; let currentTime = Date.now(); let timeElapsed = currentTime - watchModSleepStart; if (timeElapsed >= watchModSleepTime) { watchElement.style.zIndex = 5; watchElement.style.opacity = '1'; watchElement.setAttribute('data-click-count', '0'); movePreviewToWatch(); setTimeout(updateWatchElement, 100) } else { setTimeout(checkWatchElement, 100); } } function checkFade() { let currentTime = Date.now(); let timeElapsed = currentTime - fadeModSleepStart; const element_navBar = document.querySelector("ytmusic-nav-bar"); current_bg = element_navBar.style.backgroundColor if (timeElapsed >= fadeModSleepTime) { if (current_bg !== fadeColor) { doneWatchStyles = false; doneNonWatchStyles = false; run(false, fadeColor, backgroundColor) } setTimeout(checkFade, 50); } else { if (current_bg !== backgroundColor) { doneWatchStyles = false; doneNonWatchStyles = false; run(false, backgroundColor, fadeColor) } setTimeout(checkFade, 50); } } function fullscreen_div() { let fullscreen = document.createElement('div'); fullscreen.className = 'watch-element'; fullscreen.style.position = 'absolute'; fullscreen.style.top = '0'; fullscreen.style.left = '0'; fullscreen.style.width = '100%'; fullscreen.style.height = '100%'; fullscreen.style.alignItems = 'center'; fullscreen.style.justifyContent = 'center'; fullscreen.style.userSelect = 'none'; fullscreen.style.display = 'flex'; fullscreen.style.flexDirection = 'column'; return fullscreen } function addWatch() { console.log('Adding watch mod...'); watchModActive = true; setTimeout(doWatchStyles(), 100); let watchElement = fullscreen_div(); let watchText = document.createElement("p"); let gearIcon = makeGearIcon(); watchElement.style.backgroundColor = 'black'; // Automatically set / reset to 0 depending on state // watchElement.style.zIndex = 5; watchElement.style.opacity = 0; watchElement.style.transition = 'opacity 1s ease'; watchText.style.color = "#202020"; watchText.style.fontSize = 'xx-large'; gearIcon.style.position = 'absolute'; gearIcon.style.top = "0"; gearIcon.style.right = "0"; gearIcon.style.opacity = 0.2; watchElement.appendChild(watchText) watchElement.appendChild(gearIcon); document.body.appendChild(watchElement); reset_watchModSleepStart(2000); // account for youtube music load time here setTimeout(checkWatchElement, 2000); watchElement.addEventListener('click', (event) => { let clickCount = parseInt(watchElement.getAttribute('data-click-count'), 10); clickCount = isNaN(clickCount) ? 0 : clickCount; clickCount++; watchElement.setAttribute('data-click-count', clickCount.toString()); if (clickCount < watchModClicks) { watchElement.children[0].innerHTML = `Press ${watchModClicks - clickCount} times to exit to YouTube Music UI`; event.stopPropagation(); } else if (clickCount === watchModClicks) { watchElement.children[0].innerHTML = ''; watchElement.style.opacity = 0; reset_watchModSleepStart(); setTimeout(() => { watchElement.style.zIndex = 0; }, 1000) setTimeout(checkWatchElement, 1000); movePreviewFromWatch(); } else { reset_watchModSleepStart(); } }); }; function removeWatch() { console.log('Removing watch mod...'); watchModActive = false; let watchElement = document.querySelector(".watch-element"); if (!watchElement) return; watchElement.remove(); setTimeout(doNonWatchStyles(), 100); } function checkWatch() { if (window.location.pathname.endsWith('watch')) { switch (watchModActive) { case true: break; case false: addWatch(); break; } return true; } else { switch (watchModActive) { case false: break; case true: removeWatch(); break; } return false; } } function updatePreview() { const musicPreviewImage = document.querySelector("#music-preview-image"); if (!musicPreviewImage) {return;} // update the image const image = document.querySelector(".image.style-scope.ytmusic-player-bar"); musicPreviewImage.src = image.src; } function movePreviewToWatch() { const musicPreview = document.querySelector("#music-preview"); const watchElement = document.querySelector(".watch-element"); watchElement.appendChild(musicPreview); musicPreview.style.width = '10vh'; musicPreview.style.position = 'absolute'; musicPreview.style.margin = '0 0 50vh'; musicPreview.style.opacity = '.5'; } function movePreviewFromWatch() { const musicPreview = document.querySelector("#music-preview"); const element_guide_sections = document.querySelector("#sections"); element_guide_sections.appendChild(musicPreview); musicPreview.style.width = '50%'; musicPreview.style.position = ''; musicPreview.style.margin = '25%'; musicPreview.style.marginTop = 'auto'; musicPreview.style.opacity = ''; } function updatePreviewRotation() { const musicPreviewImage = document.querySelector("#music-preview-image"); if (!musicPreviewImage) {return;} previewRotation = !previewRotation; if (previewRotation){ // reversed musicPreviewImage.style.transition = 'transform 5s ease' musicPreviewImage.style.transform = `rotateZ(${360}deg)` } else { musicPreviewImage.style.transition = '' musicPreviewImage.style.transform = `rotateZ(${0}deg)` setTimeout(updatePreviewRotation, 100); } } function setPreviewShadow(bg, musicPreview=undefined) { musicPreview = musicPreview ? musicPreview : document.querySelector("#music-preview"); if (!musicPreview) {return;} musicPreview.style.boxShadow = `0 0 10px ${bg}` } function addPreview(bg) { console.log('Adding spinning disk'); const renderer = document.querySelector(".ytmusic-guide-section-renderer"); if (!renderer) { setTimeout(() => addPreview(bg), 200); return; } // remove youtube junk const element_guide_sections = document.querySelector("#sections"); const elementsToRemove = element_guide_sections.querySelectorAll('.ytmusic-guide-renderer'); elementsToRemove.forEach(element => { element.remove(); }); // make music preview let musicPreview = document.createElement('div'); let musicPreviewImage = document.createElement('img'); musicPreviewImage.alt = "loading mod..."; musicPreviewImage.style.width = "100%" musicPreviewImage.style.height = "100%" musicPreviewImage.style.borderRadius = '50%'; musicPreviewImage.style.objectFit = 'cover'; musicPreviewImage.style.zIndex = '6'; musicPreviewImage.style.display = 'flex'; musicPreviewImage.style.placeItems = 'center' musicPreviewImage.style.justifyContent = 'center' musicPreviewImage.id = "music-preview-image" musicPreview.id = "music-preview" musicPreview.style.display = 'flex'; musicPreview.style.width = '50%'; musicPreview.style.aspectRatio = '1/1'; musicPreview.style.margin = '25%'; musicPreview.style.marginTop = 'auto'; musicPreview.style.borderRadius = '50%'; addFadeShadow(musicPreview); setPreviewShadow(bg, musicPreview); musicPreview.appendChild(musicPreviewImage); element_guide_sections.appendChild(musicPreview); setInterval(updatePreview, 5000); setInterval(updatePreviewRotation, 5000); console.log('Added spinning disk'); } function run(initial=false, bg=undefined, reverse_bg=undefined) { bg = bg ? bg : backgroundColor reverse_bg = reverse_bg ? reverse_bg : fadeColor; if (initial){ const elementToObserve = document.querySelector("#main-panel"); const observer = new MutationObserver(function() { elementToObserve.remove(); }); observer.observe(elementToObserve, {subtree: true, childList: true}); } const element_sideBar = document.querySelector("#contents"); element_sideBar.style.width = "100%"; element_sideBar.style.margin = "0px"; element_sideBar.style.maxWidth = "none"; element_sideBar.style.backgroundColor = bg if (initial) addFade(element_sideBar); const element_sidePanel = document.querySelector("#side-panel"); element_sidePanel.style.width = "100%"; element_sideBar.style.margin = "0px"; element_sidePanel.style.padding = "0px"; element_sidePanel.style.maxWidth = "none"; const element_top_background = document.querySelector("#nav-bar-background"); element_top_background.style.backgroundColor = bg if (initial) addFade(element_top_background); const element_bottom_background = document.querySelector("#player-bar-background"); element_bottom_background.style.backgroundColor = bg if (initial) addFade(element_bottom_background); const element_navBar = document.querySelector("ytmusic-nav-bar"); element_navBar.style.backgroundColor = bg; if (initial) addFade(element_navBar); const element_player_background = document.querySelector("#player-page"); element_player_background.style.backgroundColor = bg; if (initial) addFade(element_player_background); const element_guide_background = document.querySelector("#guide-renderer"); element_guide_background.style.backgroundColor = bg; if (initial) addFade(element_guide_background); const element_bottomBar = document.querySelector('ytmusic-player-bar'); element_bottomBar.style.backgroundColor = bg if (initial) addFade(element_bottomBar); const element_musicList = document.querySelector('ytmusic-tab-renderer'); element_musicList.addEventListener("scroll", reset_watchModSleepStart); //const element_sidePanel = document.querySelectorAll(".content.style-scope.ytmusic-player-page"); //element_sidePanel.style.width = "100%"; //element_sidePanel.style.padding = "0px"; if (initial) { addPreview(reverse_bg); } else { setPreviewShadow(reverse_bg); } const watch = checkWatch(); if (watch) { doWatchStyles(initial, bg); } else { doNonWatchStyles(initial, bg); } if (initial) { addConfig(element_navBar); checkFade(); } } function makeGearIcon() { let gearIcon = document.createElement('a'); gearIcon.innerHTML = `<?xml version="1.0" ?> <!-- License: CC Attribution. Made by nixx design: https://dribbble.com/nixxdsgn --> <svg width="64px" height="64px" viewBox="-4 -4 14.3499998 14.3499998" id="svg8" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg"><defs id="defs2"/><path d="m 3.1757813,2.1171875 c -0.5813565,0 -1.0585938,0.4772372 -1.0585938,1.0585938 0,0.5813565 0.4772373,1.0566406 1.0585938,1.0566406 0.5813565,-1e-7 1.0566406,-0.4752841 1.0566406,-1.0566406 -2e-7,-0.5813565 -0.4752841,-1.0585938 -1.0566406,-1.0585938 z m 0,0.5292968 c 0.2953736,0 0.5292968,0.2339233 0.5292968,0.5292969 0,0.2953736 -0.2339232,0.5292968 -0.5292968,0.5292968 -0.2953736,0 -0.5292969,-0.2339232 -0.5292969,-0.5292968 0,-0.2953736 0.2339233,-0.5292969 0.5292969,-0.5292969 z" id="path1863" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff2876;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:204.09448242;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/><path d="m 3.0576947,0.52916665 c -0.366361,0 -0.6282933,0.2735658 -0.7260541,0.61029865 C 2.0244302,0.97049867 1.6460313,0.96207812 1.3869954,1.2211141 L 1.2211141,1.3869954 C 0.96207812,1.6460313 0.97049867,2.0244301 1.1394653,2.3316406 0.80273245,2.4294014 0.52916665,2.6913336 0.52916665,3.0576946 v 0.2346106 c 0,0.3663609 0.2735658,0.6282931 0.61029865,0.726054 -0.16886958,0.30719 -0.17734508,0.6856513 0.081649,0.9446453 l 0.1658813,0.1658813 c 0.2590359,0.2590361 0.6374347,0.2506157 0.9446452,0.081649 0.097761,0.3367331 0.3596932,0.6102987 0.726054,0.6102987 h 0.2346108 c 0.3663609,0 0.6282931,-0.2735656 0.7260539,-0.6102986 0.3071899,0.1688698 0.6856512,0.1773454 0.944645,-0.081649 L 5.1288858,4.9630045 c 0.258994,-0.258994 0.2505186,-0.6374553 0.081649,-0.9446453 0.3367333,-0.097761 0.610299,-0.359693 0.610299,-0.7260539 V 3.0576946 c 0,-0.366361 -0.2735657,-0.6282932 -0.610299,-0.726054 C 5.3795015,2.0244301 5.3879219,1.6460312 5.1288858,1.3869954 L 4.9630045,1.2211141 C 4.7039687,0.96207812 4.3255698,0.97049875 4.0183592,1.1394653 3.9205984,0.80273245 3.6586662,0.52916665 3.2923053,0.52916665 Z m 0,0.52916665 h 0.2346106 c 0.1596094,0 0.2795696,0.1199602 0.2795696,0.2795695 v 0.109554 a 0.26460978,0.26460978 0 0 0 0.1720827,0.2480469 c 0.026864,0.010056 0.053302,0.020543 0.079582,0.032039 A 0.26460978,0.26460978 0 0 0 4.116545,1.6722486 l 0.076998,-0.076998 c 0.1128866,-0.1128863 0.2824387,-0.1128861 0.3953248,0 l 0.1658813,0.1658812 c 0.1128863,0.1128862 0.1128863,0.2824386 0,0.3953249 l -0.077515,0.077515 a 0.26460978,0.26460978 0 0 0 -0.053227,0.2981734 c 0.012086,0.026115 0.023458,0.052332 0.034107,0.079065 A 0.26460978,0.26460978 0 0 0 4.9040933,2.7781249 H 5.012097 c 0.1596096,0 0.2795695,0.1199602 0.2795695,0.2795697 v 0.2346106 c 0,0.1596094 -0.1199599,0.2795696 -0.2795695,0.2795696 H 4.902543 A 0.26460978,0.26460978 0 0 0 4.6544961,3.7439575 c -0.010057,0.026864 -0.020542,0.053302 -0.032039,0.079582 a 0.26460978,0.26460978 0 0 0 0.055294,0.2930054 l 0.076998,0.076998 c 0.1128866,0.1128861 0.1128866,0.2824387 0,0.3953248 L 4.588867,4.7547483 c -0.1128858,0.1128866 -0.2824387,0.1128866 -0.3953248,0 L 4.1160278,4.6772336 A 0.26460978,0.26460978 0 0 0 3.8178549,4.6240066 c -0.026114,0.012086 -0.052332,0.023458 -0.079065,0.034107 a 0.26460978,0.26460978 0 0 0 -0.166915,0.2459796 v 0.1080037 c 0,0.1596096 -0.1199602,0.2795695 -0.2795696,0.2795695 H 3.0576947 c -0.1596095,0 -0.2795697,-0.1199599 -0.2795697,-0.2795695 V 4.902543 A 0.26460978,0.26460978 0 0 0 2.6060426,4.6544961 c -0.026864,-0.010056 -0.053302,-0.020543 -0.079582,-0.032039 a 0.26460978,0.26460978 0 0 0 -0.2930054,0.055294 l -0.076998,0.076998 c -0.1128862,0.1128866 -0.2824386,0.1128866 -0.3953249,0 L 1.5952515,4.588867 c -0.112886,-0.1128858 -0.112886,-0.2824387 0,-0.3953248 l 0.077515,-0.077514 a 0.26460978,0.26460978 0 0 0 0.053227,-0.298173 C 1.7139075,3.7917409 1.7025344,3.7655228 1.6918865,3.7387896 A 0.26460978,0.26460978 0 0 0 1.4459066,3.5718748 H 1.3379028 c -0.1596093,0 -0.2795695,-0.1199602 -0.2795695,-0.2795696 V 3.0576946 c 0,-0.1596095 0.1199602,-0.2795697 0.2795695,-0.2795697 h 0.109554 A 0.26460978,0.26460978 0 0 0 1.6955037,2.6060425 c 0.010056,-0.026864 0.020543,-0.053302 0.032039,-0.079582 A 0.26460978,0.26460978 0 0 0 1.6722493,2.2334553 l -0.076998,-0.076998 c -0.112886,-0.112886 -0.112886,-0.2824387 0,-0.3953246 L 1.7611328,1.5952515 c 0.1128859,-0.1128861 0.2824387,-0.1128861 0.3953247,0 l 0.077515,0.077515 a 0.26460978,0.26460978 0 0 0 0.2992065,0.05271 c 0.02611,-0.012235 0.052844,-0.023829 0.079582,-0.034623 A 0.26460978,0.26460978 0 0 0 2.778125,1.4453898 v -0.107487 c 0,-0.1596093 0.1199602,-0.2795695 0.2795697,-0.2795695 z" id="circle1865" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#00001d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:204.09448242;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/></svg>` gearIcon.style.display = "flex"; gearIcon.style.alignItems = "center"; gearIcon.children[0].style.backgroundColor = "#ffffff10"; gearIcon.children[0].style.borderRadius = "50px"; gearIcon.children[0].style.marginLeft = "10px"; gearIcon.children[0].style.marginRight = "10px"; gearIcon.addEventListener("click", open_config); addHover(gearIcon); return gearIcon } function addConfig(navElement) { let navCenter = navElement.querySelector('.center-content'); let gearIcon = makeGearIcon(); gearIcon.innerHTML = gearIcon.innerHTML+"YouTube Music mod"; navCenter.appendChild(gearIcon); } function open_config(event) { if (typeof event === "object") { event.stopPropagation(); } if (configOpen) { document.getElementById("confcon").remove(); document.querySelector("ytmusic-app-layout").style.display = ""; configOpen = false; return; } else { configOpen = true;} document.documentElement.scrollTop = 0; document.body.scrollTop = 0; document.querySelector("ytmusic-app-layout").style.display = "none"; let configContainer = fullscreen_div(); let configElement = document.createElement('div'); configContainer.style.zIndex = 6; configContainer.style.backgroundColor = "black"; configContainer.id = "confcon"; configElement.style.width = "500px" configElement.style.maxWidth = "90%"; configElement.style.height = "500px" configElement.id = "confelem"; configElement.style.outline = "1px solid white"; configElement.style.border = "1px solid black"; configElement.style.backgroundColor = backgroundColor; configElement.style.padding = "10px"; addTextAlign(configElement, "h1", "YouTube Music Mod Configuration", "center") let gearIcon = makeGearIcon(); gearIcon.style.position = 'absolute'; gearIcon.style.top = "0"; gearIcon.style.right = "0"; addColorConfig(configElement, "Background color", "backgroundColor", backgroundColor, (value) => { backgroundColor = value; }); addColorConfig(configElement, "Fade color", "fadeColor", fadeColor, (value) => { fadeColor = value; }); addNumberConfig(configElement, "Miliseconds before fade", "fadeModSleepTime", fadeModSleepTime, (value) => { fadeModSleepTime = value; }); addNumberConfig(configElement, "Miliseconds before screensaver", "watchModSleepTime", watchModSleepTime, (value) => { watchModSleepTime = value; }); addNumberConfig(configElement, "Screensaver clicks required", "watchModClicks", watchModClicks, (value) => { watchModClicks = value; }); addTextConfig(configElement, "Fade transition css", "fadeTransition", fadeTransition, (value) => { fadeTransition = value; addFade(); }); addTextConfig(configElement, "Shadow fade transition css", "fadeShadowTransition", fadeShadowTransition, (value) => { fadeShadowTransition = value; addFadeShadow(); }); configContainer.appendChild(gearIcon); configContainer.appendChild(configElement); document.body.appendChild(configContainer); } function addText(configElement, elementName, text) { let textElement = document.createElement(elementName); textElement.innerHTML = text; configElement.appendChild(textElement); return textElement; } function addTextAlign(configElement, elementName, text, align) { let textElement = addText(configElement, elementName, text); textElement.style.textAlign = align; textElement.style.color = textColor; return textElement; } function addInputConfig(configElement, text, key, value, ch) { let inputContainer = document.createElement('div'); let textElement = document.createElement('h2'); let inputElement = document.createElement('input'); inputElement.value = value; inputElement.style.flexGrow = "1"; inputElement.addEventListener("change", (e) => { const result = parseInt(e.target.value); const convertedValue = isNaN(result) ? e.target.value : result; ch(convertedValue); GM_setValue(key, convertedValue); open_config(); open_config(); doneWatchStyles = false; doneNonWatchStyles = false; run(); }) textElement.innerHTML = text; inputElement.style.backgroundColor = backgroundColor; inputElement.style.border = '1px dashed white'; inputElement.style.borderRadius = "50px"; inputElement.style.outline = "none"; inputElement.style.padding = "5px 15px"; textElement.style.color = textColor; inputElement.style.color = textColor; textElement.style.flexGrow = "1"; inputContainer.style.display = "flex"; inputContainer.style.width = "100%"; inputContainer.appendChild(textElement); inputContainer.appendChild(inputElement); configElement.appendChild(inputContainer); return inputElement; } function addColorConfig(configElement, text, key, value, ch) { let colorElement = addInputConfig(configElement, text, key, value, ch); colorElement.type = 'color'; colorElement.style.outline = "1px solid black"; colorElement.style.border = "1px solid white"; return colorElement; } function addNumberConfig(configElement, text, key, value, ch) { let numberElement = addInputConfig(configElement, text, key, value, ch); numberElement.type = 'number'; return numberElement; } function addTextConfig(configElement, text, key, value, ch) { let textElement = addInputConfig(configElement, text, key, value, ch); textElement.type = 'text'; return textElement; } function addHover(myLink) { myLink.addEventListener('mouseover', function() { this.style.cursor = 'pointer'; }); myLink.addEventListener('mouseout', function() { this.style.cursor = 'auto'; }); } function addFade(element) { if (element){ element.style.transition = fadeTransition; element.classList.add('added-fade'); } else { const allElements = document.querySelectorAll('.added-fade'); allElements.forEach((el) => { el.style.transition = fadeTransition; }); } } function addFadeShadow(element) { if (element){ element.style.transition = fadeShadowTransition; element.classList.add('added-fade-shadow'); } else { const allElements = document.querySelectorAll('.added-fade-shadow'); allElements.forEach((el) => { el.style.transition = fadeShadowTransition; }); } } if (window.trustedTypes && window.trustedTypes.createPolicy) { window.trustedTypes.createPolicy('default', { createHTML: string => string, createScriptURL: string => string, createScript: string => string, }); } setTimeout(function () { setInterval(checkWatch, 500); document.addEventListener("pointerdown", reset_watchModSleepStart); document.addEventListener("click", reset_watchModSleepStart); document.addEventListener("mousemove", reset_watchModSleepStart); run(true); }, 100);