www

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

commit 76d31ae5b0b627a9fd77f2708854064e4bdc0d9c
parent 08449d4296b0edcf40a9e721b2089ac55dd01bfa
Author: Bertrand BRUN <bertrand0brun@gmail.com>
Date:   Sun,  8 May 2011 22:08:54 +0200

Merge branch 'unstable' of https://github.com/jsmaniac/2011-m1s2-ter into unstable

Diffstat:
Dcode/serveur/php/jeu.html | 122-------------------------------------------------------------------------------
Acode/serveur/php/jeu.php | 121+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mcode/serveur/php/ressources/backend.inc | 3---
Dcode/serveur/php/ressources/black.css | 40----------------------------------------
Dcode/serveur/php/ressources/green.css | 40----------------------------------------
Mcode/serveur/php/ressources/menu.inc | 2+-
Mcode/serveur/php/ressources/my-extensions.js | 15+++++++++------
Mcode/serveur/php/ressources/pticlic.js | 297++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
Mcode/serveur/php/server.php | 14++++++++------
9 files changed, 344 insertions(+), 310 deletions(-)

diff --git a/code/serveur/php/jeu.html b/code/serveur/php/jeu.html @@ -1,122 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <title>PtiClic pre-alpha 0.2</title> - <meta charset="utf-8" /> - <meta name="viewport" content="target-densitydpi=device-dpi" /> - <style>.screen { display: none; }</style> - <link rel="stylesheet" href="ressources/green.css" title="green" /> - <link rel="alternate stylesheet" href="ressources/black.css" title="black" /> - <script src="ressources/jquery-1.5.1.min.js"></script> - <script src="ressources/jquery-ui-1.8.11.custom.min.js"></script> - <script src="ressources/jquery.ba-hashchange.min.js"></script> - <script src="ressources/jquery.JSON.js"></script> - <script src="ressources/my-extensions.js"></script> - <script src="ressources/pticlic.js"></script> - </head> - <body> - <div id="nojs">Chargement…</div> - <div class="screen" id="splash"> - <img src="ressources/img/splash.png" /> - </div> - <div class="screen" id="game"> - <div id="mc-caption-block"></div> - <div id="mn-caption-block"></div> - <div id="mc-caption" class="mc"></div> - <div id="mn-caption" class="mn"></div> - <div class="relations"></div> - </div> - <div class="screen" id="frontpage"> - <div id="title-block"></div> - - <span id="title">PtiClic</span> - <div class="frontpage-button game"> - <div><img class="icon" alt="" src="ressources/img/72/default.png" /></div> - <div class="text">Jouer</div> - </div> - <div class="frontpage-button prefs"> - <div><img class="icon" alt="" src="ressources/img/72/default.png" /></div> - <div class="text">Configuration</div> - </div> - <div class="frontpage-button connection"> - <div><img class="icon" alt="" src="ressources/img/72/default.png" /></div> - <div class="text">Connexion</div> - </div> - <div class="frontpage-button info"> - <div><img class="icon" alt="" src="ressources/img/72/default.png" /></div> - <div class="text">A Propos</div> - </div> - </div> - <div class="screen" id="score"> - <h1>Score total : <span class="scoreTotal"></span></h1> - <div class="scores"></div> - <input type="button" value="J'ai vu !" id="jaivu"/> - </div> - <div class="screen" id="connection"> - <form id="connect-form" action="#" method="GET"> - <label id="user-label" for="user">Login : </label> - <input type="text" name="user" id="user" /> - <label id="passwd-label" for="passwd">Mot de passe : </label> - <input type="password" name="passwd" id="passwd" /> - <input type="submit" name="connect" id="connect" value="Se connecter" /> - </form> - </div> - <div class="screen" id="info"> - <div class="container"> - <p> - PtiClic a été conçu et développé par Mathieu Lafourcade - (LIRMM - Université Montpellier 2) et Virginie Zampa - (LIDILEM - Université Stendhal Grenoble 3) - </p> - <p> - La présente version pour SmartPhone sous Android, en cours - de développement a été conçue et réalisée par des - étudiants en Master 1 à l'Université Montpellier II : - Yoann BONAVERO, Bertrand BRUN, John CHARRON et - Georges DUPÉRON. - </p> - <p> - Cette version du PtiClic est une version Alpha. Elle n'est - pas exempte de bogues. - </p> - <p> - Si vous souhaitez participer au projet en tant que - Bêta-testeur, rendez-vous sur le site - <a href="http://pticlic.fr/">http://pticlic.fr</a> - pour vous y inscrire. - </p> - <p> - Si vous souhaitez signaler des bogues ou nous faire part - de vos commentaires, vous pouvez nous contacter par - courriel à l'adresse suivante : <a href="mailto:pticlic.android.beta@gmail.com">pticlic.android.beta@gmail.com</a> - </p> - <p id="info-back-p"> - <input id="info-back" type="button" value="Retour" /> - </p> - </div> - </div> - <div class="screen" id="prefs"> - <form id="prefs-form" action="#" method="GET"> - <label id="theme-label" for="theme">Thème : </label> - <select name="theme" id="theme"> - <option value="green">Colline verdoyante</option> - <option value="black">Bas-fond de cachot</option> - </select> - <input type="submit" name="prefs-apply" id="prefs-apply" value="Appliquer" /> - <input type="reset" name="prefs-cancel" id="prefs-cancel" value="Annuler" /> - </form> - </div> - <div id="templates" style="display: none;"> - <div class="relationBox"> - <div class="relation"><img class="icon" alt="" src="ressources/img/72/default.png" /><span class="text"></span></div> - <div class="clearboth"></div> - </div> - <div class="scoreLine"> - <span class="word"></span> (<span class="score"></span>) - </div> - </div> - <div id="message" style="display: none;"> - </div> - </body> -</html> -<html> diff --git a/code/serveur/php/jeu.php b/code/serveur/php/jeu.php @@ -0,0 +1,121 @@ +<!DOCTYPE html> +<html> + <head> + <title>PtiClic pre-alpha 0.2</title> + <meta charset="utf-8" /> + <meta name="viewport" content="target-densitydpi=device-dpi" /> + <style>.screen { display: none; }</style> + <script src="ressources/jquery-1.5.1.min.js"></script> + <script src="ressources/jquery-ui-1.8.11.custom.min.js"></script> + <script src="ressources/jquery.ba-hashchange.min.js"></script> + <script src="ressources/jquery.JSON.js"></script> + <script src="ressources/my-extensions.js"></script> + <script src="ressources/pticlic.js"></script> + <script src="server.php?callback=prefs.loadPrefs&action=7"></script> + </head> + <body> + <div id="nojs">Chargement…</div> + <div class="screen" id="splash"> + <img src="ressources/img/splash.png" /> + </div> + <div class="screen" id="game"> + <div id="mc-caption-block"></div> + <div id="mn-caption-block"></div> + <div id="mc-caption" class="mc"></div> + <div id="mn-caption" class="mn"></div> + <div class="relations"></div> + </div> + <div class="screen" id="frontpage"> + <div id="title-block"></div> + + <span id="title">PtiClic</span> + <div class="frontpage-button game"> + <div><img class="icon" alt="" src="ressources/img/72/default.png" /></div> + <div class="text">Jouer</div> + </div> + <div class="frontpage-button prefs"> + <div><img class="icon" alt="" src="ressources/img/72/default.png" /></div> + <div class="text">Configuration</div> + </div> + <div class="frontpage-button connection"> + <div><img class="icon" alt="" src="ressources/img/72/default.png" /></div> + <div class="text">Connexion</div> + </div> + <div class="frontpage-button info"> + <div><img class="icon" alt="" src="ressources/img/72/default.png" /></div> + <div class="text">A Propos</div> + </div> + </div> + <div class="screen" id="score"> + <h1>Score total : <span class="scoreTotal"></span></h1> + <div class="scores"></div> + <input type="button" value="J'ai vu !" id="jaivu"/> + </div> + <div class="screen" id="connection"> + <form id="connect-form" action="#" method="GET"> + <label id="user-label" for="user">Login : </label> + <input type="text" name="user" id="user" /> + <label id="passwd-label" for="passwd">Mot de passe : </label> + <input type="password" name="passwd" id="passwd" /> + <input type="submit" name="connect" id="connect" value="Se connecter" /> + </form> + </div> + <div class="screen" id="info"> + <div class="container"> + <p> + PtiClic a été conçu et développé par Mathieu Lafourcade + (LIRMM - Université Montpellier 2) et Virginie Zampa + (LIDILEM - Université Stendhal Grenoble 3) + </p> + <p> + La présente version pour SmartPhone sous Android, en cours + de développement a été conçue et réalisée par des + étudiants en Master 1 à l'Université Montpellier II : + Yoann BONAVERO, Bertrand BRUN, John CHARRON et + Georges DUPÉRON. + </p> + <p> + Cette version du PtiClic est une version Alpha. Elle n'est + pas exempte de bogues. + </p> + <p> + Si vous souhaitez participer au projet en tant que + Bêta-testeur, rendez-vous sur le site + <a href="http://pticlic.fr/">http://pticlic.fr</a> + pour vous y inscrire. + </p> + <p> + Si vous souhaitez signaler des bogues ou nous faire part + de vos commentaires, vous pouvez nous contacter par + courriel à l'adresse suivante : <a href="mailto:pticlic.android.beta@gmail.com">pticlic.android.beta@gmail.com</a> + </p> + <p id="info-back-p"> + <input id="info-back" type="button" value="Retour" /> + </p> + </div> + </div> + <div class="screen" id="prefs"> + <form id="prefs-form" action="#" method="GET"> + <fieldset id="theme"> + <legend>Thème</legend> + <input type="radio" id="theme-green" name="theme" value="green" /><label for="theme-green">Colline verdoyante</label><br/> + <input type="radio" id="theme-black" name="theme" value="black" /><label for="theme-black">Bas-fond de cachot</label> + </fieldset> + <input type="submit" name="prefs-apply" id="prefs-apply" value="Appliquer" /> + <input type="reset" name="prefs-cancel" id="prefs-cancel" value="Annuler" /> + </form> + </div> + <div id="templates" style="display: none;"> + <div class="relationBox"> + <div class="relation"><img class="icon" alt="" src="ressources/img/72/default.png" /><span class="text"></span></div> + <div class="clearboth"></div> + </div> + <div class="scoreLine"> + <span class="word"></span> (<span class="score"></span>) + </div> + </div> + <div id="message" style="display: none;"> + </div> + </body> +</html> +<html> diff --git a/code/serveur/php/ressources/backend.inc b/code/serveur/php/ressources/backend.inc @@ -795,9 +795,6 @@ function userPrefs($user) { function setUserPref($user, $key, $value) { if (array_key_exists($key, userPrefsDefaults())) { setUserInfo($user, $key, $value); - echo 'true'; - } else { - echo 'false'; } } diff --git a/code/serveur/php/ressources/black.css b/code/serveur/php/ressources/black.css @@ -1,40 +0,0 @@ -/* Colors */ - -html, body { - background-color: black; - color: white; -} - -#nojs { - color: white; -} - -.screen { - background-color: black; -} - -#splash.screen { - background-color: black; -} - -#mc-caption { - color: white; -} - -#mn-caption { - color: white; -} - -#mn-caption-block { - border-color: #aaaaaa; - background-color: #222222; -} - -#message, .relationBox { - border-color: #cccccc; - background-color: #222222; -} - -.relations .hot { - background-color: #cccccc; -} diff --git a/code/serveur/php/ressources/green.css b/code/serveur/php/ressources/green.css @@ -1,40 +0,0 @@ -/* Colors */ - -html, body { - background-color: black; - color: black; -} - -#nojs { - color: white; -} - -.screen { - background-color: #FFFFE0; -} - -#splash.screen { - background-color: black; -} - -#mc-caption { - color: #8b4; -} - -#mn-caption { - color: #4a4; -} - -#mn-caption-block { - border-color: #44AA44; - background-color: #F0F8D0; -} - -#message, .relationBox { - border-color: #44AA44; - background-color: #F0F8D0; -} - -.relations .hot { - background-color: yellow; -} diff --git a/code/serveur/php/ressources/menu.inc b/code/serveur/php/ressources/menu.inc @@ -4,7 +4,7 @@ <span id="links"> <a href="index.php">Accueil</a> <a href="download.php">Téléchargement</a> - <a href="jeu.html">Jouer en ligne</a> + <a href="jeu.php">Jouer en ligne</a> <!-- <a href=".php">Créer des parties</a> --> <a href="contact.php">Contact</a> <?php diff --git a/code/serveur/php/ressources/my-extensions.js b/code/serveur/php/ressources/my-extensions.js @@ -45,19 +45,22 @@ $.fn.sumHeight = function() { } catch(e) {alert("Error sumHeight");alert(e);} } -$.fn.fitFont = function(w, h, minFont, maxFont, noContainer) { +$.fn.fitFont = function(w, h, minFont, maxFont, noContainer, oneline) { try { var oldpos = this.css("position"); - this.css({ - position: "absolute", - maxWidth: w - }); + this.css({position: "absolute"}); + + if (oneline) + this.css("white-space", "nowrap"); + else + this.css({maxWidth: w}); + if (noContainer) { var wrappers = this; } else { var wrappers = this.wrapInner("<span/>").children(); } - + var that = this; this.css("font-size", dichotomy(parseInt(this.css("font-size"), 10), function(x) { try { diff --git a/code/serveur/php/ressources/pticlic.js b/code/serveur/php/ressources/pticlic.js @@ -75,11 +75,11 @@ function jss() { borderStyle: 'solid', MozBorderRadius: 10, WebkitBorderRadius: 10, - padding: 10, textAlign: 'center' }) - .wh(w/2, h*0.1) .fitFont(w/2, h*0.1) + .css('max-width', w*0.6) + .width(w*0.6) .center({left: w/2, top:h*0.1}); $("#"+state.screen+".screen") @@ -108,9 +108,91 @@ function jss() { e.attr("src", "ressources/img/"+iconSize+"/"+e.data('image')+".png"); } catch(e) {alert("Error anonymous in jss");alert(e);} }); + + jssTheme(runstate.prefs.theme); } catch(e) {alert("Error jss");alert(e);} } +function jssTheme(theme) { + if (theme == "black") { + var bg1 = "black"; + var fg1 = "white"; + var bg2 = "#222222"; + var fg2 = "#cccccc"; + var fg3 = "white"; + var hot = "#aaaaaa"; + } else { + var bg1 = "#ffffe0"; + var fg1 = "black"; + var bg2 = "#f0f8d0"; + var fg2 = "#4a4"; + var fg3 = "#8b4"; + var hot = "yellow"; + } + var splashbg = "black"; + var splashfg = "white"; + var screenbg = bg1; + var screenfg = fg1; + var messagebg = bg2; + var messagefg = fg1; + var messagebd = fg2; + var centralfg = fg3; + var cloudbg = bg2; + var cloudfg = fg2; + var cloudbd = fg2; + var relationbg = bg2; + var relationbd = fg2; + var fphoverbg = bg2; + var fphoverbd = fg2; + var hotbg = hot; + + $('.screen').css({ + color: screenfg, + backgroundColor: screenbg + }); + + $('html, body, #splash.screen').css({ + backgroundColor: splashbg, + color: splashfg + }); + + $("#message").css({ + backgroundColor: messagebg, + color: messagefg, + borderColor: messagebd + }); + + $(".frontpage-button").hover(function() { + $(this).css({ + backgroundColor: fphoverbg, + outline: "medium solid "+fphoverbd + }); + }, function() { + $(this).css({ + outline: '', + backgroundColor: "transparent" + }); + }); + + $('#mc-caption').css({color: centralfg}); + + $('#mn-caption').css({color: cloudfg}); + + $('#mn-caption-block').css({ + borderColor: cloudbd, + backgroundColor: cloudbg + }); + + $('.relationBox').css({ + borderColor: relationbd, + backgroundColor: relationbg + }); + + $('.relations .hot').css({backgroundColor: hotbg}); + + $("a, a:visited").css({color: "#8888ff"}); +} + // ==== Interface Android function UI () { try { @@ -131,19 +213,8 @@ function UI () { }, info: function(title, msg) { try { - $('#message') - .qCss('opacity',0) - .qShow() - .queue(function(next){ - $('#message') - .text(msg); - jss(); - next(); - }) - .animate({opacity:0.9}, 700) - .delay(1000) - .animate({opacity:0}, 700); - } catch(e) {alert("Error UI().info");alert(e);} + alert(msg); + } catch(e) {alert("Error UI().info");alert(e);} }, setScreen: function() {} }; @@ -151,40 +222,64 @@ function UI () { } catch(e) {alert("Error UI");alert(e);} } +function UIInfo(title, msg) { + try { + $('#message') + .qCss('opacity',0) + .qShow() + .queue(function(next){ + try { + $('#message') + .text(msg); + jss(); + next(); + } catch(e) {alert("Error anonymous in UIInfo");alert(e);} + }) + .animate({opacity:0.9}, 700) + .delay(5000) + .animate({opacity:0}, 700); + } catch(e) {alert("Error UI().info");alert(e);} +} + // ==== Code métier général $(function() { try { - $(window).resize(jss); - $(window).hashchange(hashchange); - hashchange(); + $(window).resize(jss); + $(window).hashchange(hashchange); + hashchange(); + runstate.loaded = true; } catch(e) {alert("Error main function");alert(e);} }); // ==== Asynchronous Javascript And Json. ajaj = {}; ajaj.request = function(url, data, okFunction, smallErrorFunction, bigErrorFunction) { - smallErrorFunction = smallErrorFunction || ajaj.smallError; - bigErrorFunction = bigErrorFunction || ajaj.bigError; - var user = UI().getPreference("user"); - var passwd = UI().getPreference("passwd"); - if (user != '' && passwd != '') { - // TODO : on transfère le user/passwd à chaque fois ici… c'est pas très bon. - data = $.extend({user:user, passwd:passwd}, data); - } try { + smallErrorFunction = smallErrorFunction || ajaj.smallError; + bigErrorFunction = bigErrorFunction || ajaj.bigError; + var user = "" + UI().getPreference("user"); + var passwd = "" + UI().getPreference("passwd"); + if (user != '' && passwd != '') { + if (!data.user) data.user = user; + if (!data.passwd) data.passwd = passwd; + } + return $.getJSON(url, data, function(data) { + try { if (data && data.isError) { smallErrorFunction(data); } else { okFunction(data); } + } catch(e) {alert("Error anonymous in ajaj.request");alert(e);} }).error(bigErrorFunction); } catch(e) {alert("Error ajaj.request");alert(e);} } -ajaj.smallError = function(x) { +ajaj.smallError = function(x, ignoreConnect) { try { if (x.error == 10) { - state.set('screen', 'connection').commit().validate(); + if (!ignoreConnect) + state.set('screen', 'connection').commit().validate(); } else { ajaj.error( "Erreur fatale. Merci de nous envoyer ce message : \n" @@ -210,7 +305,6 @@ ajaj.error = function(msg) { try { UI().dismiss(); UI().info("Erreur !", msg); - UI().exit(); } catch(e) {alert("Error ajaj.error");alert(e);} } @@ -232,10 +326,9 @@ splash.jss = function(w,h,iconSize) { splash.enter = function() { try { // Si l'application est déjà chargée, on zappe directement jusqu'à la frontpage. - if (runstate.skipSplash) { + if (runstate.loaded) { splash.click.goFrontpage(); } else { - runstate.skipSplash = true; jss(); $('#splash.screen').clickOnce(splash.click.goFrontpage); } @@ -267,7 +360,8 @@ frontpage.jss = function(w, h, iconSize) { var hh = h - nbRows * iconSize; var titleHeight = hh*0.4; var labelHeight = hh*0.4 / nbRows; - var buttonHeight = labelHeight + iconSize; + var buttonPadding = hh*0.05/nbRows; + var buttonHeight = labelHeight + iconSize + buttonPadding; var buttonWidth = Math.max(w*0.25,iconSize); var freeSpace = h - titleHeight; $fp("#title-block") @@ -288,17 +382,20 @@ frontpage.jss = function(w, h, iconSize) { $fp(".info .icon").data('image', 'aide'); $fp(".frontpage-button") - .css('text-align', 'center') + .css({ + textAlign: 'center', + paddingTop: buttonPadding + }) .width(buttonWidth); $fp(".frontpage-button > div").css('display', 'block'); + var interIconSpace = (freeSpace - nbRows * buttonHeight) / (nbRows + 1); $fp(".frontpage-button").each(function(i,e){ try { e=$(e); var currentRow = Math.floor(i/2); var currentColumn = i % 2; - var interIconSpace = (freeSpace - nbRows * buttonHeight) / (nbRows + 1); var iconOffset = titleHeight + ((currentRow+1) * interIconSpace) + (currentRow * buttonHeight); if (currentColumn == 0) { e.northEast({left:w/2-ww*0.05,top:iconOffset}); @@ -621,6 +718,34 @@ score.click.jaivu = function() { } catch(e) {alert("Error score.click.jaivu");alert(e);} }; +// ==== Code métier pour la page d'info +info = {}; + +info.jss = function(w,h,iconSize) { + try { + $("#info-back-p").css('text-align', 'center'); + $("#info.screen .container input").css('font-size', 'inherit'); + $("#info.screen .container") + .fitFont(w*0.9, h*0.9, null, null, true) + .center($("#info.screen")); + } catch(e) {alert("Error info.jss");alert(e);} +} + +info.enter = function() { + try { + $("#info-back").clickOnce(info.click.goBack); + jss(); + UI().dismiss(); + } catch(e) {alert("Error info.enter");alert(e);} +}; + +info.click = {}; +info.click.goBack = function(){ + try { + state.set('screen', 'frontpage').validate(); + } catch(e) {alert("Error anonymous in info.enter");alert(e);} +}; + // ==== Code métier pour la connexion connection = {}; @@ -634,13 +759,11 @@ connection.jss = function(w, h, iconSize) { }; $c("input, label") - .css("white-space", "nowrap") - .css('position', 'absolute') - .fitFont(w*0.3, h*0.06); - $c("#user-label").east({left:w*0.45,top:h*0.25}); - $c("#user").west({left:w*0.55,top:h*0.25}); - $c("#passwd-label").east({left:w*0.45,top:h*0.5}); - $c("#passwd").west({left:w*0.55,top:h*0.5}); + .fitFont(w*0.45, h*0.06, null, null, true, true); + $c("#user-label").east({left:w*0.475,top:h*0.25}); + $c("#user").west({left:w*0.525,top:h*0.25}); + $c("#passwd-label").east({left:w*0.475,top:h*0.5}); + $c("#passwd").west({left:w*0.525,top:h*0.5}); $c("#connect").center({left:w/2,top:h*0.75}); } catch(e) {alert("Error connection.jss");alert(e);} }; @@ -658,7 +781,7 @@ connection.connect = function() { UI().setPreference("user", $("#user").val()); UI().setPreference("passwd", $("#passwd").val()); ajaj.request("server.php?callback=?", { - action: 3, + action: 7, user: $("#user").val(), passwd: $("#passwd").val(), }, connection.connectFetched, connection.connectFetched); @@ -668,43 +791,20 @@ connection.connect = function() { connection.connectFetched = function(data) { try { - if (data && data.loginOk) { - UI().info("Connexion", "Vous êtes connecté !"); + if (data && data.theme) { + prefs.loadPrefs(); + UIInfo("Connexion", "Vous êtes connecté !"); } else if (data && data.isError && data.error == 3) { - UI().info("Connexion", data.msg); + prefs.loadPrefs(); + UIInfo("Connexion", data.msg); } else { + prefs.loadPrefs(); ajaj.smallError(data); } state.set('screen', 'frontpage').validate(); } catch(e) {alert("Error connection.connectFetched");alert(e);} } -// ==== Code métier pour la page d'info -info = {}; - -info.jss = function(w,h,iconSize) { - $("#info-back-p").css('text-align', 'center'); - $("#info.screen .container input").css('font-size', 'inherit'); - $("#info.screen .container") - .fitFont(w*0.9, h*0.9, null, null, true) - .center($("#info.screen")); -} - -info.enter = function() { - try { - $("#info-back").clickOnce(info.click.goBack); - jss(); - UI().dismiss(); - } catch(e) {alert("Error info.enter");alert(e);} -}; - -info.click = {}; -info.click.goBack = function(){ - try { - state.set('screen', 'frontpage').validate(); - } catch(e) {alert("Error anonymous in info.enter");alert(e);} -}; - // ==== Code métier pour la page de configuration prefs = {}; @@ -717,14 +817,13 @@ prefs.jss = function(w,h,iconSize) { } catch(e) {alert("Error anonymous 1 in prefs.jss");alert(e);} }; - $("input, label, select") - .css("white-space", "nowrap") - .css('position', 'absolute') - .fitFont(w*0.3, h*0.06); - $p("#theme-label").east({left:w*0.45,top:h*0.25}); - $p("#theme").west({left:w*0.55,top:h*0.25}); - $p("#prefs-cancel").east({left:w*0.45,top:h*0.5}); - $p("#prefs-apply").west({left:w*0.55,top:h*0.5}); + $p("input, label") + .fitFont(w*0.45, h*0.06, null, null, true, true); + $p("legend") + .fitFont(w*0.3, h*0.05, null, null, true, true); + $p("#theme").center({left:w*0.5,top:h*0.25}); + $p("#prefs-cancel").east({left:w*0.475,top:h*0.5}); + $p("#prefs-apply").west({left:w*0.525,top:h*0.5}); } catch(e) {alert("Error prefs.jss");alert(e);} } @@ -732,6 +831,9 @@ prefs.enter = function() { try { $("#prefs-form").unbind('submit', prefs.apply).submit(prefs.apply); $("#prefs-cancel").clickOnce(prefs.cancel); + $("#prefs-form input:radio[name=theme]").attr('checked', function(i,val) { + return $(this).val() == runstate.prefs.theme; + }); jss(); UI().dismiss(); } catch(e) {alert("Error prefs.enter");alert(e);} @@ -739,32 +841,42 @@ prefs.enter = function() { prefs.apply = function(){ try { - var newtheme = $("#theme").val(); + var newtheme = $("#prefs-form input:radio[name=theme]:checked").val(); ajaj.request("server.php?callback=?", { action: 8, key: 'theme', value: newtheme }, function(data) { - if (data) - UI().info("Préférences", "Les préférences ont été enregistrées."); - else - UI().info("Préférences", "Les préférences n'ont pas pu être enregistrées."); - }); - $("link[@rel*=stylesheet][title]").each(function(i,e){ - // Il semblerait que pour qu'un "aleternate stylesheet" puisse être activé, il faut d'abord qu'il ait été désactivé… - e.disabled = true; - e.disabled = (e.getAttribute('title') != newtheme); + try { + if (data.theme) { + UIInfo("Préférences", "Les préférences ont été enregistrées."); + prefs.loadPrefs(data); + } else { + UIInfo("Préférences", "Les préférences n'ont pas pu être enregistrées."); + } + } catch(e) {alert("Error anonymous in prefs.apply");alert(e);} }); state.set('screen', 'frontpage').validate(); return false; } catch(e) {alert("Error anonymous in prefs.apply");alert(e);} }; -function switchStylestyle(styleName) { -} - prefs.cancel = function(){ try { state.set('screen', 'frontpage').validate(); } catch(e) {alert("Error anonymous in prefs.cancel");alert(e);} }; + +prefs.loadPrefs = function(data) { + try { + console.log('loadPrefs'); + if (data && data.theme) { + runstate.prefs = data; + } else { + runstate.prefs = { + theme: "green" + }; + } + if (runstate.loaded) jss(); + } catch(e) {alert("Error anonymous in prefs.loadPrefs");alert(e);} +}; +\ No newline at end of file diff --git a/code/serveur/php/server.php b/code/serveur/php/server.php @@ -65,10 +65,6 @@ function main() return; } - // Sinon tout est bon on effectue l'opération correspondant à la commande passée. - // TODO : en production, utiliser : header("Content-Type: application/json; charset=utf-8"); - header("Content-Type: text/plain; charset=utf-8"); - if ($action == 2) { // "Create partie" // Requête POST : http://serveur/server.php?action=2&nb=2&mode=normal&user=foo&passwd=bar if (!isset($_GET['nb']) || !isset($_GET['mode'])) { @@ -110,14 +106,19 @@ function main() if (!isset($_GET['key']) || !isset($_GET['value'])) throw new Exception("La requête est incomplète", 2); setUserPref($user, $_GET['key'], $_GET['value']); + userPrefs($user); } else { throw new Exception("Commande inconnue", 2); } } function server() { - if(isset($_GET['callback'])) + if(isset($_GET['callback'])) { echo $_GET['callback'].'('; + header("Content-Type: application/javascript; charset=utf-8"); + } else { + header("Content-Type: application/json; charset=utf-8"); + } ob_start(); try { main(); @@ -140,4 +141,4 @@ function server() { server(); -?> +?> +\ No newline at end of file