25/lib/mse25_web/controllers/page_controller.ex
Anders Englöf Ytterström 89b93cf231
List shared links (#15)
* Exclude not published items in directus client

* Add link view to page controller

* Add page controller links list view to router

* Add links list view CSS

* Add permalink view for link

* Improve page titles

* Let user copy link permalink to clipboard

if alt, shift or ctrl are pressed, fallback to
default behavior.
2024-10-03 14:38:56 +02:00

54 lines
1.4 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 = Directus.get_articles!(limit: 9999) |> group_annually
render(conn, :articles,
page_title: "Webblogg",
articles: articles
)
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