// ==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
// @downloadURL https://update.greasyfork.icu/scripts/463862/youtube%E6%B2%B9%E7%AE%A1%E6%94%B6%E8%97%8F%E5%88%97%E8%A1%A8%E6%90%9C%E7%B4%A2%E8%BF%87%E6%BB%A4.user.js
// @updateURL https://update.greasyfork.icu/scripts/463862/youtube%E6%B2%B9%E7%AE%A1%E6%94%B6%E8%97%8F%E5%88%97%E8%A1%A8%E6%90%9C%E7%B4%A2%E8%BF%87%E6%BB%A4.meta.js
// ==/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=``
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=``
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)
})();