Pagination improvements (#1445)

* Replace will_paginate with kaminari

* Use #page instead of #paginate in controllers

* Replace will_paginate.page_gap with pagination.truncate in i18n

* Customize kaminari views to match prior styles

* Set kaminari options to match prior behavior

* Replace will_paginate with paginate in views
This commit is contained in:
Matt Jankowski 2017-04-10 19:11:41 -04:00 committed by Eugen
parent a283786463
commit 4ada50985a
36 changed files with 77 additions and 65 deletions

View file

@ -32,6 +32,7 @@ gem 'htmlentities'
gem 'http' gem 'http'
gem 'http_accept_language' gem 'http_accept_language'
gem 'httplog' gem 'httplog'
gem 'kaminari'
gem 'link_header' gem 'link_header'
gem 'nokogiri' gem 'nokogiri'
gem 'oj' gem 'oj'
@ -52,7 +53,6 @@ gem 'simple_form'
gem 'statsd-instrument' gem 'statsd-instrument'
gem 'twitter-text' gem 'twitter-text'
gem 'tzinfo-data' gem 'tzinfo-data'
gem 'will_paginate'
gem 'react-rails' gem 'react-rails'
gem 'browserify-rails' gem 'browserify-rails'

View file

@ -203,6 +203,18 @@ GEM
railties (>= 4.2.0) railties (>= 4.2.0)
thor (>= 0.14, < 2.0) thor (>= 0.14, < 2.0)
json (2.0.3) json (2.0.3)
kaminari (1.0.1)
activesupport (>= 4.1.0)
kaminari-actionview (= 1.0.1)
kaminari-activerecord (= 1.0.1)
kaminari-core (= 1.0.1)
kaminari-actionview (1.0.1)
actionview
kaminari-core (= 1.0.1)
kaminari-activerecord (1.0.1)
activerecord
kaminari-core (= 1.0.1)
kaminari-core (1.0.1)
launchy (2.4.3) launchy (2.4.3)
addressable (~> 2.3) addressable (~> 2.3)
letter_opener (1.4.1) letter_opener (1.4.1)
@ -433,7 +445,6 @@ GEM
websocket-driver (0.6.5) websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0) websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.2) websocket-extensions (0.1.2)
will_paginate (3.1.5)
PLATFORMS PLATFORMS
ruby ruby
@ -472,6 +483,7 @@ DEPENDENCIES
httplog httplog
i18n-tasks (~> 0.9.6) i18n-tasks (~> 0.9.6)
jquery-rails jquery-rails
kaminari
letter_opener letter_opener
letter_opener_web letter_opener_web
link_header link_header
@ -513,7 +525,6 @@ DEPENDENCIES
tzinfo-data tzinfo-data
uglifier (>= 1.3.0) uglifier (>= 1.3.0)
webmock webmock
will_paginate
RUBY VERSION RUBY VERSION
ruby 2.4.1p111 ruby 2.4.1p111

View file

