(Defunct/Replaced) YouTube Title formatted for filename 3

reformats the titles of YouTube videos to be windows filename compatible on click. - Rebuilt to work better.

  1. // ==UserScript==
  2. // @name (Defunct/Replaced) YouTube Title formatted for filename 3
  3. // @namespace sm
  4. // @version 1.05
  5. // @description reformats the titles of YouTube videos to be windows filename compatible on click. - Rebuilt to work better.
  6. // @match http*://www.youtube.com/watch*
  7. // @copyright 2021, sm
  8. // @license MIT
  9. // ==/UserScript==
  10. // @require http://code.jquery.com/jquery-3.4.1.min.js
  11.  
  12. console.log("docReady waiting ")
  13.  
  14. let i = 0
  15. 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
  16. {
  17. var interval = 1000;
  18. runFunctionTimer = setInterval(function () {
  19. if (i < 20) {
  20. addButtonsAndWatch();
  21. i++
  22. if (interval < 7000){ interval += 1000}
  23. }
  24. }, interval);
  25. }
  26.  
  27.  
  28.  
  29. function addButtonsAndWatch() { //creates buttons and runs the actual logic
  30.  
  31. let buttons = ""
  32. buttons = addButtons(buttons)
  33. function addButtons(buttonsString) {
  34. let inputBox0 = "<h1 id='targetYTFormatter'></h1><span><input id='formatTitleInput' placeholder='Insert title here' /><button id='formatTitleButton1'>Format Title</button></span>"
  35. let button2 = "<span><button id='formatDescriptionButton' hidden>Format Description</button><button id='fetch'>Fetch Title</button></span>"
  36. let button3 = "<span><button id='appendName'>Append Channel Name</button></span>"
  37. let button4 = "<span><button id='prependName'>Prepend Channel Name</button></span>"
  38. let button5 = "<span><button id='removeName'>Remove Name</button></span>"
  39. buttonsString = buttonsString + "<br />" + inputBox0 + button2 + "<br>" + button4 + button3 + button5;
  40. return buttonsString
  41. }
  42.  
  43. let DescriptionBox = document.getElementById("meta");
  44. let pageString = document.getElementById("columns");
  45. if (pageString != null) {
  46. pageString = pageString.innerHTML
  47. let regexTestCalled = new RegExp("appendName", "gmi")
  48. if (pageString && !pageString.match(regexTestCalled)) {
  49. console.log("indide box")
  50. DescriptionBox.insertAdjacentHTML('beforebegin', buttons)
  51. // pageString = document.getElementById("columns").innerHTML();
  52. function2();
  53. }
  54. }
  55. }
  56.  
  57.  
  58. function function2() { // logic, looks for button presses and replaces text
  59. docReady(function () {
  60.  
  61. //Buttons
  62. let titleButton = document.querySelector("#formatTitleButton");
  63. let titleButton1 = document.querySelector("#formatTitleButton1");
  64. let prependName = document.querySelector("#appendName");
  65. let appendName = document.querySelector("#prependName");
  66. let removeName = document.querySelector("#removeName");
  67. let fetch = document.querySelector("#fetch");
  68.  
  69.  
  70. let discription = document.querySelector("#description > yt-formatted-string")
  71. if (discription != null) { discription = discription.innerHTML }
  72. let channelNameHolder = document.querySelector("#text > a");
  73. if (channelNameHolder != null) { channelNameHolder = channelNameHolder.innerHTML }
  74.  
  75.  
  76. function getUserTitle() {
  77. let userTitle = document.querySelector("#formatTitleInput")
  78. userTitle = userTitle.value
  79.  
  80. return userTitle
  81. }
  82.  
  83. function getChannelName() {
  84. let channelNameHolder = document.querySelector("#text > a");
  85. if (channelNameHolder != null) { channelNameHolder = channelNameHolder.innerHTML }
  86. return channelNameHolder
  87. }
  88.  
  89.  
  90. let userTitle = getUserTitle();
  91.  
  92.  
  93. let target = document.querySelector("#targetYTFormatter");
  94.  
  95. function findTitle(){ // fetches title and rerturns to input
  96. let title = document.title
  97. console.log("title = ",title)
  98. let trimTitle = title.split("- YouTube")
  99. title = trimTitle[0].trim()
  100. console.log(title)
  101.  
  102. document.querySelector("#formatTitleInput").value = title
  103. }
  104.  
  105.  
  106.  
  107.  
  108. function runTitle1(hide){
  109. let target = document.querySelector("#targetYTFormatter");
  110. if (target.innerHTML == "" || !hide) {
  111. userTitle = getUserTitle();
  112. channelNameHolder = getChannelName();
  113. target.innerHTML = ""
  114. let fixedTitle = isValid(userTitle)
  115. target.innerHTML = fixedTitle
  116. } else {
  117. target.innerHTML = ""
  118. }
  119. }
  120. fetch.onclick = function(e){
  121. console.log("fetch")
  122. findTitle()
  123. runTitle1(false)
  124. }
  125.  
  126.  
  127. titleButton1.onclick = function (e) {//turn title into button
  128. runTitle1(true)
  129. }
  130.  
  131. appendName.onclick = function (e) {//turn title into button
  132. userTitle = getUserTitle();
  133. channelNameHolder = getChannelName();
  134. let target = document.querySelector("#targetYTFormatter");
  135. target.innerHTML = ""
  136. let fixedTitle = isValid(userTitle)
  137. let fixedChannelName = isValid(channelNameHolder)
  138. target.innerHTML = fixedChannelName + " - " + fixedTitle
  139. }
  140.  
  141.  
  142. prependName.onclick = function (e) {//turn title into button
  143. userTitle = getUserTitle();
  144. channelNameHolder = getChannelName();
  145. let target = document.querySelector("#targetYTFormatter");
  146. // target.innerHTML = ""
  147. let fixedTitle = isValid(userTitle)
  148. let fixedChannelName = isValid(channelNameHolder)
  149. target.innerHTML = fixedTitle + " - " + fixedChannelName
  150. }
  151.  
  152.  
  153. removeName.onclick = function (e) {//turn title into button
  154. userTitle = getUserTitle();
  155. channelNameHolder = getChannelName();
  156. let target = document.querySelector("#targetYTFormatter");
  157. target.innerHTML = ""
  158. let fixedTitle = isValid(userTitle)
  159. target.innerHTML = fixedTitle
  160.  
  161. }
  162.  
  163.  
  164. function isValid(fname) {
  165. // console.log("fname type is ", typeof fname);
  166. // console.log("fname input is ", fname);
  167.  
  168. for (let i = 0; i < 20; i++) {
  169. fname = fname.replace("&", " and ")
  170. fname = fname.replace("|", " ")
  171. fname = fname.replace("||", " ")
  172. fname = fname.replace(",", " ")
  173. fname = fname.replace("?", " ")
  174. fname = fname.replace("!", " ")
  175. fname = fname.replace('"', " ")
  176. fname = fname.replace("@", " ")
  177. //fname = fname.replace("<","(")
  178. // fname = fname.replace(">",")")
  179. fname = fname.replace(".", "")
  180. fname = fname.replace("'", "")
  181. fname = fname.replace("►", "")
  182. fname = fname.replace("`", "")
  183. fname = fname.replace("/", " ")
  184. fname = fname.replace("\\", " ")
  185. fname = fname.replace(":", "")
  186. fname = fname.replace(";", "")
  187. fname = fname.replace("*", "")
  188. fname = fname.replace("^", "")
  189. fname = fname.replace("%", "")
  190. fname = fname.replace("$", "")
  191. fname = fname.replace("#", "")
  192. fname = fname.replace("+", "")
  193. fname = fname.replace("_", "")
  194. fname = fname.replace("’", "")
  195. fname = fname.replace("→", " - ")
  196. fname = fname.replace("」", " ")
  197. fname = fname.replace("「", " ")
  198. fname = fname.replace("}", ")")
  199. fname = fname.replace("{", " (")
  200. fname = fname.replace(" ", " ")
  201. fname = fname.replace("ー", "-")
  202. fname = fname.replace("『", " (")
  203. fname = fname.replace("』", ")")
  204. fname = fname.replace("!", "")
  205. fname = fname.replace("【", " (")
  206. fname = fname.replace("■", "-")
  207. fname = fname.replace("】", ")")
  208. fname = fname.replace("and amp ", " and ")
  209. fname = fname.replace("|", " - ")
  210. fname = fname.replace("☆", " ")
  211. fname = fname.replace("<font>", " ")
  212. fname = fname.replace("</font>", " ")
  213. fname = fname.replace("< font>", " ")
  214. fname = fname.replace("</ font>", " ")
  215. fname = fname.replace("< /font>", " ")
  216.  
  217. }
  218. return fname
  219. }
  220. });
  221.  
  222. }
  223.  
  224.  
  225. runFunctionTimer();
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232. function docReady(fn) {
  233. // see if DOM is already available
  234. if (document.readyState === "complete" || document.readyState === "interactive") {
  235. // call on next available tick
  236. setTimeout(fn, 1);
  237. } else {
  238. document.addEventListener("DOMContentLoaded", fn);
  239. }
  240. }
  241. // ==UserScript==
  242. // @name New Userscript
  243. // @namespace http://tampermonkey.net/
  244. // @version 0.1
  245. // @description try to take over the world!
  246. // @author You
  247. // @match http://*/*
  248. // @grant none
  249. // ==/UserScript==
  250.  
  251. (function () {
  252. 'use strict';
  253.  
  254. // Your code here...
  255. })();