Created
May 11, 2022 23:39
-
-
Save manuel-rubio/dab3b530a944ed7c02c8a86d9855e5f6 to your computer and use it in GitHub Desktop.
Categories extension for lambdapad
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@doc """ | |
A set of transformations to help us work with categories. | |
This extension requires the following configuration entries: | |
[categories.desarrollo] | |
class = "cat-1" | |
link = "category/desarrollo" | |
[categories.historias] | |
class = "cat-2" | |
link = "category/historias" | |
There are two different transformations in this file: | |
- categories: it generates a map where the key is the category and the content is the number of posts in addition of the configuration options. You can use this in pages or widgets with transform_config. | |
- category class: sets the category_class key based on the configuration and what's defined in the category field for each post. You can use this in pages or widgets with transforma_item. | |
""" | |
transform "categories" do | |
set on: :config | |
set run: fn(config, posts) -> | |
num_posts = Enum.reduce(posts, %{}, & Map.update(&2, &1["category"], 1, fn i -> i + 1 end)) | |
categories = | |
for {name, data} <- config["categories"], into: %{} do | |
{name, Map.put(data, "num_posts", num_posts[name])} | |
end | |
|> Enum.sort_by(fn {_, data} -> data["class"] || "000" end) | |
Map.put(config, "_categories", categories) | |
end | |
end | |
transform "category class" do | |
set on: :item | |
set run: fn(post, config) -> | |
category_name = post["category"] | |
class = config["categories"][category_name]["class"] || "" | |
Map.put(post, "category_class", class) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment