java/nekurak.net-web/web/js/chat.js
author František Kučera <franta-hg@frantovo.cz>
Wed Jun 30 00:26:14 2010 +0200 (2010-06-30)
changeset 149 8238cdb4113a
child 204 bebec432330a
permissions -rw-r--r--
XMPP chat – první verze.
     1 /** TODO: jQuery */
     2 /** TODO: neglobální funkce */
     3 
     4 var intervalObnovy = 2000;
     5 var poradoveCislo = 0;
     6 
     7 function setRychlostObnovy(interval) {
     8     clearTimeout(t);
     9     intervalObnovy = interval;
    10     spustCasovac();
    11 }
    12 
    13 function getXmlHttpRequestObject() {
    14     if (window.XMLHttpRequest) {
    15 	return new XMLHttpRequest();
    16     } else if(window.ActiveXObject) {
    17 	return new ActiveXObject("Microsoft.XMLHTTP");
    18     } else {
    19 	alert("Nepodporovaný prohlížeč.");
    20 	return null;
    21     }
    22 }
    23 
    24 /** Náš AJAXový objekt. */
    25 var ajax = getXmlHttpRequestObject();
    26 
    27 function getMistnost() {
    28     return document.getElementById("odesilaciFormular").mistnost.value;
    29 }
    30 
    31 function getOd() {
    32     return document.getElementById("odesilaciFormular").od.value;
    33 }
    34 
    35 function getZprava() {
    36     return document.getElementById("odesilaciFormular").text.value;
    37 }
    38 
    39 function vymazTextZpravy() {
    40     document.getElementById("odesilaciFormular").text.value = "";
    41 }
    42 
    43 function ajaxOdesli() {
    44     if (ajax.readyState == 4 || ajax.readyState == 0) {
    45 	ajax.open("POST", "?akce=chat&akceChat=odesli&mistnost=" + encodeURIComponent(getMistnost()) + "&od=" + encodeURIComponent(getOd()) + "&zprava=" + encodeURIComponent(getZprava()), true);
    46 	ajax.onreadystatechange = function() {
    47 	    if (ajax.readyState == 4) {
    48 		vymazTextZpravy();
    49 		aktualizujVypisZprav();
    50 	    }
    51 	};
    52 	ajax.send(null);
    53     }
    54 }
    55 
    56 function aktualizujVypisZprav() {
    57     if (ajax.readyState == 4 || ajax.readyState == 0) {
    58 	ajax.open("POST", "?akce=chat&akceChat=vypis&mistnost=" + encodeURIComponent(getMistnost()), true);
    59 	ajax.onreadystatechange = function() {
    60 	    if (ajax.readyState == 4) {
    61 		zpracujZpravy(ajax.responseXML);
    62 		document.getElementById("vypisZprav").scrollTop = 100000;
    63 	    }
    64 	};
    65 	ajax.send(null);
    66     }
    67 }
    68 
    69 function ziskejVnitrekXML(data, element) {
    70     try {
    71 	return data.getElementsByTagName(element)[0].firstChild.nodeValue;
    72     } catch (e) {
    73 	return "";
    74     }
    75 }
    76 
    77 function zpracujZpravy(xmlOdpoved) {
    78     var vypisZprav = document.getElementById("vypisZprav");
    79     var zpravy = xmlOdpoved.getElementsByTagName("zprava");
    80     vypisZprav.innerHTML = "";
    81     var elementUl = document.createElement("ul");
    82     vypisZprav.appendChild(elementUl);
    83 
    84     for (i = 0; i < zpravy.length; i++) {
    85 	var od = ziskejVnitrekXML(zpravy[i], "od");
    86 	var text = ziskejVnitrekXML(zpravy[i], "text");
    87 	var kdy = ziskejVnitrekXML(zpravy[i], "kdy");
    88 	var overeny = ziskejVnitrekXML(zpravy[i], "overeny");
    89 	poradoveCislo = ziskejVnitrekXML(zpravy[i], "poradoveCislo");
    90 
    91 	var elementLi = document.createElement("li");
    92 	elementLi.title = kdy;
    93 
    94 	var elementOd = document.createElement("strong");
    95 	elementOd.textContent = od;
    96 	elementLi.appendChild(elementOd);
    97 	elementLi.appendChild(document.createTextNode(": "));
    98 
    99 	var elementText = document.createElement("span");
   100 	elementText.textContent = text;
   101 
   102 	/**
   103 	 * Ověřený je takový uživatel,
   104 	 * který se přihlásil normálně přes Jabber a vstoupil do místnosti pod svojí přezdívkou.
   105 	 * Uživatelé z webu jsou anonymové a připojují se k XMPP pod společným účtem.
   106 	 * Svoji přezdívku si vyplňují sami a přenášíme ji zvlášť.
   107 	 * Proto odlišíme tyto dvě skupiny uživatelů jinou barvou jejich příspěvku.
   108 	 */
   109 	if (overeny == "true") {
   110 	}
   111 	    // zprávu můžeme zvýraznit
   112 	} else {
   113 	    elementText.style.color = "#444444";
   114 	}
   115 	elementLi.appendChild(elementText);
   116 
   117 	elementUl.appendChild(elementLi);
   118     }
   119 }
   120 
   121 var t;
   122 
   123 function spustCasovac() {
   124     aktualizujVypisZprav();
   125     
   126     t = setTimeout(function () {
   127 	aktualizujVypisZprav();
   128 	spustCasovac();
   129     }, intervalObnovy);
   130 }