references: fix docs, fix invalid class, improve structure

This commit is contained in:
Inhji 2023-07-05 06:50:27 +02:00
parent 2ac2e1ec01
commit 1de3687693

View file

@ -22,38 +22,36 @@ defmodule ChiyaWeb.References do
end end
@doc """ @doc """
Checks each reference returned from `get_references/1` and validates its existence. Checks a reference returned from `get_references/1` and validates its existence.
""" """
def validate_references(references) do def validate_reference({placeholder, slug, custom_title} = _reference) do
Enum.map(references, fn {placeholder, slug, custom_title} -> note = Chiya.Notes.get_note_by_slug_preloaded(slug)
note = Chiya.Notes.get_note_by_slug_preloaded(slug)
valid = valid =
case note do case note do
nil -> false nil -> false
_ -> true _ -> true
end end
# If a custom title was defined, use it, # If a custom title was defined, use it,
# otherwise use the note's title # otherwise use the note's title
title = title =
cond do cond do
custom_title != slug -> custom_title != slug ->
custom_title custom_title
valid -> valid ->
note.name note.name
true -> true ->
slug slug
end end
{placeholder, slug, title, valid} {placeholder, slug, title, valid}
end)
end end
@doc """ @doc """
Returns a list of slugs that are referenced in `string`, optionally filtering by `filter_type`. Returns a list of slugs that are referenced in `string`.
""" """
def get_reference_ids(string) do def get_reference_ids(string) do
string string
@ -67,7 +65,7 @@ defmodule ChiyaWeb.References do
def replace_references(string) do def replace_references(string) do
string string
|> get_references() |> get_references()
|> validate_references() |> Enum.map(&validate_reference/1)
|> Enum.reduce(string, fn {placeholder, slug, title, valid}, s -> |> Enum.reduce(string, fn {placeholder, slug, title, valid}, s ->
String.replace(s, placeholder, get_link(slug, title, valid)) String.replace(s, placeholder, get_link(slug, title, valid))
end) end)
@ -78,7 +76,7 @@ defmodule ChiyaWeb.References do
end end
defp get_link_class(valid) do defp get_link_class(valid) do
if valid, do: "{:.invalid}", else: "" if not valid, do: "{:.invalid}", else: ""
end end
defp map_to_tuple([placeholder, note_slug]), defp map_to_tuple([placeholder, note_slug]),