您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
reformats the titles of YouTube videos to be windows filename compatible on click. - Rebuilt to work better.
// ==UserScript== // @name (Defunct/Replaced) YouTube Title formatted for filename 3 // @namespace sm // @version 1.05 // @description reformats the titles of YouTube videos to be windows filename compatible on click. - Rebuilt to work better. // @match http*://www.youtube.com/watch* // @copyright 2021, sm // @license MIT // ==/UserScript== // @require http://code.jquery.com/jquery-3.4.1.min.js console.log("docReady waiting ") let i = 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 = 1000; runFunctionTimer = setInterval(function () { if (i < 20) { addButtonsAndWatch(); i++ if (interval < 7000){ interval += 1000} } }, interval); } function addButtonsAndWatch() { //creates buttons and runs the actual logic let buttons = "" buttons = addButtons(buttons) function addButtons(buttonsString) { let inputBox0 = "<h1 id='targetYTFormatter'></h1><span><input id='formatTitleInput' placeholder='Insert title here' /><button id='formatTitleButton1'>Format Title</button></span>" let button2 = "<span><button id='formatDescriptionButton' hidden>Format Description</button><button id='fetch'>Fetch Title</button></span>" let button3 = "<span><button id='appendName'>Append Channel Name</button></span>" let button4 = "<span><button id='prependName'>Prepend Channel Name</button></span>" let button5 = "<span><button id='removeName'>Remove Name</button></span>" buttonsString = buttonsString + "<br />" + inputBox0 + button2 + "<br>" + button4 + button3 + button5; return buttonsString } let DescriptionBox = document.getElementById("meta"); let pageString = document.getElementById("columns"); if (pageString != null) { pageString = pageString.innerHTML let regexTestCalled = new RegExp("appendName", "gmi") if (pageString && !pageString.match(regexTestCalled)) { console.log("indide box") DescriptionBox.insertAdjacentHTML('beforebegin', buttons) // pageString = document.getElementById("columns").innerHTML(); function2(); } } } function function2() { // logic, looks for button presses and replaces text docReady(function () { //Buttons let titleButton = document.querySelector("#formatTitleButton"); let titleButton1 = document.querySelector("#formatTitleButton1"); let prependName = document.querySelector("#appendName"); let appendName = document.querySelector("#prependName"); let removeName = document.querySelector("#removeName"); let fetch = document.querySelector("#fetch"); let discription = document.querySelector("#description > yt-formatted-string") if (discription != null) { discription = discription.innerHTML } let channelNameHolder = document.querySelector("#text > a"); if (channelNameHolder != null) { channelNameHolder = channelNameHolder.innerHTML } function getUserTitle() { let userTitle = document.querySelector("#formatTitleInput") userTitle = userTitle.value return userTitle } function getChannelName() { let channelNameHolder = document.querySelector("#text > a"); if (channelNameHolder != null) { channelNameHolder = channelNameHolder.innerHTML } return channelNameHolder } let userTitle = getUserTitle(); let target = document.querySelector("#targetYTFormatter"); function findTitle(){ // fetches title and rerturns to input let title = document.title console.log("title = ",title) let trimTitle = title.split("- YouTube") title = trimTitle[0].trim() console.log(title) document.querySelector("#formatTitleInput").value = title } function runTitle1(hide){ let target = document.querySelector("#targetYTFormatter"); if (target.innerHTML == "" || !hide) { userTitle = getUserTitle(); channelNameHolder = getChannelName(); target.innerHTML = "" let fixedTitle = isValid(userTitle) target.innerHTML = fixedTitle } else { target.innerHTML = "" } } fetch.onclick = function(e){ console.log("fetch") findTitle() runTitle1(false) } titleButton1.onclick = function (e) {//turn title into button runTitle1(true) } appendName.onclick = function (e) {//turn title into button userTitle = getUserTitle(); channelNameHolder = getChannelName(); let target = document.querySelector("#targetYTFormatter"); target.innerHTML = "" let fixedTitle = isValid(userTitle) let fixedChannelName = isValid(channelNameHolder) target.innerHTML = fixedChannelName + " - " + fixedTitle } prependName.onclick = function (e) {//turn title into button userTitle = getUserTitle(); channelNameHolder = getChannelName(); let target = document.querySelector("#targetYTFormatter"); // target.innerHTML = "" let fixedTitle = isValid(userTitle) let fixedChannelName = isValid(channelNameHolder) target.innerHTML = fixedTitle + " - " + fixedChannelName } removeName.onclick = function (e) {//turn title into button userTitle = getUserTitle(); channelNameHolder = getChannelName(); let target = document.querySelector("#targetYTFormatter"); target.innerHTML = "" let fixedTitle = isValid(userTitle) target.innerHTML = fixedTitle } 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("and amp ", " and ") fname = fname.replace("|", " - ") fname = fname.replace("☆", " ") fname = fname.replace("<font>", " ") fname = fname.replace("</font>", " ") fname = fname.replace("< font>", " ") fname = fname.replace("</ font>", " ") fname = fname.replace("< /font>", " ") } return fname } }); } runFunctionTimer(); 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); } } // ==UserScript== // @name New Userscript // @namespace http://tampermonkey.net/ // @version 0.1 // @description try to take over the world! // @author You // @match http://*/* // @grant none // ==/UserScript== (function () { 'use strict'; // Your code here... })();