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