25/lib/mse25_web/controllers/page_controller.ex
Anders Englöf Ytterström bb3726d071
Article search (#16)
* Cleanup CSS file

* Add free text query to Directus client

* Add search form to article list view

* Search titles instead of contents

Will prevent DDOS slighty.
2024-10-03 15:31:19 +02:00

61 lines
1.6 KiB
Elixir

defmodule Mse25Web.PageController do
use Mse25Web, :controller
alias Mse25.Directus
def home(conn, _params) do
[most_recent_article, older_article] = Directus.get_articles!(limit: 2)
recent_event = Directus.get_events!(limit: 1)
upcoming_events = Directus.get_events!(limit: 1, upcoming: true)
brutal_legends = Directus.get_albums!(limit: 1)
render(conn, :home,
page_title: "Anders Englöf Ytterström",
layout: false,
recent_article: most_recent_article,
older_article: older_article,
recent_event: recent_event,
upcoming: upcoming_events,
brutal_legends: brutal_legends
)
end
def articles(conn, _params) do
articles =
case conn.params do
%{"q" => query_string} -> Directus.get_articles!(limit: 9999, query: query_string)
_ -> Directus.get_articles!(limit: 9999)
end
|> group_annually
render(conn, :articles,
page_title: "Webblogg",
articles: articles,
q: conn.params["q"],
nosearch?: conn.params["q"] == nil or conn.params["q"] == ""
)
end
def links(conn, _params) do
links = Directus.get_links!(limit: 9999) |> group_by_date
render(conn, :links,
page_title: "Delningar",
links: links
)
end
defp group_annually(items) do
items
|> Enum.group_by(fn %{"slug" => slug} -> String.slice(slug, 0..3) end)
|> Map.to_list()
|> Enum.sort(fn {a, _a}, {b, _b} -> b < a end)
end
defp group_by_date(items) do
items
|> Enum.group_by(fn %{"pubDate" => pub_date} -> pub_date end)
|> Map.to_list()
|> Enum.sort(fn {a, _a}, {b, _b} -> b < a end)
end
end