le_simple_mot/script.js

100 lines
12 KiB
JavaScript

let available_words = ["le","de","un","être","et","à","il","avoir","ne","je","son","que","se","qui","ce","dans","en","du","elle","au","de","ce","la","pour","pas","que","vous","par","sur","faire","plus","dire","me","on","mon","lui","nous","comme","mais","pouvoir","avec","tout","y","aller","voir","en","bien","où","sans","tu","ou","leur","homme","si","deux","mari","moi","vouloir","te","femme","venir","quand","grand","celui","si","notre","devoir","là","jour","prendre","même","votre","tout","rien","petit","encore","aussi","quelque","dont","tout","mer","trouver","donner","temps","ça","peu","même","falloir","sous","parler","alors","main","chose","ton","mettre","vie","savoir","yeux","passer","autre","après","regarder","toujours","puis","jamais","cela","aimer","non","heure","croire","cent","monde","donc","enfant","fois","seul","autre","entre","vers","chez","demander","jeune","jusque","très","moment","rester","répondre","tout","tête","père","fille","mille","premier","car","entendre","ni","bon","trois","cœur","ainsi","an","quatre","un","terre","contre","dieu","monsieur","voix","penser","quel","arriver","maison","devant","coup","beau","connaître","devenir","air","mot","nuit","sentir","eau","vieux","sembler","moins","tenir","ici","comprendre","oui","rendre","toi","vingt","depuis","attendre","sortir","ami","trop","porte","lequel","chaque","amour","pendant","déjà","pied","tant","gens","parce","nom","vivre","reprendre","entrer","porter","pays","ciel","avant","frère","regard","chercher","âme","côté","mort","revenir","noir","maintenant","nouveau","ville","rue","enfin","appeler","soir","chambre","mourir","pas","partir","cinq","esprit","soleil","dernier","jeter","dix","roi","état","corps","beaucoup","suivre","bras","écrire","blanc","montrer","tomber","place","ouvrir","ah","parti","assez","leur","cher","voilà","année","loin","point","visage","bruit","lettre","franc","fond","force","arrêter","perdre","commencer","paraître","aucun","marcher","milieu","saint","idée","presque","ailleurs","travail","lumière","long","seulement","mois","fils","neuf","tel","lever","raison","effet","gouvernement","permettre","pauvre","asseoir","point","plein","personne","vrai","peuple","fait","parole","guerre","toute","écouter","pensée","affaire","quoi","matin","pierre","monter","bas","vent","doute","front","ombre","part","maître","aujourd'hui","besoin","question","apercevoir","recevoir","mieux","peine","tour","servir","oh","autour","près","finir","famille","pourquoi","souvent","rire","dessus","madame","sorte","figure","droit","peur","bout","lieu","silence","gros","chef","eh","six","bois","mari","histoire","crier","jouer","feu","tourner","doux","longtemps","fort","heureux","comme","garder","partie","face","mouvement","fin","reconnaître","quitter","personne","comment","route","dès","manger","livre","arbre","courir","cas","huit","lorsque","mur","ordre","continuer","bonheur","oublier","descendre","haut","intérêt","cacher","l'un","chacun","profond","argent","cause","poser","autant","est","travers","grand","instant","façon","d'abord","oeil","tirer","forme","présenter","ajouter","agir","retrouver","chemin","cheveu","offrir","surtout","certain","plaisir","suite","apprendre","malgré","tuer","rouge","sang","retourner","rencontrer","sentiment","fleur","cependant","service","plusieurs","table","vite","paix","envoyer","moyen","dormir","pousser","lit","humain","voiture","rappeler","être","lire","général","nature","or","pouvoir","nouveau","français","joie","sept","tard","président","pourtant","bouche","changer","petit","froid","compter","occuper","sens","cri","cheval","loi","sombre","ci","sûr","espèce","voici","ancien","tandis","frapper","ministre","puisque","selon","travailler","expliquer","propre","obtenir","rentrer","mal","pleurer","essayer","répéter","société","parfois","politique","oreille","payer","politique","apporter","fenêtre","derrière","possible","fortune","compte","champ","manier","vraiment","immense","action","boire","public","garçon","pareil","bleu","sourire","couleur","coucher","papier","d'autres","mal","fort","bientôt","causer","pièce","montagne","sol","œuvre","partout","trente","exister","cours","raconter","serrer","songer","désir","manquer","cour","nommer","bord","douleur","conduire","salle","saisir","premier","comment","projet","demeurer","simple","étude","remettre","journal","geste","disparaître","battre","toucher","situation","oiseau","nécessaire","exemple","siècle","apparaître","souffrir","million","prix","groupe","centre","malheur","honneur","fermer","accepter","garde","mauvais","tendre","naître","sauver","entier","parmi","problème","larme","avancer","chien","peau","reste","traverser","nombre","debout","mesure","social","souvenir","article","vue","couvrir","âge","gagner","système","long","former","plaire","embrasser","rêve","oser","afin","passion","auquel","rapport","refuser","important","décider","produire","soldat","lèvre","signe","vérité","charger","mariage","mêler","certain","plan","cesser","ressembler","dos","marche","souvenir","dame","chanter","plutôt","conseil","sou","triste","coin","jardin","joli","soit","empêcher","doigt","objet","fer","lendemain","lentement","combien","approcher","prier","train","espérer","papa","différent","valeur","jeu","échapper","glisser","secret","haut","vieillard","briller","docteur","brûler","terrible","placer","ton","jambe","juger","suffire","endroit","minute","atteindre","nuage","présence","fou","épaule","léger","feuille","liberté","journée","libre","annoncer","avenir","sourire","hier","résultat","élever","acheter","mener","préparer","pourquoi","hôtel","semaine","forêt","assurer","pur","qualité","prince","bien","également","deviner","médecin","considérer","volonté","seigneur","effort","quelque","vert","art","moindre","demain","quarante","cinquante","foule","appartenir","aussitôt","ligne","représenter","tromper","intérieur","vendre","beauté","riche","craindre","étrange","emporter","ensuite","soin","naturel","hasard","puis","condition","quinze","classe","voyage","auprès","présent","caractère","attention","gris","or","rouler","faible","posséder","scène","difficile","français","réveiller","foi","aider","découvrir","odeur","choisir","musique","oncle","événement","prononcer","village","taire","envie","midi","ensemble","expression","herbe","vieux","pluie","près","bas","rêver","appuyer","étendre","après","général","lutte","trembler","réponse","grâce","espace","habitude","défendre","mémoire","créer","grave","maintenir","verre","campagne","quelqu","juge","genou","impossible","fête","indiquer","prêt","promettre","relever","abandonner","ignorer","large","parent","colère","exprimer","étoile","devoir","conscience","existence","accompagner","immobile","adresser","observer","juste","puissance","matière","sable","séparer","marier","prévoir","vivant","accord","hiver","retour","autrefois","genre","d'autres","vif","amener","obliger","acte","image","horizon","éclairer","poursuivre","danger","livrer","rôle","escalier","goût","bête","ceci","recherche","membre","pain","phrase","contenir","rire","fuir","couler","terme","eaux","moyen","police","rocher","proposer","tranquille","unique","éprouver","retenir","type","vin","supérieur","attacher","voler","sec","justice","époque","passage","somme","science","surprendre","côte","doucement","gauche","faute","école","bon","ensemble","rayon","briser","sujet","imaginer","diriger","douze","en","l'une","dernier","avis","parvenir","ouvert","pénétrer","poète","meilleur","paysan","remarquer","chair","éviter","soudain","succès","île","établir","réussir","pencher","habiter","entourer","déclarer","détail","arme","réalité","confiance","masse","crise","étonner","poste","dresser","durer","depuis","faux","fixer","énorme","principe","direction","taille","désirer","santé","ventre","marché","puissant","simplement","environ","tellement","arracher","entraîner","soutenir","couper","trou","inconnu","pont","lune","dehors","certes","beaux","robe","douter","retirer","cesse","brusquement","entrée","source","camarade","dent","quant","connaissance","cou","but","promener","vague","élément","fil","voie","nez","forcer","particulier","discours","maladie","chaleur","gloire","vide","examiner","revoir","aide","début","ennemi","second","aile","flamme","chaise","lourd","sein","véritable","toit","remplir","terminer","vaste","nu","poussière","nord","tenter","émotion","hors","un","remonter","révolution","théâtre","armée","court","noir","appartement","semblable","installer","haine","jeune","position","seconde","frais","appel","soulever","espoir","allumer","imposer","avant","respirer","arrière","baisser","droite","poitrine","mort","jeunesse","bureau","sac","étranger","courage","souffler","jaune","page","étranger","etc","miser","passé","rapide","digne","chaud","propos","attirer","prêter","clair","amuser","occasion","voile","éclater","importance","quartier","soi","auteur"]
let alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'à', 'â', 'æ', 'ç', 'é', 'è', 'ê', 'ë', 'î', 'ï', 'ô', 'œ', 'ù', 'û', 'ü', 'ÿ']
function setCaret(NodeOffset) {
let range = document.createRange();
let sel = window.getSelection();
let nodus = NodeOffset.nodus
let offset = NodeOffset.offset
if(nodus.nodeType.nodeName === '#text'){
range.setStart(nodus, offset);
}else{
range.setStart(nodus, offset);
}
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
}
function getCaretIndex() {
let element = document.getElementById("text_input")
let position = 0;
const isSupported = typeof window.getSelection !== "undefined";
if (isSupported) {
const selection = window.getSelection();
if (selection.rangeCount !== 0) {
const range = window.getSelection().getRangeAt(0);
const preCaretRange = range.cloneRange();
preCaretRange.selectNodeContents(element);
preCaretRange.setEnd(range.endContainer, range.endOffset);
position = preCaretRange.toString().length;
}
}
return(position);
}
function indexToNode(ctrl, index){
let offset = index
let N_child = ctrl.childNodes.length
let i = 0
while(i < N_child){
if (ctrl.childNodes[i].nodeName === '#text') {
if (offset > ctrl.childNodes[i].textContent.length) {
offset -= ctrl.childNodes[i].textContent.length
} else {
return {"offset": offset, "nodus" : ctrl.childNodes[i]}
}
}else{
if (ctrl.childNodes[i].childNodes.length > 0)
if (offset > ctrl.childNodes[i].childNodes[0].textContent.length) {
offset -= ctrl.childNodes[i].childNodes[0].textContent.length
} else {
return {"offset": offset, "nodus": ctrl.childNodes[i].childNodes[0]}
}
else{
return {"offset": 0, "nodus": ctrl.childNodes[i]}
}
}
i++
}
}
document.getElementById("text_input").addEventListener("input", function(event){
let caractere
let text_recreated = ""
let caretIndex = getCaretIndex()
for(let i = 0; i < event.target.textContent.length; i++){
caractere = event.target.textContent[i]
if(alphabet.indexOf(caractere.toLowerCase()) !== -1){
let word = ""
let j = 0
let letter = event.target.textContent[i]
while(i+j < event.target.textContent.length && alphabet.indexOf(letter.toLowerCase()) !== -1){
word += letter
j++
letter = event.target.textContent[i+j]
}
if(available_words.indexOf(word.toLowerCase()) !== -1){
text_recreated += "<span style='color:green'>"+word+"</span>"
}else{
text_recreated += "<span style='color:red'>"+word+"</span>"
}
i += j-1
}else{
text_recreated += caractere
}
}
text_recreated += "<span></span>" // FIX : Bug d'espace en fin de ligne
event.target.innerHTML = text_recreated
let NodeOffset = indexToNode(event.target, caretIndex)
setCaret(NodeOffset)
event.target.focus()
})