Add an informational overview to each profile pic on the home page of Candy Girl LA.
当前为
// ==UserScript==
// @name CGLA Overview
// @namespace Violentmonkey Scripts
// @match https://www.candygirlla.com/
// @grant none
// @version 1.3
// @author -
// @description Add an informational overview to each profile pic on the home page of Candy Girl LA.
// @license MIT
// ==/UserScript==
async function fetchProfile(url) {
let res = await fetch(url)
let text = await res.text()
let parser = new DOMParser()
let doc = parser.parseFromString(text, 'text/html')
let els = doc.querySelectorAll('main div[data-testid=richTextElement]')
let profile = els[1].textContent
return profile.replace(/\n\n/g, "\n")
}
async function fetchProfile2(url) {
let res = await fetch(url)
let text = await res.text()
let parser = new DOMParser()
let doc = parser.parseFromString(text, 'text/html')
let els = doc.querySelectorAll('main div[data-testid=richTextElement]')
let profile = els[1].innerHTML
let p2 = profile.replace(/<br>/g, "\n")
let p3 = p2.replace(/\n\n/g, "\n")
let d2 = document.createElement('DIV')
d2.innerHTML = p3
return d2.innerText
}
function addProfileOverlay(a, content, className="overlay") {
let pre = document.createElement('PRE')
pre.className = className
pre.innerHTML = content
a.appendChild(pre)
}
async function fetchAll() {
let as = document.querySelectorAll('a[data-testid=linkElement][target=_self]')
let i = 0
for (i = 0; i < as.length; i++) {
let a = as[i]
let url = new URL(a.href)
if (url.pathname === '/') continue
let profile = await fetchProfile(a.href)
addProfileOverlay(a, profile)
}
let a2 = document.querySelectorAll('a[data-testid=gallery-item-click-action-link][target=_self]')
for (i = 0; i < a2.length; i++) {
let a = a2[i]
let url = new URL(a.href)
if (url.pathname === '/') continue
let profile = await fetchProfile2(a.href)
console.log({i, url: a.href, profile})
addProfileOverlay(a, profile, "overlay2")
}
}
let css = `
#SITE_HEADER {
opacity: 85%;
}
pre.overlay {
position: absolute;
bottom: 0;
left: 0;
margin: 1.5em;
padding: 0.5em;
border-radius: 8px;
font-size: 11px;
color: white;
background: rgba(69, 40, 50, 0.75);
}
pre.overlay2 {
position: absolute;
bottom: 64px;
left: 0;
margin: 1.5em;
padding: 0.5em;
border-radius: 8px;
font-size: 11px;
color: white;
background: rgba(69, 40, 50, 0.75);
}
`
let style = document.createElement("style");
style.type = "text/css";
style.appendChild(document.createTextNode(css));
document.head.appendChild(style);
//for debugging
//unsafeWindow.fetchProfile = fetchProfile
//unsafeWindow.fetchProfile2 = fetchProfile2
//unsafeWindow.addProfileOverlay = addProfileOverlay
//unsafeWindow.fetchAll = fetchAll
const wait = 3000
setTimeout(fetchAll, wait)
window.addEventListener('popstate', () => {
if (location.pathname === '/') {
const pres = document.querySelectorAll('pre.overlay')
if (pres.length === 0) {
setTimeout(fetchAll, wait)
}
}
})