YTM Add to playlist shortcut

Adds a shortcut to the P button to add the current song to a playlist

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         YTM Add to playlist shortcut
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Adds a shortcut to the P button to add the current song to a playlist
// @author       Radulfus
// @match        *://music.youtube.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net
// @grant        none

// ==/UserScript==

(function() {
    'use strict';
    window.addEventListener("keydown",function(event) {

        console.log("keycode? " + event.keyCode);
        if(event.keyCode === 80) {
            console.log("i'm in");
            Array.from(document.getElementsByTagName("ytmusic-menu-renderer")).filter(ele=>ele.classList=="menu style-scope ytmusic-player-bar")[0].children[2].dispatchEvent(new Event("click"));
            Array.from(document.getElementsByTagName("ytmusic-menu-renderer")).filter(ele=>ele.classList=="menu style-scope ytmusic-player-bar")[0].children[2].dispatchEvent(new Event("click"));
            setTimeout(function(){
                var playlistButtonElements = document.querySelectorAll('[d="M22,13h-4v4h-2v-4h-4v-2h4V7h2v4h4V13z M14,7H2v1h12V7z M2,12h8v-1H2V12z M2,16h8v-1H2V16z"].style-scope.yt-icon');
                const elementsWithParentNode = Array.from(playlistButtonElements).filter(element =>
                                                                                         element.parentElement &&
                                                                                         element.parentElement.parentElement &&
                                                                                         element.parentElement.parentElement.parentElement &&
                                                                                         element.parentElement.parentElement.parentElement.parentElement &&
                                                                                         element.parentElement.parentElement.parentElement.parentElement.matches('#navigation-endpoint')
                                                                                        );
                console.log("Count: "+ elementsWithParentNode.length);
                console.log(elementsWithParentNode[0].parentElement.parentElement.parentElement.parentElement);
                elementsWithParentNode[0].parentElement.parentElement.parentElement.parentElement.dispatchEvent(new Event("click"));
            }, 100);
        }
    }, false)
})();