@ -173,7 +173,7 @@
text-align: center; text-align: center;
overflow: hidden; overflow: hidden;
a, .current, .next_page, .previous_page, .gap { a, .current, .page, .gap {
font-size: 14px; font-size: 14px;
color: $color5; color: $color5;
font-weight: 500; font-weight: 500;
@ -193,12 +193,12 @@
cursor: default; cursor: default;
} }
.previous_page, .next_page { .prev, .next {
text-transform: uppercase; text-transform: uppercase;
color: $color2; color: $color2;
} }
.previous_page { .prev {
float: left; float: left;
padding-left: 0; padding-left: 0;
@ -208,7 +208,7 @@
} }
} }
.next_page { .next {
float: right; float: right;
padding-right: 0; padding-right: 0;
@ -226,11 +226,11 @@
@media screen and (max-width: 360px) { @media screen and (max-width: 360px) {
padding: 30px 20px; padding: 30px 20px;
a, .current, .next_page, .previous_page, .gap { a, .current, .next, .prev, .gap {
display: none; display: none;
} }
.next_page, .previous_page { .next, .prev {
display: inline-block; display: inline-block;
} }
} }

View file

@ -35,11 +35,11 @@ class AccountsController < ApplicationController
end end
def followers def followers
@followers = @account.followers.order('follows.created_at desc').paginate(page: params[:page], per_page: 12) @followers = @account.followers.order('follows.created_at desc').page(params[:page]).per(12)
end end
def following def following
@following = @account.following.order('follows.created_at desc').paginate(page: params[:page], per_page: 12) @following = @account.following.order('follows.created_at desc').page(params[:page]).per(12)
end end
private private

View file

@ -5,7 +5,7 @@ module Admin
before_action :set_account, except: :index before_action :set_account, except: :index
def index def index
@accounts = Account.alphabetic.paginate(page: params[:page], per_page: 40) @accounts = Account.alphabetic.page(params[:page])
@accounts = @accounts.local if params[:local].present? @accounts = @accounts.local if params[:local].present?
@accounts = @accounts.remote if params[:remote].present? @accounts = @accounts.remote if params[:remote].present?

View file

@ -3,7 +3,7 @@
module Admin module Admin
class DomainBlocksController < BaseController class DomainBlocksController < BaseController
def index def index
@blocks = DomainBlock.paginate(page: params[:page], per_page: 40) @blocks = DomainBlock.page(params[:page])
end end
def new def new

View file

@ -3,7 +3,7 @@
module Admin module Admin
class PubsubhubbubController < BaseController class PubsubhubbubController < BaseController
def index def index
@subscriptions = Subscription.order('id desc').includes(:account).paginate(page: params[:page], per_page: 40) @subscriptions = Subscription.order('id desc').includes(:account).page(params[:page])
end end
end end
end end

View file

@ -5,7 +5,7 @@ module Admin
before_action :set_report, except: [:index] before_action :set_report, except: [:index]
def index def index
@reports = Report.includes(:account, :target_account).order('id desc').paginate(page: params[:page], per_page: 40) @reports = Report.includes(:account, :target_account).order('id desc').page(params[:page])
@reports = params[:action_taken].present? ? @reports.resolved : @reports.unresolved @reports = params[:action_taken].present? ? @reports.resolved : @reports.unresolved
end end

View file

@ -1,12 +0,0 @@
# frozen_string_literal: true
module AccountsHelper
def pagination_options
{
previous_label: safe_join([fa_icon('chevron-left'), t('pagination.prev')], ' '),
next_label: safe_join([t('pagination.next'), fa_icon('chevron-right')], ' '),
inner_window: 1,
outer_window: 0,
}
end
end

View file

@ -9,4 +9,4 @@
- else - else
= render partial: 'grid_card', collection: @followers, as: :account, cached: true = render partial: 'grid_card', collection: @followers, as: :account, cached: true
= will_paginate @followers, pagination_options = paginate @followers

View file

@ -9,4 +9,4 @@
- else - else
= render partial: 'grid_card', collection: @following, as: :account, cached: true = render partial: 'grid_card', collection: @following, as: :account, cached: true
= will_paginate @following, pagination_options = paginate @following

View file

@ -31,4 +31,4 @@
.pagination .pagination
- if @statuses.size == 20 - if @statuses.size == 20
= link_to safe_join([t('pagination.next'), fa_icon('chevron-right')], ' '), short_account_url(@account, max_id: @statuses.last.id), class: 'next_page', rel: 'next' = link_to safe_join([t('pagination.next'), fa_icon('chevron-right')], ' '), short_account_url(@account, max_id: @statuses.last.id), class: 'next', rel: 'next'

View file

@ -46,4 +46,4 @@
= table_link_to 'globe', 'Public', TagManager.instance.url_for(account) = table_link_to 'globe', 'Public', TagManager.instance.url_for(account)
= table_link_to 'pencil', 'Edit', admin_account_path(account.id) = table_link_to 'pencil', 'Edit', admin_account_path(account.id)
= will_paginate @accounts, pagination_options = paginate @accounts

View file

@ -13,5 +13,5 @@
%samp= block.domain %samp= block.domain
%td= block.severity %td= block.severity
= will_paginate @blocks, pagination_options = paginate @blocks
= link_to 'Add new', new_admin_domain_block_path, class: 'button' = link_to 'Add new', new_admin_domain_block_path, class: 'button'

View file

@ -26,4 +26,4 @@
- else - else
= l subscription.last_successful_delivery_at = l subscription.last_successful_delivery_at
= will_paginate @subscriptions, pagination_options = paginate @subscriptions

View file

@ -29,4 +29,4 @@
%td= truncate(report.comment, length: 30, separator: ' ') %td= truncate(report.comment, length: 30, separator: ' ')
%td= table_link_to 'circle', 'View', admin_report_path(report) %td= table_link_to 'circle', 'View', admin_report_path(report)
= will_paginate @reports, pagination_options = paginate @reports

View file

@ -0,0 +1,9 @@
-# Link to the "Next" page
-# available local variables
-# url: url to the next page
-# current_page: a page object for the currently displayed page
-# total_pages: total number of pages
-# per_page: number of items to fetch per page
-# remote: data-remote
%span.next
= link_to_unless current_page.last?, safe_join([t('pagination.next'), fa_icon('chevron-right')], ' '), url, rel: 'next', remote: remote

View file

@ -0,0 +1,16 @@
-# The container tag
-# available local variables
-# current_page: a page object for the currently displayed page
-# total_pages: total number of pages
-# per_page: number of items to fetch per page
-# remote: data-remote
-# paginator: the paginator that renders the pagination tags inside
= paginator.render do
%nav.pagination
= prev_page_tag unless current_page.first?
- each_page do |page|
- if page.display_tag?
= page_tag page
- elsif !page.was_truncated?
= gap_tag
= next_page_tag unless current_page.last?

View file

@ -0,0 +1,9 @@
-# Link to the "Previous" page
-# available local variables
-# url: url to the previous page
-# current_page: a page object for the currently displayed page
-# total_pages: total number of pages
-# per_page: number of items to fetch per page
-# remote: data-remote
%span.prev
= link_to_unless current_page.first?, safe_join([fa_icon('chevron-left'), t('pagination.prev')], ' '), url, rel: 'prev', remote: remote

View file

@ -15,4 +15,4 @@
- if @statuses.size == 20 - if @statuses.size == 20
.pagination .pagination
= link_to safe_join([t('pagination.next'), fa_icon('chevron-right')], ' '), tag_url(@tag, max_id: @statuses.last.id), class: 'next_page', rel: 'next' = link_to safe_join([t('pagination.next'), fa_icon('chevron-right')], ' '), tag_url(@tag, max_id: @statuses.last.id), class: 'next', rel: 'next'

View file

@ -33,7 +33,7 @@ search:
ignore_unused: ignore_unused:
- 'activerecord.attributes.*' - 'activerecord.attributes.*'
- '{devise,will_paginate,doorkeeper}.*' - '{devise,pagination,doorkeeper}.*'
- '{datetime,time}.*' - '{datetime,time}.*'
- 'simple_form.{yes,no}' - 'simple_form.{yes,no}'
- 'simple_form.{placeholders,hints,labels}.*' - 'simple_form.{placeholders,hints,labels}.*'

View file

@ -0,0 +1,7 @@
# frozen_string_literal: true
Kaminari.configure do |config|
config.default_per_page = 40
config.window = 1
config.left = 3
config.right = 1
end

View file

View file

@ -88,5 +88,3 @@ de:
default: "%d.%m.%Y %H:%M" default: "%d.%m.%Y %H:%M"
users: users:
invalid_email: Inkorrekte E-mail-Addresse invalid_email: Inkorrekte E-mail-Addresse
will_paginate:
page_gap: "&hellip;"

View file

@ -126,6 +126,7 @@ en:
pagination: pagination:
next: Next next: Next
prev: Prev prev: Prev
truncate: "&hellip;"
remote_follow: remote_follow:
acct: Enter your username@domain you want to follow from acct: Enter your username@domain you want to follow from
missing_resource: Could not find the required redirect URL for your account missing_resource: Could not find the required redirect URL for your account
@ -169,5 +170,3 @@ en:
users: users:
invalid_email: The e-mail address is invalid invalid_email: The e-mail address is invalid
invalid_otp_token: Invalid two-factor code invalid_otp_token: Invalid two-factor code
will_paginate:
page_gap: "&hellip;"

View file

@ -160,5 +160,3 @@ eo:
users: users:
invalid_email: La retpoŝt-adreso ne estas valida invalid_email: La retpoŝt-adreso ne estas valida
invalid_otp_token: La dufaktora aŭtentigila kodo ne estas valida invalid_otp_token: La dufaktora aŭtentigila kodo ne estas valida
will_paginate:
page_gap: "&hellip;"

View file

@ -51,5 +51,3 @@ es:
settings: settings:
edit_profile: Editar perfil edit_profile: Editar perfil
preferences: Preferencias preferences: Preferencias
will_paginate:
page_gap: "&hellip;"

View file

@ -160,5 +160,3 @@ fi:
users: users:
invalid_email: Virheellinen sähköposti invalid_email: Virheellinen sähköposti
invalid_otp_token: Virheellinen kaksivaihe tunnistus koodi invalid_otp_token: Virheellinen kaksivaihe tunnistus koodi
will_paginate:
page_gap: "&hellip;"

View file

@ -167,5 +167,3 @@ fr:
users: users:
invalid_email: L'adresse courriel est invalide invalid_email: L'adresse courriel est invalide
invalid_otp_token: Le code d'authentification à deux facteurs est invalide invalid_otp_token: Le code d'authentification à deux facteurs est invalide
will_paginate:
page_gap: "&hellip;"

View file

@ -51,5 +51,3 @@ hu:
settings: settings:
edit_profile: Profil szerkesztése edit_profile: Profil szerkesztése
preferences: Beállítások preferences: Beállítások
will_paginate:
page_gap: "&hellip;"

View file

@ -160,5 +160,3 @@
users: users:
invalid_email: E-post addressen er ugyldig invalid_email: E-post addressen er ugyldig
invalid_otp_token: Ugyldig two-faktor kode invalid_otp_token: Ugyldig two-faktor kode
will_paginate:
page_gap: "&hellip;"

View file

@ -51,5 +51,3 @@ pt:
settings: settings:
edit_profile: Editar perfil edit_profile: Editar perfil
preferences: Preferências preferences: Preferências
will_paginate:
page_gap: "&hellip;"

View file

@ -161,5 +161,3 @@ ru:
users: users:
invalid_email: Введенный e-mail неверен invalid_email: Введенный e-mail неверен
invalid_otp_token: Введен неверный код invalid_otp_token: Введен неверный код
will_paginate:
page_gap: "&hellip;"

View file

@ -51,5 +51,3 @@ uk:
settings: settings:
edit_profile: Редагувати профіль edit_profile: Редагувати профіль
preferences: Налаштування preferences: Налаштування
will_paginate:
page_gap: "&hellip;"

View file

@ -150,5 +150,3 @@ zh-CN:
users: users:
invalid_email: 无效的邮箱 invalid_email: 无效的邮箱
invalid_otp_token: 无效的两步验证码 invalid_otp_token: 无效的两步验证码
will_paginate:
page_gap: "&hellip;"

View file

@ -1,5 +0,0 @@
require 'rails_helper'
RSpec.describe AccountsHelper, type: :helper do
end