From 63d7601eeee2660728be1ff778dd7e6a04246ee5 Mon Sep 17 00:00:00 2001 From: Greg Burri Date: Thu, 5 Jun 2008 06:37:19 +0000 Subject: [PATCH] REPORT de la branche 1.0 --- doc/TODO.txt | 7 ++- js/pageAdmin.js | 2 +- js/pageMinichat.js | 46 ++++++++++++------- modules/Makefile | 5 ++ modules/erl/euphorik_bd.erl | 21 ++++----- .../erl/euphorik_minichat_conversation.erl | 2 +- modules/erl/euphorik_protocole.erl | 15 +----- pages/about.html | 2 +- 8 files changed, 55 insertions(+), 45 deletions(-) diff --git a/doc/TODO.txt b/doc/TODO.txt index faa7d24..4ee5180 100755 --- a/doc/TODO.txt +++ b/doc/TODO.txt @@ -4,9 +4,9 @@ * Cleaner le code (erl, js, xhtml, css) et eventuellement profiler un peu (le refresh est lent sous opera) * Pouvoir afficher les utilisateurs (print_users(admin)) qui sont admin * Afficher l'ip dans le print_users(). -* Limiter la mise en évidence de la conversation lorsque le curseur se trouve sur les pseudos -* Mettre dans la FAQ la signification des couleurs associées aux messages. +* Limiter la mise en évidence de la conversation lorsque le curseur se trouve sur les pseudos * Enlever le petit carré mis en couleur et mettre le pseudo + date en couleur à la place +* Mettre dans la FAQ la signification des couleurs associées aux messages. * Ne pas pouvoir poster avec "" * Lorsque le curseur se trouve sur le nom d'une personne à qui l'on répond n'highliter que cette conversation !! (très bonne idée) === v1.1 === @@ -198,6 +198,9 @@ 2 : Urgent 3 : Peu grave +[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 +[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" + * action=%7B%22action%22%3A%22list_banned_ips%22%2C%22cookie%22%3A%22<>%22%7D [1] 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é ? diff --git a/js/pageAdmin.js b/js/pageAdmin.js index faf5f8c..97c0243 100644 --- a/js/pageAdmin.js +++ b/js/pageAdmin.js @@ -33,7 +33,7 @@ PageAdmin.prototype.contenu = function() { return '

Trolls

\

Un troll est un sujet à débat, en général une question, affiché sur la page principale.

\ -

Chaque semaine un troll est choisit au hasard parmis les trolls proposés et devient le troll de la semaine.

\ +

Chaque semaine un troll est choisi au hasard parmis les trolls proposés et devient le troll de la semaine.

\
\

\ \ diff --git a/js/pageMinichat.js b/js/pageMinichat.js index adf5c5a..53f4ab2 100755 --- a/js/pageMinichat.js +++ b/js/pageMinichat.js @@ -377,12 +377,20 @@ function Conversation(num, util, formateur, client) function(){}, function(event) { - $("#conversations .message").removeClass("cache") - thisConversation.messageOver = null + thisConversation.enleverMiseEnEvidence() } ) } +/** + * + */ +Conversation.prototype.enleverMiseEnEvidence = function() +{ + $("#conversations .message").removeClass("cache") + this.messageOver = null +} + /** * Défini la page courante et s'il l'on se trouve sur la dernière page. * @pageCourante la page courante @@ -594,40 +602,49 @@ Conversation.prototype.flush = function(funClickOuvrirConv) thisConversation.util.infoBulle("Extraction de la conversation", $(".extraire", this)) + // l'id du message + var idMess36 = $(this).attr("id").substr(4) + var idMess = parseInt(idMess36, 36) + $(this).click( function(event) { if ($(event.target).is("a") || $(event.target).parents("#outilsBan").length > 0) return - - // l'id du message - var idMess = $(this).attr("id").substr(4) - + // extraction d'une conversation if ($(event.target).is(".extraire")) { - funClickOuvrirConv(parseInt(idMess, 36)) + funClickOuvrirConv(idMess) return } var valCourant = $("input.message").val() if (valCourant == undefined) valCourant = "" - var tag = $(".pseudo span.ident", this).text() + "{" + idMess + "}" + ">" + var tag = $(".pseudo span.ident", this).text() + "{" + idMess36 + "}" + ">" if (valCourant.indexOf(tag, 0) == -1) $("input.message").val(tag + " " + valCourant) thisConversation.util.setCaretToEnd($("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( + $(".entete", this).mousemove( function(e) { if (this !== thisConversation.messageOver) { - thisConversation.afficherConversation(this) + thisConversation.afficherConversation(idMess) thisConversation.messageOver = this } } + ).hover( + function(){}, + // quand on sort de l'entête du message la mise en évidence est enlevée + function() + { + thisConversation.enleverMiseEnEvidence() + } ) } ) @@ -645,13 +662,10 @@ Conversation.prototype.flush = function(funClickOuvrirConv) /** * 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 + * @param id l'id du message */ -Conversation.prototype.afficherConversation = function(element) -{ - // cherche le message selectionné - var id = parseInt($(element).attr("id").substr(4), 36) - +Conversation.prototype.afficherConversation = function(id) +{ var message = this.messagesParId[id] if (message == undefined) return diff --git a/modules/Makefile b/modules/Makefile index 4f808db..731cd71 100755 --- a/modules/Makefile +++ b/modules/Makefile @@ -16,6 +16,7 @@ $(rep_ebin)/euphorik_minichat_conversation.beam \ $(rep_ebin)/euphorik_requests.beam \ $(rep_ebin)/euphorik_protocole.beam \ $(rep_ebin)/euphorik_daemon.beam \ +$(rep_ebin)/euphorik_common.beam \ $(rep_ebin)/euphorik_test.beam # Module pour la gestion des données persistante la BD @@ -42,6 +43,10 @@ $(rep_ebin)/euphorik_protocole.beam: $(rep_erl)/euphorik_protocole.erl $(rep_inc $(rep_ebin)/euphorik_daemon.beam: $(rep_erl)/euphorik_daemon.erl $(rep_include)/euphorik_defines.hrl erlc $(erlc_params) +# Module avec plein de bordel dedant +$(rep_ebin)/euphorik_common.beam: $(rep_erl)/euphorik_common.erl + erlc $(erlc_params) + # Module dédié au tests $(rep_ebin)/euphorik_test.beam: $(rep_erl)/euphorik_test.erl $(rep_erl)/euphorik_bd.erl $(rep_include)/euphorik_bd.hrl erlc $(erlc_params) diff --git a/modules/erl/euphorik_bd.erl b/modules/erl/euphorik_bd.erl index 46cefed..2b18d5b 100755 --- a/modules/erl/euphorik_bd.erl +++ b/modules/erl/euphorik_bd.erl @@ -57,7 +57,6 @@ messages/2, messages/3, message_by_id/1, - message_by_id_sans_transaction/1, messages_by_ids/1, message_existe/1, reponses/0, @@ -331,14 +330,16 @@ print_users() -> print_user(User) when is_record(User, user) -> - #user{id = Id, pseudo = Pseudo, login = Login, ek_master = Ek_master, date_derniere_connexion = Date} = User, + #user{id = Id, pseudo = Pseudo, login = Login, ek_master = Ek_master, date_derniere_connexion = Date, last_ip = IP} = User, {{Annee, Mois, Jour}, {Heure, Min, _}} = calendar:now_to_local_time(Date), io:format( - "~4w : ~10.10..s~10.10..s ~2w.~2.2.0w.~w - ~2wh~2.2.0w~n", + % id pseudo (login) IP Jour Mois Année Heure Minute + "~4w : ~10.10..s(~10.10..s) ~s ~2w.~2.2.0w.~w - ~2wh~2.2.0w~n", [ Id, if Ek_master -> "*"; true -> "" end ++ Pseudo, - "(" ++ Login ++ ")", + Login, + euphorik_common:serialize_ip(IP), Jour, Mois, Annee, Heure, Min ] ); @@ -542,15 +543,13 @@ messages(Id, N, P) -> message_by_id(Id) -> resultat_transaction(mnesia:transaction( fun() -> - message_by_id_sans_transaction(Id) + case mnesia:read({minichat, Id}) of + [] -> erreur; + [M] -> + {ok, M#minichat{contenu = contenu_message(M)}} + end end )). -message_by_id_sans_transaction(Id) -> - case mnesia:read({minichat, Id}) of - [] -> erreur; - [M] -> - {ok, M#minichat{contenu = contenu_message(M)}} - end. % Renvoie le contenu d'un message donnée, à utiliser à l'intérieur d'une transaction. diff --git a/modules/erl/euphorik_minichat_conversation.erl b/modules/erl/euphorik_minichat_conversation.erl index 60f92e4..6f2f2be 100755 --- a/modules/erl/euphorik_minichat_conversation.erl +++ b/modules/erl/euphorik_minichat_conversation.erl @@ -84,7 +84,7 @@ mise_en_forme_conversation(Messages) -> fun() -> lists:foldr( fun(Id, Acc) -> - case euphorik_bd:message_by_id_sans_transaction(Id) of + case euphorik_bd:message_by_id(Id) of {ok, Message} -> [{Message, parents(Id)} | Acc]; _ -> diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index d99e4cc..ae79d84 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -555,7 +555,7 @@ unban_ip( ) -> case euphorik_bd:user_by_cookie(Cookie) of {ok, #user{ek_master = true}} -> - euphorik_bd:deban(unserialize_ip(IP)), + euphorik_bd:deban(euphorik_common:unserialize_ip(IP)), json_reponse_ok(); _ -> erreur("Seul les ekMaster peuvent connaitre la liste des ips bannies") @@ -577,7 +577,7 @@ list_banned_ips( fun({IP, T, Users}) -> {struct, [ - {ip, serialize_ip(IP)}, + {ip, euphorik_common:serialize_ip(IP)}, {remaining_time, format_minutes(T)}, {users, {array, lists:map( fun({Pseudo, Login}) -> @@ -611,17 +611,6 @@ erreur(Message) -> ] }. - -serialize_ip(IP) -> - lists:flatten(io_lib:format("~w.~w.~w.~w", tuple_to_list(IP))). - - -unserialize_ip(IP) -> - case io_lib:fread("~d.~d.~d.~d", IP) of - {ok, [A, B, C, D], []} -> {A, B, C, D}; - _ -> erreur - end. - % Formatage de minutes. % par exemple : "1min", "45min", "1h23min", "1jour 2h34min" diff --git a/pages/about.html b/pages/about.html index db98b68..c142b72 100644 --- a/pages/about.html +++ b/pages/about.html @@ -15,7 +15,7 @@

C'est quoi un "troll de la semaine" ?

-

Simplement un sujet de débat à tendance trollifique. Chaque lundi à 3 heure du matin un nouveau troll est choisit au hasard parmis ceux proposés par les administrateurs.

+

Simplement un sujet de débat à tendance trollifique. Chaque lundi à 3 heure du matin un nouveau troll est choisi au hasard parmis ceux proposés par les administrateurs.

Quels-sont les navigateurs supportés ?

-- 2.45.2