www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

createGame.js (6399B)


      1 $.fn.changeId = function(append) {
      2 	this.find("[id]").each(function(i,e){
      3 		$(e).attr("id", $(e).attr("id") + append);
      4 	});
      5 	this.find('[for="word-"]').text(append);
      6 	this.find("[for]").each(function(i,e){
      7 		$(e).attr("for", $(e).attr("for") + append);
      8 	});
      9 	return this;
     10 };
     11 
     12 $(function() {
     13 	$.getJSON("server.php", {action:"5"}, function (data) {
     14 		var numWord = 1;
     15 		var user = "foo";
     16 		var passwd = "bar";
     17 		var relations = data;
     18 		var nbWordMin = 5;
     19 		var wordsOK = new Array();
     20 		var centerOK = false;
     21 		
     22 		
     23 		var displayNWordLines = function (nb) {
     24 			
     25 			for(var i=numWord; i<numWord+nb; i++){
     26 				$("#templates .wordLine")
     27 					.clone()
     28 					.changeId(i)
     29 					.addClass(i%2==0 ? "lightLine" : "")
     30 					.appendTo(".wordLinesTable tbody");
     31 				
     32 				(function (i) {
     33 					$("#word-"+i).focusout(checkWord);
     34 					wordsOK["word-"+i] = false;
     35 				})(i);
     36 			}
     37 
     38 			numWord += nb;
     39 			
     40 			displayRelations();
     41 		};
     42 		
     43 		var updateRelationLabels = function() {
     44 			$('#relations option').each(function(i,e) {
     45 				$(e).text(applyFormat($(e).data("format"), $('#centralWord').val().trim() || 'mot central', '…'));
     46 			});
     47 			
     48 			$('.relationLabel').each(function(i,e) {
     49 				$(e).text(applyFormat(
     50 					$(e).data("format"),
     51 					$('#centralWord').val().trim() || 'mot central',
     52 					$(e).closest('.wordLine').find('.word').val().trim() || '…'));
     53 			});
     54 		}
     55 		
     56 		var displayRelations = function() {
     57 			$(".r1").data("format", relations[$("#relation1").val()]);
     58 			$(".r2").data("format", relations[$("#relation2").val()]);
     59 			$(".r3").data("format", relations[0]);
     60 			$(".r4").data("format", relations[-1]);
     61 			updateRelationLabels();
     62 		}
     63 		
     64 		var applyFormat = function(str, mc, mn) {
     65 			return str.replace(/%mc/g, mc).replace(/%mn/g, mn);
     66 		};
     67 		
     68 		var displayCentralWordAndRelations = function() {
     69 			$("#centralWord").focusout(checkWord);
     70 			
     71 			$.each(relations, function(i, value) {
     72 				if(i != 0 && i != -1)
     73 					$('<option/>')
     74 						.val(i)
     75 						.data("format", value)
     76 						.appendTo("#relations select");
     77 			});
     78 			$("#relation1, #relation2").change(function() {
     79 				if ($("#relation1").val() == $("#relation2").val())
     80 					displayError("Les relations doivent être différentes");
     81 				else
     82 					displayError("");
     83 					
     84 				displayRelations();
     85 			});
     86 			$("select#relation1").val(5);
     87 			$("select#relation2").val(7);
     88 			displayRelations();
     89 		};
     90 		
     91 		var displayButtons = function () {
     92 			$("#button").html('<input type="button" id="addLine" name="addLine" value="Ajouter" />');
     93 			$("#addLine").click(function(){ displayNWordLines(1); });
     94 			
     95 			$("#button").append('<input type="submit" id="validate" name="validate" value="Valider" />');
     96 			$("form").submit(formOK);
     97 		};
     98 		
     99 		var checkWord = function () {
    100 			updateRelationLabels();
    101 			var input = $(this);
    102 			var word = input.val().trim();
    103 
    104 			input.closest(".wordLine, #center").removeClass("valid invalid");
    105 
    106 			if (word != "") {
    107 				$.getJSON("server.php",{action:4,word:word}, function(msg){
    108    					input.closest(".wordLine, #center").addClass(msg ? "valid" : "invalid");
    109    					wordsOK[input.attr("id")] = !(msg == false);
    110     			});
    111     		}
    112 		};
    113 		
    114 		var formOK = function() {
    115 			displayError("");
    116 		   	
    117 			if ($("#relation1").val() == $("#relation2").val())
    118 				displayError("Les deux relation doivent être différents");
    119 			else if ($("#centralWord").val().trim() == "")
    120 				displayError("Le mot central doit être renseigné.");
    121 			else if (badWord())
    122 				displayError("Il existe des mots incorrects");   			
    123 			else if (nbWordOK() < nbWordMin)
    124 				displayError("Le nuage doit contenir au moins "+nbWordMin+" mots valides.");
    125 			else if (!relationsOK())
    126 				displayError("Tout les mots ne sont pas liés à une relation");
    127 			else
    128 				sendGame();
    129    				
    130 			return false;
    131 		};
    132 		
    133 		var nbWordOK = function() {
    134 			var count = 0;
    135 		   	
    136    		for (word in wordsOK)
    137    			if (wordsOK[word] == true)
    138    				count++;
    139    			
    140    		return count;
    141 		};
    142 		
    143 		var badWord = function() {
    144 			for (word in wordsOK)
    145    			if ($("#"+word).val().trim() != "" && wordsOK[word] == false)
    146    				return true;
    147    			
    148    		return false;
    149 		}
    150    	
    151 		var relationsOK = function() {
    152 			for(i = 1; i < numWord; i++) {
    153 				if(wordsOK["word-"+i]) {
    154 					if(!$("#r1-"+i).is(":checked") && !$("#r2-"+i).is(":checked") && !$("#r3-"+i).is(":checked") && !$("#r4-"+i).is(":checked"))
    155 						return false;
    156 				}
    157 			}	
    158 						
    159 			return true;
    160 		}
    161    	
    162 		var sendGame = function() {
    163 			var exit;
    164 			var cloud = "";
    165 			
    166 			exit = {center:$("#centralWord").val().trim(),
    167 					  relations:[$("#relation1").val(),$("#relation2").val(),0,-1],
    168 					  cloud:[]};
    169 					  
    170 			for(i=1;i<numWord;i++) {
    171 				exit.cloud.push({
    172 					name:$("#word-"+i).val().trim(),
    173 					relations:[
    174 						$("#r1-"+i).is(":checked") ? "1":"0",
    175 						$("#r2-"+i).is(":checked") ? "1":"0",
    176 						$("#r3-"+i).is(":checked") ? "1":"0",
    177 						$("#r4-"+i).is(":checked") ? "1":"0"
    178 						]
    179 					});
    180 			}
    181 			
    182 			$.getJSON("server.php",{action:6,game:exit},function (data) {
    183 				//$(".word").closest(".wordLine, #center").removeClass("valid invalid");
    184 					if(data === true) {
    185 						displaySuccess("La partie à bien été enregistrée");
    186 						$('#newCreationLink').show();
    187 						$('#center').hide();
    188 						$('#relations').hide();
    189 						$('#wordLines').hide();
    190 						$('#button').hide();
    191 					}
    192 					else if (data === false) {
    193 						$('input').removeAttr('disabled');
    194 						displayError("Le nuage doit contenir au moins "+nbWordMin+" mots valides.");
    195 					}
    196 					else if (data.length) {
    197 						$('input').removeAttr('disabled');
    198 						
    199 						$.each(data,function(i,bad) {
    200 							$('.word')
    201 								.removeClass("invalid")
    202 								.addClass("valid")
    203 								.filter(function(i,w) { return $(w).val().trim() == bad; })
    204 								.closest(".wordLine, #center")
    205 								.removeClass("valid")
    206 								.addClass("invalid");
    207 						});
    208 					} else {
    209 						$('input').removeAttr('disabled');
    210 						displayError("Une erreur inconnue est survenue. 42.");
    211 					}
    212 			});
    213 			
    214 			$('input').attr('disabled', 'disabled');
    215 		}
    216 
    217 		var displayError = function(message) {
    218 			if (message != "")
    219 				$("#errorDiv").text(message).show();
    220 			else
    221 				$("#errorDiv").hide();
    222 		};
    223 		
    224 		var displaySuccess = function(message) {
    225 			if (message != "")
    226 				$("#successDiv").text(message).show();
    227 			else
    228 				$("#successDiv").hide();
    229 		};
    230 		
    231 		displayCentralWordAndRelations();	
    232 		displayNWordLines(nbWordMin+5);
    233 		displayButtons();
    234 	});
    235 });