Bueno, esta vez os traigo una etiqueta bastante simple pero que puede resultaros útil, aunque en casos muy concretos.
Lo que hace este tag es resaltar (highlight) ciertas palabras de un texto. En mi caso lo he empleado para marcar las palabras en los resultados de una búsqueda (sí, lo sé, lucene tiene su propio highlight, pero en este caso concreto no me servía...).
El resaltado de las palabras lo hace englobándolas dentro de un , por lo que sólo tendréis que adaptar los estilos a esa clase para ponerlo a vuestro gusto.
/***
* Tag para hacer el highlighting de un determinado texto
*
* @attr texto REQUIRED texto sobre el que hacer el highlighting
* @attr terms REQUIRED String o array de términos a resaltar
*/
def highlightText = {attrs->
def texto = attrs['texto'].toString()
def terms = attrs['terms']
if (texto && terms)
{
if (terms instanceof String)
{
terms = [terms]
}
else
{
terms = terms.toList()
}
def matches
terms = terms.unique()
terms.each{term->
matches = texto.findAll("(?i)\\b$term\\b")
matches = matches.unique()
matches.each{match->
texto = texto.replaceAll(match,"<span class='pbuscada'>$match</span>")
}
}
}
out << texto
}
Como está puesto en los propios comentarios del tag, hay dos atributos obligatorios:
- texto: el texto sobre el que aplicar el resaltado.
- terms: un array con los términos a resaltar.
Un ejemplo de utilización:
<g:highlighttext terms="['resaltadas','unas']" texto="Ejemplo de unas palabras resaltadas"/>
Que dará como resultado:
Ejemplo de <span class="pbuscada">unas</span> palabras <span class="pbuscada">resaltadas</span>


0 comentarios:
Publicar un comentario