Foros del Web » Programando para Internet » Javascript » Frameworks JS »

ZiTALK AJAX Chat version 2.2 Beta litle

Estas en el tema de ZiTALK AJAX Chat version 2.2 Beta litle en el foro de Frameworks JS en Foros del Web. Hola a todos, ya tengo una version del chat programado en xHTML/CSS/PHP/Javascript. Nuevas caracteristicas: - Añadido campo nombre. - Añadido sonido al registrarse nuevos mensajes. ...
  #1 (permalink)  
Antiguo 12/01/2008, 09:13
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
ZiTALK AJAX Chat version 2.2 Beta litle

Hola a todos, ya tengo una version del chat programado en xHTML/CSS/PHP/Javascript.

Nuevas caracteristicas:

- Añadido campo nombre.
- Añadido sonido al registrarse nuevos mensajes.
- El nombre se guarda en una cookie para que al volver a ingresar en el chat se mantenga.

Arreglos:

- Repeticiones de los mensajes.

Licencia: LGPL http://www.gnu.org/licenses/lgpl.html

Codigo:

index.php
Código PHP:
<?php
function Connect($host,$user,$passwd,$db)
 {  
  if(!(
$link=mysql_connect($host,$user,$passwd)))
   {
    echo 
"Error connecting to DDBB.";
    exit();
   }
  if(!
mysql_select_db($db,$link))
   {
    echo 
"Error in DDBB selection.";
    exit();
   }
   return 
$link;
 }
function 
maxId()
 {
     
$select="select max(id) from chat";
     
$select=mysql_query($select);
     return 
mysql_result($select,0,0);
     @
mysql_free_result($select);     
 } 
