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