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:
		
							
								
								
									
										2
									
								
								Gemfile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Gemfile
									
									
									
									
									
								
							@@ -32,6 +32,7 @@ gem 'htmlentities'
 | 
			
		||||
gem 'http'
 | 
			
		||||
gem 'http_accept_language'
 | 
			
		||||
gem 'httplog'
 | 
			
		||||
gem 'kaminari'
 | 
			
		||||
gem 'link_header'
 | 
			
		||||
gem 'nokogiri'
 | 
			
		||||
gem 'oj'
 | 
			
		||||
@@ -52,7 +53,6 @@ gem 'simple_form'
 | 
			
		||||
gem 'statsd-instrument'
 | 
			
		||||
gem 'twitter-text'
 | 
			
		||||
gem 'tzinfo-data'
 | 
			
		||||
gem 'will_paginate'
 | 
			
		||||
 | 
			
		||||
gem 'react-rails'
 | 
			
		||||
gem 'browserify-rails'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								Gemfile.lock
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								Gemfile.lock
									
									
									
									
									
								
							@@ -203,6 +203,18 @@ GEM
 | 
			
		||||
      railties (>= 4.2.0)
 | 
			
		||||
      thor (>= 0.14, < 2.0)
 | 
			
		||||
    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)
 | 
			
		||||
      addressable (~> 2.3)
 | 
			
		||||
    letter_opener (1.4.1)
 | 
			
		||||
@@ -433,7 +445,6 @@ GEM
 | 
			
		||||
    websocket-driver (0.6.5)
 | 
			
		||||
      websocket-extensions (>= 0.1.0)
 | 
			
		||||
    websocket-extensions (0.1.2)
 | 
			
		||||
    will_paginate (3.1.5)
 | 
			
		||||
 | 
			
		||||
PLATFORMS
 | 
			
		||||
  ruby
 | 
			
		||||
@@ -472,6 +483,7 @@ DEPENDENCIES
 | 
			
		||||
  httplog
 | 
			
		||||
  i18n-tasks (~> 0.9.6)
 | 
			
		||||
  jquery-rails
 | 
			
		||||
  kaminari
 | 
			
		||||
  letter_opener
 | 
			
		||||
  letter_opener_web
 | 
			
		||||
  link_header
 | 
			
		||||
@@ -513,7 +525,6 @@ DEPENDENCIES
 | 
			
		||||
  tzinfo-data
 | 
			
		||||
  uglifier (>= 1.3.0)
 | 
			
		||||
  webmock
 | 
			
		||||
  will_paginate
 | 
			
		||||
 | 
			
		||||
RUBY VERSION
 | 
			
		||||
   ruby 2.4.1p111
 | 
			
		||||
 
 | 
			
		||||
