float: left;
width: 100%;
}
-#page.minichat #conversations div.message {
- border-left-width: 5px;
- border-left-style: solid;
- border-color: transparent;
- padding-right: 5px;
- cursor: pointer;
- min-height: 18px;
- line-height: 18px;
-}
#page.minichat #conversations div.messageImpair {
background-color: #fbeede;
}
filter: alpha(opacity = 30);
zoom: 1
}
-#page.minichat #conversations div.reponse {
- border-color: #bd7a11
-}
-#page.minichat #conversations div.repondu {
- border-color: #b711bd
-}
-#page.minichat #conversations div.proprietaire {
- border-color: #bd1129
-}
-#page.minichat #conversations div.systeme {
- background-color: #f0df95
-}
#page.minichat #conversations .titre {
text-align: center;
padding-right: 8px;
}
/***** Les messages *****/
+#page.minichat #conversations div.message {
+ padding-right: 5px;
+ cursor: pointer;
+ min-height: 18px;
+ line-height: 18px;
+}
+#page.minichat #conversations div.message.reponse .entete {
+ background-color: #31732f
+}
+#page.minichat #conversations div.message.reponse .delimitationEntete,
+#page.minichat #conversations div.message.reponse .repondA {
+ background-image: url(../../img/css1/fleche_reponse.png);
+}
+#page.minichat #conversations div.message.repondu .entete {
+ background-color: #84196c
+}
+#page.minichat #conversations div.message.repondu .delimitationEntete,
+#page.minichat #conversations div.message.repondu .repondA {
+ background-image: url(../../img/css1/fleche_repondu.png);
+}
+#page.minichat #conversations div.message.proprietaire .entete {
+ background-color: #bf2911
+}
+#page.minichat #conversations div.message.proprietaire .delimitationEntete,
+#page.minichat #conversations div.message.proprietaire .repondA {
+ background-image: url(../../img/css1/fleche_proprietaire.png);
+}
+#page.minichat #conversations div.message.systeme {
+ background-color: #f0df95
+}
#page.minichat div.message a {
font-weight: bold;
}
2 : Urgent
3 : Peu grave\r
\r
-[1] Le widget select qui permet la sélection des css n'est pas initialisé correctement au chargement du site\r
-[1] Il arrive qu'après le poste d'un message le refresh ne se fasse plus, peut-être une "race-condition" dans la classe PageEvent de euphorik.js\r
-[1] Après être passé de la page Admin à Chat le client continu de réaliser de temps en temp des requêtes "lists_banned_ips"\r
- * action=%7B%22action%22%3A%22list_banned_ips%22%2C%22cookie%22%3A%22<<cookie>>%22%7D\r
-[1] Traiter les tags TODO et FIXME dans le code
+[1] Il arrive qu'après le poste d'un message le refresh ne se fasse plus, peut-être une "race-condition" dans la classe PageEvent de euphorik.js
+[2] Le widget select qui permet la sélection des css n'est pas initialisé correctement au chargement du site\r
+[2] Traiter les tags TODO et FIXME dans le code
[2] Le changement de skin n'est pas mémorisé lorsque l'on est pas connecté (normal puisque le style est mémorisé dans le profil)
* solution 1 : permettre le changement de skin uniquement pour les personnes enregistré ?
* solution 2 : mémoriser le skin courant dans un cookie\r
* Peut être un bug lié à jQuery
* Reproduit sur Firefox 2 et 3 !
[ok] Lors d'un logout il faut faire un full refresh (pour mettre à jour les messages auquel on répond par exemple)
+[ok] Après être passé de la page Admin à Chat le client continu de réaliser de temps en temp des requêtes "lists_banned_ips"
+ * action=%7B%22action%22%3A%22list_banned_ips%22%2C%22cookie%22%3A%22<<cookie>>%22%7D
=== Idées ===\r
Une fois l'idée validée elle est déplacée dans une version à venir.\r
\r
=== Le message ===\r
Un message répond à un troll et peut répondre à d'autres messages de ce troll.\r
-Un message ne peut pas être éditer, il est possible de lui appondre une ou plusieurs corrections " +++ Correction"\r
+Un message ne peut pas être éditer, il est possible de lui appondre une ou plusieurs corrections " +++ Correction"
+un message dont l'entête est de couleur verte signfie : "un message qui me répond"
+un message dont l'entête est de couleur orange signifie : "mon message"
+Un message dont l'entête est de couleur bleu signifie : "un message auquel je répond"\r
\r
\r
=== Admin ===\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="couleurs entetes messages css1.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4"
+ inkscape:cx="131.32911"
+ inkscape:cy="504.74238"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="652"
+ inkscape:window-height="667"
+ inkscape:window-x="0"
+ inkscape:window-y="133" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="opacity:1;fill:#31732f;fill-opacity:1;fill-rule:evenodd;stroke:#0d00a8;stroke-width:0.34887081;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3153"
+ width="100.18613"
+ height="75.186127"
+ x="116.3355"
+ y="383.69766" />
+ <rect
+ style="opacity:1;fill:#841919;fill-opacity:1;fill-rule:evenodd;stroke:#0d00a8;stroke-width:0.34887081;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3155"
+ width="100.18613"
+ height="75.186127"
+ x="116.3355"
+ y="465.48337" />
+ <rect
+ style="opacity:1;fill:#bf2911;fill-opacity:1;fill-rule:evenodd;stroke:#0d00a8;stroke-width:0.34887081;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3157"
+ width="100.18613"
+ height="75.186127"
+ x="116.3355"
+ y="547.2691" />
+ <rect
+ style="opacity:1;fill:#84196c;fill-opacity:1;fill-rule:evenodd;stroke:#0d00a8;stroke-width:0.34887081;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3159"
+ width="100.18613"
+ height="75.186127"
+ x="116.3355"
+ y="629.05481" />
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="49.285713"
+ y="507.79028"
+ id="text3181"><tspan
+ sodipodi:role="line"
+ id="tspan3183"
+ x="49.285713"
+ y="507.79028">référence</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="58.356026"
+ y="424.84149"
+ id="text3185"><tspan
+ sodipodi:role="line"
+ id="tspan3187"
+ x="58.356026"
+ y="424.84149">réponse</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="22.215401"
+ y="586.97449"
+ id="text3189"><tspan
+ sodipodi:role="line"
+ id="tspan3191"
+ x="22.215401"
+ y="586.97449">mon message</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="57.225166"
+ y="670.19867"
+ id="text3193"><tspan
+ sodipodi:role="line"
+ id="tspan3195"
+ x="57.225166"
+ y="670.19867">répondu</tspan></text>
+ </g>
+</svg>
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="1.7173688"
- inkscape:cx="521.17414"
- inkscape:cy="922.1821"
+ inkscape:zoom="9.714905"
+ inkscape:cx="540.88058"
+ inkscape:cy="905.07314"
inkscape:document-units="px"
- inkscape:current-layer="layer2"
+ inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1280"
inkscape:window-height="800"
inkscape:export-filename="/home/gburri/projets/euphorik/doc/graphiques/copier_conv_hover.png"
inkscape:export-xdpi="138.64"
inkscape:export-ydpi="138.64" />
+ <path
+ style="fill:#31732f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline"
+ d="M 561.84882,143.03283 L 566.71018,149.47435 L 561.84882,155.65071 L 561.84882,143.03283 z"
+ id="path3464"
+ sodipodi:nodetypes="cccc"
+ inkscape:export-filename="/home/gburri/projets/euphorik/img/css1/fleche_reponse.png"
+ inkscape:export-xdpi="128.38945"
+ inkscape:export-ydpi="128.38945" />
+ <path
+ style="fill:#bf2911;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline"
+ d="M 570.29345,143.03283 L 575.15481,149.47435 L 570.29345,155.65071 L 570.29345,143.03283 z"
+ id="path3466"
+ sodipodi:nodetypes="cccc"
+ inkscape:export-filename="/home/gburri/projets/euphorik/img/css1/fleche_proprietaire.png"
+ inkscape:export-xdpi="128.38945"
+ inkscape:export-ydpi="128.38945" />
+ <path
+ style="fill:#84196c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline"
+ d="M 578.73815,143.03283 L 583.59951,149.47435 L 578.73815,155.65071 L 578.73815,143.03283 z"
+ id="path3468"
+ sodipodi:nodetypes="cccc"
+ inkscape:export-filename="/home/gburri/projets/euphorik/img/css1/fleche_repondu.png"
+ inkscape:export-xdpi="128.38945"
+ inkscape:export-ydpi="128.38945" />
</g>
<g
inkscape:groupmode="layer"
/**
* classe permettant de gérer les événements (push serveur).
+ * l'information envoyé est sous la forme :
+ * {
+ * "action" : "wait_event"
+ * "page" : <page>
+ * [..]
+ * }
+ * l'information reçu est sous la forme :
+ * {
+ * "reply" : <reply>
+ * }
* @page la page
*/
function PageEvent(page, util)
/**
* Attend un événement lié à la page.
* @funSend une fonction renvoyant les données json à envoyer
- * @funReceive une fonction qui accepte un paramètre correspondant au données reçues
+ * @funsReceive est un objet comprenant les fonctions à appeler en fonction du "reply"
+ * les fonctions acceptent un paramètre correspondant au données reçues.
+ * exemple : {"new_message" : function(data){ ... }}
*/
-PageEvent.prototype.waitEvent = function(funSend, funReceive)
+PageEvent.prototype.waitEvent = function(funSend, funsReceive)
{
this.stopAttenteCourante()
{
;; dumpObj(data)
- funReceive(data)
+ funsReceive[data["reply"]](data)
// rappel de la fonction dans 100 ms
- setTimeout(function(){ thisPageEvent.waitEvent2(funSend, funReceive) }, 100)
+ setTimeout(function(){ thisPageEvent.waitEvent2(funSend, funsReceive) }, 100)
},
error:
function(XMLHttpRequest, textStatus, errorThrown)
{
- setTimeout(function(){ thisPageEvent.waitEvent2(funSend, funReceive) }, 1000)
+ ;; console.log("Connexion perdue dans waitEvent")
+ setTimeout(function(){ thisPageEvent.waitEvent2(funSend, funsReceive) }, 1000)
}
})
}
/**
* Si un stopAttenteCourante survient un peu n'importe quand il faut imédiatement arreter de boucler.
*/
-PageEvent.prototype.waitEvent2 = function(funSend, funReceive)
+PageEvent.prototype.waitEvent2 = function(funSend, funsReceive)
{
if (this.stop)
return
- this.waitEvent(funSend, funReceive)
+ this.waitEvent(funSend, funsReceive)
}
///////////////////////////////////////////////////////////////////////////////////////////////////
this.pageEvent.waitEvent(
function() { return { "last_troll" : thisPageAdmin.trolls.dernierTroll }},
- function(data)
{
- switch (data["reply"])
- {
- case "troll_added" :
- thisPageAdmin.trolls.ajouterTrollEvent(data)
- break
- case "troll_modified" :
- thisPageAdmin.trolls.modifierTrollEvent(data)
- break
- case "troll_deleted" :
- thisPageAdmin.trolls.supprimerTrollEvent(data)
- break
- case "banned_ips_refresh" :
- thisPageAdmin.majIPs()
- break
- case "error" :
+ "troll_added" : function(data){ thisPageAdmin.trolls.ajouterTrollEvent(data) },
+ "troll_modified" : function(data){ thisPageAdmin.trolls.modifierTrollEvent },
+ "troll_deleted" : function(data){ thisPageAdmin.trolls.supprimerTrollEvent },
+ "banned_ips_refresh" : function(data){ thisPageAdmin.majIPs() },
+ "error" :
+ function(data)
+ {
thisTrolls.util.messageDialogue(data["error_message"])
- break
- }
+ }
}
)
}
$("#conversations .message").removeClass("cache")
}
+Conversation.prototype.colorerEntetes = function()
+{
+
+}
+
+Conversation.prototype.decolorerEntetes = function()
+{
+
+}
+
/**
* Défini la page courante et s'il l'on se trouve sur la dernière page.
* @pageCourante la page courante
this.pageEvent.waitEvent(
function() { return thisMessages.getJSONrafraichirMessages() },
- function(data)
- {
- if (vider)
- {
- thisMessages.viderMessages()
- vider = false
- }
-
- // en fonction du message
- switch(data["reply"])
- {
- case "new_troll" :
+ {
+ "new_troll" :
+ function(data)
+ {
thisMessages.trollIdCourant = data["troll_id"]
$("#trollCourant .troll").html(thisMessages.formateur.traitementComplet(data["content"])).unbind("click").click(
function()
)
$("#trollCourant .troll a[@rel*=lightbox]").lightBox()
- break
-
- case "new_messages" :
+ },
+ "new_messages" :
+ function(data)
+ {
+ if (vider)
+ {
+ thisMessages.viderMessages()
+ vider = false
+ }
// ajoute les messages reçus à leur conversation respective
for (var numConv = 0; numConv < data["conversations"].length; numConv++)
{
thisMessages.client.supprimerConversation(numConv - 1)
}
}
- break
- }
+ }
}
)
}
% Après 60 minutes de connexion, le client doit donc reétablir une connexion
after 1000 * 60 * 60 ->
timeout
- end.
+ end.
% Attent un événement concernant la page admin