X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=js%2FpageMinichat.js;h=13f337581a7312be1356ce7a787fdcf3cd799a0d;hp=9d4d3298736a266cae0623100ea74945b0ac5fd3;hb=81393a74d648e4830dc8c7c562fa203f50a105f6;hpb=cded85bdaf899cef1ba38d2ee6fd24c67f2abc52
diff --git a/js/pageMinichat.js b/js/pageMinichat.js
index 9d4d329..13f3375 100755
--- a/js/pageMinichat.js
+++ b/js/pageMinichat.js
@@ -1,744 +1,292 @@
// coding: utf-8
-
-function PageMinichat(client, formateur, util)
-{
- this.nom = "minichat"
-
- this.client = client
- this.formateur = formateur
- this.util = util
-
- this.regexMessageTagMatch = /\{.*?\}>/g
- this.regexMessageTagReplace = /^(.*?\{.*?\}>)*/
-}
-
-PageMinichat.prototype.contenu = function()
-{
-// \
- return '\
-
';
+
+ var conversationXHTML = '" +
- "" +
- "[
" + message.date + "
]" +
- "
" + this.formateur.traitementComplet(message.pseudo) + "
:" +
- XHTMLrepondA +
- "
" + (message.systeme ? this.formateur.remplacerBalisesHTML(message.contenu) : this.formateur.traitementComplet(message.contenu, message.pseudo)) + "
" +
- "
"
- }
- //alert(this.getId())
- jQuery("#conversations #" + this.getId()).prepend(XHTML)
- //alert(jQuery("#conversations").text())
-
- // mise à jour des images (LightBox) après l'ajout de message
- if (myLightbox != null)
- myLightbox.updateImageList()
-
- var nbMessagesAffiche = jQuery("#conversations #" + this.getId() + " .message").size()
- if (nbMessagesAffiche > this.nbMessageMax)
- jQuery("#conversations #" + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).empty();
-
- // Ajoute les événements liés à chaque message
- jQuery("#conversations #" + this.getId() + " .message").filter(function(){return parseInt(jQuery(this).attr("id"), 36) > parseInt(idDernierMessageAffiche, 36)}).each(
- function()
- {
- /*jQuery(".extraire", this).click(
- function(event)
- {
- funClickExtract()
- return false
- }
- )*/
- jQuery(this).click(
- function(event)
- {
- if (jQuery(event.target).is("a")) return
-
- // l'id du message
- idMess = jQuery(this).attr("id")
-
- // extraction d'une conversation
- if (jQuery(event.target).is(".extraire"))
- {
- funClickExtract(idMess)
- return
- }
-
- var valCourant = jQuery("input.message").val()
- if (valCourant == undefined) valCourant = ""
- var tag = jQuery(".pseudo", this).text() + "{" + idMess + "}" + ">"
- if (valCourant.indexOf(tag, 0) == -1)
- jQuery("input.message").val(tag + " " + valCourant)
- thisConversation.util.setCaretToEnd(jQuery("form input.message")[0])
- }
- )
- // Q : pourquoi pas un .hover ?
- // R : simplement pour éviter que lorsqu'un message arrive cela n'affecte la conversation actuellement mise en évidence (uniquement pour Firefox)
- .mousemove(
- function(e)
- {
- if (this !== thisConversation.messageOver)
- {
- thisConversation.afficherConversation(this)
- thisConversation.messageOver = this
- }
- }
- )
- }
- )
-}
+ $("form#posterMessage input.message").focus();
+ };
-/**
- * Etablit une liste des messages à mettre en evidence et des messages à cacher.
- * Puis applique un plan diabolique.
- * @param element un message de la liste des messages
- */
-Conversation.prototype.afficherConversation = function(element)
-{
- // cherche le message selectionné
- var id = jQuery(element).attr("id")
- var message = this.messagesParId[id]
- if (message == undefined) return
-
- mess = message.getConversation(this)
-
- // FIXME : cet appel est très lent
- jQuery("#conversations #" + this.getId() + " .message").each(
- function()
- {
- var jq = jQuery(this)
- if (!mess.hasOwnProperty(jq.attr("id")))
- jq.addClass("cache")
- else
- jq.removeClass("cache")
+ $("form#posterMessage").keypress(
+ function(e) {
+ if (e.which === 13) { // return
+ nouveauMessage();
+ }
}
- )
-}
+ );
-///////////////////////////////////////////////////////////////////////////////////////////////////
+ $("form#posterMessage button.return").click(nouveauMessage);
-/**
- * Représente l'ensemble des messages affichés.
- */
-function Messages(client, formateur, util)
-{
- this.client = client
- this.formateur = formateur
- this.util = util
-
- this.conversations = new Array() // les conversations, la première représente la conversation principale
- this.conversations[0] = new Conversation(0, this.formateur, this.util)
-
- this.idDernierMesssage = null // l'id du dernier message connu
-
- // l'objet XMLHttpRequest représentant la connexion d'attente
- this.attenteCourante = null
-}
+ // interdiction de submiter le formulaire
+ $("form#posterMessage").submit(function(){ return false; });
-/**
- * Crée un document XML contenant le message demandant un rafraichissement.
- */
-Messages.prototype.getXMLrafraichirMessages = function()
-{
- var XMLDocument = this.util.creerDocumentXMLAction()
- XMLDocument.documentElement.setAttribute("name", "refreshMessages")
-
- //alert(this.util.serializer.serializeToString(XMLDocument))
-
- if (this.client.identifie())
- {
- var nodeCookie= XMLDocument.createElement("cookie")
- nodeCookie.appendChild(XMLDocument.createTextNode(this.client.cookie))
- XMLDocument.documentElement.appendChild(nodeCookie)
- }
-
- if (this.idDernierMesssage != null)
- {
- var nodeDernierMessageId = XMLDocument.createElement("dernierMessageId")
- nodeDernierMessageId.appendChild(XMLDocument.createTextNode(this.idDernierMesssage))
- XMLDocument.documentElement.appendChild(nodeDernierMessageId)
- }
-
- var nodeNombreMessage = XMLDocument.createElement("nombreMessage")
- nodeNombreMessage.appendChild(XMLDocument.createTextNode(conf.nbMessageAffiche))
- XMLDocument.documentElement.appendChild(nodeNombreMessage)
-
- var nodePage = XMLDocument.createElement("page")
- nodePage.appendChild(XMLDocument.createTextNode(this.conversations[0].page))
- XMLDocument.documentElement.appendChild(nodePage)
-
- // les conversations
- for (var i = 0; i < this.client.conversations.length; i++)
- {
- var nodeConversation = XMLDocument.createElement("conversation")
- XMLDocument.documentElement.appendChild(nodeConversation)
-
- var nodeRacine = XMLDocument.createElement("racine")
- nodeRacine.appendChild(XMLDocument.createTextNode(this.client.conversations[i].racine))
- nodeConversation.appendChild(nodeRacine)
-
- var nodePageConv = XMLDocument.createElement("page")
- nodePageConv.appendChild(XMLDocument.createTextNode(this.client.conversations[i].page))
- nodeConversation.appendChild(nodePageConv)
+ $("input.nick").click(
+ function() {
+ var input = $("input.nick")[0];
+ if (input.value === euphorik.conf.defaultNick) {
+ input.value = "";
+ }
+ }
+ );
+};
+
+euphorik.PageMinichat.prototype.chargerConversationsFragment = function() {
+ var thisPageMinichat = this;
+
+ // attention : "conv" doit être un tableau d'entier
+ try {
+ var conv = this.fragment.getVal("conv");
+ if (conv) {
+ conv.each(function(i, racine) {
+ thisPageMinichat.client.ajouterConversation(racine)
+ });
+ }
+ } catch(e) {
+ ;; console.log(e)
}
-
- return XMLDocument;
-}
+};
-/**
- * Ajoute un ensemble de messages puis les affiches.
- * @param elements un tableau d'éléments représentant les messages, voir protocole.txt
- * @param numConversation le numéro de la conversation auquel appartiennent les messages
- */
-Messages.prototype.ajouterMessages = function(elements, numConversation)
-{
- for (var i = 0; i < elements.length; i++)
- this.ajouterMessage(elements[i], numConversation)
- this.flush(numConversation)
-}
+euphorik.PageMinichat.prototype.decharger = function() {
+ this.conversations.comet.stopAttenteCourante();
-/**
- * Création d'un nouveau message.
- * Les message sont données dans l'ordre de leur id.
- * @param element un element xml représentant le message
- * @param numConversation le numéro de la conversation, 0 = principale
- */
-Messages.prototype.ajouterMessage = function(element, numConversation)
-{
- // pas d'utilisation de jquery pour des raisons de performance
- this.idDernierMesssage = element.getAttribute("id")
-
- var message = new Message(
- this.idDernierMesssage,
- jQuery("date", element).text(),
- jQuery("pseudo", element).text(),
- jQuery("contenu", element).text()
- )
-
- message.appartientAuClient = jQuery("proprietaire", element).text() == "true"
- message.clientARepondu = jQuery("repondu", element).text() == "true"
- message.estUneReponse = jQuery("reponse", element).text() == "true"
- message.systeme = jQuery("systeme", element).text() == "true"
- message.setRepondA(jQuery("repondA", element))
-
- if (this.conversations[numConversation] == null)
- this.conversations[numConversation] = new Conversation(numConversation, this.formateur)
-
- this.conversations[numConversation].ajouterMessage(message)
-}
+ $("body #smiles").remove();
-/**
- * Demande à toutes les conversations de se flusher (afficher les messages non-affichés).
- */
-Messages.prototype.flushAll = function()
-{
- for (var i = 0; i < this.conversations.length; i++)
- this.flush(i)
-}
+ this.fragment.delVal("conv");
+};
/**
- * Demande à une conversation de se flusher.
+ * Envoie un nouve message donné, le nick utilisé est celui se trouvant
+ * dans la zone de saisie (form#posterMessage input.nick).
*/
-Messages.prototype.flush = function(numConv)
-{
- var thisMessages = this
-
- this.conversations[numConv].flush
- (
- // fonction appellée lors de la demande d'extraction d'une conversation
- function(idMess)
- {
- thisMessages.client.ajouterConversation(idMess)
- thisMessages.rafraichirMessages(true)
- }
- )
-}
+euphorik.PageMinichat.prototype.envoyerMessage = function(message) {
+ var thisPageMinichat = this;
+ var nick = $("form#posterMessage input.nick").val();
-Messages.prototype.viderMessages = function()
-{
- this.idDernierMesssage = null
-
- for (var i = 0; i < this.conversations.length; i++)
- this.conversations[i].viderMessages()
-}
+ // (un nick vide est autorisé)
+ nick = this.formater.formatNick(nick);
-/**
- * Met à jour les messages de manière continue.
- * (AJAX-Comet-style proof)
- * @param vider vide tous les messages avant d'afficher les nouveaux
- */
-Messages.prototype.rafraichirMessages = function(vider)
-{
- if (this.attenteCourante != null)
- this.attenteCourante.abort()
-
- if (vider == undefined)
- vider = false
-
- if (vider)
- {
- this.idDernierMesssage = null
- this.messages = new Array()
+ if (nick === euphorik.conf.defaultNick) {
+ this.util.messageDialog("Choose a nickname");
+ return;
}
- var thisMessages = this // caisupair javacrypte
-
- //this.util.log(this.util.serializer.serializeToString(this.getXMLrafraichirMessages()))
- //alert(this.util.xmlVersAction(this.getXMLrafraichirMessages()).action)
- this.attenteCourante = jQuery.ajax({
- type: "POST",
- url: "request",
- dataType: "xml",
- data: this.util.xmlVersAction(this.getXMLrafraichirMessages()),
- success:
- function(data)
- {
- //thisMessages.util.log(thisMessages.util.serializer.serializeToString(data))
-
- if (vider)
- thisMessages.viderMessages()
-
- //thisMessages.MAJPages(parseInt(jQuery("nbPage", data.documentElement).text()))
-
- // ajoute les messages reçu à leur conversation respective
- var numConv = 0
- jQuery("conversation", data.documentElement).each(
- function(i)
- {
- var messages = []
- jQuery("message", this).each(
- function(j)
- {
- // thisMessages.ajouterMessage(this, numConv)
- messages.push(this)
- }
- )
- thisMessages.ajouterMessages(messages, numConv)
- numConv += 1
- }
- )
-
- // demande à toutes les conversations d'afficher les messages non-affichés
- //thisMessages.flush()
-
- // rappel de la fonction dans 100 ms
- setTimeout(function(){ thisMessages.rafraichirMessages() }, 100);
- },
- error:
- function(XMLHttpRequest, textStatus, errorThrown)
- {
- setTimeout(function(){ thisMessages.rafraichirMessages() }, 1000);
- }
+ message = message.trim();
+ if (!message) {
+ this.util.messageDialog("The message is empty");
+ return;
+ }
+
+ if (!this.client.authentifie()) {
+ if (!this.client.enregistrement()) {
+ this.util.messageDialog("unable to login");
+ return;
}
- )
-}
-
-/* Osbolète
-Messages.prototype.MAJPages = function(nbPage)
-{
- //alert(nbPage)
-
- var thisMessages = this
-
- var nbPageActuel = jQuery("#pages span").size()
-
- for(var p = nbPageActuel + 1; p <= nbPage && p <= 3; p++)
- {
- jQuery("#pages").append("