@@ -173,7 +173,7 @@
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
 | 
			
		||||
  a, .current, .next_page, .previous_page, .gap {
 | 
			
		||||
  a, .current, .page, .gap {
 | 
			
		||||
    font-size: 14px;
 | 
			
		||||
    color: $color5;
 | 
			
		||||
    font-weight: 500;
 | 
			
		||||
@@ -193,12 +193,12 @@
 | 
			
		||||
    cursor: default;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .previous_page, .next_page {
 | 
			
		||||
  .prev, .next {
 | 
			
		||||
    text-transform: uppercase;
 | 
			
		||||
    color: $color2;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .previous_page {
 | 
			
		||||
  .prev {
 | 
			
		||||
    float: left;
 | 
			
		||||
    padding-left: 0;
 | 
			
		||||
 | 
			
		||||
@@ -208,7 +208,7 @@
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .next_page {
 | 
			
		||||
  .next {
 | 
			
		||||
    float: right;
 | 
			
		||||
    padding-right: 0;
 | 
			
		||||
 | 
			
		||||
@@ -226,11 +226,11 @@
 | 
			
		||||
  @media screen and (max-width: 360px) {
 | 
			
		||||
    padding: 30px 20px;
 | 
			
		||||
 | 
			
		||||
    a, .current, .next_page, .previous_page, .gap {
 | 
			
		||||
    a, .current, .next, .prev, .gap {
 | 
			
		||||
      display: none;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .next_page, .previous_page {
 | 
			
		||||
    .next, .prev {
 | 
			
		||||
      display: inline-block;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -35,11 +35,11 @@ class AccountsController < ApplicationController
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  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
 | 
			
		||||
 | 
			
		||||
  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
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ module Admin
 | 
			
		||||
    before_action :set_account, except: :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.remote                            if params[:remote].present?
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
module Admin
 | 
			
		||||
  class DomainBlocksController < BaseController
 | 
			
		||||
    def index
 | 
			
		||||
      @blocks = DomainBlock.paginate(page: params[:page], per_page: 40)
 | 
			
		||||
      @blocks = DomainBlock.page(params[:page])
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def new
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
module Admin
 | 
			
		||||
  class PubsubhubbubController < BaseController
 | 
			
		||||
    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
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ module Admin
 | 
			
		||||
    before_action :set_report, except: [: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
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -9,4 +9,4 @@
 | 
			
		||||
  - else
 | 
			
		||||
    = render partial: 'grid_card', collection: @followers, as: :account, cached: true
 | 
			
		||||
 | 
			
		||||
= will_paginate @followers, pagination_options
 | 
			
		||||
= paginate @followers
 | 
			
		||||
 
 | 
			
		||||
@@ -9,4 +9,4 @@
 | 
			
		||||
  - else
 | 
			
		||||
    = render partial: 'grid_card', collection: @following, as: :account, cached: true
 | 
			
		||||
 | 
			
		||||
= will_paginate @following, pagination_options
 | 
			
		||||
= paginate @following
 | 
			
		||||
 
 | 
			
		||||
@@ -31,4 +31,4 @@
 | 
			
		||||
 | 
			
		||||
  .pagination
 | 
			
		||||
    - 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'
 | 
			
		||||
 
 | 
			
		||||
@@ -46,4 +46,4 @@
 | 
			
		||||
          = table_link_to 'globe', 'Public', TagManager.instance.url_for(account)
 | 
			
		||||
          = table_link_to 'pencil', 'Edit', admin_account_path(account.id)
 | 
			
		||||
 | 
			
		||||
= will_paginate @accounts, pagination_options
 | 
			
		||||
= paginate @accounts
 | 
			
		||||
 
 | 
			
		||||
@@ -13,5 +13,5 @@
 | 
			
		||||
          %samp= block.domain
 | 
			
		||||
        %td= block.severity
 | 
			
		||||
 | 
			
		||||
= will_paginate @blocks, pagination_options
 | 
			
		||||
= paginate @blocks
 | 
			
		||||
= link_to 'Add new', new_admin_domain_block_path, class: 'button'
 | 
			
		||||
 
 | 
			
		||||
@@ -26,4 +26,4 @@
 | 
			
		||||
          - else
 | 
			
		||||
            = l subscription.last_successful_delivery_at
 | 
			
		||||
 | 
			
		||||
= will_paginate @subscriptions, pagination_options
 | 
			
		||||
= paginate @subscriptions
 | 
			
		||||
 
 | 
			
		||||
@@ -29,4 +29,4 @@
 | 
			
		||||
          %td= truncate(report.comment, length: 30, separator: ' ')
 | 
			
		||||
          %td= table_link_to 'circle', 'View', admin_report_path(report)
 | 
			
		||||
 | 
			
		||||
= will_paginate @reports, pagination_options
 | 
			
		||||
= paginate @reports
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										9
									
								
								app/views/kaminari/_next_page.html.haml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								app/views/kaminari/_next_page.html.haml
									
									
									
									
									
										Normal 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
 | 
			
		||||
							
								
								
									
										16
									
								
								app/views/kaminari/_paginator.html.haml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								app/views/kaminari/_paginator.html.haml
									
									
									
									
									
										Normal 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?
 | 
			
		||||
							
								
								
									
										9
									
								
								app/views/kaminari/_prev_page.html.haml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								app/views/kaminari/_prev_page.html.haml
									
									
									
									
									
										Normal 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
 | 
			
		||||
@@ -15,4 +15,4 @@
 | 
			
		||||
 | 
			
		||||
- if @statuses.size == 20
 | 
			
		||||
  .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'
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@ search:
 | 
			
		||||
 | 
			
		||||
ignore_unused:
 | 
			
		||||
  - 'activerecord.attributes.*'
 | 
			
		||||
  - '{devise,will_paginate,doorkeeper}.*'
 | 
			
		||||
  - '{devise,pagination,doorkeeper}.*'
 | 
			
		||||
  - '{datetime,time}.*'
 | 
			
		||||
  - 'simple_form.{yes,no}'
 | 
			
		||||
  - 'simple_form.{placeholders,hints,labels}.*'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								config/initializers/kaminari_config.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								config/initializers/kaminari_config.rb
									
									
									
									
									
										Normal 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
 | 
			
		||||
							
								
								
									
										0
									
								
								config/initializers/pagination.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								config/initializers/pagination.rb
									
									
									
									
									
										Normal file
									
								
							@@ -88,5 +88,3 @@ de:
 | 
			
		||||
      default: "%d.%m.%Y %H:%M"
 | 
			
		||||
  users:
 | 
			
		||||
    invalid_email: Inkorrekte E-mail-Addresse
 | 
			
		||||
  will_paginate:
 | 
			
		||||
    page_gap: "…"
 | 
			
		||||
 
 | 
			
		||||
@@ -126,6 +126,7 @@ en:
 | 
			
		||||
  pagination:
 | 
			
		||||
    next: Next
 | 
			
		||||
    prev: Prev
 | 
			
		||||
    truncate: "…"
 | 
			
		||||
  remote_follow:
 | 
			
		||||
    acct: Enter your username@domain you want to follow from
 | 
			
		||||
    missing_resource: Could not find the required redirect URL for your account
 | 
			
		||||
@@ -169,5 +170,3 @@ en:
 | 
			
		||||
  users:
 | 
			
		||||
    invalid_email: The e-mail address is invalid
 | 
			
		||||
    invalid_otp_token: Invalid two-factor code
 | 
			
		||||
  will_paginate:
 | 
			
		||||
    page_gap: "…"
 | 
			
		||||
 
 | 
			
		||||
@@ -160,5 +160,3 @@ eo:
 | 
			
		||||
  users:
 | 
			
		||||
    invalid_email: La retpoŝt-adreso ne estas valida
 | 
			
		||||
    invalid_otp_token: La dufaktora aŭtentigila kodo ne estas valida
 | 
			
		||||
  will_paginate:
 | 
			
		||||
    page_gap: "…"
 | 
			
		||||
 
 | 
			
		||||
@@ -51,5 +51,3 @@ es:
 | 
			
		||||
  settings:
 | 
			
		||||
    edit_profile: Editar perfil
 | 
			
		||||
    preferences: Preferencias
 | 
			
		||||
  will_paginate:
 | 
			
		||||
    page_gap: "…"
 | 
			
		||||
 
 | 
			
		||||
@@ -160,5 +160,3 @@ fi:
 | 
			
		||||
  users:
 | 
			
		||||
    invalid_email: Virheellinen sähköposti
 | 
			
		||||
    invalid_otp_token: Virheellinen kaksivaihe tunnistus koodi
 | 
			
		||||
  will_paginate:
 | 
			
		||||
    page_gap: "…"
 | 
			
		||||
 
 | 
			
		||||
@@ -167,5 +167,3 @@ fr:
 | 
			
		||||
  users:
 | 
			
		||||
    invalid_email: L'adresse courriel est invalide
 | 
			
		||||
    invalid_otp_token: Le code d'authentification à deux facteurs est invalide
 | 
			
		||||
  will_paginate:
 | 
			
		||||
    page_gap: "…"
 | 
			
		||||
 
 | 
			
		||||
@@ -51,5 +51,3 @@ hu:
 | 
			
		||||
  settings:
 | 
			
		||||
    edit_profile: Profil szerkesztése
 | 
			
		||||
    preferences: Beállítások
 | 
			
		||||
  will_paginate:
 | 
			
		||||
    page_gap: "…"
 | 
			
		||||
 
 | 
			
		||||
@@ -160,5 +160,3 @@
 | 
			
		||||
  users:
 | 
			
		||||
    invalid_email: E-post addressen er ugyldig
 | 
			
		||||
    invalid_otp_token: Ugyldig two-faktor kode
 | 
			
		||||
  will_paginate:
 | 
			
		||||
    page_gap: "…"
 | 
			
		||||
 
 | 
			
		||||
@@ -51,5 +51,3 @@ pt:
 | 
			
		||||
  settings:
 | 
			
		||||
    edit_profile: Editar perfil
 | 
			
		||||
    preferences: Preferências
 | 
			
		||||
  will_paginate:
 | 
			
		||||
    page_gap: "…"
 | 
			
		||||
 
 | 
			
		||||
@@ -161,5 +161,3 @@ ru:
 | 
			
		||||
  users:
 | 
			
		||||
    invalid_email: Введенный e-mail неверен
 | 
			
		||||
    invalid_otp_token: Введен неверный код
 | 
			
		||||
  will_paginate:
 | 
			
		||||
    page_gap: "…"
 | 
			
		||||
 
 | 
			
		||||
@@ -51,5 +51,3 @@ uk:
 | 
			
		||||
  settings:
 | 
			
		||||
    edit_profile: Редагувати профіль
 | 
			
		||||
    preferences: Налаштування
 | 
			
		||||
  will_paginate:
 | 
			
		||||
    page_gap: "…"
 | 
			
		||||
 
 | 
			
		||||
@@ -150,5 +150,3 @@ zh-CN:
 | 
			
		||||
  users:
 | 
			
		||||
    invalid_email: 无效的邮箱
 | 
			
		||||
    invalid_otp_token: 无效的两步验证码
 | 
			
		||||
  will_paginate:
 | 
			
		||||
    page_gap: "…"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
require 'rails_helper'
 | 
			
		||||
 | 
			
		||||
RSpec.describe AccountsHelper, type: :helper do
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
		Reference in New Issue
	
	Block a user