您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
reformats the titles of YouTube videos to be windows filename compatible on click.
当前为
// ==UserScript== // @name YouTube Title formatted for filename // @namespace sm // @version 0.15 // @description reformats the titles of YouTube videos to be windows filename compatible on click. // @match http*://www.youtube.com/watch* // @copyright 2020, sm // ==/UserScript== // @require http://code.jquery.com/jquery-3.4.1.min.js console.log("docReady waiting ") var bidClickTimer = 0; var numBidClicks = 0; function runFunctionTimer () //because setTimeout doesn't work in Tampermonkey - use of it below is let untouched for now || this works for the first few minutes { var interval = 4000; runFunctionTimer = setInterval (function() {runFunction (); }, interval); } let counter = 1; let count4 = 1; function runFunction (){ //creates buttons and runs the actual logic let buttons = "" buttons = addButtons(buttons) let DescriptionBox = document.getElementById("meta"); if(DescriptionBox != null){ console.log("found box") if(counter < 2){ DescriptionBox.insertAdjacentHTML('beforebegin', buttons); counter = 2; } function2(); }else{ console.log("could not find box") } function addButtons(strin){ let button1 = "<span><button id='formatTitleButton'>Format Title</button></span>" let button2 = "<span><button id='formatDescriptionButton'>Format Description</button></span>" strin = strin + "<br />" + button1 + button2; return strin } } function function2(){ // logic, looks for button presses and replaces text if( count4 < 7){ count4 = count4 + 1; docReady(function() { // DOM is loaded and ready for manipulation here console.log("running title fix ") let count = 1; let count3 = 1; let count2 = 1; //Code to run After timeout elapses console.log("finding title ") console.log("YouTube Title formatter v1.001") let title = document.querySelector("#formatTitleButton"); let discriptionbutton = document.querySelector("#formatDescriptionButton"); let discription = document.querySelector("#description"); let discription2 = document.querySelector("#description > yt-formatted-string"); if(count < 3){ title.onclick = function(e){//turn title into button console.log("count of times called on title = ",count) //your handler here if(count < 3){//prevent from running too many times let title2 = document.querySelector("#container > h1");// The title can sometimes be missing the class title let newTitle2 = isValid(title2.innerHTML) //pull title again due to js idiosyncrasies let title3 = document.querySelector("#title"); // if the title class is applied let newTitle3 = false; //to make the if statement false unless we pull a title if(title3){ newTitle3 = isValid(title3.innerHTML) //pull title again due to js idiosyncrasies } if(newTitle3 != false && newTitle3 != null){ console.log("newTitle3 == ", newTitle3) title3.innerHTML = newTitle3 }else{ console.log("newTitle2 == ", newTitle2) if(newTitle2 != null){ title2.innerHTML = newTitle2 } } console.log(count) count = count + 1; } } } discriptionbutton.onclick = function(e){//turn title into button //your handler here console.log("fix text called") if(count3 < 7){ if(discription2.innerHTML){ let discription2 = document.querySelector("#description > yt-formatted-string"); let newdiscription2 = isValid(discription2.innerHTML) //pull title again due to js idiosyncrasies console.log("newTitle == ", newdiscription2) if(newdiscription2 != null){ discription2.innerHTML = newdiscription2 } console.log(count) count2 = count2 + 1; }else{ title = document.querySelector("#container > h1"); discription2 = document.querySelector("#description > yt-formatted-string"); } if(title.innerHTML){ if(count < 3){//prevent from running too many times let title2 = document.querySelector("#container > h1"); let newTitle2 = isValid(title2.innerHTML) //pull title again due to js idiosyncrasies console.log("newTitle == ", newTitle2) if(newTitle2 != null){ title2.innerHTML = newTitle2 } console.log(count) count3 = count + 1; }} } } function isValid(fname){ console.log("fname type is ", typeof fname); console.log("fname input is ", fname); for(let i = 0; i < 20; i++){ fname = fname.replace("&"," and ") fname = fname.replace("|"," ") fname = fname.replace("||"," ") fname = fname.replace(","," ") fname = fname.replace("?"," ") fname = fname.replace("!"," ") fname = fname.replace('"'," ") fname = fname.replace("@"," ") //fname = fname.replace("<","(") // fname = fname.replace(">",")") fname = fname.replace(".","") fname = fname.replace("'","") fname = fname.replace("►","") fname = fname.replace("`","") fname = fname.replace("/","") fname = fname.replace("\\","") fname = fname.replace(":","") fname = fname.replace(";","") fname = fname.replace("*","") fname = fname.replace("^","") fname = fname.replace("%","") fname = fname.replace("$","") fname = fname.replace("#","") fname = fname.replace("+","") fname = fname.replace("_","") fname = fname.replace("’","") fname = fname.replace("→"," - ") fname = fname.replace("」"," ") fname = fname.replace("「"," ") fname = fname.replace("}",")") fname = fname.replace("{"," (") fname = fname.replace(" "," ") fname = fname.replace("ー","-") fname = fname.replace("/","-") fname = fname.replace("『"," (") fname = fname.replace("』",")") fname = fname.replace("!","") fname = fname.replace("【"," (") fname = fname.replace("■","-") fname = fname.replace("】",")") fname = fname.replace("and amp "," and ") } return fname } }); } } runFunctionTimer (); runFunctionTimer2(); function docReady(fn) { // see if DOM is already available if (document.readyState === "complete" || document.readyState === "interactive") { // call on next available tick setTimeout(fn, 1); } else { document.addEventListener("DOMContentLoaded", fn); } }