// Caractères. const characters = "ʣʤʥʦʧʨʩʪʫʬʮʯɯɰɲɴɷ¿ÆÐÔÜĞĢĻŊŨŻŽƂƆƌΨΩΞΛϺϢϢϣϨϾЖѹѼ҉҈ҐҖӜӚߐߊ߈ߒݾߋك߉אڶےFA௵"; /** * Obtient un caractère aléatoire. */ function getRandomCharacter(): string { return characters.charAt(Math.ceil(Math.random() * characters.length)); } /** * Simulation de portion chiffrée. * @param element L'élément pour lequel générer du texte chiffré. * @param charsCount Le nombre de caractères du texte chiffré. */ function fakeEncrypted(element: Element, charsCount: number): void { // Génération de caractères. const chars = [...Array(charsCount)].map(getRandomCharacter); element.textContent = "".concat(...chars); // Génération de rotation : trouble entre -4° et +4° + on retourne parfois complètement le texte. const randomRotation = (Math.round(Math.random()) * 180) + Math.ceil(Math.random() * 8) - 4; element.setAttribute("style", "transform: rotate(" + randomRotation + "deg);"); } /** * Fait apparaitre un caractère dans la matrice de simulation d'art numérique. */ function spawnChar(): HTMLDivElement { // Création d'un nouvel élément de caractère aléatoire. const charEl = document.createElement("div"); // Caractère animé. charEl.className = "char"; // Initialisation de la position et de l'animation. charEl.style.top = (10 + Math.round(Math.random() * 80)) + "%"; charEl.style.left = Math.round(Math.random() * 100) + "%"; charEl.style.animationDuration = (1333 + Math.round(Math.random() * 800)) + "ms"; charEl.textContent = getRandomCharacter(); // Changement de caractère régulier, aléatoirement. const changeChar = () => { charEl.textContent = getRandomCharacter(); window.setTimeout(changeChar, (500 + Math.round(Math.random() * 1000))); }; // Lancement initial du changement de caractères. window.setTimeout(changeChar, (500 + Math.round(Math.random() * 1000))); return charEl; } /** * Simulation d'art numérique. * @param element L'élément dans lequel générer l'art numérique. */ function fakeArt(element: Element): void { // On ajoute 150 caractères animés. [...Array(150)].forEach(() => { element.appendChild(spawnChar()); }); } document.addEventListener("DOMContentLoaded", () => { console.log("Bienvenue sur le terminal d'accès de l'espace personnel de madeorsk."); console.log("Oh ?"); console.log("Tiens, tu es là. Je ne m'attendais pas à te trouver ici."); console.log("Tu souhaites visiter l'arrière-boutique ? Pas de problème, tu es libre."); console.log("Si tu veux voir le code source original, tu peux aller sur https://git.madeorsk.com/Madeorsk/madeorsk.com."); // Activation du faux chiffrement des éléments chiffrés. document.querySelectorAll(".encrypted").forEach((element) => { const charsCount = element.textContent.length; fakeEncrypted(element, charsCount); window.setInterval(() => fakeEncrypted(element, charsCount), 100); }); document.querySelectorAll(".fakeart").forEach(fakeArt); });