ADD copyright dans le pied de page + accès aux conditions d'utilisation
[euphorik.git] / js / euphorik.js
index b44f042..8dad020 100755 (executable)
@@ -31,7 +31,9 @@
 var conf = {\r
    nbMessageAffiche : 40, // (par page)
    pseudoDefaut : "<nick>",\r
 var conf = {\r
    nbMessageAffiche : 40, // (par page)
    pseudoDefaut : "<nick>",\r
-   tempsAffichageMessageDialogue : 4000, // en ms\r
+   tempsAffichageMessageDialogue : 4000, // en ms
+   tempsKick : 15, // en minute
+   tempsBan : 60 * 24 * 3, // en minutes (3jours)\r
    smiles : {   \r
       "smile" : [/:\)/g, /:-\)/g],  \r
       "bigsmile" : [/:D/g, /:-D/g],\r
    smiles : {   \r
       "smile" : [/:\)/g, /:-\)/g],  \r
       "bigsmile" : [/:D/g, /:-D/g],\r
@@ -90,7 +92,10 @@ function Util(formateur)
       $("#info").slideUp(50) 
    })
    
       $("#info").slideUp(50) 
    })
    
+   $("body").append('<div id="flecheBulle"></div>').append('<div id="messageBulle"><p></p></div>')
+   
    this.formateur = formateur
    this.formateur = formateur
+   this.bulleActive = true
 }
 
 var messageType = {informatif: 0, question: 1, erreur: 2}
 }
 
 var messageType = {informatif: 0, question: 1, erreur: 2}
@@ -134,6 +139,55 @@ Util.prototype.messageDialogue = function(message, type, boutons, formate)
    this.timeoutMessageDialogue = setTimeout(fermer, conf.tempsAffichageMessageDialogue)   
 }\r
 
    this.timeoutMessageDialogue = setTimeout(fermer, conf.tempsAffichageMessageDialogue)   
 }\r
 
+/**
+  * Affiche un info bulle lorsque le curseur survole l'élément donné.
+  * FIXME : le width de element ne tient pas compte du padding !?
+  */
+Util.prototype.infoBulle = function(message, element)
+{
+   var thisUtil = this
+
+   var cacherBulle = function()
+      {   
+         $("#flecheBulle").hide()
+         $("#messageBulle").hide()
+      }
+
+   element.hover(
+      function(e)
+      {
+         if (!thisUtil.bulleActive)
+            return
+         
+         var m = $("#messageBulle")
+         var f = $("#flecheBulle")
+         
+         $("p", m).html(message)
+      
+         var positionFleche = {
+            left : element.offset().left + element.width() / 2 - f.width() / 2,
+            top : element.offset().top - f.height()
+         }
+         var positionMessage = {
+            left : element.offset().left + element.width() / 2 - m.width() / 2,
+            top : element.offset().top - f.height() - m.height()
+         }
+         var depassementDroit = (positionMessage.left + m.width()) - $("body").width()
+         if (depassementDroit > 0)
+            positionMessage.left -= depassementDroit
+         else
+         {
+            if (positionMessage.left < 0)
+               positionMessage.left = 0
+         }
+         
+         m.css("top", positionMessage.top).css("left", positionMessage.left).show()
+         f.css("top", positionFleche.top).css("left", positionFleche.left).show()
+      },
+      cacherBulle
+   ).click(cacherBulle)
+}
+
 /**
   * Utilisé pour l'envoie de donnée avec la méthode ajax de jQuery.
   */
 /**
   * Utilisé pour l'envoie de donnée avec la méthode ajax de jQuery.
   */
@@ -247,10 +301,21 @@ function Pages()
    this.pages = {}
 }
 
    this.pages = {}
 }
 
+/**
+  * Accepte soit un objet soit un string.
+  * un string correspond au nom de la page, par exemple : "page" -> "page.html"
+  */
 Pages.prototype.ajouterPage = function(page)
 {
 Pages.prototype.ajouterPage = function(page)
 {
-   page.pages = this // la magie des langages dynamiques : le foutoire
-   this.pages[page.nom] = page
+   if (typeof page == "string")
+   {
+      this.pages[page] = page
+   }
+   else
+   {
+      page.pages = this // la magie des langages dynamiques : le foutoire
+      this.pages[page.nom] = page
+   }
 }
 
 Pages.prototype.afficherPage = function(nomPage, forcerChargement)
 }
 
 Pages.prototype.afficherPage = function(nomPage, forcerChargement)
