Agrega o remueve múltiples atributos en una línea

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!