fix: issue #6 had missing title suppression
This commit is contained in:
@@ -136,6 +136,8 @@ defmodule BDS.Rendering.ListArchive do
|
|||||||
end
|
end
|
||||||
|
|
||||||
defp normalize_list_posts(ctx, posts, language) do
|
defp normalize_list_posts(ctx, posts, language) do
|
||||||
|
show_title_by_category = show_title_by_category(ctx.metadata)
|
||||||
|
|
||||||
Enum.map(posts, fn post ->
|
Enum.map(posts, fn post ->
|
||||||
post_id = MapUtils.attr(post, :id)
|
post_id = MapUtils.attr(post, :id)
|
||||||
post_record = Map.get(ctx.record_by_id, post_id)
|
post_record = Map.get(ctx.record_by_id, post_id)
|
||||||
@@ -147,6 +149,9 @@ defmodule BDS.Rendering.ListArchive do
|
|||||||
MapUtils.attr(post, :excerpt, "")
|
MapUtils.attr(post, :excerpt, "")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
categories =
|
||||||
|
MapUtils.attr(post, :categories, record_list(post_record, :categories)) || []
|
||||||
|
|
||||||
%{
|
%{
|
||||||
id: MapUtils.attr(post, :id),
|
id: MapUtils.attr(post, :id),
|
||||||
slug: MapUtils.attr(post, :slug),
|
slug: MapUtils.attr(post, :slug),
|
||||||
@@ -161,8 +166,7 @@ defmodule BDS.Rendering.ListArchive do
|
|||||||
created_at: MapUtils.attr(post, :created_at, record_value(post_record, :created_at)),
|
created_at: MapUtils.attr(post, :created_at, record_value(post_record, :created_at)),
|
||||||
updated_at: MapUtils.attr(post, :updated_at, record_value(post_record, :updated_at)),
|
updated_at: MapUtils.attr(post, :updated_at, record_value(post_record, :updated_at)),
|
||||||
tags: MapUtils.attr(post, :tags, record_list(post_record, :tags)) || [],
|
tags: MapUtils.attr(post, :tags, record_list(post_record, :tags)) || [],
|
||||||
categories:
|
categories: categories,
|
||||||
MapUtils.attr(post, :categories, record_list(post_record, :categories)) || [],
|
|
||||||
template_slug:
|
template_slug:
|
||||||
MapUtils.attr(post, :template_slug, record_value(post_record, :template_slug)),
|
MapUtils.attr(post, :template_slug, record_value(post_record, :template_slug)),
|
||||||
do_not_translate:
|
do_not_translate:
|
||||||
@@ -172,7 +176,7 @@ defmodule BDS.Rendering.ListArchive do
|
|||||||
record_value(post_record, :do_not_translate, false)
|
record_value(post_record, :do_not_translate, false)
|
||||||
),
|
),
|
||||||
href: MapUtils.attr(post, :href),
|
href: MapUtils.attr(post, :href),
|
||||||
show_title: true,
|
show_title: show_list_title?(categories, show_title_by_category),
|
||||||
linked_media: [],
|
linked_media: [],
|
||||||
outgoing_links: [],
|
outgoing_links: [],
|
||||||
incoming_links: []
|
incoming_links: []
|
||||||
@@ -180,6 +184,39 @@ defmodule BDS.Rendering.ListArchive do
|
|||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# A post's title is hidden in list/archive pages when any of its categories
|
||||||
|
# has "show title" turned off. Mirrors the single-post behaviour so that, for
|
||||||
|
# example, asides render as body-only entries everywhere.
|
||||||
|
defp show_list_title?([], _show_title_by_category), do: true
|
||||||
|
|
||||||
|
defp show_list_title?(categories, show_title_by_category) do
|
||||||
|
not Enum.any?(categories, fn category ->
|
||||||
|
Map.get(show_title_by_category, category, true) == false
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
@default_show_title_by_category %{
|
||||||
|
"article" => true,
|
||||||
|
"picture" => true,
|
||||||
|
"aside" => false,
|
||||||
|
"page" => true
|
||||||
|
}
|
||||||
|
|
||||||
|
defp show_title_by_category(metadata) do
|
||||||
|
settings = Map.get(metadata, :category_settings, %{}) || %{}
|
||||||
|
|
||||||
|
Enum.reduce(settings, @default_show_title_by_category, fn {category, category_settings}, acc ->
|
||||||
|
Map.put(acc, category, category_show_title?(category_settings))
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp category_show_title?(settings) do
|
||||||
|
case MapUtils.attr(settings, :show_title, true) do
|
||||||
|
false -> false
|
||||||
|
_other -> true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
defp normalize_pagination(nil, posts) do
|
defp normalize_pagination(nil, posts) do
|
||||||
total_items = length(posts)
|
total_items = length(posts)
|
||||||
|
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ value PostContext {
|
|||||||
excerpt: String?
|
excerpt: String?
|
||||||
author: String?
|
author: String?
|
||||||
language: String?
|
language: String?
|
||||||
show_title: Boolean -- Always true for post pages
|
show_title: Boolean -- True for post pages; in list/archive pages it is false when any of the post's categories has "show title" disabled (e.g. asides)
|
||||||
published_at: Timestamp
|
published_at: Timestamp
|
||||||
created_at: Timestamp
|
created_at: Timestamp
|
||||||
updated_at: Timestamp
|
updated_at: Timestamp
|
||||||
|
|||||||
@@ -50,4 +50,22 @@ defmodule BDS.Generation.AsideArchiveRenderingTest do
|
|||||||
assert category_html =~ "ASIDE BODY MARKER"
|
assert category_html =~ "ASIDE BODY MARKER"
|
||||||
assert tag_html =~ "ASIDE BODY MARKER"
|
assert tag_html =~ "ASIDE BODY MARKER"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "aside titles are hidden in category, tag, and date archives", %{
|
||||||
|
project: project,
|
||||||
|
temp_dir: temp_dir
|
||||||
|
} do
|
||||||
|
{:ok, _} = Generation.render_site_section(project.id, :category)
|
||||||
|
{:ok, _} = Generation.render_site_section(project.id, :tag)
|
||||||
|
{:ok, _} = Generation.render_site_section(project.id, :date)
|
||||||
|
|
||||||
|
year = Integer.to_string(DateTime.utc_now().year)
|
||||||
|
date_html = read_archive(temp_dir, [year])
|
||||||
|
category_html = read_archive(temp_dir, ["category", "aside"])
|
||||||
|
tag_html = read_archive(temp_dir, ["tag", "asides-tag"])
|
||||||
|
|
||||||
|
refute date_html =~ "Aside Title Marker"
|
||||||
|
refute category_html =~ "Aside Title Marker"
|
||||||
|
refute tag_html =~ "Aside Title Marker"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user