youtube油管收藏列表搜索过滤

收藏视频时,添加一个输入框,允许根据关键词搜索出相关的收藏列表,过滤掉无关的

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         youtube油管收藏列表搜索过滤
// @namespace    http://tampermonkey.net/
// @version      0.1.1
// @description  收藏视频时,添加一个输入框,允许根据关键词搜索出相关的收藏列表,过滤掉无关的
// @author       iamqiz
// @match        https://www.youtube.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=youtube.com
// @license      AGPLv3
// @run-at  document-body
// @grant        none
// ==/UserScript==
/*
  给油管收藏弹窗添加搜索框,
  原理是给document设置一个click事件,点击鼠标后,检测是否有收藏窗口出现, 如果出现,则插入搜索框,然后删除该click事件

*/
(function() {
    'use strict';

    // Your code here...
    function get_xpath_result_list(xpath){
        if(typeof xpath=="undefined"||xpath=="-h"){
            console.log(`xpath(\`//*[text()="xxx"]\``)
            console.log(`xpath(\`//*[contains(text(),"xxx")]\`)`)
            return
        }
        let xpath_results=document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null)
        let xpath_result_list=[]
        var a_result= xpath_results.iterateNext();
        while (a_result) {
            xpath_result_list.push(a_result)
            a_result= xpath_results.iterateNext();
        }
        return xpath_result_list
    }
    function log(msg){
        console.log(msg)
    }

console.log(`开始油管收藏搜索V2`)
    let xpath=get_xpath_result_list
    let starttimer

let searchTimer
let savelistTimer
let clickFn=()=>{
    clearInterval(savelistTimer)
    let cnt=0
    savelistTimer=setInterval(()=>{
        cnt++
        let savelist= xpath(`/html/body/ytd-app/ytd-popup-container/tp-yt-paper-dialog/ytd-add-to-playlist-renderer`)[0]
        if(savelist){
            clearInterval(savelistTimer)
            console.log('找到了')
            console.log(savelist)
            console.log(savelist.style)
            //销毁
            document.removeEventListener('click',clickFn)
            // 加上搜索框
            if(1){
                let b=document.createElement("div")
                b.innerHTML=`<input type="text" id="qz-search-box" value="" placeholder="输入进行搜索" autocomplete="off"></input>`
                let c=b.firstElementChild
                savelist.insertAdjacentElement('afterbegin',b)
                let list=b.nextElementSibling.nextElementSibling
                c.addEventListener("input",(e)=>{
                    console.log(`v:${e.target.value}`);
                    if(1){
                        //
                        log(`清除搜索:${searchTimer}`)
                         clearTimeout(searchTimer)
                        searchTimer= setTimeout(()=>{
                            log(`执行timer:${searchTimer}`)
                            // let words=e.target.value.split(/\s+/)
                            let words=e.target.value.trim().split(/\s+/)
                            console.log(`搜索${words.length}|${words}|`);
                            console.log(list);

                            list.childNodes.forEach((ele,index)=>{
                                let ismatch=true
                                // let txt=ele.textContent.trim()
                                let txt=ele.innerText.trim()
                                // log(`${index}|txt:${txt}`)
                                for(let word of words){
                                   if(!txt.includes(word)){
                                       ismatch=false
                                       break
                                   }
                                }
                                if(ismatch){
                                     ele.style.display=''
                                }else{
                                    ele.style.display='none'
                                }
                            })
                        },1000)
                        log(`创建timer:${searchTimer}`)
                    }
                })
                let closediv=document.createElement('div')
                closediv.innerHTML=`<input type="button" value="重置"/>`
                closediv.firstElementChild.addEventListener('click',(e)=>{
                    console.log(`重置按钮:${Math.random()}`)
                    console.log(e.target)
                    // e.target.parentElement.style.display='none'
                    console.log(`qzid:youtube-save-list 重置`);
                    c.value=""
                    list.childNodes.forEach((ele,index)=>{
                       ele.style.display=''
                    })
                })
                b.appendChild(closediv.firstElementChild)
            }
        }else{
            if(cnt>=5){
                console.log(`超时还未找到`)
                clearInterval(savelistTimer)
            }else{
                //没找到
                console.log(`idx:${cnt}| 没找到`)
            }
        }
    },200)

}


document.addEventListener("click",clickFn)


})();