Fix Console

This commit is contained in:
Théo 2023-02-26 20:07:56 +01:00
parent b46a73ebe7
commit 4b664f9186
3 changed files with 65 additions and 53 deletions

View file

@ -1,61 +1,36 @@
'use client';
import AppLink from '@/ui/AppLink';
import { useEffect } from 'react';
import Console from '@/ui/Console';
export default function Home() {
let start: boolean = true;
useEffect(() => {
if (start) {
start = false;
let visible: boolean = true;
let animation: boolean = true; //TODO ajouter un bouton pour arreter l'animation
let con: HTMLElement | null = document.getElementById('console');
window.setInterval(function () {
if (con !== null && visible === true && animation === true) {
con.className = 'console invisible';
visible = false;
} else if (con !== null && animation === true) {
con.className = 'console';
visible = true;
}
}, 400);
let word: HTMLElement | null = document.getElementById('text')
let text: string = "Peer-at-Code";
for (let i: number = 0; i < text.length; i++) {
setTimeout(function () {
if (word !== null)
word.innerHTML += text.charAt(i);
}, 410 * i)
}
}
}, []);
return (
<div>
<div className="flex h-screen w-full">
<div className="m-auto flex flex-col">
<h1 className="text-center text-6xl font-bold">
Bienvenu sur
</h1>
<h1 className='flex text-4xl' >
<span id="text"></span>
<div className='console' id="console">&#95;</div>
</h1>
<br></br>
<div className="m-auto flex flex-col space-y-2">
<h1 className="text-center text-6xl font-bold">Bienvenu sur</h1>
<span>
<Console text="Peer-at Code" />
</span>
<AppLink href="/dashboard">Dashboard</AppLink>
</div>
</div>
<div className="flex h-screen w-full">
<div className="text-center m-auto flex flex-col space-x-0 md:flex-row md:space-x-6 md:space-y-0">
<img className='md:w-2/6 ml-[11%] sm:w-0 w-0 ' src='https://media.discordapp.net/attachments/1070815084718334032/1074104191921959003/glazk0_a_minimalistic_logo_that_is_a_pirate_logo_white_and_blac_9b4eb1dd-5979-45dd-a70a-f880ee3b49ca.png?width=586&height=586'></img>
<p className='self-center md:w-2/6 sm:w-3/6 w-4/6 text-justify'>
Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a é popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.
</p>
<div className="m-auto flex flex-col space-x-0 text-center md:flex-row md:space-x-6 md:space-y-0">
<img
className="ml-[11%] w-0 sm:w-0 md:w-2/6 "
src="https://media.discordapp.net/attachments/1070815084718334032/1074104191921959003/glazk0_a_minimalistic_logo_that_is_a_pirate_logo_white_and_blac_9b4eb1dd-5979-45dd-a70a-f880ee3b49ca.png?width=586&height=586"
></img>
<p className="w-4/6 self-center text-justify sm:w-3/6 md:w-2/6">
Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en
page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis
les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour
réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq
siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu
n'en soit modifié. Il a é popularisé dans les années 1960 grâce à la vente de feuilles
Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion
dans des applications de mise en page de texte, comme Aldus PageMaker.
</p>
</div>
</div>
</div>
);
}

View file

@ -2,10 +2,9 @@
@tailwind components;
@tailwind utilities;
.console{
display:inline-block;
position:relative;
top:-0.14em;
left:5px;
height: 1rem;
}
@layer components {
.console {
@apply relative top-0.5 inline-block;
/* make it hidden then visible every seconde */
}
}

38
ui/Console.tsx Normal file
View file

@ -0,0 +1,38 @@
'use client';
import { cn } from '@/lib/utils';
import { useEffect, useState } from 'react';
export default function Console({ text, className }: { text: string; className?: string }) {
const [message, setMessage] = useState('');
const [typingIndex, setTypingIndex] = useState(0);
const typingDelay = 400; // The delay between each character being typed, in milliseconds
useEffect(() => {
const intervalId = setInterval(() => {
setTypingIndex((prevIndex) => prevIndex + 1);
}, typingDelay);
return () => clearInterval(intervalId);
}, [text]);
useEffect(() => {
if (typingIndex <= text.length) {
setMessage(text.slice(0, typingIndex));
}
}, [typingIndex, text]);
return (
<div className="inline-block h-4">
<span className={cn('text-4xl', className)}>{message}</span>
<div
className={cn('relative top-0.5 inline-block', {
hidden: typingIndex % 2 === 0
})}
>
&#95;
</div>
</div>
);
}