NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Chaturbate sort // @namespace Lurk4 // @author itsmewantscaps // @description sorts camwhores descending by viewers // @include https://chaturbate.com/* // @include https://*.chaturbate.com/* // @version 1.0.3 // @license MIT // @OS DeineMuddi // @run-at document-end // ==/UserScript== (function(){ var cbisMobile = window.location.href.indexOf("//m.chaturbate.") > -1 function sortCamwhores() { var i var elems var camsinfo var res = null var mainList = null var contentHolder; var subClass if (cbisMobile) { var bc = document.getElementById("broadcasters"); if (bc !== null) contentHolder = [bc] subClass = "time-viewers-inner" } else { contentHolder = document.getElementsByClassName("list"); subClass = "cams" } if (contentHolder !== null && (contentHolder.length > 0)) { for (i = 0; i < contentHolder.length; i++) { res = []; mainList = contentHolder[i]; elems = mainList.getElementsByClassName(subClass); for (j = elems.length - 1; j >= 0; j--) { camsinfo = elems[j].innerText.match(/(\d+) min.*, (\d+) viewer.*\b/); var pElement = cbisMobile ? elems[j].parentElement.parentElement : elems[j].parentElement.parentElement.parentElement; res.push({ "element": pElement, "viewers": camsinfo !== null && camsinfo.length > 2 ? camsinfo[2] : 0 }); mainList.removeChild(pElement); } res.sort(function(a, b) { return b.viewers - a.viewers; }); for (j = 0; j < res.length; j++) { mainList.appendChild(res[j].element); } } } } sortCamwhores(); //https://stackoverflow.com/questions/3219758/detect-changes-in-the-dom var observeDOM = (function() { var MutationObserver = window.MutationObserver || window.WebKitMutationObserver, eventListenerSupported = window.addEventListener; return function(obj, callback) { if (MutationObserver) { // define a new observer var obs = new MutationObserver(function(mutations, observer) { if (mutations[0].addedNodes.length) { callback(observer); } }); // have the observer observe foo for changes in children obs.observe(obj, { childList: true, subtree: true }); } else if (eventListenerSupported) { obj.addEventListener('DOMNodeInserted', callback, false); obj.addEventListener('DOMNodeRemoved', callback, false); } }; })(); observeDOM(document.getElementById(cbisMobile ? 'broadcasters' : 'main'), function(observer) { observer.disconnect(); sortCamwhores(); observer.observe(document.getElementById(cbisMobile ? 'broadcasters' : 'main'), { childList: true, subtree: true }); }); })();