X-Git-Url: http://git.euphorik.ch/index.cgi?a=blobdiff_plain;ds=sidebyside;f=js%2Feuphorik.js;h=1d6f3e87eb1e46fa3b71cd4242136780add13e4f;hb=7e471788d9356b1cb8659513674df9a883101807;hp=8487f776b7a483a387839202d146d193ce2c9a63;hpb=0531ee46484ef22f402191cc4dc84ca07f155fe4;p=euphorik.git
diff --git a/js/euphorik.js b/js/euphorik.js
index 8487f77..1d6f3e8 100755
--- a/js/euphorik.js
+++ b/js/euphorik.js
@@ -1,876 +1,173 @@
-// coding: utf-8
-
-/**
- * Contient la base javascript pour le site euphorik.ch.
+// coding: utf-8
+// Copyright 2008 Grégory Burri
+//
+// This file is part of Euphorik.
+//
+// Euphorik is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Euphorik is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Euphorik. If not, see .
+
+/**
+ * Contient la base javascript pour le site euphorik.ch.
* Chaque page possède son propre fichier js nommé "page.js".
* Auteur : GBurri
* Date : 6.11.2007
*/
+// tout euphorik est contenu dans cet objet
+var euphorik = {}
+// ;; euphorik.include =
+ //;; euphorik.include = function(f) { var s = document.createElement('script'); s.type = 'text/javascript'; s.src = "js/" + f + ".js"; document.getElementsByTagName('head')[0].appendChild(s); }
+
+
+// version jQuery : function(f) { jQuery.ajax({async : false, url : "js/" + f + ".js", dataType : "script"}) }
+// mais comme il n'est pas encore chargé...
+;; euphorik.include = function(f) {
+;; var req, url = 'js/' + f + '.js'
+;; if (window.XMLHttpRequest) {
+;; req = new XMLHttpRequest(); req.open("GET", url, false); req.send(null);
+;; } else if (window.ActiveXObject) {
+;; req = new ActiveXObject((navigator.userAgent.toLowerCase().indexOf('msie 5') != -1) ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP");
+;; if (req) { req.open("GET", url, false); req.send(); }
+;; }
+;; if (req!==false) { if (req.status==200) { window.eval(req.responseText); } else if (req.status==404) { alert("erreur de chargement (404) de : " + url) } }
+;; };
+
+;; euphorik.include("jquery");
+;; euphorik.include("jquery.lightbox");
+;; euphorik.include("md5");
+;; euphorik.include("json2");
+
+;; euphorik.include("conf");
+;; euphorik.include("util");
+;; euphorik.include("formateur");
+;; euphorik.include("pages");
+;; euphorik.include("client");
+;; euphorik.include("pageEvent");
+
+;; euphorik.include("pageMinichat/pageMinichat");
+;; euphorik.include("pageMinichat/conversation");
+;; euphorik.include("pageMinichat/conversations");
+;; euphorik.include("pageMinichat/message");
+;; euphorik.include("pageAdmin");
+;; euphorik.include("pageProfile");
+;; euphorik.include("pageRegister");
+;; euphorik.include("pageAbout");
+
+// tout un tas d'améliorations de JavaScript ;)
/**
- * La configuration.
- * Normalement 'const' à la place de 'var' mais non supporté par IE7.
- */
-var conf = {
- nbMessageAffiche : 10, // (par page)
- pseudoDefaut : "",
- tempsAffichageMessageDialogue : 4000, // en ms
- smiles : {
- "smile" : [/:\)/g, /:-\)/g],
- "bigsmile" : [/:D/g, /:-D/g],
- "clin" : [/;\)/g, /;-\)/g],
- "cool" : [/8\)/g, /8-\)/g],
- "eheheh" : [/:P/g, /:-P/g],
- "oh" : [/:o/g, /:O/g],
- "pascontent" : [/>\(/g, />\(/g],
- "sniff" : [/:\(/g, /:-\(/g],
- "argn" : [/\[:argn\]/g],
- "bunny" : [/\[:lapin\]/g],
- "chat" : [/\[:chat\]/g],
- "renne" : [/\[:renne\]/g],
- "lol" : [/\[:lol\]/g],
- "spliff" : [/\[:spliff\]/g],
- "star" : [/\[:star\]/g],
- "triste" : [/\[:triste\]/g],
- "kirby" : [/\[:kirby\]/g]
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-String.prototype.trim = function()
-{
- return this.replace(/^\s+|\s+$/g, "");
-}
-
-String.prototype.ltrim = function()
-{
- return this.replace(/^\s+/, "");
-}
-
-String.prototype.rtrim = function()
-{
- return this.replace(/\s+$/, "");
-}
-
-String.prototype.dump = function()
-{
- if (typeof dump != "undefined")
- {
- dump("\n--- EUPHORIK.CH ---\n")
- dump(this)
- dump("\n------\n")
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-/**
- * Cette classe regroupe des fonctions utilitaires (helpers).
- */
-function Util()
-{
- if(typeof XMLSerializer != "undefined")
- this.serializer = new XMLSerializer()
-
- jQuery("#info .fermer").click(function(){
- jQuery("#info").slideUp(50)
- })
-}
-
-/**
- * Affiche une boite de dialogue avec un message à l'intérieur.
- * @param message le message (string)
- * @param type voir 'messageType'. par défaut messageType.informatif
- * @param les boutons sous la forme d'un objet ou les clefs sont les labels des boutons
- * et les valeurs les fonctions executées lorsqu'un bouton est activé.
+ * Pour chaque propriété de l'objet execute f(p, v) ou p est le nom de la propriété et v sa valeur.
+ * Ne parcours pas les propriétés des prototypes.
+ * FIXME : Normalement : Object.prototype.each = function(f) mais non supporté par jquery
*/
-Util.prototype.messageDialogue = function(message, type, boutons)
-{
- if (type == undefined)
- type = messageType.informatif
-
- if (this.timeoutMessageDialogue != undefined)
- clearTimeout(this.timeoutMessageDialogue)
-
- var fermer = function(){jQuery("#info").slideUp(100)}
- fermer()
-
- jQuery("#info .message").html(message)
- switch(type)
- {
- case messageType.informatif : jQuery("#info #icone").attr("class", "information"); break
- case messageType.question : jQuery("#info #icone").attr("class", "interrogation"); break
- case messageType.erreur : jQuery("#info #icone").attr("class", "exclamation"); break
- }
- jQuery("#info .boutons").html("")
- for (var b in boutons)
- jQuery("#info .boutons").append("" + b + "
").find("div:last").click(boutons[b]).click(fermer)
-
- jQuery("#info").slideDown(200)
- this.timeoutMessageDialogue = setTimeout(fermer, conf.tempsAffichageMessageDialogue)
-}
-var messageType = {informatif: 0, question: 1, erreur: 2}
-
-/**
- * Transforme un document XML en string.
- */
-Util.prototype.serializeXML = function(documentXML)
-{
- if (this.serializer)
- return this.serializer.serializeToString(documentXML)
- else
- return documentXML.xml
-}
-
-Util.prototype.creerDocumentXMLAction = function()
-{
- if (document.implementation && document.implementation.createDocument)
- {
- // var doc = document.implementation.createDocument("", "action", null)
- var parser = new DOMParser();
- var doc = parser.parseFromString("\n", "text/xml")
- //alert(this.serializeXML(doc))
- return doc
- }
- else if (window.ActiveXObject)
- {
- var doc = new ActiveXObject("MSXML2.DOMDocument") //("Microsoft.XMLDOM")
- doc.appendChild(doc.createElement("action"));
- //doc.loadXML("")
- //alert(doc.documentElement)
- //doc.createElement("action")
- return doc
- }
-}
-
-Util.prototype.xmlVersAction = function(xml)
-{
- //return {action: this.to_utf8(this.serializeXML(xml /*, "UTF-8"*/))}
- return {action: this.serializeXML(xml)}
-}
-
-Util.prototype.md5 = function(chaine)
-{
- return hex_md5(chaine)
-}
-
-// pompé de http://www.faqts.com/knowledge_base/view.phtml/aid/13562/fid/130
-Util.prototype.setSelectionRange = function(input, selectionStart, selectionEnd)
-{
- if (input.setSelectionRange)
- {
- input.focus()
- input.setSelectionRange(selectionStart, selectionEnd)
- }
- else if (input.createTextRange)
- {
- var range = input.createTextRange()
- range.collapse(true)
- range.moveEnd('character', selectionEnd)
- range.moveStart('character', selectionStart)
- range.select()
- }
-}
+//Object.prototype.each = function(f) {
+var objectEach = function(o, f) {
+ for (var k in o) {
+ if (o.hasOwnProperty(k)) {
+ f(k, o[k]);
+ }
+ }
+};
-Util.prototype.setCaretToEnd = function(input)
-{
- this.setSelectionRange(input, input.value.length, input.value.length)
-}
-Util.prototype.setCaretToBegin = function(input)
-{
- this.setSelectionRange(input, 0, 0)
-}
-Util.prototype.setCaretToPos = function(input, pos)
-{
- this.setSelectionRange(input, pos, pos)
-}
-Util.prototype.selectString = function(input, string)
-{
- var match = new RegExp(string, "i").exec(input.value)
- if (match)
- {
- this.setSelectionRange (input, match.index, match.index + match[0].length)
- }
-}
-Util.prototype.replaceSelection = function(input, replaceString) {
- if (input.setSelectionRange)
- {
- var selectionStart = input.selectionStart
- var selectionEnd = input.selectionEnd
- input.value = input.value.substring(0, selectionStart) + replaceString + input.value.substring(selectionEnd)
-
- if (selectionStart != selectionEnd) // has there been a selection
- this.setSelectionRange(input, selectionStart, selectionStart + replaceString.length)
- else // set caret
- this.setCaretToPos(input, selectionStart + replaceString.length)
- }
- else if (document.selection)
- {
- var range = document.selection.createRange();
- if (range.parentElement() == input)
- {
- var isCollapsed = range.text == ''
- range.text = replaceString
- if (!isCollapsed)
- {
- // there has been a selection
- // it appears range.select() should select the newly
- // inserted text but that fails with IE
- range.moveStart('character', -replaceString.length);
- range.select();
- }
+var objectMemberCount = function(o) {
+ var nb = 0;
+ for (var k in o) {
+ if (o.hasOwnProperty(k)) {
+ nb += 1;
}
}
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
+ return nb;
+};
-function Pages()
-{
- this.pageCourante = null
- this.pages = {}
-}
-
-Pages.prototype.ajouterPage = function(page)
-{
- page.pages = this // la magie des langages dynamiques : le foutoire
- this.pages[page.nom] = page
-}
-
-Pages.prototype.afficherPage = function(nomPage, forcerChargement)
-{
- if (forcerChargement == undefined) forcerChargement = false
-
- var page = this.pages[nomPage]
- if (page == undefined || (!forcerChargement && page == this.pageCourante)) return
-
- if (this.pageCourante != null && this.pageCourante.decharger)
- this.pageCourante.decharger()
-
- jQuery("#menu div").removeClass("courante")
- jQuery("#menu div." + nomPage).addClass("courante")
-
- this.pageCourante = page
- jQuery("#page").html(this.pageCourante.contenu()).removeClass().addClass(this.pageCourante.nom)
-
- if (this.pageCourante.charger)
- this.pageCourante.charger()
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-function Formateur()
-{
- this.smiles = conf.smiles
- this.protocoles = "http|https|ed2k"
-
- this.regexUrl = new RegExp("(?:(?:" + this.protocoles + ")://|www\\.)[^ ]*", "gi")
- this.regexImg = new RegExp("^.*?\\.(gif|jpg|png|jpeg|bmp|tiff)$", "i")
- this.regexDomaine = new RegExp("^(?:(?:" + this.protocoles + ")://|www\\.).*?([^/.]+\\.[^/.]+)(?:$|/).*$", "i")
- this.regexTestProtocoleExiste = new RegExp("^(?:" + this.protocoles + ")://.*$", "i")
- this.regexNomProtocole = new RegExp("^(.*?)://")
-}
-
-/**
- * Formate un pseudo saise par l'utilisateur.
- * @param pseudo le pseudo brut
- * @return le pseudo filtré
- */
-Formateur.prototype.filtrerInputPseudo = function(pseudo)
-{
- return pseudo.replace(/{|}/g, "").trim()
-}
-
-Formateur.prototype.getSmilesHTML = function()
-{
- var XHTML = ""
- for (var sNom in this.smiles)
- {
- XHTML += ""
- }
- return XHTML
-}
-
-Formateur.prototype.traitementComplet = function(M, pseudo)
-{
- return this.traiterSmiles(this.traiterURL(this.remplacerBalisesHTML(M), pseudo))
-}
-
-/**
- * FIXME : Cette méthode est attrocement lourde !!
- */
-Formateur.prototype.traiterSmiles = function(M)
-{
- for (var sNom in this.smiles)
- {
- ss = this.smiles[sNom]
- for (var i = 0; i < ss.length; i++)
- M = M.replace(ss[i], "")
+Array.prototype.each = function(f) {
+ for (var i = 0; i < this.length; i++) {
+ f(i, this[i]);
}
- return M
-}
+};
-Formateur.prototype.remplacerBalisesHTML = function(M)
-{
- return M.replace(//g, ">")
-}
-
-Formateur.prototype.traiterURL = function(M, pseudo)
-{
- thisFormateur = this
-
- if (pseudo == undefined)
- pseudo = ""
-
- var traitementUrl = function(url)
- {
- // si ya pas de protocole on rajoute "http://"
- if (!thisFormateur.regexTestProtocoleExiste.test(url))
- url = "http://" + url
- var extension = thisFormateur.getShort(url)
- return "[" + extension[0] + "]"
+Array.prototype.map = function(f) {
+ for (var i = 0; i < this.length; i++) {
+ this[i] = f(this[i])
}
- return M.replace(this.regexUrl, traitementUrl)
-}
-
-/**
- * Renvoie une version courte de l'url.
- * par exemple : http://en.wikipedia.org/wiki/Yakov_Smirnoff devient wikipedia.org
- */
-Formateur.prototype.getShort = function(url)
-{
- var estUneImage = false
- var versionShort = null
- var rechercheImg = this.regexImg.exec(url)
- //alert(url)
- if (rechercheImg != null)
- {
- versionShort = rechercheImg[1].toLowerCase()
- if (versionShort == "jpeg") versionShort = "jpg" // jpeg -> jpg
- estUneImage = true
- }
- else
- {
- var rechercheDomaine = this.regexDomaine.exec(url)
- if (rechercheDomaine != null && rechercheDomaine.length >= 2)
- versionShort = rechercheDomaine[1]
- else
- {
- var nomProtocole = this.regexNomProtocole.exec(url)
- if (nomProtocole != null && nomProtocole.length >= 2)
- versionShort = nomProtocole[1]
- }
- }
-
- return [versionShort == null ? "url" : versionShort, estUneImage]
- }
-
-/**
- * Traite les pseudo et messages à être affiché dans le titre d'une image visualisé avec lightbox.
- */
-Formateur.prototype.traiterPourFenetreLightBox = function(M, urlCourante)
-{
- thisFormateur = this
- var traitementUrl = function(url)
- {
- return "[" + thisFormateur.getShort(url)[0] + (urlCourante == url ? ": image courante" : "") + "]"
- }
-
- return this.remplacerBalisesHTML(M).replace(this.regexUrl, traitementUrl)
-}
-
+};
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-var statutType = {enregistre: 0, identifie: 1, non_identifie: 2}
-
-function Client(util)
-{
- this.util = util
-
- this.cookie = null
- this.regexCookie = new RegExp("^cookie=([^;]*)")
-
- // Obsolète
- //this.captchaCrypt = null
-
- // données personnels
- this.resetDonneesPersonnelles()
-
- this.setStatut(statutType.non_identifie)
-
- // le dernier message d'erreur recut du serveur (par exemple une connexion foireuse : "login impossible")
- this.dernierMessageErreur = ""
+String.prototype.trim = function() {
+ return jQuery.trim(this) // anciennement : this.replace(/^\s+|\s+$/g, "");
}
-
-Client.prototype.resetDonneesPersonnelles = function()
-{
- this.pseudo = conf.pseudoDefaut
- this.login = ""
- this.password = ""
- this.email = ""
- this.css = jQuery("link#cssPrincipale").attr("href")
-
- this.pagePrincipale = 1
-
- // les conversations, une conversation est un objet possédant les attributs suivants :
- // - racine (entier)
- // - page (entier)
- this.conversations = new Array()
-}
-
-Client.prototype.setCss = function(css)
-{
- if (this.css == css)
- return
-
- this.css = css
- jQuery("link#cssPrincipale").attr("href", this.css)
- this.majMenu()
- if (this.identifie())
- this.flush()
+String.prototype.ltrim = function() {
+ return this.replace(/^\s+/, "");
}
-Client.prototype.pageSuivante = function(numConv)
-{
- if (numConv < 0)
- this.pagePrincipale += 1
- else
- this.conversations[numConv].page += 1
- this.flush(false)
+String.prototype.rtrim = function() {
+ return this.replace(/\s+$/, "");
}
-Client.prototype.pagePrecedente = function(numConv)
-{
- if (numConv < 0)
- this.pagePrincipale -= 1
- else
- this.conversations[numConv].page -= 1
- this.flush(false)
-}
/**
- * Ajoute une conversation à la vue de l'utilisateur.
- * Le profile de l'utilisateur est directement sauvegardé sur le serveur.
- * @param racines la racine de la conversation
- * @return true si la conversation a été créée sinon false (par exemple si la conv existe déjà )
+ * Voir : http://www.coolpage.com/developer/javascript/Correct%20OOP%20for%20Javascript.html
+ *
+ * Exemple :
+ *
+ * function Mammal(name) {
+ * this.name = name;
+ * }
+ *
+ * Cat.Inherits(Mammal);
+ * function Cat(name) {
+ * this.Super(Mammal, name);
+ * }
*/
-Client.prototype.ajouterConversation = function(racine)
-{
- // vérification s'il elle n'existe pas déjÃ
- for (var i = 0; i < this.conversations.length; i++)
- if (this.conversations[i].racine == racine)
- return false
-
- this.conversations.push({racine : racine, page : 1})
- this.flush(false)
- return true
-}
-
-Client.prototype.supprimerConversation = function(num)
-{
- if (num < 0 || num >= this.conversations.length) return
-
- // décalage TODO : supprimer le dernier élément
- for (var i = num; i < this.conversations.length - 1; i++)
- this.conversations[i] = this.conversations[i+1]
- this.conversations.pop()
-
- this.flush(false)
-}
-
-Client.prototype.getXMLlogin = function(login, password)
-{
- var XMLDocument = this.util.creerDocumentXMLAction()
- XMLDocument.documentElement.setAttribute("name", "login")
-
- var nodeLogin = XMLDocument.createElement("login")
- nodeLogin.appendChild(XMLDocument.createTextNode(login))
- XMLDocument.documentElement.appendChild(nodeLogin)
-
- var nodePassword = XMLDocument.createElement("password")
- nodePassword.appendChild(XMLDocument.createTextNode(password))
- XMLDocument.documentElement.appendChild(nodePassword)
-
- return XMLDocument
-}
-
-Client.prototype.getXMLloginCookie = function()
-{
- var XMLDocument = this.util.creerDocumentXMLAction()
- XMLDocument.documentElement.setAttribute("name", "login")
-
- var nodeCookie = XMLDocument.createElement("cookie")
- nodeCookie.appendChild(XMLDocument.createTextNode(this.cookie))
- XMLDocument.documentElement.appendChild(nodeCookie)
-
- return XMLDocument
-}
-
-/* Obsolète
-Client.prototype.getXMLloginCaptcha = function(captchaCrypt, captchaInput)
-{
- var XMLDocument = this.util.creerDocumentXMLAction()
- XMLDocument.documentElement.setAttribute("name", "loginCaptcha")
-
- var nodecaptchaCrypt = XMLDocument.createElement("captchaCrypt")
- nodecaptchaCrypt.appendChild(XMLDocument.createTextNode(captchaCrypt))
- XMLDocument.documentElement.appendChild(nodecaptchaCrypt)
-
- var nodecaptchaInput = XMLDocument.createElement("captchaInput")
- nodecaptchaInput.appendChild(XMLDocument.createTextNode(captchaInput))
- XMLDocument.documentElement.appendChild(nodecaptchaInput)
-
- return XMLDocument
-}*/
-
-/* Obsolète
-Client.prototype.getXMLgenerationCaptcha = function()
-{
- var XMLDocument = this.util.creerDocumentXMLAction()
- XMLDocument.documentElement.setAttribute("name", "generationCaptcha")
-
- return XMLDocument
-}*/
-
-Client.prototype.getXMLEnregistrement = function(login, password)
-{
- var XMLDocument = this.util.creerDocumentXMLAction()
- XMLDocument.documentElement.setAttribute("name", "register")
-
- var nodeLogin = XMLDocument.createElement("login")
- nodeLogin.appendChild(XMLDocument.createTextNode(login))
- XMLDocument.documentElement.appendChild(nodeLogin)
-
- var nodePassword = XMLDocument.createElement("password")
- nodePassword.appendChild(XMLDocument.createTextNode(password))
- XMLDocument.documentElement.appendChild(nodePassword)
-
- return XMLDocument
-}
-
-Client.prototype.getXMLProfile = function()
-{
- var XMLDocument = this.util.creerDocumentXMLAction()
- XMLDocument.documentElement.setAttribute("name", "profile")
-
- var nodeCookie = XMLDocument.createElement("cookie")
- nodeCookie.appendChild(XMLDocument.createTextNode(this.cookie))
- XMLDocument.documentElement.appendChild(nodeCookie)
-
- var nodeLogin = XMLDocument.createElement("login")
- nodeLogin.appendChild(XMLDocument.createTextNode(this.login))
- XMLDocument.documentElement.appendChild(nodeLogin)
-
- var nodePassword = XMLDocument.createElement("password")
- nodePassword.appendChild(XMLDocument.createTextNode(this.password))
- XMLDocument.documentElement.appendChild(nodePassword)
-
- var nodePseudo = XMLDocument.createElement("pseudo")
- nodePseudo.appendChild(XMLDocument.createTextNode(this.pseudo))
- XMLDocument.documentElement.appendChild(nodePseudo)
-
- var nodeEmail = XMLDocument.createElement("email")
- nodeEmail.appendChild(XMLDocument.createTextNode(this.email))
- XMLDocument.documentElement.appendChild(nodeEmail)
-
- var nodeCSS = XMLDocument.createElement("css")
- nodeCSS.appendChild(XMLDocument.createTextNode(this.css))
- XMLDocument.documentElement.appendChild(nodeCSS)
-
- var nodePagePrincipale = XMLDocument.createElement("pagePrincipale")
- nodePagePrincipale.appendChild(XMLDocument.createTextNode(this.pagePrincipale))
- XMLDocument.documentElement.appendChild(nodePagePrincipale)
-
- // mémorise les conversations affichées
- for (var i = 0; i < this.conversations.length; i++)
- {
- var nodeConv = XMLDocument.createElement("conversation")
- XMLDocument.documentElement.appendChild(nodeConv)
-
- var nodeRacine = XMLDocument.createElement("racine")
- nodeRacine.appendChild(XMLDocument.createTextNode(this.conversations[i].racine))
- nodeConv.appendChild(nodeRacine)
-
- var nodePage = XMLDocument.createElement("page")
- nodePage.appendChild(XMLDocument.createTextNode(this.conversations[i].page))
- nodeConv.appendChild(nodePage)
+/*Object.prototype.Super = function(parent) {
+ if(arguments.length > 1) {
+ parent.apply( this, Array.prototype.slice.call( arguments, 1 ) );
+ } else {
+ parent.call( this );
}
-
- return XMLDocument
-}
-
-/**
- * Renvoie null si pas définit.
- */
-Client.prototype.getCookie = function()
-{
- var cookie = this.regexCookie.exec(document.cookie)
- if (cookie == null) this.cookie = null
- else this.cookie = cookie[1]
-}
-
-Client.prototype.delCookie = function()
-{
- document.cookie = "cookie=; max-age=0"
-}
-
-Client.prototype.setCookie = function(cookie)
-{
- if (this.cookie == null)
- return
-
- document.cookie =
- "cookie="+this.cookie+
- "; max-age=" + (60 * 60 * 24 * 365)
-}
-
-Client.prototype.identifie = function()
-{
- return this.statut == statutType.enregistre || this.statut == statutType.identifie
-}
-
-Client.prototype.setStatut = function(statut)
-{
- if(typeof(statut) == "string")
- {
- statut =
- statut == "enregistre" ?
- statutType.enregistre : (statut == "identifie" ? statutType.identifie : statutType.non_identifie)
- }
-
- if (statut == this.statut) return
-
- this.statut = statut
- this.majMenu()
-}
-
-/**
- * Demande la génération d'un captcha au serveur et l'affiche.
- */
- /* Obsolète
-Client.prototype.afficherCaptcha = function(query)
-{
- var thisClient = this
-
- $.post("request", this.util.xmlVersAction(this.getXMLgenerationCaptcha()),
- function(data, textStatus)
- {
- var chemin = jQuery("chemin", data.documentElement).text()
- thisClient.captchaCrypt = jQuery("captchaCrypt", data.documentElement).text()
- jQuery(query).prepend(
- "Es-tu un bot ? " +
- "
"
- )
- }
- )
-}
-
-Client.prototype.cacherCaptcha = function()
-{
- jQuery("#captcha").remove()
-}*/
-
-/**
- * Effectue la connexion vers le serveur.
- * Cette fonction est bloquante tant que la connexion n'a pas été établie.
- * S'il existe un cookie en local on s'authentifie directement avec lui.
- * Si il n'est pas possible de s'authentifier alors on affiche un captcha anti-bot.
- */
-Client.prototype.connexionCookie = function()
-{
- this.getCookie()
- if (this.cookie == null) return false;
- return this.connexion(this.util.xmlVersAction(this.getXMLloginCookie()))
-}
-
-Client.prototype.connexionLogin = function(login, password)
-{
- return this.connexion(this.util.xmlVersAction(this.getXMLlogin(login, password)))
}
-
-/* Obsolète
-Client.prototype.connexionCaptcha = function()
-{
- return this.connexion(this.util.xmlVersAction(this.getXMLloginCaptcha(this.captchaCrypt, jQuery("#captcha input").val())))
+Function.prototype.Inherits = function(parent) {
+ this.prototype = new parent();
+ this.prototype.constructor = this;
}*/
-Client.prototype.enregistrement = function(login, password)
-{
- if (this.identifie())
- {
- this.login = login
- this.password = password
- if(this.flush())
- this.setStatut(statutType.enregistre)
- return true
- }
- else
- {
- if (login == undefined) login = ""
- if (password == undefined) password = ""
- return this.connexion(this.util.xmlVersAction(this.getXMLEnregistrement(login, password)))
- }
-}
-
-Client.prototype.connexion = function(action)
-{
- //action.action.dump()
- thisClient = this
- jQuery.ajax(
- {
- async: false,
- type: "POST",
- url: "request",
- dataType: "xml",
- data: action,
- success:
- function(data)
- {
- //thisClient.util.serializer.serializeToString(data).dump()
- thisClient.chargerDonnees(data)
- }
- }
- )
- return this.identifie()
-}
-
-Client.prototype.deconnexion = function()
-{
- this.setStatut(statutType.non_identifie) // deconnexion
- this.resetDonneesPersonnelles()
- this.delCookie ()
-}
-
-Client.prototype.chargerDonnees = function(data)
-{
- var thisClient = this
- this.setStatut(jQuery("statut", data.documentElement).text())
-
- if (this.identifie())
- {
- this.cookie = jQuery("cookie", data.documentElement).text()
- this.setCookie()
-
- this.login = jQuery("login", data.documentElement).text()
- this.pseudo = jQuery("pseudo", data.documentElement).text()
- this.email = jQuery("email", data.documentElement).text()
- this.css = jQuery("css", data.documentElement).text()
-
- // la page de la conversation principale
- var tmp = jQuery("pagePrincipale", data.documentElement)
- this.pagePrincipale = tmp.length < 1 ? 1 : tmp.text()
-
- // met à jour la css
- if (this.css != "")
- {
- jQuery("link#cssPrincipale").attr("href", this.css)
- this.majMenu()
- }
- // les conversations
- this.conversations = new Array()
- jQuery("conversation", data.documentElement).each(
- function(i)
- {
- thisClient.conversations.push( { racine : jQuery("racine", this).text(), page : jQuery("page", this).text() } )
- }
- )
- }
- this.dernierMessageErreur = jQuery("information", data.documentElement).text()
-}
-
-/**
- * Met à jour les données personne sur serveur.
- * @param async de manière asynchrone ? défaut = true
- */
-Client.prototype.flush = function(async)
-{
- if (async == undefined)
- async = true
-
- thisClient = this
- //thisClient.util.log(this.util.xmlVersAction(this.getXMLProfile()).action)
- jQuery.ajax(
- {
- async: async,
- type: "POST",
- url: "request",
- dataType: "xml",
- data: this.util.xmlVersAction(this.getXMLProfile()),
- success:
- function(data)
- {
- //thisClient.util.log(thisClient.util.serializer.serializeToString(data))
- }
- }
- )
- // TODO : retourner false si un problème est survenu lors de l'update du profile
- return true
-}
-
-Client.prototype.majMenu = function()
-{
- var displayType = this.css == "css/3/euphorik.css" ? "block" : "inline" //this.client
-
- // met à jour le menu
- if (this.statut == statutType.enregistre)
- {
- jQuery("#menu .profile").css("display", displayType).text("profile")
- jQuery("#menu .logout").css("display", displayType)
- jQuery("#menu .register").css("display", "none")
- }
- else if (this.statut == statutType.identifie)
- {
- jQuery("#menu .profile").css("display", "none")
- jQuery("#menu .logout").css("display", displayType)
- jQuery("#menu .register").css("display", displayType)
- }
- else
- {
- jQuery("#menu .profile").css("display", displayType).text("login")
- jQuery("#menu .logout").css("display", "none")
- jQuery("#menu .register").css("display", displayType)
- }
-}
///////////////////////////////////////////////////////////////////////////////////////////////////
-jQuery.noConflict()
-
-
+
// le main
-jQuery(document).ready(
+$(document).ready(
function()
- {
- /* FIXME : ce code pose problème sur konqueror, voir : http://www.kde-forum.org/thread.php?threadid=17993
- var p = new DOMParser();
- var doc = p.parseFromString("\n", "text/xml")
- var s = new XMLSerializer()
- alert(s.serializeToString(doc)) */
-
- var util = new Util()
- var client = new Client(util)
- var pages = new Pages()
- var formateur = new Formateur()
-
- // connexion vers le serveur (utilise un cookie qui traine)
+ {
+ var formateur = new euphorik.Formateur()
+ var util = new euphorik.Util(formateur)
+ var client = new euphorik.Client(util)
+ var pages = new euphorik.Pages()
+
+
+ // connexion vers le serveur (utilise un cookie qui traine)
client.connexionCookie()
- // les styles css
- for (var i = 1; i <= 3; i++)
- {
- jQuery("#css"+i).click(function(){
- client.setCss("css/" + jQuery(this).attr("id").charAt(3) + "/euphorik.css")
- })
- }
+ $("#menuCss").change(function(){ client.setCss("styles/" + $("option:selected", this).attr("value") + "/euphorik.css")})
+
+ // FIXME : ne fonctionne pas sous opera
+ // voir : http://dev.jquery.com/ticket/2892#preview
+ $(window).unload(function(){client.flush()})
- jQuery("#menu .minichat").click(function(){ pages.afficherPage("minichat") })
- jQuery("#menu .profile").click(function(){ pages.afficherPage("profile") })
- jQuery("#menu .logout").click(function(){
- util.messageDialogue("Ãtes-vous sur de vouloir vous délogger ?", messageType.question,
+ $("#menu .minichat").click(function(){ pages.afficherPage("minichat") })
+ $("#menu .admin").click(function(){ pages.afficherPage("admin") })
+ $("#menu .profile").click(function(){ pages.afficherPage("profile") })
+ $("#menu .logout").click(function(){
+ util.messageDialogue("Ãtes-vous sur de vouloir vous délogger ?", euphorik.Util.messageType.question,
{"Oui" : function()
{
client.deconnexion();
@@ -880,12 +177,19 @@ jQuery(document).ready(
}
)
})
- jQuery("#menu .register").click(function(){ pages.afficherPage("register") })
+ $("#menu .register").click(function(){ pages.afficherPage("register") })
+ $("#menu .about").click(function(){ pages.afficherPage("about") })
+
+ // TODO : simplifier et pouvoir créer des liens par exemple : Conditions d'utilisation
+ $("#footer .conditions").click(function(){ pages.afficherPage("conditions_utilisation") })
pages.ajouterPage(new PageMinichat(client, formateur, util))
- pages.ajouterPage(new PageProfile(client, formateur, util))
- pages.ajouterPage(new PageRegister(client, formateur, util))
+ pages.ajouterPage(new euphorik.PageAdmin(client, formateur, util))
+ pages.ajouterPage(new euphorik.PageProfile(client, formateur, util))
+ pages.ajouterPage(new euphorik.PageRegister(client, formateur, util))
+ pages.ajouterPage(new euphorik.PageAbout(client, formateur, util))
+ pages.ajouterPage("conditions_utilisation")
+
pages.afficherPage("minichat")
}
)
-