Implemented v1

This commit is contained in:
2026-03-29 15:27:20 +01:00
parent 156677366c
commit 69bda987bc

85
uwuify.js Normal file
View File

@ -0,0 +1,85 @@
const uwuify = {
// The prefix used in console messages
CONSOLE_PREFIX: '[uwuify.js] ',
// The range of time to wait between uwuification
INTERVAL_MIN: 10000,
INTERVAL_MAX: 60000,
// Which characters to uwuify
TARGET_REGEX: /[LRlr]+/g,
// All the #text objects to modify
TARGET_ELEMENTS: [],
// Gets all #text elements on the page
getTexts: function(object) {
let res = [];
for (let i = 0; i < object.childNodes.length; i++) {
if (object.childNodes[i].nodeName == '#text') {
res.push(object.childNodes[i]);
} else {
res = res.concat(uwuify.getTexts(object.childNodes[i]));
}
}
return res;
},
// Generates a random integer between min and max
getRandomInt: function (min, max) {
const minCeiled = Math.ceil(min);
const maxFloored = Math.floor(max);
return Math.floor(Math.random() * (maxFloored - minCeiled) + minCeiled); // The maximum is exclusive and the minimum is inclusive
},
// Returns true if a string is able to be uwued
isUwuable: function(string) {
let res = Boolean(uwuify.TARGET_REGEX.exec(string));
uwuify.TARGET_REGEX.lastIndex = 0
return res;
},
// Uwuify a random target
uwuify: function() {
let targetIdx = uwuify.getRandomInt(0, uwuify.TARGET_ELEMENTS.length);
let shifts = 0;
let element = uwuify.TARGET_ELEMENTS[targetIdx]
let text = element.textContent;
while (!uwuify.isUwuable(text) && shifts < uwuify.TARGET_ELEMENTS.length) {
shifts++;
element = uwuify.TARGET_ELEMENTS[(targetIdx+shifts)%uwuify.TARGET_ELEMENTS.length];
text = element.textContent;
}
if (!uwuify.isUwuable(text)) {
console.info(`${uwuify.CONSOLE_PREFIX} No more text to uwuify.`);
// Return from the function, preventing the next setTimeout().
return
}
let matches = text.matchAll(uwuify.TARGET_REGEX).toArray();
let matchIdx = uwuify.getRandomInt(0, matches.length);
let match = matches[matchIdx];
for (let chrOff = 0; chrOff < match[0].length; chrOff++) {
let chrIdx = match.index + chrOff;
let isUpper = text[chrIdx] == text[chrIdx].toUpperCase();
element.textContent = text.slice(0, chrIdx) + (isUpper ? 'W' : 'w') + text.slice(chrIdx+1);1
}
setTimeout(uwuify.uwuify, uwuify.getRandomInt(uwuify.INTERVAL_MIN, uwuify.INTERVAL_MAX));
}
};
window.addEventListener('load', () => {
console.debug(`${uwuify.CONSOLE_PREFIX} Document loaded.`);
let elements = uwuify.getTexts(document.body);
for (let i = 0; i < elements.length; i++) {
if (uwuify.isUwuable(elements[i].textContent)) {
uwuify.TARGET_ELEMENTS.push(elements[i]);
}
}
setTimeout(uwuify.uwuify, uwuify.getRandomInt(uwuify.INTERVAL_MIN, uwuify.INTERVAL_MAX));
});