@@ -267,7 +332,12 @@ Pages.prototype.afficherPage = function(nomPage, forcerChargement)
    $("#menu li." + nomPage).addClass("courante")
       
    this.pageCourante = page
    $("#menu li." + nomPage).addClass("courante")
       
    this.pageCourante = page
-   $("#page").html(this.pageCourante.contenu()).removeClass().addClass(this.pageCourante.nom)
+   var contenu = ""
+   if (typeof page == "string")
+      $.ajax({async: false, url: "pages/" + page + ".html", success : function(page) { contenu += page }})
+   else
+      contenu += this.pageCourante.contenu()
+   $("#page").html(contenu).removeClass().addClass(this.pageCourante.nom)
    
    if (this.pageCourante.charger)
       this.pageCourante.charger()
    
    if (this.pageCourante.charger)
       this.pageCourante.charger()
@@ -479,6 +549,8 @@ Client.prototype.resetDonneesPersonnelles = function()
    this.email = ""\r
    this.css = $("link#cssPrincipale").attr("href")
    this.nickFormat = "nick"
    this.email = ""\r
    this.css = $("link#cssPrincipale").attr("href")
    this.nickFormat = "nick"
+   this.viewTimes = true
+   this.viewTooltips = true
    this.cookie = undefined
    
    this.pagePrincipale = 1
    this.cookie = undefined
    
    this.pagePrincipale = 1
@@ -624,6 +696,8 @@ Client.prototype.getJSONProfile = function()
       "email" : this.email,
       "css" : this.css,
       "nick_format" : this.nickFormat,
       "email" : this.email,
       "css" : this.css,
       "nick_format" : this.nickFormat,
+      "view_times" : this.viewTimes,
+      "view_tooltips" : this.viewTooltips,
       "main_page" : this.pagePrincipale < 1 ? 1 : this.pagePrincipale,
       "conversations" : this.getJSONConversations()
    }
       "main_page" : this.pagePrincipale < 1 ? 1 : this.pagePrincipale,
       "conversations" : this.getJSONConversations()
    }
@@ -715,7 +789,7 @@ Client.prototype.enregistrement = function(login, password)
 
 Client.prototype.connexion = function(messageJson)
 {
 
 Client.prototype.connexion = function(messageJson)
 {
-   ;;; dumpObj(messageJson)
+   ;; dumpObj(messageJson)
    thisClient = this
    jQuery.ajax(
       {
    thisClient = this
    jQuery.ajax(
       {
@@ -727,7 +801,7 @@ Client.prototype.connexion = function(messageJson)
          success:
             function(data)
             {
          success:
             function(data)
             {
-               ;;; dumpObj(data)
+               ;; dumpObj(data)
                if (data["reply"] == "error")
                   thisClient.util.messageDialogue(data["error_message"])
                else
                if (data["reply"] == "error")
                   thisClient.util.messageDialogue(data["error_message"])
                else
@@ -765,12 +839,16 @@ Client.prototype.chargerDonnees = function(data)
       this.email = data["email"]\r
       this.setCss(data["css"])
       this.nickFormat = data["nick_format"]
       this.email = data["email"]\r
       this.setCss(data["css"])
       this.nickFormat = data["nick_format"]
+      this.viewTimes = data["view_times"]
+      this.viewTooltips = data["view_tooltips"]
       
       // la page de la conversation principale
       this.pagePrincipale = data["main_page"] == undefined ? 1 : data["main_page"]
       
       // les conversations
       this.conversations = data["conversations"]
       
       // la page de la conversation principale
       this.pagePrincipale = data["main_page"] == undefined ? 1 : data["main_page"]
       
       // les conversations
       this.conversations = data["conversations"]
+      
+      this.majBulle()
    }
 }
 
    }
 }
 
@@ -790,7 +868,7 @@ Client.prototype.flush = function(async)
    var thisClient = this
    var ok = true
    
    var thisClient = this
    var ok = true
    
-   ;;; dumpObj(this.getJSONProfile())
+   ;; dumpObj(this.getJSONProfile())
    jQuery.ajax(
       {
          async: async,
    jQuery.ajax(
       {
          async: async,
@@ -801,12 +879,16 @@ Client.prototype.flush = function(async)
          success:
             function(data)
             {
          success:
             function(data)
             {
-               ;;; dumpObj(data)
+               ;; dumpObj(data)
                if (data["reply"] == "error")
                {
                   thisClient.util.messageDialogue(data["error_message"])
                   ok = false
                }
                if (data["reply"] == "error")
                {
                   thisClient.util.messageDialogue(data["error_message"])
                   ok = false
                }
+               else
+               {
+                  thisClient.majBulle()
+               }
             }
       }
    )
             }
       }
    )
@@ -843,6 +925,14 @@ Client.prototype.majMenu = function()
    }
 }
 
    }
 }
 
