java/nekurak.net-web/web/js/chat.js
author František Kučera <franta-hg@frantovo.cz>
Tue Apr 23 21:43:37 2013 +0200 (2013-04-23)
changeset 204 bebec432330a
parent 149 8238cdb4113a
permissions -rw-r--r--
oprava chatu, tabulátory
     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 			// zprávu můžeme zvýraznit
   111 		} else {
   112 			elementText.style.color = "#444444";
   113 		}
   114 		elementLi.appendChild(elementText);
   115 	
   116 		elementUl.appendChild(elementLi);
   117 	}
   118 }
   119 
   120 var t;
   121 
   122 function spustCasovac() {
   123 	aktualizujVypisZprav();
   124 	
   125 	t = setTimeout(function () {
   126 	aktualizujVypisZprav();
   127 	spustCasovac();
   128 	}, intervalObnovy);
   129 }