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
$("#info").slideUp(50)
})
+ $("body").append('<div id="flecheBulle"></div>').append('<div id="messageBulle"><p></p></div>')
+
this.formateur = formateur
+ this.bulleActive = true
}
var messageType = {informatif: 0, question: 1, erreur: 2}
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.
*/
this.setCaretToPos(input, selectionStart + replaceString.length)\r
}\r
else if (document.selection)
- {\r
- var range = document.selection.createRange();\r
+ {
+ input.focus()\r
+ var range = document.selection.createRange()\r
if (range.parentElement() == input)
{\r
var isCollapsed = range.text == ''\r
range.text = replaceString\r
if (!isCollapsed)
- {
- // there has been a selection\r
- // it appears range.select() should select the newly \r
- // inserted text but that fails with IE\r
+ {\r
range.moveStart('character', -replaceString.length);\r
- range.select();\r
}\r
}\r
}\r
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)
{
- 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)
$("#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()
this.email = ""\r
this.css = $("link#cssPrincipale").attr("href")
this.nickFormat = "nick"
+ this.viewTimes = true
+ this.viewTooltips = true
this.cookie = undefined
this.pagePrincipale = 1
"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()
}
document.cookie = "cookie=; max-age=0"\r
}
-Client.prototype.setCookie = function(cookie)
+Client.prototype.setCookie = function()
{
- if (this.cookie == null)
+ if (this.cookie == null || this.cookie == undefined)
return
- document.cookie =
- "cookie="+this.cookie+
- "; max-age=" + (60 * 60 * 24 * 365)
+ // ne fonctionne pas sous IE....
+ /*document.cookie = "cookie=" + this.cookie + "; max-age=" + (60 * 60 * 24 * 365) */
+
+ document.cookie =
+ "cookie="+this.cookie+"; expires=" + new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 365).toUTCString()
}
Client.prototype.authentifie = function()
Client.prototype.connexion = function(messageJson)
{
- ;;; dumpObj(messageJson)
+ ;; dumpObj(messageJson)
thisClient = this
jQuery.ajax(
{
success:
function(data)
{
- ;;; dumpObj(data)
+ ;; dumpObj(data)
if (data["reply"] == "error")
thisClient.util.messageDialogue(data["error_message"])
else
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"]
+
+ this.majBulle()
}
}
var thisClient = this
var ok = true
- ;;; dumpObj(this.getJSONProfile())
+ ;; dumpObj(this.getJSONProfile())
jQuery.ajax(
{
async: async,
success:
function(data)
{
- ;;; dumpObj(data)
+ ;; dumpObj(data)
if (data["reply"] == "error")
{
thisClient.util.messageDialogue(data["error_message"])
ok = false
}
+ else
+ {
+ thisClient.majBulle()
+ }
}
}
)
}
}
+/**
+ * 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
// par défaut un ban correspond à 3 jours
if (typeof(minutes) == "undefined")
- minutes = 60 * 24 * 3
+ minutes = conf.tempsBan;
jQuery.ajax({
type: "POST",
Client.prototype.kick = function(userId, raison)
{
- this.ban(userId, raison, 15)
+ this.ban(userId, raison, conf.tempsKick)
}
///////////////////////////////////////////////////////////////////////////////////////////////////
for (v in poulpe)
dataToSend[v] = poulpe[v]
- ;;; dumpObj(dataToSend)
+ ;; dumpObj(dataToSend)
this.attenteCourante = jQuery.ajax({
type: "POST",
success:
function(data)
{
- ;;; dumpObj(data)
+ ;; dumpObj(data)
funReceive(data)
}
// 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(
})
$("#menu .register").click(function(){ pages.afficherPage("register") })
$("#menu .about").click(function(){ pages.afficherPage("about") })
+
+ // TODO : 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("conditions_utilisation")
+
pages.afficherPage("minichat")
}
)