I’m trying to get some of my templates in Obsidian working together with using Zotero and for this I want to write a corresponding (adapted) template.
I’m almost happy with it but still struggling with one thing: Annotations from Zotero are properly read by the Obsidian plugin which extracts them based on their highlighting color and even grouping works as I would like to. However, I would like to have a certain order in which they’re imported.
The following is a macro I’m using for a different function and it shows the Order I would like to have the groups sorted:
{%- macro colorValueToName(color) -%}
{%- switch color -%}
{%- case "#ff6666" -%}
Questionable
{%- case "#2ea8e5" -%}
TODO / follow up
{%- case "#ffd400" -%}
Important
{%- case "#a28ae5" -%}
Interesting
{%- case "#5fb236" -%}
Good
{%- default -%}
Interesting but not relevant
{%- endswitch -%}
{%- endmacro -%}
Now, when “Good” (green) comes before “Questionable” in the annotations, the order will be accordingly. I understand, that I’ll have to define most likely a dict and use dictsort somehow but I’m unsure how to do so.
The relevant code part where the annotations are fetched and group is this:
## Annotations
{% persist "annotations" %}
{% set annots = annotations | filterby("date", "dateafter", lastImportDate) -%}
{% if annots.length > 0 %}
### Imported on {{importDate | format("YYYY-MM-DD h:mm a")}}
{% for color, annots in annots | groupby("color") -%}
#### {{colorValueToName(color)}}
{% for annot in annots -%}
> [!quote{% if annot.color %}|{{annot.color}}{% endif %}] {{calloutHeader(annot.type)}}
[...removed unrelated code]
{% endfor -%}
{% endfor -%}
{% endif %}
{% endpersist %}
I’m open for thoughts and suggestions. I would think that somewhat has to be done with {% for color, annots in annots | groupby(“color”) -%}