$link=Connect("host","usuario","password","DB_name");
// sending comments
if($_GET["Write"]=="yes")
 {
  
$max=maxId()+1;
  
$date=mktime(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y"));
  
$name=htmlentities(utf8_decode($_REQUEST["name"]));
  
$comment=htmlentities(utf8_decode($_REQUEST["comment"]));
  
//
  
$insert="insert into chat values(".$max.",'".$name."','".$comment."',".$date.")";
  if(
trim($_REQUEST["name"])!=NULL && trim($_REQUEST["comment"])!=NULL)
   {
    
$insert=mysql_query($insert);
   }
  
mysql_close($link);
  exit();
 } 
// reading comments
elseif($_GET["Read"]=="yes")
 {
  
header("Cache-Control: no-store, no-cache, must-revalidate");
  
$max=maxId();
  if(
$max<50)
   {
    
$max=0;
   }
  else
   {
    
$max=$max-50;
   }
  
$select="select id,nombre,comentario,data from chat order by id asc limit ".$max.",50";
  
$select=mysql_query($select);
  while(
$row = @mysql_fetch_array($select))
   {
    if(
$row["id"]!=NULL)
     {
         
$date=date("Y/m/d - H:i:s",$row["data"]);
        echo 
"<span id=".$row["id"]."><strong>".$date." - ".utf8_encode($row["nombre"]).":</strong> ".utf8_encode($row["comentario"])."</span><br />";
     }
   }
  @
mysql_free_result($select);
  
mysql_close($link);
  exit();
 }
// reading last comments
elseif($_GET["ReadLast"]=="yes" && $_GET["id"]!=NULL)
 {
  
header("Cache-Control: no-store, no-cache, must-revalidate");
  
$id=$_GET["id"];
  
$max=maxId();
  
//
  
$limit1=$id;
  
$limit2=$max-$id;
  
//
  
$select="select id,nombre,comentario,data from chat order by id asc limit ".$limit1.",".$limit2;
  
$select=mysql_query($select);
  while(
$row = @mysql_fetch_array($select))
   {
    if(
$row["id"]!=NULL)
     {
         
$date=date("Y/m/d - H:i:s",$row["data"]);
        echo 
"<span id=".$row["id"]."><strong>".$date." - ".utf8_encode($row["nombre"]).":</strong> ".utf8_encode($row["comentario"])."</span><br />";
     }
   }
  @
mysql_free_result($select);
  
mysql_close($link);
  exit();
 }
// get the last ID
elseif($_GET["MaxId"]=="yes" && $_GET["id"]!=NULL)
 {
     
header("Cache-Control: no-store, no-cache, must-revalidate");
     
$id=$_GET["id"];
    
$max=maxId();
      echo 
$max;
      @
mysql_free_result($select);
      
mysql_close($link);
      exit();     
 }
elseif(
$_GET["SetCookie"]=="yes" && $_GET["name"]!=NULL)
 {
  
header("Cache-Control: no-store, no-cache, must-revalidate");
  
$domain="zital.no-ip.org";
  
$expire=time()+(86400*30); // 30 days
  
$name=htmlentities(utf8_decode($_GET["name"]));
  
setcookie('zitalk',$name,$expire,'/',$domain,0);
  exit();
 }
// Si hay cookie al coger foco por primera vez no se debe de borrar el campo ;)
if(trim($_COOKIE["zitalk"])!=NULL)
 {
  
$cookiename=$_COOKIE["zitalk"];
  
$firstname='false';
 }
else
 {
  
$cookiename="Nombre...";
  
$firstname='true';
 }
?>
Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
<head>
	<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1;"/>
	<title>AJAX Chat</title>
	<style type="text/css">
	body
	 {
	 	background-color: #C0C0C0;
	 	color: #000000;
	 	font-size: 13px;
	 }
	input
	 {
	 	font-size: 12px;
	 }
	#chat 
	 {
	 	border: 1px solid #000000;
	 	background-color: #F0F0F0;
		height: 200px;
		width: 800px;
		overflow: auto;
		padding: 8px;
	 }
	</style>
	<script type="text/javascript" src="js/ajax.js"></script>
	<script type="text/javascript" src="js/jquery.js"></script>
	<script type="text/javascript" src="js/color.js"></script>
	<script type="text/javascript" src="js/soundmanager2.js"></script>
	<script type="text/javascript">
		// cada 2,5 segundos se verifican nuevas entradas en la bbdd
		setInterval("ajaxLasId()",1500);
		// activamos sonido
		soundManager.onload = function() {		
		soundManager.createSound('mySound','sound/bonk.mp3');
		}	
	</script>
</head>	 
<body>
<div>
<h1>ZiTALK Ajax Chat v2.2</h1>
        	<img src="img/loading.gif" style="display:none" alt="loading..."/>	
		<p>
			<input type="text" id="nombre" size="15" maxlength="15" value="<?php echo $cookiename; ?>" onkeydown="pulse(this,event)"/>
			<input type="text" id="comentario" size="100" maxlength="100" value="Comentario..." onkeydown="pulse(this,event)"/>
		</p>
</div>
<div id="chat">
</div>
<div>
<a href="http://www.forosdelweb.com/f77/zitalk-version-2-1-beta-litle-ajax-chat-545601/">Codigo fuente</a>
<br />
Licencia LGPL: <a href="http://www.gnu.org/licenses/lgpl.html">http://www.gnu.org/licenses/lgpl.html</a>
<br />
e-mail: zitalman[@]gmail.com
<br /><br />
<h2>Version 2.2</h2>
Features:
<ol>
	<li>A&ntilde;adido sonido al registrarse nuevos mensajes.</li>
	<li>A&ntilde;adido campo nombre.</li>
	<li>El nombre se guarda en una cookie para que al volver a ingresar en el chat se mantenga.</li>
	<li>Funciona en: firefox, konqueror, internet explorer, opera.</li>
</ol>
Bug fixes:
<ol>
	<li>Corregido reperici&oacute;n de los mensajes.</li>	
</ol>
<br />
<h2>Librerias externas usadas:</h2>
<ol>
	<li><a href="js/jquery.js">jquery v1.1</a> url: <a href="http://www.jquery.com">http://www.jquery.com</a> Solamente usada para animaciones.</li> 
	<li><a href="js/color.js">plugin color jquery.</a></li>
	<li><a href="js/soundmanager2.js">soundmanager2, sonido con flash</a> url: <a href="http://www.schillmania.com/projects/soundmanager2/">http://www.schillmania.com/projects/soundmanager2/</a></li>
</ol>
</div>
<script type="text/javascript">
	<?php
		echo "var firstname=".$firstname.";";
	?>
	ajaxRead();	
	document.getElementById("nombre").focus();		
</script>	
</body>
</html> 
sigue abajo que no entra el post ;)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #2 (permalink)  
Antiguo 12/01/2008, 09:14
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Re: ZiTALK AJAX Chat version 2.2 Beta litle

