line-height: 18px;
}
#page.minichat #conversations div.message.reponse .entete {
- background-color: #31732f
+ background-color: #bf2911
}
#page.minichat #conversations div.message.reponse .delimitationEntete,
#page.minichat #conversations div.message.reponse .repondA {
background-image: url(../../img/css1/fleche_repondu.png);
}
#page.minichat #conversations div.message.proprietaire .entete {
- background-color: #bf2911
+ background-color: #31732f
}
#page.minichat #conversations div.message.proprietaire .delimitationEntete,
#page.minichat #conversations div.message.proprietaire .repondA {
== TODO ==\r
\r
=== v1.0.1 ===
-* Pouvoir afficher les utilisateurs (print_users(admin)) qui sont admin
-* Enlever le petit carré mis en couleur et mettre le pseudo + date en couleur à la place\r
+* Pouvoir afficher les utilisateurs (print_users(admin)) qui sont admin\r
* Mettre dans la FAQ la signification des couleurs associées aux messages.\r
* Ne pas pouvoir poster avec "<nick>"\r
=== v1.1 ===\r
[ok] Limiter la mise en évidence de la conversation lorsque le curseur se trouve sur les pseudos\r
[ok] Cleaner le code (erl, js, xhtml, css) et eventuellement profiler un peu (le refresh est lent sous opera)\r
[ok] Afficher l'ip dans le print_users().
+[ok] Enlever le petit carré mis en couleur et mettre le pseudo + date en couleur à la place
=== Bugs ===
1 : Critique
id="rect3153"
width="100.18613"
height="75.186127"
- x="116.3355"
- y="383.69766" />
+ x="115.62122"
+ y="547.2691" />
<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"
id="rect3157"
width="100.18613"
height="75.186127"
- x="116.3355"
- y="547.2691" />
+ x="117.76408"
+ y="383.69766" />
<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"
-// coding: utf-8\r
-// Copyright 2008 Grégory Burri\r
-//\r
-// This file is part of Euphorik.\r
-//\r
-// Euphorik is free software: you can redistribute it and/or modify\r
-// it under the terms of the GNU General Public License as published by\r
-// the Free Software Foundation, either version 3 of the License, or\r
-// (at your option) any later version.\r
-//\r
-// Euphorik is distributed in the hope that it will be useful,\r
-// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
-// GNU General Public License for more details.\r
-//\r
-// You should have received a copy of the GNU General Public License\r
-// along with Euphorik. If not, see <http://www.gnu.org/licenses/>.\r
-// \r
+// coding: utf-8
+// Copyright 2008 Grégory Burri
+//
+// This file is part of Euphorik.
+//
+// Euphorik is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Euphorik is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Euphorik. If not, see <http://www.gnu.org/licenses/>.
+//
// La page d'administation, ne peut être accédée que par les ekMaster (admins)
function PageAdmin(client, formateur, util)
this.util = util
this.pageEvent = new PageEvent("admin", this.util)
- \r
+
// le timer qui rappelle periodiquement le rafraichissement des IP bannies
this.timeoutIDmajIPs = null
}
-\r
-/**\r
- * Interface des pages.\r
+
+/**
+ * Interface des pages.
*/
PageAdmin.prototype.contenu = function()
{
- return '\\r
+ return '\
<h1>Trolls</h1>\
<p>Un troll est un sujet à débat, en général une question, affiché sur la page principale.</p>\
<p>Chaque semaine un troll est choisi au hasard parmis les trolls proposés et devient le troll de la semaine.</p>\
<h1>IPs bannies</h1>\
<div id="ips"></div>'
}
-\r
-/**\r
- * Interface des pages.\r
+
+/**
+ * Interface des pages.
*/
PageAdmin.prototype.charger = function()
{
$("#page form#nouveauTroll").submit(function(){return false})
var thisPage = this
- \r
+
// la liste des trolls proposés par les ekMasters
- this.trolls = new Trolls(this.client, this.util, this.formateur)\r
+ this.trolls = new Trolls(this.client, this.util, this.formateur)
this.waitEvent()
}
)
}
-\r
-/**\r
- * Interface des pages.\r
+
+/**
+ * Interface des pages.
*/
PageAdmin.prototype.decharger = function()
{
- this.pageEvent.stopAttenteCourante()\r
- \r
- // supprime le rafraichissement période des ips\r
- if (this.timeoutIDmajIPs)\r
+ this.pageEvent.stopAttenteCourante()
+
+ // supprime le rafraichissement période des ips
+ if (this.timeoutIDmajIPs)
clearTimeout(this.timeoutIDmajIPs)
}
-\r
-/**\r
- * Post un troll, le contenu est lu à partir de "input.troll".\r
+
+/**
+ * Post un troll, le contenu est lu à partir de "input.troll".
*/
PageAdmin.prototype.posterTroll = function()
{
}
)
}
-\r
-/**\r
- * Débannie une ip donnée.\r
+
+/**
+ * Débannie une ip donnée.
*/
PageAdmin.prototype.deban = function(ip)
{
}
)
}
-\r
-/**\r
- * Attente d'événement de la part du serveur.\r
+
+/**
+ * Attente d'événement de la part du serveur.
*/
PageAdmin.prototype.waitEvent = function()
{
///////////////////////////////////////////////////////////////////////////////////////////////////
-/**\r
- * Représente un troll, pas grand chose finalement.\r
+/**
+ * Représente un troll, pas grand chose finalement.
*/
function Troll(content, author)
{
/**
* Renvoie les messages faisant partie d'une conversation.
* @param messages l'ensemble des messages de la conversation
- * @return les id des messages qui ont été mis en evidence sous la forme d'un hash (object) {id => bool}
+ * @return les id des messages qui ont été mis en evidence sous la forme
+ * d'un hash (object) {id => 0 | 1 | 2 | 3}. 1 : proprietaire, 2 : reponse directe, 3 : message repondu
*/
Message.prototype.getConversation = function(messages)
{
+ var thisMessage = this
+
// les messages faisant partie de la conversation
var messagesEnEvidence = {}
- messagesEnEvidence[this.id] = true
+ messagesEnEvidence[this.id] = 1
// recherche les réponses (O(n))
for (var i = 0; i < messages.messages.length; i++)
if (messages.messages[i].repondA.hasOwnProperty(this.id))
- messagesEnEvidence[messages.messages[i].id] = true
+ messagesEnEvidence[messages.messages[i].id] = messages.messages[i].auteurId == this.auteurId ? 1 : 2
+ var premierNiveau = true
var f = function(tabIds)
{
for(var id in tabIds)
var message = messages.messagesParId[id]
if (message != undefined)
{
- messagesEnEvidence[id] = true
+ messagesEnEvidence[id] = message.auteurId == thisMessage.auteurId ? 1 : ( premierNiveau ? 3 : 0 )
+ premierNiveau = false
f (message.repondA)
}
}
Conversation.prototype.colorerEntetes = function()
{
-
+ var messagesReponse = ""
+ var messagesRepondu = ""
+ var messagesProprietaire = ""
+ for (var i = 0; i < this.messages.length; i++)
+ {
+ if (this.messages[i].appartientAuClient)
+ messagesProprietaire += "#mess" + this.messages[i].id.toString(36) + ","
+ else if (this.messages[i].estUneReponse)
+ messagesReponse += "#mess" + this.messages[i].id.toString(36) + ","
+ else if (this.messages[i].clientARepondu)
+ messagesRepondu += "#mess" + this.messages[i].id.toString(36) + ","
+ }
+ $(messagesReponse).addClass("reponse")
+ $(messagesRepondu).addClass("repondu")
+ $(messagesProprietaire).addClass("proprietaire")
}
Conversation.prototype.decolorerEntetes = function()
{
-
+ $("#" + this.getId() + " .message")
+ .removeClass("reponse")
+ .removeClass("repondu")
+ .removeClass("proprietaire")
}
/**
// mise en évidence de la conversation
$(".entete", this).hover(\r
function()\r
- {\r
+ {
+ thisConversation.decolorerEntetes()\r
thisConversation.afficherConversation(idMess)\r
},
// quand on sort de l'entête du message la mise en évidence est enlevée
function()
{
- thisConversation.enleverMiseEnEvidence()
+ thisConversation.enleverMiseEnEvidence()
+ thisConversation.decolorerEntetes()
+ thisConversation.colorerEntetes()
}
)
}
function()
{
var jq = $(this)
- if (!mess.hasOwnProperty(parseInt(jq.attr("id").substr(4), 36)))
+ var statut = mess[parseInt(jq.attr("id").substr(4), 36)]
+ if (statut == undefined)
jq.addClass("cache")
- else
+ else
+ {
jq.removeClass("cache")
+ switch (statut)
+ {
+ case 1 :
+ jq.addClass("proprietaire")
+ break;
+ case 2 :
+ jq.addClass("reponse")
+ break;
+ case 3 :
+ jq.addClass("repondu")
+ break;
+ }
+ }
}
)
}