Avatares y problemas con emoticones

El tema de los avatares en los comentarios me ha provocado un problema indeseado. Si bien no es algo usual, como podría repetirse, quisiera mostrar la forma en que lo he solucionado.

Se trata de los emoticones en los comentarios y se me ocurre que esta modificación también podría ayudar en otros casos donde el truco no funciona porque interfiere con el formulario u otros elementos agregados.

El script, lo que hace es leer un sector específico del blog y buscar una serie de textos. Si los encuentra, los cambia por cierta imagen. Por ejemplo, si encuentra :D cambia esos dos caracateres por una imagen como esta risa. El problema surge cuando esos caracteres son parte de un código, al cambiarlos se produce alguna clase de resultado indeseado.

Si bien es cierto que esas combinaciones de caracteres no son usuales, el nuevo código de los avatares podría llegar a contenerlos, es raro pero es posible. De los cientos que he chequeado sólo ocurrió con uno pero, aún así, ese es suficiente para trastocar una página.

El script es sencillo pero requiere de un dato, el ID del bloque a verificar y cambiar. En un principio el sector a cambiar era el identificado como comments, luego, cuando se agregaron los formularios incrustados hubo que limitar ese bloque así que se usaba comments-block, ahora, hay que limitarlo aún más y verificar sólo el contenido del comentario pero, esa etiqueta no tiene un ID:
<dd class='comment-body'>
<b:if cond='data:comment.isDeleted'>
<span class='deleted-comment'><data:comment.body/></span>
<b:else/>
<p><data:comment.body/></p>
</b:if>
</dd>
Así que, lo primero que haremos será agregarle uno, usando el número que le asigna Blogger para identificarlos e inmediatamente después llamaremos a la función de JavaScript para que lo verifique y lo cambie:
<p expr:id='&quot;combody-&quot; + data:comment.anchorName'><data:comment.body/></p>
<script type='text/javascript'>
cual = &quot;combody-&quot; + &quot;<data:comment.anchorName/>&quot;;
emoticonComentario(cual);
</script>
Por último, deberíamos eliminar el script anterior y agregar el nuevo antes de </head> condicionándolo para que sólo se cargue en las páginas individuales:
<b:if cond='data:blog.pageType == &quot;item&quot;'>
<script type='text/javascript'>
//<![CDATA[
function emoticonComentario(cual) {
if(!document.getElementById) {return;}
bodyText = document.getElementById(cual);
cualTexto = bodyText.innerHTML;
// ....... AQUI NADA CAMBIA
bodyText.innerHTML = cualTexto;
}
//]]>
</script>
</b:if>
El nuevo script que reemplaza el mostrado en una entrada anterior está contenido en este archivo de texto

0 comentarios:

Publicar un comentario