Categorías de color en Jekyll

Cómo implementar categorías de color reutilizables Jekyll.

Jekyll Visualization

Introducción

Como en este pequeño blog, generalmente querrás organizar las entradas con contenido parecido en categorías o etiquetas.

En este caso, lo que quiero hacer es asignar un color a cada etiqueta en Jekyll.

Para ello, he creado en el directorio raíz un directorio llamado _categories, donde se almacenará cada categoría como un archivo HTML (markdown).

.
├── _categories
│   ├── d3js.html
│   ├── data.html
│   ├── jekyll.html
│   ├── python.html
│   └── visualization.html

El código de una categoría _categories/jekyll.html podría ser el siguiente:

---
title: Jekyll
date: 2016-12-17 11:09:00 -05:00
color: "#ffc107"
---

En este post _post/2017-11-20-jekyll-color-code-categories añadiremos una lista de categorías:

---
layout: post
title:  "Categorías de color en Jekyll"
description: "Cómo implementar categorías de color reutilizables Jekyll."
date:   2017-12-02 11:07:21 +0100
categories: ["Jekyll", "Visualization"]
---
## Introducción
Como en este pequeño blog, generalmente querrás organizar las entradas ...

También es necesario añadir una colección de ‘categories’ en el archivo de configuración ./_config.yml :

collections:
  - categories

Para mostrar dicha categoría en una entrada o en la página principal utilicé el siguiente snippet (aunque seguramente podría haber pensado una solución mejor):

    {% for category in page.categories %}
        {% for category_template in site.categories %}
            {% if category == category_template.title %}
            <strong style="color:{{ category_template.color }};">
                {{ category }}
            </strong>
            {% endif %}
        {% endfor %}  
    {% endfor %}

Ha sido complicado evitar las llamadas “liquid template tags” como {% xxx %) mientras escribía esta entrada; Encontré una solución relativamente limpia para este problema sin usar plug-ins en: https://stackoverflow.com/questions/3426182/how-to-escape-liquid-template-tags

El resultado de esta solución es la que puedes ver en este blog.