Contenido

Montemos un previsualizador de comentarios con jQuery

21 Nov

+ 7

En Learning jQuery, han desarrollado un sistema con el cual podremos crear un previsualizador de comentarios con esta fantástica librería. 

Ingredientes 

  • Un Wordpress
  • Un theme (en este caso Kubrick)
  • jQuery
  • Un editor

Manos a la obra

Para empezar debemos conocer donde se encuentra el formulario de envio de comentarios del theme, en Kubrick (el theme por defecto de Wordpress) se encuentra en comments.php, generalmente todos los themes suelen seguir ese patrón aunque hay algunos que puede tenerlo en otros ficheros.


      <form action="..." method="post" id="commentform">
        <p><textarea name="comment" id="comment" cols="100" rows="10" tabindex="4"></textarea></p>
        <p><input name="submit" id="submit" tabindex="5" value="Submit Comment" type="submit">
        <input name="comment_post_ID" value="30" type="hidden">
        </p>
      </form>

El formulario de envio es similar a este. Hemos de recordar el id de nuestro textarea ya que será el que irá enviando el contenido a nuestro previsualizador.

Crear el previsualizador

Nuestra intención es crear dinámicamente una capa <div></div> al obtener el foco en nuestro textarea e introducir en él el contenido, mediante el uso de eventos  añadiremos a nuestro textarea la funcionalidad necesaria para que nuestra capa previsualize el contenido.

Al evengo onfocus, le asignamos la creación de la capa.

   $('#comment').onefocus(function() {
        $(this).parent().after('<div id="preview-box"><div class="comment-by">Live Comment Preview</div><div id="live-preview"></div></div>');
      });

y al evento onkeyup el proceso necesario para pasar la información nueva al previsualizador.


   $('#comment').keyup(function() {
        $('#live-preview').html( $(this).val() );
      });

Uno de los problemas con los que nos encontramos son los saltos de línea que dentro de l textarea son \n y nosotros necesitamos un <br />, para ello usaremos una expresión regular que se encargue de cambiar los \n por el salto de línea que necesitamos.


   $('#comment').keyup(function() {
    $comment = $(this).val();
    $comment = $comment.replace(/\n/g, "<br />");
    $comment = $comment.replace(/\n\n+/g, '<br /><br />');
    $('#live-preview').html( $comment );
  });

Con esto ya podemos montar nuestro previsualizador de comentarios usando jQuery.

El código completo


      $(document).ready(function() {
        $('#comment').onefocus(function() {
          $('#comment').parent().after('<div id="preview-box"><div class="comment-by">Live Comment Preview</div><div id="live-preview"></div></div>');
        });
        var $comment = '';
        $('#comment').keyup(function() {
          $comment = $(this).val();
          $comment = $comment.replace(/\n/g, "<br />");
          $comment = $comment.replace(/\n\n+/g, '<br /><br />');
          $('#live-preview').html( $comment );
        });
      });

Ostia tio esta genial, la pena que ahora toy de exámenes y no puedo dedicarme a hacerlo pero aver si el finde tengo un ratillo :D

Solo le veo un fallo, a eso le puedes meter html y bueno, el resultado no seria el mismo, porque por ejemplo, en la pagina de prueba, he puesto y me ha salido un area de texto, en cambio, en el comentario saldra como texto.

Habria que depurarlo con mas replaces, a punta pala, para quitar todos los exceptuando los que quieres poner.

Esto es muysuperutil para los trogloditas que aun usamos bbcode para nuestras webs…

(personalmente me inspira mas confianza bbcode q permitir algo de html…)

Excelente … lo voy a poner en mi sitio ..

Gracias por el tip

Un proyecto para un dia lluvioso. :-P
Gracias!

Hola! Gracias por la referencia a mi artículo en Learning jQuery! :)

This is really fresh idea of the design of the site! I seldom met such in Internet. Good Work dude!

Hola, como podria poner una pausa de X segundos antes de que se previsualice un comentario?

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.