Exercices Tweetbox
Exercice - Tweetbox Twitter X#
Le but de cet exercice est de créer le champ texte sur le principe de celui utilisé par Twitter. C’est à dire, un simple champ texte, limité à un nombre défini de caractères, un bouton de validation et un bouton d’ajout de photo qui limite encore plus le nombre de caractères.
Coté HTML (voir code plus bas) :
- créez un champ texte pour écrire le message
- affichez la limite de caractères max dans un paragraphe (10 pour vos tests)
- créez un bouton de validation
- chargez la librairie Vue
En JS :
- créez une nouvelle instance de
Vue- utilisez un élément parent pour binder l’application
- stockez les données globales dans
data(le texte, le nombre de caractères max) - utilisez
maxdans votre HTML
- créez une propriété calculée
nombreRestantsqui renvoie le nombre de caractères restants et utilisez cette valeur pour l’affichage (à la place demax) - utilisez
v-modelpour mettre à jour la valeur du texte (le nombre de caractères restants devrait se mettre à jour automatiquement) - créez une seconde propriété calculée pour vérifier si la limite est atteinte (doit retourner
trueoufalse). Utilisez cette propriété pour :- afficher le texte en rouge (en ajoutant une classe)
- désactiver le bouton (attribut
disabled)
Ensuite :
- en HTML, ajoutez une case à cocher pour simuler l’ajout de une photo (nous ne voulons pas créer la fonctionnalité) et un label associé avec le texte «Pas de photo»
- coté JS, ajoutez dans
dataune propriétéphotoqui vautfalse - utilisez
v-modelpour binder cette valeur - modifiez la propriété
nombreRestantspour enlever ou pas des caractères en fonction de si la case est cochée ou non - le texte du label doit devenir «✓ Photo ajoutée»
- testez les différents cas dans l’interface
Code HTML envisagé (sans code Vue)
<div id="app">
<form action="">
<textarea></textarea>
<p>10</p>
<button>Tweet</button>
<input id="photo" type="checkbox">
<label for="photo">Pas de photo</label>
</form>
</div>
Instance Vue
Vue.createApp({
data() {
return {};
},
computed: {
}
}).mount('#app');
Enfin, il faut pouvoir simuler l’action de tweeter et que ses tweets apparaissent sous la tweetbox (la partie serveur n’est pas gérée ici). Pour cela :
- coté JS :
- créez une liste (vide) de tweets dans
data - ajoutez l’événement
submitsur le formulaire, et :- empêchez la validation classique (utilisez
@submit.preventdirectement) - ajoutez les données du tweet actuel (message, image) dans la liste sous forme d’objet littéral
- empêchez la validation classique (utilisez
- créez une liste (vide) de tweets dans
- coté HTML (template) :
- générez des blocs HTML basés sur cette liste (utilisation de
v-for,v-if) - note: pour les images, utilisez un service de récupération d’image aléatoire comme https://picsum.photos avec un paramètre
random, exemple:<img src="https://picsum.photos/200/200?random=2"> - stylez en CSS
- générez des blocs HTML basés sur cette liste (utilisation de