about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatt Jankowski <mjankowski@thoughtbot.com>2017-04-10 19:11:41 -0400
committerEugen <eugen@zeonfederated.com>2017-04-11 01:11:41 +0200
commit4ada50985a73ed5c859cdf5160500b04116ad0e4 (patch)
tree6e51b5cf970bc4f945834e65bf8bd37b1ef8fb5f
parenta28378646393de998663981e6660eb79e7a6375f (diff)
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
-rw-r--r--Gemfile2
-rw-r--r--Gemfile.lock15
-rw-r--r--app/assets/stylesheets/accounts.scss12
-rw-r--r--app/controllers/accounts_controller.rb4
-rw-r--r--app/controllers/admin/accounts_controller.rb2
-rw-r--r--app/controllers/admin/domain_blocks_controller.rb2
-rw-r--r--app/controllers/admin/pubsubhubbub_controller.rb2
-rw-r--r--app/controllers/admin/reports_controller.rb2
-rw-r--r--app/helpers/accounts_helper.rb12
-rw-r--r--app/views/accounts/followers.html.haml2
-rw-r--r--app/views/accounts/following.html.haml2
-rw-r--r--app/views/accounts/show.html.haml2
-rw-r--r--app/views/admin/accounts/index.html.haml2
-rw-r--r--app/views/admin/domain_blocks/index.html.haml2
-rw-r--r--app/views/admin/pubsubhubbub/index.html.haml2
-rw-r--r--app/views/admin/reports/index.html.haml2
-rw-r--r--app/views/kaminari/_next_page.html.haml9
-rw-r--r--app/views/kaminari/_paginator.html.haml16
-rw-r--r--app/views/kaminari/_prev_page.html.haml9
-rw-r--r--app/views/tags/show.html.haml2
-rw-r--r--config/i18n-tasks.yml2
-rw-r--r--config/initializers/kaminari_config.rb7
-rw-r--r--config/initializers/pagination.rb0
-rw-r--r--config/locales/de.yml2
-rw-r--r--config/locales/en.yml3
-rw-r--r--config/locales/eo.yml2
-rw-r--r--config/locales/es.yml2
-rw-r--r--config/locales/fi.yml2
-rw-r--r--config/locales/fr.yml2
-rw-r--r--config/locales/hu.yml2
-rw-r--r--config/locales/no.yml2
-rw-r--r--config/locales/pt.yml2
-rw-r--r--config/locales/ru.yml2
-rw-r--r--config/locales/uk.yml2
-rw-r--r--config/locales/zh-CN.yml2
-rw-r--r--spec/helpers/accounts_helper_spec.rb5
36 files changed, 77 insertions, 65 deletions
diff --git a/Gemfile b/Gemfile
index 078ac5806..9a1792623 100644
--- a/Gemfile
+++ b/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'
diff --git a/Gemfile.lock b/Gemfile.lock
index 4fe8aa076..f1bc9880e 100644
--- a/Gemfile.lock
+++ b/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
diff --git a/app/assets/stylesheets/accounts.scss b/app/assets/stylesheets/accounts.scss
index b3ae33500..2a05c2bb4 100644
--- a/app/assets/stylesheets/accounts.scss
+++ b/app/assets/stylesheets/accounts.scss
@@ -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;
     }
   }
diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb
index 34103de0e..d4f157614 100644
--- a/app/controllers/accounts_controller.rb
+++ b/app/controllers/accounts_controller.rb
@@ -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
diff --git a/app/controllers/admin/accounts_controller.rb b/app/controllers/admin/accounts_controller.rb
index 60b631ece..71cb8edd8 100644
--- a/app/controllers/admin/accounts_controller.rb
+++ b/app/controllers/admin/accounts_controller.rb
@@ -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?
diff --git a/app/controllers/admin/domain_blocks_controller.rb b/app/controllers/admin/domain_blocks_controller.rb
index 58f1efa5b..a8b56c085 100644
--- a/app/controllers/admin/domain_blocks_controller.rb
+++ b/app/controllers/admin/domain_blocks_controller.rb
@@ -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
diff --git a/app/controllers/admin/pubsubhubbub_controller.rb b/app/controllers/admin/pubsubhubbub_controller.rb
index 95f79c520..31c80a174 100644
--- a/app/controllers/admin/pubsubhubbub_controller.rb
+++ b/app/controllers/admin/pubsubhubbub_controller.rb
@@ -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
diff --git a/app/controllers/admin/reports_controller.rb b/app/controllers/admin/reports_controller.rb
index 5a37d8e6e..3c3082318 100644
--- a/app/controllers/admin/reports_controller.rb
+++ b/app/controllers/admin/reports_controller.rb
@@ -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
 
