X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=js%2FpageMinichat.js;h=da534ed4026150e8557af91dafb4a79a6158a282;hp=a8afb975cdb47096d55dd49f3ad27d57244b8a5c;hb=55b0291a691e56465277811aac749e930509fea2;hpb=302c16cbbd999e97f7bac2b3eb70bf057f5bc709 diff --git a/js/pageMinichat.js b/js/pageMinichat.js index a8afb97..da534ed 100755 --- a/js/pageMinichat.js +++ b/js/pageMinichat.js @@ -35,19 +35,30 @@ function PageMinichat(client, formateur, util) PageMinichat.prototype.contenu = function() { // le fait que tout soit collé est fait exprès, permet d'éviter d'avoir des espaces supplémentaires entre les spans' - return '\ -
Troll de la semaine :
\ -
\ + var formulaireXHTML = '\

\ \ -\ +\ 0\ \ \ \

\ -
\ -
' +' + var trollXHTML = '
Troll de la semaine :
' + //var titreXHTML = '' + //var messagesXHTML = '' + var conversationXHTML = '
' + + if (this.client.chatOrder == "reverse") + return trollXHTML + formulaireXHTML + conversationXHTML + else + return trollXHTML + conversationXHTML + formulaireXHTML +} + +PageMinichat.prototype.classes = function() +{ + return this.client.chatOrder == "reverse" ? "orderReverse" : "orderChrono" } PageMinichat.prototype.charger = function() @@ -68,6 +79,7 @@ PageMinichat.prototype.charger = function() { this.util.outilsBan = $( '' + + '' + '

' + 'Ban de 3 jours' + 'Ban de 15min' + @@ -76,18 +88,25 @@ PageMinichat.prototype.charger = function() ) this.util.infoBulle("Slap", $("#slap", this.util.outilsBan)) - this.util.infoBulle("Kick (" + conf.tempsKick + "min)", $("#kick", this.util.outilsBan)) - this.util.infoBulle("Ban (" + conf.tempsBan / 24 / 60 + " jours)", $("#ban", this.util.outilsBan)) + this.util.infoBulle("Kick (" + euphorik.conf.tempsKick + "min)", $("#kick", this.util.outilsBan)) + this.util.infoBulle("Ban (" + euphorik.conf.tempsBan / 24 / 60 + " jours)", $("#ban", this.util.outilsBan)) this.util.infoBulle("La raison", $("input", this.util.outilsBan)) } this.util.infoBulle("Ouvrir la conversation liée au troll de la semaine", $("#trollCourant .troll")) - this.util.infoBulle("Cliquer sur les messages pour les enlevers de la liste", + this.util.infoBulle("Cliquer sur les messages pour les enlevers de la liste", $("form#posterMessage #repondA").hover( function() { thisPage.util.afficherBoite($(".messages", this), $(this), positionTypeX.centre, positionTypeY.bas) }, function() { $(".messages", this).hide() } - ) + ).click( + function(e) + { + if ($(e.target).is(".nb")) + thisPage.conversations.enleverMessagesRepond() + } + ), + euphorik.Util.positionBulleType.droite ) // @@ -98,7 +117,7 @@ PageMinichat.prototype.charger = function() { var opacityBase = $(this).css("opacity") $(this).click( - function(event) + function() { thisPage.util.replaceSelection($("form#posterMessage input.message")[0], thisPage.formateur.smiles[$(this).attr("class")][0].source.replace(/\\/g, "")) } @@ -154,7 +173,7 @@ PageMinichat.prototype.charger = function() function() { var input = $("input.pseudo")[0] - if (input.value == conf.pseudoDefaut) + if (input.value == euphorik.conf.pseudoDefaut) input.value = "" } ) @@ -174,7 +193,7 @@ PageMinichat.prototype.getJSONMessage = function(pseudo, message) repondA.push(parseInt(id)) // FIXME : une propriété ne peut pas être de type int ? return { - "header" : { "action" : "put_message", "version" : conf.versionProtocole }, + "header" : { "action" : "put_message", "version" : euphorik.conf.versionProtocole }, "cookie" : this.client.cookie, "nick" : pseudo, "content" : message, @@ -189,9 +208,9 @@ PageMinichat.prototype.envoyerMessage = function(pseudo, message) // (un pseudo vide est autorisé) pseudo = this.formateur.filtrerInputPseudo(pseudo) - if (pseudo == conf.nickDefaut) + if (pseudo == euphorik.conf.nickDefaut) { - this.util.messageDialogue("Le pseudo ne peut pas être " + conf.nickDefaut) + this.util.messageDialogue("Le pseudo ne peut pas être " + euphorik.conf.nickDefaut) return } @@ -243,7 +262,8 @@ PageMinichat.prototype.envoyerMessage = function(pseudo, message) if (mess != undefined) mess.clientARepondu = true } - $("#conversations div#" + thisPageMinichat.conversations.messagesRepond[messId].getId()).addClass("repondu") + // TODO : ca sert à qque chose ? + //$("#conversations div#" + thisPageMinichat.conversations.messagesRepond[messId].getId()).addClass("repondu") } $("form input.message").val("") @@ -302,6 +322,7 @@ function Message(client, formateur, element) this.systeme = element["system"] // est-ce un message 'système' ? this.setRepondA(element["answer_to"]) // un ensemble de reponse (voir Reponse) indexé par l'id du message de la reponses this.ekMaster = element["ek_master"] + this.degreeOstentatoire = element["ostentatious_master"] } /** @@ -354,21 +375,24 @@ Message.prototype.getConversation = function(messages) if (messages.messages[i].repondA.hasOwnProperty(this.id)) messagesEnEvidence[messages.messages[i].id] = 2 - var premierNiveau = true - var f = function(tabIds) + // parcours en + var f = function(tabIds, premierNiveau) { for(var id in tabIds) { + // si le message (id) a déjà été traité + if (messagesEnEvidence[id] != undefined && !premierNiveau) + continue + var message = messages.messagesParId[id] if (message != undefined) { messagesEnEvidence[id] = premierNiveau ? 3 : (message.auteurId == thisMessage.auteurId ? 1 : 0) - premierNiveau = false - f (message.repondA) + f (message.repondA, false) } } } - f(this.repondA) + f(this.repondA, true) return messagesEnEvidence } @@ -387,8 +411,8 @@ Message.prototype.XHTML = function(messagePair, pre) // construit l'identifiant de la personne var identifiant = this.client.nickFormat == "nick" || this.login == "" ? this.formateur.traitementComplet(this.pseudo) : - (this.client.nickFormat == "login" ? this.formateur.traitementComplet(message.login) : - this.formateur.traitementComplet(this.pseudo) + "(" + this.formateur.traitementComplet(message.login) +")" ) + (this.client.nickFormat == "login" ? this.formateur.traitementComplet(this.login) : + this.formateur.traitementComplet(this.pseudo) + "(" + this.formateur.traitementComplet(this.login) +")" ) var XHTMLrepondA = "" var debut = true @@ -406,7 +430,7 @@ Message.prototype.XHTML = function(messagePair, pre) (this.clientARepondu ? " repondu" : "") + (this.estUneReponse ? " reponse" : "") + (this.systeme ? " systeme" : "") + - (this.ekMaster ? " ekMaster" : "") + + (this.ekMaster ? " ekMaster" + this.degreeOstentatoire : "") + "\">" + "
" + "[" + this.date + "]" + @@ -442,34 +466,42 @@ function Conversation(conversations, num) this.messages = [] this.messagesParId = {} - this.nbMessageMax = conf.nbMessageAffiche // Le nombre de message affiché par page + this.nbMessageMax = euphorik.conf.nbMessageAffiche // Le nombre de message affiché par page - $("#conversations").append( - '
' + - '
' + - '
' + - '
' + - (num == 0 ? '' : '
') + - '<1>' + - '
' + + var messagesXHTML = '
' + var messageRacineXHTML = '
' + var reverse = this.client.chatOrder == "reverse" + + var XHTML = + '' + + (reverse ? messagesXHTML : "") + + '
' + + (reverse ? messageRacineXHTML : "") + + '' + + (reverse ? "" : messageRacineXHTML) + '
' + - '
' - ) + (reverse ? "" : messagesXHTML) + + '' + + $("#conversations tr").append(XHTML) - this.util.infoBulle("Aller à la première page", $("#conversations #" + this.getId() + " .numPage")) + this.util.infoBulle("Aller à la première page", $("#" + this.getId() + " .numPage"), euphorik.Util.positionBulleType.haut) if (num != 0) { - this.util.infoBulle("Créer un lien vers la conversation", $("#conversations #" + this.getId() + " .lien")) - this.util.infoBulle("Fermer la conversation", $("#conversations #" + this.getId() + " .fermer")) + this.util.infoBulle("Créer un lien vers la conversation", $("#" + this.getId() + " .lien")) + this.util.infoBulle("Fermer la conversation", $("#" + this.getId() + " .fermer")) } } + /** * @racine un message représentant la racine de la conversation, vaut undefined pour la conversation générale */ Conversation.prototype.setRacine = function(racineElement) { this.racine = new Message(this.client, this.formateur, racineElement) - this.majRacine() } /** @@ -480,9 +512,14 @@ Conversation.prototype.majRacine = function() { if (this.racine == undefined) return - + if (!(this.racine.id in this.messagesParId)) - $("#" + this.getId() + " .titre").prepend(this.racine.XHTML(true, this.getId())) + { + this.messagesParId[this.racine.id] = this.racine + var element = $(this.racine.XHTML(true, this.getId())) + this.attacherEventsSurMessage(element) + $("#" + this.getId() + " .titre .messageRacine").html(element) + } } Conversation.prototype.enleverMiseEnEvidence = function() @@ -511,7 +548,7 @@ Conversation.prototype.colorerEntetes = function() Conversation.prototype.decolorerEntetes = function() { - $("#" + this.getId() + " .message") + $("#" + this.getId() + " .messages .message") .removeClass("reponse") .removeClass("repondu") .removeClass("proprietaire") @@ -524,9 +561,9 @@ Conversation.prototype.decolorerEntetes = function() */ Conversation.prototype.setPage = function(pageCourante, dernierePage) { - $("#conversations #" + this.getId() + " .numPage").text(pageCourante) - $("#conversations #" + this.getId() + " .next").css("display", pageCourante == 1 ? "none" : "inline") - $("#conversations #" + this.getId() + " .prev").css("display", dernierePage ? "none" : "inline") + $("#" + this.getId() + " .numPage").text(pageCourante) + $("#" + this.getId() + " .next").css("display", pageCourante == 1 ? "none" : "inline") + $("#" + this.getId() + " .prev").css("display", dernierePage ? "none" : "inline") } /** @@ -536,7 +573,7 @@ Conversation.prototype.eventLien = function(fun) { var thisConversation = this - $("#conversations #" + this.getId() + " .titre .lien").click( + $("#" + this.getId() + " .titre .lien").click( function() { fun(thisConversation.num) @@ -551,7 +588,7 @@ Conversation.prototype.eventFermer = function(fun) { var thisConversation = this - $("#conversations #" + this.getId() + " .titre .fermer").click( + $("#" + this.getId() + " .titre .fermer").click( function() { fun(thisConversation.num) @@ -568,13 +605,13 @@ Conversation.prototype.setFunPage = function(funNext, funPrev, funReset) { var thisConversation = this - $("#conversations #" + this.getId() + " .next").click( + $("#" + this.getId() + " .next").click( function() { funNext(thisConversation.num) } ) - $("#conversations #" + this.getId() + " .prev").click( + $("#" + this.getId() + " .prev").click( function() { funPrev(thisConversation.num) } ) - $("#conversations #" + this.getId() + " .numPage").click( + $("#" + this.getId() + " .numPage").click( function() { funReset(thisConversation.num) } ) } @@ -603,7 +640,10 @@ Conversation.prototype.viderMessages = function() this.messages = [] this.messagesParId = {} this.idDernierMessageAffiche = 0 - $("#conversations #" + this.getId() + " .message").remove() + $("#" + this.getId() + " .messages .message").remove() + + // enlève également la racine + $("#" + this.getId() + " .titre .messageRacine").empty() } Conversation.prototype.idMessageFromString = function(idString) @@ -619,10 +659,11 @@ Conversation.prototype.idMessageFromString = function(idString) Conversation.prototype.flush = function() { var thisConversation = this + var reverse = this.client.chatOrder == "reverse" // est-ce que le prochain message est pair ? (permet d'alterner le style des messages) var messagePair = (this.idDernierMessageAffiche == 0 ? true : - ($("#" + this.getId() + " .messages div:first").attr("class").search("messagePair") == -1) + ($("#" + this.getId() + " .messages div:" + (reverse ? "first" : "last")).attr("class").search("messagePair") == -1) ) // construction de l'XHTML des messages @@ -633,17 +674,25 @@ Conversation.prototype.flush = function() XHTML += this.messages[i].XHTML(messagePair, this.getId()) messagePair = !messagePair } - + var DOM = $(XHTML) - + // pour chaque nouveau message au niveau du document on crée ses événements DOM.each(function() { thisConversation.attacherEventsSurMessage(this) }) - DOM.prependTo("#" + this.getId() + " .messages") + if (reverse) + DOM.prependTo("#" + this.getId() + " .messages") + else + DOM.appendTo("#" + this.getId() + " .messages") // enlève les messages exedentaires - var nbMessagesAffiche = $("#" + this.getId() + " .message").size() + var nbMessagesAffiche = $("#" + this.getId() + " .messages .message").size() if (nbMessagesAffiche > this.nbMessageMax) - $("#conversations #" + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).remove() + { + if (reverse) + $("#" + this.getId() + " .messages .message").slice(this.nbMessageMax, nbMessagesAffiche).remove() + else + $("#" + this.getId() + " .messages .message").slice(0, nbMessagesAffiche - this.nbMessageMax).remove() + } if (this.messages.length > 0) this.idDernierMessageAffiche = this.messages[this.messages.length-1].id @@ -657,8 +706,8 @@ Conversation.prototype.attacherEventsSurMessage = function(element) // l'id du message var idMess = this.idMessageFromString($(element).attr("id")) - this.util.infoBulle("Extraction de la conversation à partir de ce message", $(".extraire", this)) - this.util.infoBulle("Extraction de la conversation complète", $(".extraireCompletement", this)) + this.util.infoBulle("Extraction de la conversation à partir de ce message", $(".extraire", element)) + this.util.infoBulle("Extraction de la conversation complète", $(".extraireCompletement", element)) var thisConversation = this $(".lienConv", element).click( @@ -669,7 +718,7 @@ Conversation.prototype.attacherEventsSurMessage = function(element) thisConversation.conversations.ouvrirConversation(parseInt(idString.substring(1, racine.length - 1), 36)) return false } - ) + ) $(element).click( function(event) @@ -716,20 +765,21 @@ Conversation.prototype.attacherEventsSurMessage = function(element) if (thisConversation.client.viewTimes) $(".dateComplete", element).show() else - $(".dateComplete", idMess).hide() + $(".dateComplete", element).hide() - $("a[@rel*=lightbox]", idMess).lightBox() + $("a[@rel*=lightbox]", element).lightBox() // les outils de bannissement (uniquement pour les ekMaster) if (thisConversation.client.ekMaster) - $(".pseudo", idMess).hover( + $(".pseudo", element).hover( function(e) { var userId = parseInt($(".id", this).text()) - var element = $(this) - var h = element.height() - var offset = element.offset() - thisConversation.util.outilsBan.css("top", offset.top - 2).css("left", offset.left - 2).height(h < 16 ? 16 : h).width(element.width() + 16 * 3 + 4 + 64).prependTo(this).show() + var pseudo = $(this) + var h = pseudo.outerHeight() + var offset = pseudo.offset() + // TODO : calculer automatiquement la largeur plutôt que d'inscrire des valeurs en brut' + thisConversation.util.outilsBan.css("top", offset.top - 2).css("left", offset.left - 2).height(h < 16 ? 16 : h).width(pseudo.outerWidth() + 16 * 3 + 12 + 64).prependTo(this).show() $("img", thisConversation.util.outilsBan).unbind("click") $("#slap", thisConversation.util.outilsBan).click( function() @@ -778,7 +828,7 @@ Conversation.prototype.afficherConversation = function(id) var mess = message.getConversation(this) // FIXME : cet appel est très lent - $("#conversations #" + this.getId() + " .message").each( + $("#" + this.getId() + " .messages .message").each( function() { var jq = $(this) @@ -812,7 +862,7 @@ Conversation.prototype.afficherConversation = function(id) */ Conversation.prototype.supprimer = function() { - $("#conversations #" + this.getId()).remove() + $("#" + this.getId()).remove() } /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -868,7 +918,7 @@ Conversations.prototype.enleverMessagesRepond = function() // on réinitialise pour être sur que tout est bien enlevé this.messagesRepond = {} - $("#conversations div.message").removeClass("repondEnEvidence") + $("#conversations .message").removeClass("repondEnEvidence") $("form#posterMessage #repondA .messages").empty() } @@ -969,7 +1019,7 @@ Conversations.prototype.afficherMessagesRepondConversations = function() Conversations.prototype.getJSONrafraichirMessages = function() { var mess = { - "message_count" : conf.nbMessageAffiche, + "message_count" : euphorik.conf.nbMessageAffiche, "main_page" : this.client.pagePrincipale, "conversations" : this.getJSONConversations(), "troll_id" : this.trollIdCourant @@ -1127,11 +1177,13 @@ Conversations.prototype.supprimerConversation = function(num) */ Conversations.prototype.ajusterLargeurConversations = function() { + // TODO : trouver mieux ! var largeurPourcent = (100 / this.conversations.length) + // obsolète !? // le "- 0.01" evite que IE se chie dessus lamentablement et affiche les conversations les unes au dessus des autres - if($.browser["msie"]) - largeurPourcent -= 0.05 - $("#conversations .conversation").css("width", largeurPourcent + "%") + //if($.browser["msie"]) + // largeurPourcent -= 0.05 + $("#conversations td").css("width", largeurPourcent + "%") } /**