summaryrefslogblamecommitdiff
path: root/static/outilspage.js
blob: 0fee4ba0142e333768a00616fca60b54b7c55f62 (plain) (tree)
1
2
3
4
5
6
7






                                           





                                                             
                          
 





                                                        
                   
                                              



                                                                         

                     
                          



























































































































                                                                                                                         
                                                                                                                                                               

                         


                   

                                                   








                                                                                      
                                          










                                                                                                  















                                                                            











































                                                                                                 






                                                                  


















                                                                                                   
// Couleurs des cases
var couleur_base = "rgb(238, 238, 238)" ;
var couleur_valide = 'rgb(255, 136, 136)' ;


// Valide la case et la colore en rouge
function validecase(elem) {
	if (elem.style.backgroundColor == couleur_valide) {
		alterne_phrase_reponse(elem)
	} else {
		elem.style.backgroundColor = couleur_valide ;
		detectelignes() ;
	}
	sauvegarde_jeu() ;

}

// efface la grille
function effacegrille() {
	var table=document.getElementById("grille") ;
	var listetd = table.getElementsByTagName("td") ;
	var ltemp ;
	for (var i=0; i< listetd.length; i++){
		if (!(listetd[i].classList.contains("vide"))) {
			listetd[i].style.backgroundColor = couleur_base ;
			affiche_phrase(listetd[i]) ;
		}
	}
	metscore(0) ;
	sauvegarde_jeu() ;
}

// mettre à jour le score si on veut
function metscore(score) {
	document.getElementById("score").innerHTML = score ;
}

// Compte les lignes, colonnes et diagonales de la grille et met à jour le score
function detectelignes(elem) {
	var table=document.getElementById("grille") ;
	var listelignes = table.getElementsByTagName("tr") ;
	var nblignes = listelignes.length ;
	var nbcolonnes = listelignes[0].children.length ;
	var i, j ;
	
	// lignes
	var nb_lignes_completes = 0 ;
	var remplie ;
	for(i=0; i<nblignes; i++) {
		remplie = true ;
		for(j=0; j<nbcolonnes; j++) {
			//alert(j) ;
			//alert(listelignes[i].children[j].style.backgroundColor) ;
			if(listelignes[i].children[j].style.backgroundColor != couleur_valide)	{
				// c'est pas une ligne, dommage
				remplie = false ;
				//alert("la ligne "+i+"n'est pas remplie, vu à la colonne "+j) ;
				break
			}
		}
		if(remplie) {
			nb_lignes_completes+=1 ;
		}
	}
	
	// Colonnes
	var nb_colonnes_completes = 0 ;
	for(j=0; j<nbcolonnes; j++) {
		remplie = true ;
		for (i=0; i<nblignes; i++) {
			if(listelignes[i].children[j].style.backgroundColor != couleur_valide)	{
				// c'est pas une colonne, dommage
				remplie = false ;
				break
			}
		}
		if (remplie) {
			nb_colonnes_completes+=1 ;
		}
	}

	// Diagonales.
	var nb_diagonales_1 = 0 ;
	var nb_diagonales_2 = 0 ;
	if(nblignes <= nbcolonnes) {
		// Les diagonales se comptent horizontalement : "\\\" et "///"
		for(i=0; i<nbcolonnes - nblignes +1; i++) {
			// diagonales "\"
			remplie=true ;
			for(j=0; j<nblignes; j++) {
				if(listelignes[j].children[i+j].style.backgroundColor != couleur_valide)	{
					remplie = false
					break
				}
			}
			if (remplie) {
				nb_diagonales_1+=1
			}
			
			// diagonales "/"
			remplie=true ;
			for(j=0; j<nblignes; j++) {
				if(listelignes[j].children[nbcolonnes-i-j-1].style.backgroundColor != couleur_valide)	{
					remplie = false
					break
				}
			}
			if (remplie) {
				nb_diagonales_2+=1
			}
		}
		
	} else { // les diagonales vont se compter "verticalement"
		for(i=0; i<nblignes - nbcolonnes +1; i++) {
			// diagonales "\"
			remplie=true ;
			for(j=0; j<nbcolonnes; j++) {
				if(listelignes[i+j].children[j].style.backgroundColor != couleur_valide)	{
					remplie = false
					break
				}
			}
			if (remplie) {
				nb_diagonales_1+=1
			}
			
			// diagonales "/"
			remplie=true ;
			for(j=0; j<nbcolonnes; j++) {
				if(listelignes[nblignes -i-j-1].children[j].style.backgroundColor != couleur_valide)	{
					remplie = false
					break
				}
			}
			if (remplie) {
				nb_diagonales_2+=1
			}
		}
		
		
	}
	// Compter les cases utilisées
	var nbcases = 0 ;
	for(i=0; i<nblignes; i++) {
		for(j=0; j<nbcolonnes; j++) {
			if (listelignes[i].children[j].style.backgroundColor == couleur_valide) {
				nbcases+=1
			}
		}
		
	}
	
	
	// Mettre le score à jour
	score = nb_lignes_completes*scoreLigne + nb_colonnes_completes*scoreColonne + (nb_diagonales_1 + nb_diagonales_2) *scoreDiagonale + nbcases*scoreCase ;
	metscore(score) ;
}


