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 '\
-<div id="trollCourant">Troll de la semaine : <span class="troll"></span></div>\
-<form method="post" action="" id ="posterMessage">\
+ var formulaireXHTML = '<form method="post" action="" id ="posterMessage">\
<p>\
<input class="captcha" name="captcha" type="text" size="8" maxlength="8"></input>\
-<input class="pseudo" name="pseudo" type="text" maxlength="50" value="' + encodeURI(conf.nickDefaut) + '"></input>\
+<input class="pseudo" name="pseudo" type="text" maxlength="50" value="' + encodeURI(euphorik.conf.nickDefaut) + '"></input>\
<span id="repondA"><span class="nb">0</span><span class="messages"></span></span>\
<input class="message" name="message" type="text" maxlength="500" value=""></input>\
<button class="smiles"></button>\
<button class="return"></button>\
</p>\
-</form>\
-<div id="conversations"></div>'
+</form>'
+ var trollXHTML = '<div id="trollCourant">Troll de la semaine : <span class="troll"></span></div>'
+ //var titreXHTML = '<tr id="titres"></tr>'
+ //var messagesXHTML = '<tr id="messages"></tr>'
+ var conversationXHTML = '<table id="conversations"><tr></tr></table>'
+
+ 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()
{
this.util.outilsBan = $(
'<span id="outilsBan">' +
+ '<span class="spacer"></span>' +
'<form action=""><p><input id="raison" name="raison" type="text" size="10" maxlength="200"></input></p></form>' +
'<img id="ban" src="img/ban.gif" alt="Ban de 3 jours" />' +
'<img id="kick" src="img/kick.gif" alt="Ban de 15min" />' +
)
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
)
// <smiles>
{
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, ""))
}
function()
{
var input = $("input.pseudo")[0]
- if (input.value == conf.pseudoDefaut)
+ if (input.value == euphorik.conf.pseudoDefaut)
input.value = ""
}
)
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,
// (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
}
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("")
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"]
}
/**
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
}
// 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) + "<span class=\"login\">(" + this.formateur.traitementComplet(message.login) +")</span>" )
+ (this.client.nickFormat == "login" ? this.formateur.traitementComplet(this.login) :
+ this.formateur.traitementComplet(this.pseudo) + "<span class=\"login\">(" + this.formateur.traitementComplet(this.login) +")</span>" )
var XHTMLrepondA = ""
var debut = true
(this.clientARepondu ? " repondu" : "") +
(this.estUneReponse ? " reponse" : "") +
(this.systeme ? " systeme" : "") +
- (this.ekMaster ? " ekMaster" : "") +
+ (this.ekMaster ? " ekMaster" + this.degreeOstentatoire : "") +
"\">" +
"<div class=\"outilsMess\"><div class=\"extraire\"></div><div class=\"extraireCompletement\"></div></div><span class=\"entete\">" +
"<span class=\"dateComplete\">[<span class=\"date\">" + this.date + "</span>]</span>" +
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(
- '<div id="' + this.getId() + '" class="conversation">' +
- '<div class="messages"></div>' +
- '<div class="titre">' +
- '<div class="barre">' +
- (num == 0 ? '' : '<div class="fermer"></div><div class="lien"></div><div class="reduire"></div>') +
- '<span class="next"><</span><span class="numPage">1</span><span class="prev">></span>' +
- '</div>' +
+ var messagesXHTML = '<div class="messages"></div>'
+ var messageRacineXHTML = '<div class="messageRacine"></div>'
+ var reverse = this.client.chatOrder == "reverse"
+
+ var XHTML =
+ '<td class="conversation" id="' + this.getId() + '">' +
+ (reverse ? messagesXHTML : "") +
+ '<div class="titre">' +
+ (reverse ? messageRacineXHTML : "") +
+ '<div class="nav">' +
+ (num == 0 ? '' : '<div class="fermer"></div><div class="lien"></div><div class="reduire"></div>') +
+ '<span class="next"><</span><span class="numPage">1</span><span class="prev">></span>' +
+ '</div>' +
+ (reverse ? "" : messageRacineXHTML) +
'</div>' +
- '</div>'
- )
+ (reverse ? "" : messagesXHTML) +
+ '</td>'
+
+ $("#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"))
}
}
this.messagesParId[this.racine.id] = this.racine
var element = $(this.racine.XHTML(true, this.getId()))
this.attacherEventsSurMessage(element)
- $("#" + this.getId() + " .titre").prepend(element)
+ $("#" + this.getId() + " .titre .messageRacine").html(element)
}
}
Conversation.prototype.decolorerEntetes = function()
{
- $("#" + this.getId() + " .message")
+ $("#" + this.getId() + " .messages .message")
.removeClass("reponse")
.removeClass("repondu")
.removeClass("proprietaire")
*/
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")
}
/**
{
var thisConversation = this
- $("#conversations #" + this.getId() + " .titre .lien").click(
+ $("#" + this.getId() + " .titre .lien").click(
function()
{
fun(thisConversation.num)
{
var thisConversation = this
- $("#conversations #" + this.getId() + " .titre .fermer").click(
+ $("#" + this.getId() + " .titre .fermer").click(
function()
{
fun(thisConversation.num)
{
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) }
)
}
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)
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
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() + " .messages .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
// 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(
thisConversation.conversations.ouvrirConversation(parseInt(idString.substring(1, racine.length - 1), 36))
return false
}
- )
+ )
$(element).click(
function(event)
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()
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)
*/
Conversation.prototype.supprimer = function()
{
- $("#conversations #" + this.getId()).remove()
+ $("#" + this.getId()).remove()
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// 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()
}
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
*/
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 + "%")
}
/**