Este es una de las primeras funciones que cree experimentando y que me ayudo a entender como funcionaba el lenguaje de Blogger. También puedo decir que es la menos útil de todas las que he creado, pero me gusta tenerla a la mano por si la necesito.
Situación
En Blogger tenemos una etiqueta para agregar atributos al padre, puedes agregar cualquier atributo pero solo uno a la vez, por ejemplo, para agregar id
, class
y data-foo
, tendrías que hacerlo así:
<b:attr name='id' value='foo'/>
<b:attr name='class' value='foo'/>
<b:attr name='data-foo' value='bar'/>
Función en Blogger
Con esto en mente, podemos crear una función que nos permita agregar múltiples atributos en una sola línea, para ello nos ayudaremos de la etiqueta b:loop
y aprovecharemos la naturaleza de b:attr
<b:includable id='@attr'>
<b:comment><!--
// @arg {object} - Un objeto de matrices con los atributos y sus valores
--></b:comment>
<b:loop values='data:' var='i'>
<b:attr expr:name='data:i[0] ?: "null"' expr:value='data:i[1]'/>
</b:loop>
</b:includable>
Explicación
Lo que hemos hecho es crear una función llamada @attr
que recibe un objeto de matrices. Aunque suene raro, en Blogger una matriz se pueden definir con cualquiera de las dos llaves []
{}
, por ejemplo:
"data:" {
{"attr","value"},
["foo","bar"]
}
Conocer este hecho es importante ya que el atributo data de la etiqueta b:include
solo acepta datos u objetos definidos con llaves. Luego la etiqueta b:loop
interpretará este objeto como una matríz para obtener el nombre y valor de cada atributo con data:i[0]
y data:i[1]
respectivamente.
Modo de uso
Agrega la inclusion en un marcado predeterminado de Blogger de tipo “Common”. Ahora puedes incluirlo en donde lo necesites usando la etiqueta b:include
y pasando un objeto de matrices.
Agregar atributos
Se comporta como setAttribute en JavaScript, donde el primer valor es el nombre del atributo y el segundo el valor. Para ello incluye la función de esta manera:
<footer class='another'>
<b:include data='{["id","foo"],["class","foo"]}' name='@attr'/>
</footer>
<footer id='foo' class='foo'></footer>
Nota: Si el atributo especificado ya existe, el valor se actualiza.
Remover atributos
Equivalente a removeAttribute en JavaScript, donde el primer valor es el nombre del atributo que se desea borrar. Para ello incluye la función de esta manera:
<footer id='example' class='another'>
<b:include data='{["id"],["class"]}' name='@attr'/>
</footer>
<footer></footer>
Conclusión
La utilidad de esta función depende de ti como desarrollador, pero si te gusta experimentar con el lenguaje de Blogger, te recomiendo que la pruebes y la modifiques a tu gusto.
Como es habitual en este tipo de artículos, puedes encontrar un ejemplo funcional en los enlaces adjuntos al final. Si tienes alguna duda, puedes dejarla en los comentarios. ¡Gracias por pasar!