From ace33f3d06b2712e9782fae5ae048eebc2e4672b Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Sat, 25 Apr 2020 15:47:22 -0400 Subject: [PATCH] Timeline pagination --- assets/css/clacks.scss | 4 +++ .../templates/frontend/_timeline.html.eex | 15 +++++++++++ lib/clacks_web/views/frontend_view.ex | 27 ++++++++++++++++--- 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/assets/css/clacks.scss b/assets/css/clacks.scss index b05774a..7756eb2 100644 --- a/assets/css/clacks.scss +++ b/assets/css/clacks.scss @@ -84,6 +84,10 @@ ul.status-list { } } +.pagination-link { + text-align: center; +} + .status { padding: 0.5rem; border: 1px solid #ddd; diff --git a/lib/clacks_web/templates/frontend/_timeline.html.eex b/lib/clacks_web/templates/frontend/_timeline.html.eex index 2ee54a8..3c38c4a 100644 --- a/lib/clacks_web/templates/frontend/_timeline.html.eex +++ b/lib/clacks_web/templates/frontend/_timeline.html.eex @@ -1,3 +1,10 @@ +<% newer = prev_page_path(@conn, @statuses_with_authors) %> +<%= if newer do %> + +<% end %> + + +<% older = next_page_path(@conn, @statuses_with_authors) %> +<%= if older do %> + +<% end %> + diff --git a/lib/clacks_web/views/frontend_view.ex b/lib/clacks_web/views/frontend_view.ex index 1d5d57c..53a98af 100644 --- a/lib/clacks_web/views/frontend_view.ex +++ b/lib/clacks_web/views/frontend_view.ex @@ -1,6 +1,6 @@ defmodule ClacksWeb.FrontendView do use ClacksWeb, :view - alias Clacks.Actor + alias Clacks.{Actor, Activity} @spec display_username(actor :: Actor.t()) :: String.t() @@ -13,8 +13,6 @@ defmodule ClacksWeb.FrontendView do "@" <> name <> "@" <> host end - @absolute_timestamp_threshold 24 * 60 * 60 - def display_timestamp(str) when is_binary(str) do display_timestamp(Timex.parse!(str, "{ISO:Extended}")) end @@ -43,4 +41,27 @@ defmodule ClacksWeb.FrontendView do Timex.format!(datetime, "%FT%T%:z", :strftime) end end + + def prev_page_path(conn, activities) do + if Map.has_key?(conn.query_params, "max_id") do + Phoenix.Controller.current_path(conn, %{ + since_id: activities |> List.first() |> activity_id() + }) + else + nil + end + end + + def next_page_path(conn, activities) do + if length(activities) < 20 do + nil + else + Phoenix.Controller.current_path(conn, %{ + max_id: activities |> List.last() |> activity_id() + }) + end + end + + defp activity_id(%Activity{id: id}), do: id + defp activity_id({%Activity{id: id}, _}), do: id end