function getMiniName(name) {
let parts = name.split(" ");
if (parts[0].length > 3 && !parts[0].endsWith("e") && parts[0] !== "Filly" && parts[0] !== "Windy" && parts[1] !== "Brightdawn") {
if (parts[0].includes("/")) {
return parts[0].split("/")[0];
} else {
return parts[0];
}
} else {
return name;
}
}
let lastStartTime = null;
let responseTimes = [];
defaultConfigSlot = localStorage.getItem("default-slot") ? parseInt(localStorage.getItem("default-slot")) : (JSON.parse(localStorage.getItem("identity"))['pluralkit'] === "gdapd" ? 0 : 1);
let configSlot = defaultConfigSlot;
if (isNaN(configSlot) || configSlot < 0 || configSlot >= WiafConfig.length) {
console.log("reset slot");
configSlot = defaultConfigSlot;
} else {
localStorage.setItem("default-slot", configSlot);
}
function sleep(ms) {
let start = new Date().getTime(), expire = start + ms;
while (new Date().getTime() < expire) { }
}
console.log(configSlot);
async function fetchPlus(resource, options = {}) {
const { timeout = 8000 } = options;
const controller = new AbortController();
const id = setTimeout(() => controller.abort(), timeout);
const response = await fetch(resource, {
...options,
signal: controller.signal
});
clearTimeout(id);
return response;
}
window.onload = async () => {
if (navigator.onLine) {
loadApp();
} else {
showOffline();
loadApp();
}
}
function showOffline() {
document.getElementById("online").style.display = "none";
document.getElementById("offline").style.display = "";
}
responses = {
step1: null,
step2: null,
step3: null,
step4: null,
step5: null
}
let loadedApp = false;
function loadApp() {
if (loadedApp) return;
loadedApp = true;
document.getElementById("step1").innerHTML = "";
document.getElementById("step2").innerHTML = "";
document.getElementById("step3").innerHTML = "";
document.getElementById("step4").innerHTML = "";
document.getElementById("step5").innerHTML = "";
document.getElementById("step5").innerHTML = "";
document.getElementById("selector-profiles").innerHTML = "";
for (let slot in WiafConfig) {
let slotData = WiafConfig[slot];
document.getElementById("selector-profiles").innerHTML += "
" + slotData["name"] + "";
}
window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "fusion" && i.name !== "smolscoots" && i.name !== "smoltwi" && !i.name.endsWith("-travelling")).sort(() => Math.random() - 0.5);
document.getElementById("loader").innerHTML = "Starting application...";
let dc;
let dcName;
// Step 1
window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "fusion" && i.name !== "smolscoots" && i.name !== "smoltwi" && !i.name.endsWith("-travelling")).sort(() => Math.random() - 0.5);
dc = document.getElementById("s1-default-card");
dcName = document.getElementById("s1-default-card-name");
for (let member of window.members) {
dc.id = "s1-" + member.id;
dcName.id = "s1-" + member.id + "-name";
dcName.innerText = member.display_name ?? member.name;
dc.style.display = "";
document.getElementById("step1").appendChild(dc.cloneNode(true));
dc.style.display = "none";
dc.id = "s1-default-card";
dcName.id = "s1-default-card-name";
dcName.innerText = "Member name";
}
for (let member of window.members) {
document.getElementById("s1-" + member.id).addEventListener("click",() => {
responses.step1 = member.id;
switchToStep(2);
});
}
// Step 2
window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "fusion" && i.name !== "smolscoots" && i.name !== "smoltwi" && !i.name.endsWith("-travelling")).sort(() => Math.random() - 0.5);
dc = document.getElementById("s2-default-card");
dcName = document.getElementById("s2-default-card-name");
for (let member of window.members) {
dc.id = "s2-" + member.id;
dcName.id = "s2-" + member.id + "-name";
dcName.innerText = member.display_name ?? member.name;
dc.style.display = "";
document.getElementById("step2").appendChild(dc.cloneNode(true));
dc.style.display = "none";
dc.id = "s2-default-card";
dcName.id = "s2-default-card-name";
dcName.innerText = "Member name";
}
for (let member of window.members) {
document.getElementById("s2-" + member.id).addEventListener("click",() => {
responses.step2 = member.id;
switchToStep(3);
});
}
// Step 3
window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "fusion" && i.name !== "smolscoots" && i.name !== "smoltwi" && !i.name.endsWith("-travelling")).sort(() => Math.random() - 0.5);
dc = document.getElementById("s3-default-card");
dcName = document.getElementById("s3-default-card-img");
for (let member of window.members) {
dc.id = "s3-" + member.id;
dcName.id = "s3-" + member.id + "-img";
dcName.src = "ponies/" + member.id + ".png";
dc.style.display = "";
document.getElementById("step3").appendChild(dc.cloneNode(true));
dc.style.display = "none";
dc.id = "s3-default-card";
dcName.id = "s3-default-card-img";
dcName.src = "";
}
for (let member of window.members) {
document.getElementById("s3-" + member.id).addEventListener("click",() => {
responses.step3 = member.id;
switchToStep(4);
});
}
// Step 4
window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "fusion" && i.name !== "smolscoots" && i.name !== "smoltwi" && !i.name.endsWith("-travelling")).sort(() => Math.random() - 0.5);
dc = document.getElementById("s4-default-card");
dcName = document.getElementById("s4-default-card-img");
for (let member of window.members) {
dc.id = "s4-" + member.id;
dcName.id = "s4-" + member.id + "-img";
dcName.src = "profiles/" + member.id + ".png";
dc.style.display = "";
document.getElementById("step4").appendChild(dc.cloneNode(true));
dc.style.display = "none";
dc.id = "s4-default-card";
dcName.id = "s4-default-card-img";
dcName.src = "";
}
for (let member of window.members) {
document.getElementById("s4-" + member.id).addEventListener("click",() => {
responses.step4 = member.id;
switchToStep(5);
});
}
// Step 5
window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "fusion" && i.name !== "smolscoots" && i.name !== "smoltwi" && !i.name.endsWith("-travelling")).sort(() => Math.random() - 0.5);
dc = document.getElementById("s5-default-card");
dcName = document.getElementById("s5-default-card-name");
for (let member of window.members) {
dc.id = "s5-" + member.id;
dcName.id = "s5-" + member.id + "-name";
dcName.innerText = WiafConfig[configSlot]["samples"][member.id] ?? member.proxy_tags[0].prefix;
dc.style.display = "";
document.getElementById("step5").appendChild(dc.cloneNode(true));
dc.style.display = "none";
dc.id = "s5-default-card";
dcName.id = "s5-default-card-name";
dcName.innerText = "Member name";
}
for (let member of window.members) {
document.getElementById("s5-" + member.id).addEventListener("click",async () => {
responses.step5 = member.id;
switchToStep(6);
await compute();
});
}
document.getElementById("loader").style.display = "none";
document.getElementById("step1-outer").style.display = "";
}
function switchToStep(step) {
if (lastStartTime !== null) {
responseTimes.push(new Date().getTime() - lastStartTime);
}
document.getElementById("step" + (step - 1) + "-outer").style.pointerEvents = "none";
if (step === 6) document.getElementById("progress").style.pointerEvents = "none";
document.getElementById("step" + step + "-outer").style.pointerEvents = "none";
document.getElementById("wiaf-progress").style.width = ((step - 1) * 20) + "%";
setTimeout(() => {
document.getElementById("step" + (step - 1) + "-outer").style.opacity = "0";
if (step === 6) document.getElementById("progress").style.opacity = "0";
document.getElementById("step" + step + "-outer").style.opacity = "0";
setTimeout(() => {
lastStartTime = new Date().getTime();
document.getElementById("step" + (step - 1) + "-outer").style.display = "none";
if (step === 6) document.getElementById("progress").style.display = "none";
document.getElementById("step" + step + "-outer").style.display = "";
setTimeout(() => {
document.getElementById("step" + step + "-outer").style.opacity = "1";
setTimeout(() => {
document.getElementById("step" + step + "-outer").style.pointerEvents = "";
}, 200)
}, 100)
}, 200)
}, 500)
}
async function compute() {
let seen = {};
Object.keys(responses).map((i) => {
return responses[i];
}).filter((i) => {
return i !== null;
}).map((i) => {
if (!seen[i]) seen[i] = 0;
seen[i]++;
return i;
});
console.log(seen);
let implied = Object.keys(seen);
if (implied.length === 0) {
document.getElementById("final-load").style.display = "none";
document.getElementById("final-newpony").style.display = "";
} else if (implied.length === 1) {
document.getElementById("final-load").style.display = "none";
document.getElementById("final-precise").style.display = "";
document.getElementById("final-precise-member").innerText = getMiniName(getMember(implied[0]).display_name ?? getMember(implied[0]).name);
document.getElementById("final-precise-proxy").innerText = getMember(implied[0]).proxy_tags[0].prefix ?? "";
document.getElementById("final-precise-pluralkit").innerText = getMember(implied[0]).name;
document.getElementById("final-precise-link1").href = "https://ponies.equestria.horse/" + WiafConfig[configSlot]["name"] + "/" + (getMember(implied[0]).name);
document.getElementById("final-precise-link2").href = "https://dash.pluralkit.me/profile/m/" + getMember(implied[0]).id;
setTimeout(async () => {
await checkPluralKit(implied[0]);
}, 2000)
} else if (implied.length === 2) {
document.getElementById("final-load").style.display = "none";
document.getElementById("final-blur").style.display = "";
document.getElementById("final-blur-m1").innerText = document.getElementById("final-blur-m1-link2").innerText = document.getElementById("final-blur-m1-link1").innerText = getMiniName(getMember(implied[0]).display_name ?? getMember(implied[0]).name);
document.getElementById("final-blur-m2").innerText = document.getElementById("final-blur-m2-link2").innerText = document.getElementById("final-blur-m2-link1").innerText = getMiniName(getMember(implied[1]).display_name ?? getMember(implied[1]).name);
document.getElementById("final-blur-m1-link1").href = "https://ponies.equestria.horse/" + WiafConfig[configSlot]["name"] + "/" + (getMember(implied[0]).name);
document.getElementById("final-blur-m1-link2").href = "https://dash.pluralkit.me/profile/m/" + getMember(implied[0]).id;
document.getElementById("final-blur-m2-link1").href = "https://ponies.equestria.horse/" + WiafConfig[configSlot]["name"] + "/" + (getMember(implied[1]).name);
document.getElementById("final-blur-m2-link2").href = "https://dash.pluralkit.me/profile/m/" + getMember(implied[1]).id;
} else if (implied.length > 2) {
document.getElementById("final-load").style.display = "none";
document.getElementById("final-unclear").style.display = "";
document.getElementById("final-unclear-count").innerText = implied.length.toString();
}
let avgCompleteTime = responseTimes.reduce((a, b) => a + b, 0) / responseTimes.length;
console.log(avgCompleteTime);
if (avgCompleteTime < 5000) {
document.getElementById("final-speed-error").style.display = "none";
document.getElementById("final-speed-fast").style.display = "";
} else if (avgCompleteTime < 10000) {
document.getElementById("final-speed-error").style.display = "none";
document.getElementById("final-speed-medium").style.display = "";
} else {
document.getElementById("final-speed-error").style.display = "none";
document.getElementById("final-speed-slow").style.display = "";
}
}
async function checkPluralKit(id) {
try {
let data = JSON.parse(await (await fetchPlus("https://api.pluralkit.me/v2/systems/" + WiafConfig[configSlot]["system"] + "/fronters", { timeout: 3000 })).text());
let frontersID = data.members.map((i) => { return i.id; });
if (frontersID.includes(id)) {
document.getElementById("final-precise-pk-already").style.display = "";
document.getElementById("final-precise-pk-waiting").style.display = "none";
} else {
document.getElementById("final-precise-pk-register").style.display = "";
document.getElementById("final-precise-pk-waiting").style.display = "none";
}
} catch (e) {
console.error(e);
document.getElementById("final-precise-pk-register").style.display = "";
document.getElementById("final-precise-pk-failed").style.display = "";
document.getElementById("final-precise-pk-asterisk").style.display = "";
document.getElementById("final-precise-pk-waiting").style.display = "none";
}
}
function getMember(id) {
return window.members.find((i) => i.id === id);
}