// ==UserScript== // @name Export Youtube Playlist in plaintext // @namespace 1N07 // @version 0.7.4 // @description Shows a list of the playlist video names/channels/URLs in plaintext to be easily copied // @author 1N07 // @license unlicense // @compatible firefox Tested on Firefox v122.0 and Tampermonkey 5.0.1 // @compatible firefox Likely to work on other userscript managers, but not tested // @compatible chrome Latest version untested, but likely works with at least Tampermonkey // @compatible opera Latest version untested, but likely works with at least Tampermonkey // @compatible edge Latest version untested, but likely works with at least Tampermonkey // @compatible safari Latest version untested, but likely works with at least Tampermonkey // @icon https://www.google.com/s2/favicons?domain=youtube.com // @require https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js // @match https://www.youtube.com/* // @grant GM_getValue // @grant GM_setValue // @downloadURL none // ==/UserScript== (function() { 'use strict'; var getVideoTitle = GM_getValue("getVideoTitle", true); var getVideoChannel = GM_getValue("getVideoChannel", false); var getVideoURL = GM_getValue("getVideoURL", false); var videoListSeperator = GM_getValue("videoListSeperator", "|:|"); var listCreationAllowed = true; var urlAtLastCheck = ""; //add some CSS if(true) { addGlobalStyle(` tp-yt-paper-listbox#items { overflow-x: hidden; } #exportPlainTextList { cursor: pointer; height: 36px; width: 100%; display: flex; align-items: center; } #exportPlainTextList > img { height: 24px; width: 24px; color: rgb(144, 144, 144); padding: 0 13px 0 16px; filter: contrast(0%); } #exportPlainTextList > span { font-family: "Roboto","Arial",sans-serif; color: var(--yt-spec-text-primary); white-space: nowrap; font-size: 1.4rem; line-height: 2rem; font-weight: 400; } #exportPlainTextList:hover { background-color: rgba(255,255,255,0.1); } ytd-menu-popup-renderer.ytd-popup-container { overflow-x: hidden !important; max-height: none !important; } #listDisplayContainer { position: fixed; z-index: 9999; margin: 0 auto; background-color: #464646; padding: 10px; border-radius: 5px; left: 0; right: 0; max-width: 100vw; width: 1200px; height: 900px; max-height: 90vh; top: 5vh; resize: both; overflow: hidden; } #listDisplayContainer > textarea { box-sizing: border-box; width: 100%; margin: 10px 0; height: calc(100% - 40px); background-color: #262626; border: none; color: #EEE; border-radius: 5px; resize: none; } #closeTheListThing { float: right; font-weight: bold; background-color: RGBA(255,255,255,0.25); border: none; font-size: 17px; border-radius: 10px; height: 25px; width: 25px; cursor: pointer; } #closeTheListThing:hover { background-color: rgba(255,255,255,0.5); } `); } setInterval(function(){ if(urlAtLastCheck != window.location.href) { urlAtLastCheck = window.location.href; if(urlAtLastCheck.includes("/playlist?list=")) InsertButtonASAP(); } }, 100); function InsertButtonASAP() { let buttonInsertInterval = setInterval(function(){ //wait for possible previous buttons to stop existing (due to how youtube loads pages) and for the space for the new button to be available if($("#exportPlainTextList").length == 0 && $("tp-yt-paper-listbox#items").length > 0) { $("tp-yt-paper-listbox#items").append(`
Export Playlist
Getting list...
please click out of the popup to continue autoscrolling...
Playlist in plain text