diff --git a/app/helpers/accounts_helper.rb b/app/helpers/accounts_helper.rb
deleted file mode 100644
index af23a78d1..000000000
--- a/app/helpers/accounts_helper.rb
+++ /dev/null
@@ -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
diff --git a/app/views/accounts/followers.html.haml b/app/views/accounts/followers.html.haml
index 493491020..fa5071f38 100644
--- a/app/views/accounts/followers.html.haml
+++ b/app/views/accounts/followers.html.haml
@@ -9,4 +9,4 @@
   - else
     = render partial: 'grid_card', collection: @followers, as: :account, cached: true
 
-= will_paginate @followers, pagination_options
+= paginate @followers
diff --git a/app/views/accounts/following.html.haml b/app/views/accounts/following.html.haml
index 370cd6c48..987dcba1f 100644
--- a/app/views/accounts/following.html.haml
+++ b/app/views/accounts/following.html.haml
@@ -9,4 +9,4 @@
   - else
     = render partial: 'grid_card', collection: @following, as: :account, cached: true
 
-= will_paginate @following, pagination_options
+= paginate @following
diff --git a/app/views/accounts/show.html.haml b/app/views/accounts/show.html.haml
index e90897729..3b0d69dcd 100644
--- a/app/views/accounts/show.html.haml
+++ b/app/views/accounts/show.html.haml
@@ -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'
diff --git a/app/views/admin/accounts/index.html.haml b/app/views/admin/accounts/index.html.haml
index f8ed4ef97..4d636601e 100644
--- a/app/views/admin/accounts/index.html.haml
+++ b/app/views/admin/accounts/index.html.haml
@@ -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
diff --git a/app/views/admin/domain_blocks/index.html.haml b/app/views/admin/domain_blocks/index.html.haml
index eb7894b86..fe6ff683f 100644
--- a/app/views/admin/domain_blocks/index.html.haml
+++ b/app/views/admin/domain_blocks/index.html.haml
@@ -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'
diff --git a/app/views/admin/pubsubhubbub/index.html.haml b/app/views/admin/pubsubhubbub/index.html.haml
index cb11a502c..2b8e36e6a 100644
--- a/app/views/admin/pubsubhubbub/index.html.haml
+++ b/app/views/admin/pubsubhubbub/index.html.haml
@@ -26,4 +26,4 @@
           - else
             = l subscription.last_successful_delivery_at
 
