Spotify - Random Buttons

Add missing randomize features to Spotify.

2023-04-03 기준 버전입니다. 최신 버전을 확인하세요.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         Spotify - Random Buttons
// @namespace    spotify-random-buttons
// @version      0.1
// @description  Add missing randomize features to Spotify.
// @author       Mark McEver
// @match        https://open.spotify.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=spotify.com
// @grant        none
// ==/UserScript==

setTimeout(() => {
    const randomInteger = (min, max) => {
        return Math.floor(Math.random() * (max - min + 1)) + min
    }

    const addRandomButton = (parent) => {
        const button = document.createElement('button')
        button.innerHTML = 'Random'

        button.addEventListener('click', () => {
            const items = document.querySelectorAll('[data-testid=grid-container] a')
            const i = randomInteger(0, items.length)
            items[i].click()
        })

        parent.appendChild(button)
    }

    if(location.href.endsWith('/collection/artists')){
        const header = document.querySelector('main > section > div:first-child > h1')
        addRandomButton(header)
    }
    else if(location.href.endsWith('/discography/album')){
        const header = document.querySelector('main > section a').parentElement
        addRandomButton(header)
    }
}, 3000)