Filter Videos

6/21/2023, 11:18:54 PM

2023-06-22 या दिनांकाला. सर्वात नवीन आवृत्ती पाहा.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

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

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

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

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्क्रिप्ट व्यवस्थापक एक्स्टेंशन इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्क्रिप्ट व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्टाईल व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

// ==UserScript==
// @name        Filter Videos
// @namespace   Violentmonkey Scripts
// @match       https://coomer.party/onlyfans/user/*
// @grant       none
// @version     1.0
// @author      -
// @description 6/21/2023, 11:18:54 PM
// @license MIT
// ==/UserScript==

async function querySelectorAsync(element, selector) {
  return await new Promise(resolve => {
    let elm = element.querySelector(selector);
    if(elm) return resolve(elm);

    const observer = new MutationObserver(_ => {
      elm = element.querySelector(selector);
      if(elm) {
        resolve(elm);
        observer.disconnect();
      }
    })

    observer.observe(document.body, {
      childList: true,
      subtree: true
    })
  })
}

async function hasVideo(postUrl) {
  return new Promise(resolve => {
    let request = new XMLHttpRequest();
    request.open("GET", postUrl, true);
    request.send(null);

    request.onreadystatechange = function() {
      if(request.readyState === 4) {
        let elm = document.createElement("html");
        elm.innerHTML = request.responseText;

        return resolve(elm.querySelector("video") !== null);
      }
    }
  })
}

async function filterVideos(e) {
  // Prevent redirection
  e.preventDefault()

  // For every post, check the html and if there is no video, then remove post
  let postList = await querySelectorAsync(document, ".card-list__items");
  for(let post of postList.children) {
    let postUrl = (await querySelectorAsync(post, "a")).href;
    hasVideo(postUrl).then(val => {
      if(!val) post.remove();
    })
  }
}

(async() => {
  let filterBtn = document.createElement("button")
  filterBtn.textContent = "Filter Videos"
  filterBtn.onclick = filterVideos

  let searchInputForm = await querySelectorAsync(document, "form")
  searchInputForm.appendChild(filterBtn)
})()