www

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

commit 0ab4833657abc05fafa1da94da80ee2a133d3101
parent 6ca087fbb3e831f167f85178924d40701b5a5a1f
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date:   Tue, 24 May 2011 17:37:09 +0200

Factorisation des appels AJAX.

Diffstat:
Mcode/serveur/php/jeu.html | 2+-
Mcode/serveur/php/ressources/pticlic.js | 129+++++++++++++++++++++++++++++++++++++++----------------------------------------
2 files changed, 64 insertions(+), 67 deletions(-)

diff --git a/code/serveur/php/jeu.html b/code/serveur/php/jeu.html @@ -161,7 +161,7 @@ <div class="formElement subFitFont" style="right: 52%; top: 50%; text-align:right;"><label id="passwd-label" for="passwd">Mot de passe : </label></div> <div class="formElement subFitFont" style="left: 52%; top: 50%; text-align:left;"><input type="password" name="passwd" id="passwd" class="setFont" /></div> <div class="formElement subFitFont" style="right: 52%; top: 75%; text-align:right;"> - <a class="button" href="#frontpage">Retour</a> + <a class="back button" href="#frontpage">Retour</a> </div> <div class="formElement subFitFont" style="left: 52%; top: 75%; text-align:left;"> <input class="button setFont" type="submit" value="Se connecter" /> diff --git a/code/serveur/php/ressources/pticlic.js b/code/serveur/php/ressources/pticlic.js @@ -3,7 +3,7 @@ function init(fn) { $(window).queue('init', function(next) {fn(); next();}); } -$.ajaj = function(url, data, callback) { +$.ajaj = function(url, data, dfd, retryCheck, callback) { var user = '' + UI().getPreference("user"); var passwd = '' + UI().getPreference("passwd"); user = runstate.user || user; @@ -12,7 +12,25 @@ $.ajaj = function(url, data, callback) { if (!data.user) data.user = user; if (!data.passwd) data.passwd = passwd; } - return $.getJSON(url, data, callback); + var fromScreen = state.screen; + if (callback) return $.getJSON(url, data, callback); + return $.getJSON(url, data, function(data) { + if (data.isError) { + dfd.reject(data); + message("Erreur", data.msg); + if ((data.error == 10 || data.error == 3) && state.screen == fromScreen && (!retryCheck || retryCheck())) { + $.screen('connection').trigger('goto'); + } else if (runstate.screen == fromScreen) { + $.screen('frontpage').trigger('goto'); + } + } else { + dfd.resolve(data); + } + }).fail(function(data) { + dfd.reject(data); + $("#frontpage").trigger('goto'); + message("Erreur", "Une erreur est survenue, veuillez nous en excuser."); + }); }; $(function() { @@ -176,9 +194,14 @@ init(function() { // ==== Écran d'accueil init(function() { - $.screen('frontpage').bind('enter', function() { window.document.title = "PtiClic pre-alpha 0.2"; }); + $.screen('frontpage').bind('enter', function() { + window.document.title = "PtiClic pre-alpha 0.2"; + if (runstate.pendingSetPrefs) runstate.pendingSetPrefs(); + }); if (UI().isAndroid()) $('#back2site').hide(); - $('#frontpage a.fpButton').$each(function(i,e) { e.find('img.icon').data('image', e.attr('href').substring(1)); }); + $('#frontpage a.fpButton').$each(function(i,e) { + e.find('img.icon').data('image', e.attr('href').substring(1)); + }); }); // ==== Écran connexion @@ -188,48 +211,31 @@ init(function() { runstate.passwd = $('#passwd').val(); UI().setPreference('user', runstate.user); UI().setPreference('passwd', runstate.passwd); - if (runstate.pendingSetPrefs) { - runstate.pendingSetPrefs(); - } else { + if (!runstate.pendingSetPrefs) { runstate.pendingGetPrefs(); } if (state.screen == 'game') { $('#game').trigger('goto'); } else if (state.screen == 'score') { $('#score').trigger('goto'); - } else if (location.hash == "#frontpage") { - $.screen('frontpage').trigger('goto'); + } else if (state.screen == "frontpage") { + $.screen('frontpage').trigger('goto'); // Ne devrait jamais être appellé. } else { location.hash = "#frontpage"; } return false; }); - $('#connection.screen').bind('leave', function() { - runstate.pendingSetPrefs = false; - runstate.pendingGetGame = false; + $('#connection.screen .back').click(function() { + if (runstate.pendingSetPrefs) + runstate.cancelPendingSetPrefs(); + if (state.screen == 'frontpage') $.screen('frontpage').trigger('goto'); }); }); // ==== Écran game runstate.gameCache = new Cache(function getGame(k, dfd) { - $.ajaj("getGame.php?callback=?", {pgid:k}, function(data) { - if (data.isError) { - dfd.reject(data); - message("Erreur", data.msg); - if ((data.error == 10 || data.error == 3) && state.screen == 'game' && state.pgid == k) { - $.screen('connection').trigger('goto'); - } else if (runstate.screen == 'game') { - $.screen('frontpage').trigger('goto'); - } - } else { - dfd.resolve(data); - } - }).fail(function(data) { - dfd.reject(data); - $("#frontpage").trigger('goto'); - message("Erreur", "Une erreur est survenue, veuillez nous en excuser."); - }); + $.ajaj("getGame.php?callback=?", {pgid:k}, dfd, function() { return state.pgid == k; }); }); init(function() { @@ -324,23 +330,7 @@ runstate.scoreCache = new Cache(function getScore(k, dfd, arg) { action: 1, pgid: k, answers: arg, - }, function(data) { - if (data.isError) { - dfd.reject(data); - message("Erreur", data.msg); - if ((data.error == 10 || data.error == 3) && state.screen == 'score' && state.pgid == k) { - $.screen('connection').trigger('goto'); - } else if (runstate.screen == 'score') { - $.screen('frontpage').trigger('goto'); - } - } else { - dfd.resolve(data); - } - }).fail(function(data) { - dfd.reject(data); - $("#frontpage").trigger('goto'); - message("Erreur", "Une erreur est survenue, veuillez nous en excuser."); - }); + }, dfd, function() { return state.pgid == k; }); }); init(function() { @@ -370,6 +360,7 @@ init(function() { // ==== Écran Préférences runstate.prefs = { theme: "green" }; +runstate.serverPrefs = $.extend({}, runstate.prefs); function loadPrefs(prefs) { var previousTheme = runstate.prefs ? runstate.prefs.theme : 'green'; @@ -381,33 +372,27 @@ function loadPrefs(prefs) { } function setPrefs(prefs, callback) { + var dfd = $.Deferred(); $.ajaj("server.php?callback=?", { action: 8, key: 'theme', value: prefs.theme - }, function(data) { - if ((data.error == 10 || data.error == 3) && (state.screen == 'frontpage' || state.screen == 'prefs')) { - $.screen('connection').trigger('goto'); - } else { - if (data.theme) { - runstate.pendingSetPrefs = false; - loadPrefs(data); - message("Préférences", "Les préférences ont été enregistrées."); - } else { - message("Erreur", data.msg); - message("Préférences", "Les préférences n'ont pas pu être enregistrées."); - } - } - }); + }, dfd); + return dfd; } runstate.pendingGetPrefs = function() { - $.ajaj("server.php?callback=?", { action: 7 }, function(data) { - if (data.theme) { message("Succès", "Vous êtes connecté.", data.msg); loadPrefs(data); } + $.ajaj("server.php?callback=?", { action: 7 }, null, null, function(data) { + if (data.theme) { runstate.connected = true; message("Succès", "Vous êtes connecté.", data.msg); loadPrefs(data); } if (data.isError) message("Erreur", data.msg); }); }; +runstate.cancelPendingSetPrefs = function() { + runstate.pendingSetPrefs = false; + message("Préférences", "Les préférences n'ont pas pu être enregistrées."); +}; + init(function() { $("#prefs").bind('enter', function() { $("#prefs-form input:radio[name=theme]").attr('checked', function(i,val) { @@ -425,14 +410,26 @@ init(function() { $("#prefs form").submit(function() { readPrefs(); - location.href = "#frontpage" var p = $.extend({}, runstate.prefs); - runstate.pendingSetPrefs = function() { setPrefs(p); } - runstate.pendingSetPrefs(); + runstate.pendingSetPrefs = function() { + setPrefs(p) + .fail(function(data) { + if (!data || (data.error != 10 && data.error != 3)) { + message("Erreur", data.msg); + runstate.cancelPendingSetPrefs(); + } + }) + .done(function(data) { + runstate.pendingSetPrefs = false; + loadPrefs(data); + message("Préférences", "Les préférences ont été enregistrées."); + }); + }; + location.href = "#frontpage"; return false; }); $("#prefs form").bind('reset', function() { - runstate.prefs = runstate.serverPrefs; + runstate.prefs = $.extend({}, runstate.serverPrefs); location.hash = "#frontpage"; }); $("#prefs form input:radio[name=theme]").bind('change click', readPrefs);