ajax.js
Código:
var enviando=false;
var firstcomment=true;
function ajaxFunction()
  { var xmlHttp;
  try { xmlHttp=new XMLHttpRequest();return xmlHttp; }
  catch (e) { try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");return xmlHttp; }
  catch (e) { try { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");return xmlHttp; }
  catch (e) { alert("Your browser does not support AJAX!");return false; }
  }}}
function ajaxWrite()
 {
    enviando=true;
    var ajax = new ajaxFunction();
    var name = document.getElementById("nombre");
    var comment = document.getElementById("comentario");
    ajax.open("POST","?Write=yes",true);
    ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    ajax.send("name="+name.value+"&comment="+comment.value);
    comment.value='';
    comment.focus();
    enviando=false;
    //ajaxLasId();
 }
function ajaxRead()
 {
  var ajax = new ajaxFunction();
  var chat = document.getElementById('chat');
  chat.innerHTML='loading...<img src="img/loading.gif" />';
  ajax.onreadystatechange=function()
    {
     if(ajax.readyState==4)
      {
       chat.innerHTML=ajax.responseText;
       chat.scrollTop=1; // fix IE
       chat.scrollTop=chat.scrollHeight;
      }
    }
  ajax.open("GET","?Read=yes",true);
  ajax.send(null);
 }  
function ajaxReadLast(id)
 {
  var ajax = new ajaxFunction();
  var chat = document.getElementById('chat');

  ajax.onreadystatechange=function()
    {
    if(ajax.readyState==4)
      {
       var ele=document.createElement('div');
       ele.id='capa'+id;
       chat.appendChild(ele);
       ele.innerHTML=ajax.responseText;
       $("#capa"+id).animate({ color: "#ffffff", backgroundColor: "#000000"}, "slow");
       $("#capa"+id).animate({ color: "#000000", backgroundColor: "#f0f0f0"}, "slow");
       chat.scrollTop=1; // fix IE
       chat.scrollTop=chat.scrollHeight;
       soundManager.play('mySound');
      }
    }
  ajax.open("GET","?ReadLast=yes&id="+id,true);
  ajax.send(null);
 }
function ajaxLasId()
 {
  if(enviando==true)
   {
    return;
   }
  var chat=document.getElementById('chat');
  var span=chat.getElementsByTagName('span');
  for (var i = 0; i < span.length; i++)
   {
    var id=span[i].id;
   }  	
  var ajax = new ajaxFunction();
  ajax.onreadystatechange=function()
    {
    if(ajax.readyState==4)
      {
	if(id!=ajax.responseText)
	 {
	  ajaxReadLast(id);
	 }
      }
    }
  ajax.open("GET","?MaxId=yes&id="+id,true);
  ajax.send(null);
 }
function Cookie()
 {
  var name=document.getElementById("nombre");
  if(trim(name.value)=='')
   {
    return;
   }
  var ajax = new ajaxFunction();
  ajax.open("GET","?SetCookie=yes&name="+name.value,true);
  ajax.send(null);
 }
function pulse(esto,e)
 {
    var evt = e ? e : event;
    var key = window.Event ? evt.which : evt.keyCode;
    var nombre=document.getElementById('nombre');
    var comentario=document.getElementById('comentario');
    if(key==13) // tecla enter
     {
      if(trim(nombre.value)=='')
       {
        nombre.focus();
        return;
       }
      else if(trim(comentario.value)=='' || firstcomment==true)
       {
        Cookie();
        comentario.focus();
        return;
       }
      else if(firstname==false && firstcomment==false)
       {
        ajaxWrite();
       }
      }
     else // todas las demas
      {
       if(esto.id=='nombre')
        {	
         if(firstname==true)
          {
           esto.value='';
           firstname=false;
           return;
          }
        }
       if(esto.id=='comentario')
        {
         if(firstcomment==true)
          {
           Cookie();
           esto.value='';
           firstcomment=false;
           return;
          }
        }
      }
 }
function trim(text) 
 {
   text=text.replace(/^\text+/, "");
   text=text.replace(/\text+$/, "");
   return text;
 }
Librerias externas:

- jquery: http://zital.no-ip.org/txat/js/jquery.js
- plugin color jquery: http://zital.no-ip.org/txat/js/color.js
- soundamager js: http://zital.no-ip.org/txat/js/soundmanager2.js
- soundmanager swf:
http://zital.no-ip.org/txat/swf/soundmanager2.swf
- sonido bonk!: http://zital.no-ip.org/txat/sound/bonk.mp3

de todas formas podeis bajaros todo el pack desde la web:

http://zital.no-ip.org/txat/
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #3 (permalink)  
Antiguo 12/01/2008, 11:09
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
Re: ZiTALK AJAX Chat version 2.2 Beta litle

loading..........


al parecer, terminaste usando un toolkit EXTERNO no?


connection closed.
__________________

Maborak Technologies
  #4 (permalink)  
Antiguo 12/01/2008, 12:10
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Re: ZiTALK AJAX Chat version 2.2 Beta litle

Las librerias externas son solo un plus de funcionalidad:

- jquery + plugin colo para la animacion de los nuevos comentarios.
- soundmanager2: para el sonidito para los nuevos comentarios.

Todo lo demas esta hecho a pelo.

Esta es la version 'corta', se me han ocurrido nuevas cosas entonces la version 'gorda' tendra que esperar ;)

