Macros
Documentacion oficial Un macro es un fragmento de codigo parametrizado que podemos usar como una template.
Necesitamos instalar el plugin macros:
Lo configuramos en mkdocs.yml indicando cual es la carpeta absoluta que incluye nuestras macros:
plugins:
- search:
separator: '[\s\-,:!=\[\]()"`/]+|\.(?!\d)|&[lg]t;|(?!\b)(?=[A-Z][a-z])'
- macros:
include_dir: docs/_include/macros # https://mkdocs-macros-plugin.readthedocs.io/en/latest/advanced/
Definiendo una macro
Creamos un archivo dentro y definimos una macro usando las directivas :
{% macro youtubeVideo(videoId, videoTitle) %}
<div class="embed-youtube">
<iframe width="560" height="315" src="https://www.youtube.com/embed/{{ videoId }}" title="{{ videoTitle }}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
{% endmacro %}
Importando la macro
En cualquiera de nuestros markdown podemos importar la macro
y la usamos posteriormente invocandola indincando los argumentos, esto renderizara el contenido de la template en nuestro fichero markdownO podemos importar todas las macros de un archivo y tenerlas bajo un prefijo para su uso:
{% import 'embeded_media.macros' as embeded_media_macros %}
y luego en el documento la usamos asi , pasandole los argumentos:
{{embeded_media_macros.spotifyList('0WjifMva8IEzE937TGqt9D?si=d4bd4aafcf244840')}}
Variables en las macros
A nivel de pagina podemos definir variables globales para el documento, añadiendo en el encabezado:
---
title: Macros
description: Explicacion de las macros
variableA: valueA
variableList: ["valorA", "valorB", "valorC"]
variableListObjects: [{"name":"Luis"}, {"name":"Juan"}, {"name":"Maria"}]
---
La variable A es mi super value A
y blucles for:
<ul>
{% for variable in variableList %}
<li>{{ variable|e }}</li>
{% else %}
<li><em>no users found</em></li>
{% endfor %}
</ul>
- valorA
- valorB
- valorC
Bucles con objetos
<ul>
{% for person in variableListObjects %}
<li>{{ person.name|e }}</li>
{% else %}
<li><em>no persons found</em></li>
{% endfor %}
</ul>
- Luis
- Juan
- Maria
Definiendo macros en ficheros externos
Importamos todas las funciones de la macro bajo el alias simple_macros
{% import 'simple.macros' as simple_macros %}
{{simple_macros.createTable([{"name":"Pedri"}, {"name":"Maribel"}, {"name":"Marisa"}])}}
Pedri |
Maribel |
Marisa |
Podemos utilizar los plugins de mkdocs en nuestra macros
Importamos todas las funciones de la macro bajo el alias simple_macros
Creamos una nueva macro que haga uso de tabs
{% macro createPersonsTabs(persons) %}
{% for person in persons %}
=== "{{ person.name }}"
My name is {{ person.name|e }} .
{% if person.name == 'Pedri' %}
:man_raising_hand: I like {{ person.hobbies|e }}
{% elif person.name == 'Maribel' %}
:grinning: I like {{ person.hobbies|e }}
{% else %}
I like {{ person.hobbies|e }} and hate other persons.
{% endif %}
{% endfor %}
{% endmacro %}
La importamos
{% import 'simple.macros' as simple_macros %}
La usamos
{{simple_macros.createPersonsTabs([{"name":"Pedri", "hobbies":"sing, jump"}, {"name":"Maribel", "hobbies":"Play Guitar"}, {"name":"Marisa", "hobbies":"Listen to Judas Priest"}])}}
My name is Pedri .
I like sing, jump
My name is Maribel .
I like Play Guitar
My name is Marisa .
I like Listen to Judas Priest and hate other persons.
Ejemplo usando PieChart
{% macro createPersonsChartPie(persons) %}
```mermaid
pie title How are the best voted person?
{% for person in persons %}
"{{ person.name|e }}" : {{ person.voted|e }}
{% endfor %}
```
{% endmacro %}
{% import 'simple.macros' as simple_macros %}
{{simple_macros.createPersonsChartPie([{"name":"Pedri", "voted":15}, {"name":"Maribel", "voted":65}, {"name":"Marisa", "voted":20}])}}