Sleazy Fork is available in English.
The ultimate brute-force script to change your text everywhere without freezing.
ของเมื่อวันที่
// ==UserScript==
// @name uwuifyer
// @namespace http://tampermonkey.net
// @version 1.6
// @description The ultimate brute-force script to change your text everywhere without freezing.
// @author You
// @license MIT
// @match *://*/*
// @include *
// @grant none
// @run-at document-end
// ==/UserScript==
(function() {
'use strict';
function uwuify(text) {
return text
.replace(/[lr]/g, 'w')
.replace(/[LR]/g, 'W')
.replace(/n([aeiou])/g, 'ny$1')
.replace(/N([aeiou])/g, 'Ny$1')
.replace(/N([AEIOU])/g, 'NY$1')
.replace(/ove/g, 'uv');
}
function processInput(target) {
if (target.dataset.isUwUing) return;
const isStandardInput = target.tagName === 'INPUT' || target.tagName === 'TEXTAREA';
const isContentEditable = target.getAttribute('contenteditable') === 'true';
if (isStandardInput) {
const original = target.value || "";
const converted = uwuify(original);
if (original !== converted) {
target.dataset.isUwUing = 'true';
const start = target.selectionStart;
const end = target.selectionEnd;
target.value = converted;
target.setSelectionRange(start, end);
delete target.dataset.isUwUing;
}
} else if (isContentEditable) {
const selection = window.getSelection();
if (!selection.rangeCount) return;
const range = selection.getRangeAt(0);
const textNode = range.startContainer;
if (textNode.nodeType === Node.TEXT_NODE) {
const original = textNode.textContent || "";
const converted = uwuify(original);
if (original !== converted) {
target.dataset.isUwUing = 'true';
const offset = range.startOffset;
textNode.textContent = converted;
try {
const newRange = document.createRange();
newRange.setStart(textNode, offset);
newRange.collapse(true);
selection.removeAllRanges();
selection.addRange(newRange);
} catch (err) {}
delete target.dataset.isUwUing;
}
}
}
}
// Listens globally to all character keystroke changes safely
document.addEventListener('input', function(e) {
if (e.target) processInput(e.target);
}, true);
})();