+/**
+  * Met à jour l'affichage des infos bulles en fonction du profile.
+  */
+Client.prototype.majBulle = function()
+{
+   this.util.bulleActive = this.viewTooltips
+}
+
 Client.prototype.slap = function(userId, raison)
 {
    var thisClient = this
 Client.prototype.slap = function(userId, raison)
 {
    var thisClient = this
@@ -873,7 +963,7 @@ Client.prototype.ban = function(userId, raison, minutes)
 
    // par défaut un ban correspond à 3 jours
    if (typeof(minutes) == "undefined")
 
    // par défaut un ban correspond à 3 jours
    if (typeof(minutes) == "undefined")
-      minutes = 60 * 24 * 3
+      minutes = conf.tempsBan;
       
    jQuery.ajax({
       type: "POST",
       
    jQuery.ajax({
       type: "POST",
@@ -898,7 +988,7 @@ Client.prototype.ban = function(userId, raison, minutes)
 
 Client.prototype.kick = function(userId, raison)
 {
 
 Client.prototype.kick = function(userId, raison)
 {
-   this.ban(userId, raison, 15)
+   this.ban(userId, raison, conf.tempsKick)
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -956,7 +1046,7 @@ PageEvent.prototype.waitEvent = function(funSend, funReceive)
    for (v in poulpe)
       dataToSend[v] = poulpe[v]
    
    for (v in poulpe)
       dataToSend[v] = poulpe[v]
    
-   ;;; dumpObj(dataToSend)
+   ;; dumpObj(dataToSend)
    
    this.attenteCourante = jQuery.ajax({
       type: "POST",
    
    this.attenteCourante = jQuery.ajax({
       type: "POST",
@@ -966,7 +1056,7 @@ PageEvent.prototype.waitEvent = function(funSend, funReceive)
       success:
          function(data)
          {            
       success:
          function(data)
          {            
-            ;;; dumpObj(data)
+            ;; dumpObj(data)
             
             funReceive(data)
             
             
             funReceive(data)
             
@@ -1004,7 +1094,7 @@ function initialiserListeStyles(client)
 }
             
 // charge dynamiquement le script de debug
 }
             
 // charge dynamiquement le script de debug
-;;; jQuery.ajax({async : false, url : "js/debug.js", dataType : "script"})
+;; jQuery.ajax({async : false, url : "js/debug.js", dataType : "script"})
       \r
 // le main
 $(document).ready(
       \r
 // le main
 $(document).ready(
@@ -1040,12 +1130,17 @@ $(document).ready(
       })
       $("#menu .register").click(function(){ pages.afficherPage("register") })
       $("#menu .about").click(function(){ pages.afficherPage("about") })
       })
       $("#menu .register").click(function(){ pages.afficherPage("register") })
       $("#menu .about").click(function(){ pages.afficherPage("about") })
+      
+      // simplifier et pouvoir créer des liens par exemple : <span class="lien" href="conditions">Conditions d'utilisation</span>
+      $("#footer .conditions").click(function(){ pages.afficherPage("conditions_utilisation") })
 
       pages.ajouterPage(new PageMinichat(client, formateur, util))
       pages.ajouterPage(new PageAdmin(client, formateur, util))
       pages.ajouterPage(new PageProfile(client, formateur, util))
       pages.ajouterPage(new PageRegister(client, formateur, util))
       pages.ajouterPage(new PageAbout(client, formateur, util))
 
       pages.ajouterPage(new PageMinichat(client, formateur, util))
       pages.ajouterPage(new PageAdmin(client, formateur, util))
       pages.ajouterPage(new PageProfile(client, formateur, util))
       pages.ajouterPage(new PageRegister(client, formateur, util))
       pages.ajouterPage(new PageAbout(client, formateur, util))
+      pages.ajouterPage("conditions_utilisation")
+      
       pages.afficherPage("minichat")
    }
 )
       pages.afficherPage("minichat")
    }
 )