Playlists buttons V3

Adds Buttons to your favorite playlists.

当前为 2023-06-25 提交的版本,查看 最新版本

// ==UserScript==
// @name         Playlists buttons V3
// @version      3
// @description  Adds Buttons to your favorite playlists.
// @author       Bliwi
// @match        https://soundcloud.com/*
// @grant        none
// @run-at       document-end
// @noframes
// @license MIT
// @namespace https://greasyfork.org/users/943433
// ==/UserScript==

(function() {
    'use strict';
    //Load things

    setTimeout(function welcome(){
        var root = document.documentElement;
        root.style.setProperty('--welcome', 'none');
    }, 100);
    var savedUrls = JSON.parse(localStorage.getItem('urls'));
    var savedNames = JSON.parse(localStorage.getItem('names'));
    let currentPage = location.href;
    setTimeout(playlistsLoad, 500);
    setInterval(function()
                {
        if(!document.querySelector('.pinbutton')){
        if(window.location.href.indexOf("com/you/sets") != -1){
    pinToSidebar();
    }
        };
    }, 500);
    //console.log(savedNames);
    //add new playlist button
    function pinToSidebar() {
        //Pin button

        let button = document.createElement('a');
        let header = document.querySelector('.collectionNav');
        button.className = 'pinbutton';
        button.innerHTML = '📌';
        header.insertBefore(button, header.children[2]);

        //Clear

        setTimeout(function clear(){
        let button = document.createElement('a');
        let header = document.querySelector('.collectionNav');
        button.className = 'pinbutton';
        button.innerHTML = '🗑️';
        header.insertBefore(button, header.children[2]);
        button.onclick = function (){
        if (confirm("Are you sure you want to remove all the pinned playlists?")){
            var savedUrls = [];
            var savedNames = [];
            localStorage.setItem('names', JSON.stringify(savedNames));
            localStorage.setItem('urls', JSON.stringify(savedUrls));
            location.reload();}
        }
        },10)

        //Plus Button

        setTimeout(
        function plus() {
        let button = document.createElement('a');
        let header = document.querySelector('.collectionNav');
        button.className = 'pinbutton';
        button.innerHTML = '➕';
        header.insertBefore(button, header.children[2]);
        button.onclick = function (){
            var newName = prompt('Enter the name of the playlist:');
            if (newName) {
                var newURL = prompt('Enter the URL for the playlist:');
                if (newURL) {

                var modifiedUrl = newURL.replace('https://soundcloud.com', '').replace('http://soundcloud.com', '');
                savedUrls.push(modifiedUrl);
                savedNames.push(newName);
                console.log(savedNames);
                console.log(savedUrls);

                localStorage.setItem('names', JSON.stringify(savedNames));
                localStorage.setItem('urls', JSON.stringify(savedUrls));
                    if (confirm("Done pinning,Soundfy will now reload to take effect.")){location.reload();}
                }
            }
        }
        },
        10);

         //Extract the playlists
        button.onclick = function (){
            button.innerHTML = 'Extracting the playlists';
            setTimeout(function done(){
                if (confirm("Done pinning,Soundfy will now reload to take effect.")){location.reload();}
        },1000)
            // Query the elements on the page
            var elements = document.querySelectorAll('a.sc-link-primary.sc-link-dark.sc-type-light.sc-text-secondary.playableTile__mainHeading.playableTile__heading.audibleTile__audibleHeading.sc-truncate.sc-font-light.sc-text-h4');
            // Store the URLs in variables
            //
            var urls = [];
            var names = [];
            for (var i = 0; i < elements.length; i++) {
                let button = document.createElement('a');
                let header = document.querySelector('.collectionSection__top');
                header.style.display = "block !important";
                button.innerHTML = modnames3;
                header.insertBefore(button, header.children[2]);
                button.className = 'playlist-name';
                var url = elements[i].href;
                var modifiedUrl = url.replace('https://soundcloud.com', '').replace('http://soundcloud.com', '');
                var modnames = url.replace('https://soundcloud.com/', '').replace('http://soundcloud.com/', '');
                var modnames2 = modnames.replace('-', ' ').replace('-', ' ');
                var modnames3 = modnames2.replace('/sets/', ' - ').replace('/sets/', ' - ');
                names.push(modnames3);
                urls.push(modifiedUrl);
            }
            console.log(urls);
            console.log(names);
            //Save the Urls and names to the local storage
            //
            localStorage.setItem('urls', JSON.stringify(urls));
            localStorage.setItem('names', JSON.stringify(names));

        };

    }

        //functions
    //Load the playlists
    function playlistsLoad() {
        for (var i = 0; i < savedUrls.length; i++) {
        var url = savedUrls[i];
        var name = savedNames[i];
        insertButton(name,url);
    }
    }
    //Insert the buttons
    function insertButton(playlistname,playlistlink) {
        let playlist = document.createElement('a');
        let header = document.querySelector('.header__middle');
        const i = savedNames.indexOf(playlistname);
        playlist.id = i;
        playlist.innerHTML = playlistname;
        playlist.className = 'playlist-button';
        playlist.href = playlistlink;

        //Delete or rename
        playlist.ondblclick = function() {
            var newName = prompt('Enter a new name(del to delete):');
            if (newName === 'del') {
                //delete savedNames[i];
                savedNames.splice(i, 1);
                savedUrls.splice(i, 1);
                playlist.className = '';
                playlist.innerHTML = '';
                playlist.href = '';
                console.log(savedNames);
                localStorage.setItem('names', JSON.stringify(savedNames));
                localStorage.setItem('urls', JSON.stringify(savedUrls));
            } else if (newName) {
                // Rename
                playlist.innerHTML = newName;
                savedNames[i] = newName;
                console.log(savedNames);
                localStorage.setItem('names', JSON.stringify(savedNames));
            }
        }
        if (header) {
        header.insertBefore(playlist, header.children[2]);

    } else {setTimeout(playlistsLoad, 1000);}
    }
})();