-= will_paginate @subscriptions, pagination_options
+= paginate @subscriptions
diff --git a/app/views/admin/reports/index.html.haml b/app/views/admin/reports/index.html.haml
index 839259dc2..9c5c78935 100644
--- a/app/views/admin/reports/index.html.haml
+++ b/app/views/admin/reports/index.html.haml
@@ -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
diff --git a/app/views/kaminari/_next_page.html.haml b/app/views/kaminari/_next_page.html.haml
new file mode 100644
index 000000000..30a3643d6
--- /dev/null
+++ b/app/views/kaminari/_next_page.html.haml
@@ -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
diff --git a/app/views/kaminari/_paginator.html.haml b/app/views/kaminari/_paginator.html.haml
new file mode 100644
index 000000000..b1da236d5
--- /dev/null
+++ b/app/views/kaminari/_paginator.html.haml
@@ -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?
diff --git a/app/views/kaminari/_prev_page.html.haml b/app/views/kaminari/_prev_page.html.haml
new file mode 100644
index 000000000..1089e3566
--- /dev/null
+++ b/app/views/kaminari/_prev_page.html.haml
@@ -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
diff --git a/app/views/tags/show.html.haml b/app/views/tags/show.html.haml
index 32a50e158..c894cdb2e 100644
--- a/app/views/tags/show.html.haml
+++ b/app/views/tags/show.html.haml
@@ -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'
diff --git a/config/i18n-tasks.yml b/config/i18n-tasks.yml
index 4304bbd18..7ae143f93 100644
--- a/config/i18n-tasks.yml
+++ b/config/i18n-tasks.yml
@@ -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}.*'
diff --git a/config/initializers/kaminari_config.rb b/config/initializers/kaminari_config.rb
new file mode 100644
index 000000000..bd455f382
--- /dev/null
+++ b/config/initializers/kaminari_config.rb
@@ -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
diff --git a/config/initializers/pagination.rb b/config/initializers/pagination.rb
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/config/initializers/pagination.rb
diff --git a/config/locales/de.yml b/config/locales/de.yml
index ed54bb699..75ac4e1bb 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -88,5 +88,3 @@ de:
       default: "%d.%m.%Y %H:%M"
   users:
     invalid_email: Inkorrekte E-mail-Addresse
-  will_paginate:
-    page_gap: "&hellip;"
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 118798ba1..6c4738991 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -126,6 +126,7 @@ en:
   pagination:
     next: Next
     prev: Prev
+    truncate: "&hellip;"
   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: "&hellip;"
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 3644b37bb..e82e42495 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -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: "&hellip;"
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 19f2c71b8..42245d675 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -51,5 +51,3 @@ es:
   settings:
     edit_profile: Editar perfil
     preferences: Preferencias
-  will_paginate:
-    page_gap: "&hellip;"
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 56aa9df49..c11237226 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -160,5 +160,3 @@ fi:
   users:
     invalid_email: Virheellinen sähköposti
     invalid_otp_token: Virheellinen kaksivaihe tunnistus koodi
-  will_paginate:
-    page_gap: "&hellip;"
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 9a9c1b6de..92cf43944 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -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: "&hellip;"
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index 915d02c19..96b73d43c 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -51,5 +51,3 @@ hu:
   settings:
     edit_profile: Profil szerkesztése
     preferences: Beállítások
-  will_paginate:
-    page_gap: "&hellip;"
diff --git a/config/locales/no.yml b/config/locales/no.yml
index b9a752d5a..9aa966d2a 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -160,5 +160,3 @@
   users:
     invalid_email: E-post addressen er ugyldig
     invalid_otp_token: Ugyldig two-faktor kode
-  will_paginate:
-    page_gap: "&hellip;"
diff --git a/config/locales/pt.yml b/config/locales/pt.yml
index ad7d05e3b..f2c7458f7 100644
--- a/config/locales/pt.yml
+++ b/config/locales/pt.yml
@@ -51,5 +51,3 @@ pt:
   settings:
     edit_profile: Editar perfil
     preferences: Preferências
-  will_paginate:
-    page_gap: "&hellip;"
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index e5a9c0958..fab178629 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -161,5 +161,3 @@ ru:
   users:
     invalid_email: Введенный e-mail неверен
     invalid_otp_token: Введен неверный код
-  will_paginate:
-    page_gap: "&hellip;"
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index 27e8135df..f7176e86d 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -51,5 +51,3 @@ uk:
   settings:
     edit_profile: Редагувати профіль
     preferences: Налаштування
-  will_paginate:
-    page_gap: "&hellip;"
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index 78c4d46e2..48028d00c 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -150,5 +150,3 @@ zh-CN:
   users:
     invalid_email: 无效的邮箱
     invalid_otp_token: 无效的两步验证码
-  will_paginate:
-    page_gap: "&hellip;"
diff --git a/spec/helpers/accounts_helper_spec.rb b/spec/helpers/accounts_helper_spec.rb
deleted file mode 100644
index 3aea1f909..000000000
--- a/spec/helpers/accounts_helper_spec.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-require 'rails_helper'
-
-RSpec.describe AccountsHelper, type: :helper do
-
-end