MediaWiki:VisitorsIndicator.js: Difference between revisions
From VRChat Wiki
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
$( | $( | ||
(function () { | (function () { | ||
const container = document.querySelector("#mw-indicator-visitors-container"); | |||
const element = document.querySelector("#mw-indicator-visitors-count"); | const element = document.querySelector("#mw-indicator-visitors-count"); | ||
if (!element) return; | if (!container || !element) return; | ||
const language = mw.config.get("wgPageContentLanguage"); | const language = mw.config.get("wgPageContentLanguage"); | ||
Line 17: | Line 18: | ||
const value = (await fetch(`https://plausible.io/api/stats/wiki.vrchat.com/pages/?${query.toString()}`) | const value = (await fetch(`https://plausible.io/api/stats/wiki.vrchat.com/pages/?${query.toString()}`) | ||
.then((response) => response.json())); | .then((response) => response.json())) | ||
.catch(() => null); | |||
if (typeof value !== "object" || !("results" in value) || !Array.isArray(value.results)) return; | if (!value || typeof value !== "object" || !("results" in value) || !Array.isArray(value.results)) { | ||
container.style.opacity = 0; | |||
return; | |||
} | |||
container.style.opacity = 1; | |||
element.textContent = value.results.reduce((prev, curr) => { | element.textContent = value.results.reduce((prev, curr) => { | ||
prev += curr.visitors; | prev += curr.visitors; |
Revision as of 09:13, 6 October 2024
$(
(function () {
const container = document.querySelector("#mw-indicator-visitors-container");
const element = document.querySelector("#mw-indicator-visitors-count");
if (!container || !element) return;
const language = mw.config.get("wgPageContentLanguage");
const pathname = location.pathname.replace(`/${language}`, "");
const languages = [...document.querySelectorAll(".mw-pt-languages-list a")].map(({ lang }) => lang.toLowerCase());
const alternatives = [pathname, `${pathname}/${language}`, ...languages.map((language) => `${pathname}/${language}`)];
async function refresh() {
const filters = [["is", "event:page", alternatives]];
const query = new URLSearchParams({
period: "realtime",
filters: JSON.stringify(filters)
});
const value = (await fetch(`https://plausible.io/api/stats/wiki.vrchat.com/pages/?${query.toString()}`)
.then((response) => response.json()))
.catch(() => null);
if (!value || typeof value !== "object" || !("results" in value) || !Array.isArray(value.results)) {
container.style.opacity = 0;
return;
}
container.style.opacity = 1;
element.textContent = value.results.reduce((prev, curr) => {
prev += curr.visitors;
return prev;
}, 0);
}
refresh();
setInterval(refresh, 1000)
})()
);