source: spip-zone/_plugins_/spipcatchat/trunk/prive/javascript/prive-spipcatchat.js.html @ 88606

Last change on this file since 88606 was 88606, checked in by claude.codden@…, 5 years ago

Correction du problème du sélecteur de statut dans l’espace privé lors du rafraîchissement de la page

File size: 8.6 KB
Line 
1// Ici les liens entre nos variables de config de spip et les variables javascript de spipcatchat //
2var URLplugin='#ENV{url_plugin}';
3var idAuteur=encodeURIComponent('#ID_AUTEUR');
4var charset=encodeURIComponent('#CHARSET');
5var nom=encodeURIComponent('#ENV{nom}');
6var langShowChat = new Array("<:spipcatchat:catchat_message:>");
7var catchatrefresh=[(#CONFIG{spipcatchat/refreshprive}||non)2000][(#CONFIG{spipcatchat/refreshprive}||oui)#CONFIG{spipcatchat/refreshprive}];
8var catchatrefreshstatut=125000;
9var idSalon=0;
10var scrollBar = false;
11var nombreMessage;
12// -------------------------------------------------------------------------------------------------//
13function spipcatchatmessage()
14{       // l'utilisation de cette fonction a pour but d'afficher les messages d'erreur et d'éviter les appels inutiles au script PHP pour les motifs suivant
15 t=[(#CONFIG{spipcatchat/refreshprive}|div{1000})];
16 
17  if(""==$("#message").val())
18        $("#spipcatchatvide").css("display","block"), // Message d'erreur -> affichage message: Vide
19        setTimeout(function(){$("#spipcatchatvide").css("display","none")},1E3); // Le message est de nouveau caché
20  else if(timer) // Si le message n'est pas vide et que la varible TIMER est égale à TRUE -> batteries de teste
21                {
22                        $("#spipcatchattimer").css("display","block"); // Message d'erreur -> affichage message: temporisation
23                        $("#spipcatchatcompt").html(t); // Initier le compte à rebours avec la variable T et premier affichage.
24                        var a=setInterval(function(){t--;if(t<0){t=0;}$("#spipcatchatcompt").html(t)},800); // Contenu de la variable A -> fonction : On incrémente de -1 la variable T toutes les 800 millisecondes et on affiche et si elle est inférieure à zero la variable T prend la valeur 0.
25                        setTimeout( // Retour à la normale après X millisecondes de la variable CATCHATREFRESH
26                                function(){$("#spipcatchattimer").css("display","none"); // Le message est de nouveau caché
27                                clearTimeout(a)},catchatrefresh
28                                )
29                        }
30                else if(120<$("#message").val().length)
31                {
32                        $("#spipcatchatroman").css("display","block"); // Message d'erreur -> affichage message: message jugé trop long
33                        setTimeout(function(){$("#spipcatchatroman").css("display","none");},1E3); // Le message est de nouveau caché
34                        }
35                else
36                { // le message a rempli toutes les conditions
37                        timer=1,
38                        setTimeout(function(){timer=0},catchatrefresh), //Après X millisecondes la variable TIMER passe à FALSE
39                        $("#spipcatchatpostmessage").submit(spipcatchatsetmessage(URLplugin, idAuteur,charset,catchatrefresh/1000)) // Le message est envoyer a la fonction javascript spipcatchatsetmessage pour la suite
40                        }
41}
42var timer;
43
44$(document).keypress( // l'utilisateur presse la touche ENTER -> action de la fonction spipcatchatmessage
45function(a)
46        {       13==a.keyCode&&spipcatchatmessage()     });
47
48$(document).keypress( // Dans d'autres cas la touche ENTER ne produit pas d'action
49function(a)
50        {       if(13==a.keyCode)return!1}      );
51
52function spipcatchatShowChat()
53{ // Cette fonction permet d'initialiser le chat dans le bon environnement. En assignant les valeurs utiles au déroulement du chat, le time-code, les autorisations, les statuts etc... dans des variables de sessions.
54$.ajax({
55        url:URLplugin+"phpscripts/get-prive-autorisation.php", // Pour ne pas interférer avec le chat public les script sont différent mais globalement les contenus sont les mêmes à part le nom des variables de sessions.
56        type:"POST",
57        data:"id_auteur="+idAuteur+"&id_salon="+idSalon+"&nom="+nom+"&url="+URLplugin+"&char="+charset,
58        success:function(e)
59                { // Après l'exécution du script on lance la fonction STARTCHAT
60                        startchat(catchatrefresh,catchatrefreshstatut,idSalon,idAuteur,URLplugin,langShowChat,charset);
61                        $("#spipcatchatselectsalon").css("display","block");
62                }
63        })
64}
65
66function getMessages(e,t,n,r,i)
67{ // Cette fonction permet le retour des messages du chat
68        $.getJSON(n+"phpscripts/get-prive-message.php", 
69        {auteur:t,ref:e/1e3,aucunmessage:r[0],"char":i}, // On passe dans l'URL un tableau en format JSON
70        function(e)
71                {
72                var t=$("#text");
73                $("#text").html(spipcatchattypo(e.messages,n)); // On passe en revue avant l'affichage du tableau des messages du chat avec la fonction SPIPCATCHATTYPO pour les émoticons et la typo SPIP
74                1!=scrollBar&&(t[0].scrollTop=t[0].scrollHeight,scrollBar=!0);
75                void 0!==t&&t[0].childNodes.length>nombreMessage&&(t[0].scrollTop=t[0].scrollHeight, // Ici le nombre de ligne du tableau est passé à plus un, donc on descend la scroll bar
76                $("#soundGet").trigger("play")); // et comme tout chat qui se respecte on joue un son d'avertissement
77                void 0!==t&&(nombreMessage=t[0].childNodes.length) // ensuite on compte le nombre de ligne du tableau et on rafraîchi notre variable
78                }
79          )
80}
81
82function spipcatchatsetmessage(e,t,n,r)
83{ // Cette fonction permet d'enregistrer les messages du chat
84        var i=encodeURIComponent($("#message").val()); // On enregistre le message en l'encodant
85        $("#message").val(""); // et ensuite on vide le champ MESSAGE
86 $.ajax({
87         type:"POST",
88         url:e+"phpscripts/set-prive-message.php", // Pour ne pas interférer avec le chat public les script sont différent mais globalement les contenus sont les mêmes à part le nom des variables de sessions.
89         data:"message="+i+"&auteur="+t+"&char="+encodeURIComponent(n)+"&ref="+encodeURIComponent(r),
90         success:function(e)
91         {
92                 $("#soundPost").trigger("play");// On joue un son d'avertissement
93                 $("#soundGet").trigger("stop");// et on stop le son d'avertissement du get sinon c'est la cacophonie assurée!
94                 1!=e&&$("#responsePost").html(e).slideDown("slow"); // si de retour on a un FALSE alors on l'affiche -> auto commentaire perso(mais je crois que celà n'a plus sa raison d'être avec la version plugin...à vérifier)
95                 $("#message").focus()
96                 },
97  error:function(e)
98        {alert("Erreur - Set-Message")}
99  })
100}
101
102function startchat(e,t,n,r,i,s,o)
103{ // Cette fonction permet de démarrer les deux autres fonctions des statuts des auteurs et le retour des messages à des intervalles programmés par les variables -> T&E
104document.getElementById("message")&&(getOnlineUsers(n,r,i,s,o),statusStart=window.setInterval(function(){getOnlineUsers(n,r,i,s,o)},t),window.setInterval(function(){getMessages(e,r,i,s,o)},e),$("#message").focus())
105}
106
107function getOnlineUsers(e,t,n,r,i)
108{
109        $.getJSON(n+"phpscripts/get-prive-online.php", // Pour ne pas interférer avec le chat public les scripts sont différent mais globalement les contenus sont les mêmes à part le nom des variables de sessions.
110        {auteur:t,salon:e},
111        function(e)
112        {
113        if(1==e.autorisation)
114        { var r="",i,s;
115                for(s in e.list)
116                "busy"==e.list[s].status?(texte="Occupé(e) [X]",
117                i="inactive",
118                t==e.list[s].id&&$("#deux").attr("selected","selected")):"inactive"==e.list[s].status?(texte=" Absent(e) [-] ",
119                i="neutral",
120                t==e.list[s].id&&$("#un").attr("selected","selected")):(texte="En ligne [&radic;]",
121                i="active",
122                t==e.list[s].id&&$("#trois").attr("selected","selected")),
123                r+='<span title="'+texte+'"><img src="'+n+"/images/status-"+i+'.png" /> '+e.list[s].login+"</span><br/>";$("#users").html(r)
124        }
125        // else window.location=urlpage // C'est ici que l'on se fait éjecter si l'on n'a pas d'autorisation pour le chat, mais pour l'instant cette fonction n'a plus de raison car il n'y a pas de salon privé dans l'espace du même nom
126        }
127  )
128}
129
130function SpipCatChatsetStatus(e,t,n)
131{ // Cette fonction permet d'enregistrer le statut des auteurs
132        $.ajax({type:"POST",url:n+"phpscripts/set-prive-status.php", // Pour ne pas interférer avec le chat public les script sont différent mais globalement les contenus sont les mêmes à part le nom des variables de sessions.
133                data:"status="+e+"&auteur="+t,
134                success:function(e)
135                {
136                        $("#catchatprivestatut").addClass("spipcatchatpause"); // On opacifie le conteneur
137                        $("#spipcatchatpatientez").css("display","block"); // et un petit gif animé pour faire joli
138                        setTimeout(rmResponse,15e3); // Mais à un moment donné il faut que ça s'arrête, alors on passe la fonction RemoveResponse
139                },
140                error:function(e)
141                {
142                        alert("Erreur - Status");
143                        setTimeout(rmResponse,15e3)
144                        }
145                }
146        )
147}
148
149function rmResponse()
150{ // Cette fonction permet un retour à la normale après un changement de statut
151        $("#catchatprivestatut").removeClass("spipcatchatpause");
152        $("#spipcatchatpatientez").css("display","none");
153}
154
155function spipcatchatrestartstatut()
156{ // Cette fonction permet de forcer l'actualisation du statut avant les deux minutes en deux passes
157setTimeout(function(){getOnlineUsers("0",idAuteur,URLplugin,langShowChat,charset)},6e3);
158setTimeout(function(){getOnlineUsers("0",idAuteur,URLplugin,langShowChat,charset)},12e3);
159}
160spipcatchatShowChat();
Note: See TracBrowser for help on using the repository browser.