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 });