Muchas gracias por contestar.
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #5 (permalink)  
Antiguo 14/01/2008, 10:44
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
Re: ZiTALK AJAX Chat version 2.2 Beta litle

loading.............


Bueno, el chat me ha iluminado un problema que tenia y era en sincronizar los ultimos mensajes... y no sabia como, ahora ya se. Talvez luego haga un chat como el tuyo, preparate :p jejejeje.


connection closed.
__________________

Maborak Technologies
  #6 (permalink)  
Antiguo 14/01/2008, 10:57
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Re: ZiTALK AJAX Chat version 2.2 Beta litle

pues de nada, ya casi tengo terminada la version 2.3 del chat que sera la version final. En cuanto encuentre un icono guapo para ponerle al sonido lo termino ;)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #7 (permalink)  
Antiguo 16/01/2008, 22:30
 
Fecha de Ingreso: noviembre-2007
Mensajes: 24
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: ZiTALK AJAX Chat version 2.2 Beta litle

Ya veo que progresais...
Enhorabuena por el progreso y el rigor que le poneis!!!!
Yo me he mudado a otros asuntos, pero de veras que motiva esta chulada simple.

Estoy en una idea sobre Google and Flickr Images

http://aamap.110mb.com/travel/

Saludos
  #8 (permalink)  
Antiguo 17/01/2008, 02:17
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Re: ZiTALK AJAX Chat version 2.2 Beta litle

ya va por la version 2.3 pero aun no he puesto el codigo. Ya que creo que es la version definitiva, ya que no se me ocurre nada mas que poner. Comentare el codigo y hare un pequeño manual explicando todo el asunto, el porque si y el porque no de las cosas, bueno tambien quiero ponerlo mas bonito ya que el diseño es muy feo eejejejej. Gracias a todos.
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:49.