mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-11-24 20:37:59 +01:00
47 lines
1.2 KiB
Elixir
47 lines
1.2 KiB
Elixir
|
defmodule PhilomenaWeb.PaginationView do
|
||
|
use PhilomenaWeb, :view
|
||
|
|
||
|
def first_page?(page) do
|
||
|
page.page_number == 1
|
||
|
end
|
||
|
|
||
|
def last_page?(page) do
|
||
|
page.page_number == page.total_pages
|
||
|
end
|
||
|
|
||
|
def page_path(route, params, number) do
|
||
|
route.(Keyword.merge(params, page: number))
|
||
|
end
|
||
|
|
||
|
def first_page_path(_page, route, params), do: page_path(route, params, 1)
|
||
|
def prev_page_path(page, route, params), do: page_path(route, params, page.page_number - 1)
|
||
|
def next_page_path(page, route, params), do: page_path(route, params, page.page_number + 1)
|
||
|
def last_page_path(page, route, params), do: page_path(route, params, page.total_pages)
|
||
|
|
||
|
def left_gap?(page) do
|
||
|
page.page_number >= 5
|
||
|
end
|
||
|
|
||
|
def left_page_numbers(page) do
|
||
|
number = page.page_number
|
||
|
min = 1
|
||
|
max = page.total_pages
|
||
|
|
||
|
(number - 5..number)
|
||
|
|> Enum.filter(& &1 >= min and &1 != number and &1 <= max)
|
||
|
end
|
||
|
|
||
|
def right_gap?(page) do
|
||
|
page.total_pages - page.page_number >= 5
|
||
|
end
|
||
|
|
||
|
def right_page_numbers(page) do
|
||
|
number = page.page_number
|
||
|
min = 1
|
||
|
max = page.total_pages
|
||
|
|
||
|
(number .. number + 5)
|
||
|
|> Enum.filter(& &1 >= min and &1 != number and &1 <= max)
|
||
|
end
|
||
|
end
|