您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds more features to the chaturbate website filters such as age and keyword searching filtering. Look for these features under the normal options gear.
// ==UserScript== // @name Chaturbate Advanced Filters // @namespace http://tampermonkey.net/ // @version 1.03 // @description Adds more features to the chaturbate website filters such as age and keyword searching filtering. Look for these features under the normal options gear. // @author [email protected] // @match *chaturbate.com/* // @icon https://static-assets.highwebmedia.com/favicons/favicon.ico // @grant none // @license MIT // ==/UserScript== const defaultHomepage = "https://chaturbate.com/tag/milf/female/"; //homepage redirect const minAgeDefault = '30'; //default min age const maxAgeDefault = ''; //default max age const keywordDefaults = '-squirt'; //list of keywords (or negative keywords) separated by commas // Keep track of changes to the DOM and update as needed let timer; let targetNode = document.getElementsByClassName("roomlist_container")[0]; let config = { attributes: true, childList: true, subtree: true }; let callback = (mutationList, observer) => { if (timer) clearTimeout(timer); timer = setTimeout(() => { initialize(); }, 1000); }; let observer = new MutationObserver(callback); observer.observe(targetNode, config); homepageRedirect(); addFilters(); function initialize(){ showHideRoomCards(); } function addFilters(){ const searchMenu = document.getElementsByClassName("advance-search-element")[0]; // Age filter // ************************************************** const ageFilter = document.createElement("div"); const ageLabel = document.createElement("label"); const ageMin = document.createElement("input"); const ageMax = document.createElement("input"); const ageSeparator = document.createElement("span"); ageFilter.id = "age-filter"; ageLabel.innerHTML = "Age: "; ageMin.type = "text"; ageMin.id = "age-min"; ageMin.value = minAgeDefault; ageSeparator.innerHTML = " - "; ageMax.type = "text"; ageMax.id = "age-max"; ageMax.value = maxAgeDefault; ageFilter.appendChild(ageLabel); ageFilter.appendChild(ageMin); ageFilter.appendChild(ageSeparator); ageFilter.appendChild(ageMax); searchMenu.appendChild(ageFilter); searchMenu.insertBefore(addStyleBlock(), ageFilter); ageMin.addEventListener("change", (event) => { showHideRoomCards(); }); ageMax.addEventListener("change", (event) => { showHideRoomCards(); }); // Keyword filter // ************************************************** const keywordFilter = document.createElement("div"); const keywordLabel = document.createElement("label"); const keywordList = document.createElement("input"); keywordFilter.id = "keyword-filter"; keywordLabel.innerHTML = "keywords: "; keywordList.type = "text"; keywordList.id = "keyword-list"; keywordList.value = keywordDefaults; keywordFilter.appendChild(keywordLabel); keywordFilter.appendChild(keywordList); searchMenu.appendChild(keywordFilter); searchMenu.insertBefore(addStyleBlock(), keywordFilter); keywordList.addEventListener("change", (event) => { showHideRoomCards(); }); keywordList.addEventListener("change", (event) => { showHideRoomCards(); }); } function showHideRoomCards(){ var minAge = document.getElementById("age-min").value; var maxAge = document.getElementById("age-max").value; var keywordList = document.getElementById("keyword-list").value; var rooms = document.getElementsByClassName("roomCard"); for (let i = 0; i < rooms.length; ++i) { // Age check var ages = rooms[i].getElementsByClassName("age"); var age = (ages[0] !== undefined) ? ages[0].innerHTML : ''; var showAge = false; if ((age >= minAge || minAge == "") && (age <= maxAge || maxAge == "")){ showAge = true; } // Keyword check var subjects = rooms[i].getElementsByClassName("subject"); var subject = (subjects[0] !== undefined) ? subjects[0].innerHTML : ""; var keywords = keywordList.split(","); var showKeyword = true; if(subject != "" && keywords != ""){ for (let k = 0; k < keywords.length; ++k) { if(keywords[k].startsWith("-") == true && subject.includes(keywords[k].substring(1).toLowerCase())){ showKeyword = false; } if(keywords[k].startsWith("-") == false && !subject.includes(keywords[k].toLowerCase() in subject)){ showKeyword = false; } }} if(showAge == true && showKeyword == true){ rooms[i].dataset.hide = false; rooms[i].style.display = "list-item"; } else { rooms[i].dataset.hide = true; rooms[i].style.display = "none !important"; } } } function homepageRedirect(){ if(window.location.href == "https://chaturbate.com/"){ window.location.replace(defaultHomepage); return false; } else { return true; } } function addStyleBlock(){ var cssBlock = document.createElement("style"); cssBlock.innerHTML = "" + "#improvedSearch { height: 50px; }" + "" + "#age-min,#age-max { width:20px; }" + "body li[data-hide='true'] {display:none !important; }" + ""; return cssBlock; } function insertAfter(referenceNode, newNode) { referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); }