74 lines
2.2 KiB
JavaScript
74 lines
2.2 KiB
JavaScript
// ==UserScript==
|
|
// @name name-color: cohost edition!
|
|
// @namespace https://terezi.pyrope.net
|
|
// @version 0.2
|
|
// @description colors names based on `name-color:` statements in profiles. there are no other editions
|
|
// @author mehbark
|
|
// @match https://*.cohost.org/*
|
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=cohost.org
|
|
// @grant none
|
|
// ==/UserScript==
|
|
|
|
const mentionee = elem => elem.href.split("/").at(-1);
|
|
|
|
function doit() {
|
|
"use strict";
|
|
|
|
// not just literal mentions btw
|
|
const mentions = [
|
|
...document.querySelectorAll("a[href^='https://cohost.org/']"),
|
|
].filter(
|
|
a =>
|
|
!(
|
|
a.href.includes("/rc/") ||
|
|
// sorry, @post
|
|
a.href.includes("/post/") ||
|
|
// sorry, @tagged
|
|
a.href.includes("/tagged/") ||
|
|
// sorry, @ask
|
|
a.href.endsWith("/ask") ||
|
|
a.href.endsWith("/")
|
|
)
|
|
);
|
|
|
|
const names = [...new Set(mentions.map(mentionee))];
|
|
names.sort();
|
|
|
|
const requester = document
|
|
.querySelector("header")
|
|
.querySelector("span")
|
|
.innerText.slice(1);
|
|
|
|
const url = new URL("https://pyrope.net/name-color/style.css");
|
|
url.searchParams.append("requester", requester);
|
|
|
|
for (const name of names) {
|
|
url.searchParams.append("name", name);
|
|
}
|
|
|
|
let style = document.head.querySelector(".name-color-stylesheet");
|
|
if (style) {
|
|
const style2 = document.createElement("link");
|
|
style2.rel = "stylesheet";
|
|
style2.href = url.toString();
|
|
style2.onload = () => {
|
|
document.head.querySelectorAll(".name-color-stylesheet").forEach(s => s.remove());
|
|
style2.className = "name-color-stylesheet";
|
|
};
|
|
document.head.appendChild(style2);
|
|
} else {
|
|
style = document.createElement("link");
|
|
style.className = "name-color-stylesheet";
|
|
style.rel = "stylesheet";
|
|
style.href = url.toString();
|
|
document.head.appendChild(style);
|
|
}
|
|
}
|
|
|
|
new MutationObserver(doit).observe(document.body, {
|
|
subtree: true,
|
|
childList: true,
|
|
});
|
|
|
|
doit();
|