/* Outils divers */

/* Ajouter un champ pour mettre une phrase perso */
function ajouter_phrase_perso() {
	var ul = document.getElementById("liste_phrases_add") ;
	var nb = ul.children.length ;
	var elt = document.createElement("li") ;
	elt.innerHTML = '<input type="text" class="texte" name="phrase_add_'+nb+'">' ;
	ul.appendChild(elt) ;

}

/* Fait tourner l'affichage des phrases */
function alterne_phrase_reponse(elem) {
	var liste = elem.children ;
	// qui est actif ?
	for(var i=0; i< liste.length; i++) {
		if(liste[i].style.display != "none") {
			liste[i].style.display = "none" ; // on efface celui-là
			liste[(i+1) % liste.length].style.display = "block" ; // on met le suivant
			break // on s'arrête là
		}
		
	}
}

function affiche_reponse(elem) {
	var ltemp = elem.getElementsByClassName("phrase") ;
	if (ltemp.length >0) ltemp[0].style.display = "none" ;
	ltemp = elem.getElementsByClassName("reponse")
	if (ltemp.length >0) ltemp[0].style.display = "block" ;
}

function affiche_phrase(elem) {
	var ltemp = elem.getElementsByClassName("phrase")
	if (ltemp.length >0 ) ltemp[0].style.display = "block" ;
	ltemp = elem.getElementsByClassName("reponse")
	for (var i=0; i<ltemp.length; i++) ltemp[i].style.display = "none" ;
}

// Sauvegarde le jeu en cours sous forme de chaîne avec des 0 et des 1
// puis met ça dans l'url d'id "permalien_infosjeu"
function sauvegarde_jeu() {
	var table=document.getElementById("grille") ;
	var listelignes = table.getElementsByTagName("tr") ;
	var chaine = "" ;
	var i, j ;
	for(i=0; i<listelignes.length; i++) {
		for(j=0; j<listelignes[i].children.length; j++) {
			//alert("bla") ;
			if (listelignes[i].children[j].style.backgroundColor == couleur_valide) {
				chaine=chaine + "1" ;
			} else {
				chaine = chaine + "0" ;
			}
		}
		
	}
	
	// Sauvegarder le permalien
	var url = document.getElementById("permalien").href ;
	//alert(url+"&sauv="+chaine) ;
	document.getElementById("permalien_infosjeu").href = url+"&sauv="+chaine ;
}

/* L'inverse : prend la chaine avec les 0 et les 1 et modifie le tableau en conséquence. 
 * On recalcule le score dans la foulée */
function charge_jeu(chaine) {
	//alert(chaine) ;
	var table=document.getElementById("grille") ;
	var listelignes = table.getElementsByTagName("tr") ;
	var i,j
	var indice = 0 ; // savoir où on en est dans la chaine
	
	for(i=0; i<listelignes.length; i++) {
		for(j=0; j<listelignes[i].children.length; j++) {
			//alert("bla") ;
			if(chaine[indice] == "1") validecase(listelignes[i].children[j]) ;
			indice = indice + 1 ;
		}
	}
}


/* Url à mettre : on ajoute ce qu'il y a là à l'URL actuelle */
function met_url(aajouter) {
	let url = new URL(window.location.href) ;
	url.search = aajouter ;
	//alert(url) ;
	history.pushState({}, null, url);
}


/* Afficher/cacher un truc */
function affiche_cache(elem, elemcourant)
{
	// affiche et/ou cache l'élément elem, tout en changeant l'élément courant (block/none)
	// en afficher/masquer
	if(elem.style.display == "block")
	{
		elem.style.display = "none";
		elemcourant.innerHTML = "Afficher" ;
	}
	else
	{
		elem.style.display = "block" ;
		elemcourant.innerHTML = "Masquer" ;
	}
	
}