diff --git a/kaminari-actionview/lib/kaminari/actionview.rb b/kaminari-actionview/lib/kaminari/actionview.rb
index f256566..feda76a 100644
--- a/kaminari-actionview/lib/kaminari/actionview.rb
+++ b/kaminari-actionview/lib/kaminari/actionview.rb
@@ -2,6 +2,8 @@
require "kaminari/actionview/version"
ActiveSupport.on_load :action_view do
+ require 'kaminari/helpers/helper_methods'
+ ::ActionView::Base.send :include, Kaminari::Helpers::HelperMethods
+
require 'kaminari/actionview/action_view_extension'
- ::ActionView::Base.send :include, Kaminari::ActionViewExtension
end
diff --git a/kaminari-actionview/lib/kaminari/actionview/action_view_extension.rb b/kaminari-actionview/lib/kaminari/actionview/action_view_extension.rb
index 569158a..30cd61d 100644
--- a/kaminari-actionview/lib/kaminari/actionview/action_view_extension.rb
+++ b/kaminari-actionview/lib/kaminari/actionview/action_view_extension.rb
@@ -6,170 +6,6 @@ require 'action_view/context'
module Kaminari
# = Helpers
module ActionViewExtension
- # A helper that renders the pagination links.
- #
- # <%= paginate @articles %>
- #
- # ==== Options
- # * :window - The "inner window" size (4 by default).
- # * :outer_window - The "outer window" size (0 by default).
- # * :left - The "left outer window" size (0 by default).
- # * :right - The "right outer window" size (0 by default).
- # * :params - url_for parameters for the links (:controller, :action, etc.)
- # * :param_name - parameter name for page number in the links (:page by default)
- # * :remote - Ajax? (false by default)
- # * :paginator_class - Specify a custom Paginator (Kaminari::Helpers::Paginator by default)
- # * :ANY_OTHER_VALUES - Any other hash key & values would be directly passed into each tag as :locals value.
- def paginate(scope, paginator_class: Kaminari::Helpers::Paginator, **options)
- options[:total_pages] ||= scope.total_pages
- options.reverse_merge! current_page: scope.current_page, per_page: scope.limit_value, remote: false
-
- paginator = paginator_class.new self, options
- paginator.to_s
- end
-
- # A simple "Twitter like" pagination link that creates a link to the previous page.
- #
- # ==== Examples
- # Basic usage:
- #
- # <%= link_to_previous_page @items, 'Previous Page' %>
- #
- # Ajax:
- #
- # <%= link_to_previous_page @items, 'Previous Page', :remote => true %>
- #
- # By default, it renders nothing if there are no more results on the previous page.
- # You can customize this output by passing a block.
- #
- # <%= link_to_previous_page @users, 'Previous Page' do %>
- # At the Beginning
- # <% end %>
- def link_to_previous_page(scope, name, **options)
- prev_page = path_to_prev_page(scope, options)
-
- options.except! :params, :param_name
- options[:rel] ||= 'prev'
-
- link_to_if prev_page, name, prev_page, options do
- yield if block_given?
- end
- end
-
- # A simple "Twitter like" pagination link that creates a link to the next page.
- #
- # ==== Examples
- # Basic usage:
- #
- # <%= link_to_next_page @items, 'Next Page' %>
- #
- # Ajax:
- #
- # <%= link_to_next_page @items, 'Next Page', :remote => true %>
- #
- # By default, it renders nothing if there are no more results on the next page.
- # You can customize this output by passing a block.
- #
- # <%= link_to_next_page @users, 'Next Page' do %>
- # No More Pages
- # <% end %>
- def link_to_next_page(scope, name, **options)
- next_page = path_to_next_page(scope, options)
-
- options.except! :params, :param_name
- options[:rel] ||= 'next'
-
- link_to_if next_page, name, next_page, options do
- yield if block_given?
- end
- end
-
- # Renders a helpful message with numbers of displayed vs. total entries.
- # Ported from mislav/will_paginate
- #
- # ==== Examples
- # Basic usage:
- #
- # <%= page_entries_info @posts %>
- # #-> Displaying posts 6 - 10 of 26 in total
- #
- # By default, the message will use the humanized class name of objects
- # in collection: for instance, "project types" for ProjectType models.
- # The namespace will be cutted out and only the last name will be used.
- # Override this with the :entry_name parameter:
- #
- # <%= page_entries_info @posts, :entry_name => 'item' %>
- # #-> Displaying items 6 - 10 of 26 in total
- def page_entries_info(collection, entry_name: nil)
- entry_name = if entry_name
- entry_name.pluralize(collection.size)
- else
- collection.entry_name(count: collection.size).downcase
- end
-
- if collection.total_pages < 2
- t('helpers.page_entries_info.one_page.display_entries', entry_name: entry_name, count: collection.total_count)
- else
- first = collection.offset_value + 1
- last = (sum = collection.offset_value + collection.limit_value) > collection.total_count ? collection.total_count : sum
- t('helpers.page_entries_info.more_pages.display_entries', entry_name: entry_name, first: first, last: last, total: collection.total_count)
- end.html_safe
- end
-
- # Renders rel="next" and rel="prev" links to be used in the head.
- #
- # ==== Examples
- # Basic usage:
- #
- # In head:
- #
- # My Website
- # <%= yield :head %>
- #
- #
- # Somewhere in body:
- # <% content_for :head do %>
- # <%= rel_next_prev_link_tags @items %>
- # <% end %>
- #
- # #->
- #
- def rel_next_prev_link_tags(scope, options = {})
- next_page = path_to_next_page(scope, options)
- prev_page = path_to_prev_page(scope, options)
-
- output = String.new
- output << tag(:link, rel: "next", href: next_page) if next_page
- output << tag(:link, rel: "prev", href: prev_page) if prev_page
- output.html_safe
- end
-
- # A helper that calculates the path to the next page.
- #
- # ==== Examples
- # Basic usage:
- #
- # <%= path_to_next_page @items %>
- # #-> /items?page=2
- #
- # It will return `nil` if there is no next page.
- def path_to_next_page(scope, options = {})
- Kaminari::Helpers::NextPage.new(self, options.reverse_merge(current_page: scope.current_page)).url if scope.next_page
- end
-
- # A helper that calculates the path to the previous page.
- #
- # ==== Examples
- # Basic usage:
- #
- # <%= path_to_prev_page @items %>
- # #-> /items
- #
- # It will return `nil` if there is no previous page.
- def path_to_prev_page(scope, options = {})
- Kaminari::Helpers::PrevPage.new(self, options.reverse_merge(current_page: scope.current_page)).url if scope.prev_page
- end
-
module PaginatorExtension
extend ActiveSupport::Concern
diff --git a/kaminari-core/lib/kaminari/helpers/helper_methods.rb b/kaminari-core/lib/kaminari/helpers/helper_methods.rb
new file mode 100644
index 0000000..7600943
--- /dev/null
+++ b/kaminari-core/lib/kaminari/helpers/helper_methods.rb
@@ -0,0 +1,169 @@
+module Kaminari
+ module Helpers
+ module HelperMethods
+ # A helper that renders the pagination links.
+ #
+ # <%= paginate @articles %>
+ #
+ # ==== Options
+ # * :window - The "inner window" size (4 by default).
+ # * :outer_window - The "outer window" size (0 by default).
+ # * :left - The "left outer window" size (0 by default).
+ # * :right - The "right outer window" size (0 by default).
+ # * :params - url_for parameters for the links (:controller, :action, etc.)
+ # * :param_name - parameter name for page number in the links (:page by default)
+ # * :remote - Ajax? (false by default)
+ # * :paginator_class - Specify a custom Paginator (Kaminari::Helpers::Paginator by default)
+ # * :ANY_OTHER_VALUES - Any other hash key & values would be directly passed into each tag as :locals value.
+ def paginate(scope, paginator_class: Kaminari::Helpers::Paginator, **options)
+ options[:total_pages] ||= scope.total_pages
+ options.reverse_merge! current_page: scope.current_page, per_page: scope.limit_value, remote: false
+
+ paginator = paginator_class.new self, options
+ paginator.to_s
+ end
+
+ # A simple "Twitter like" pagination link that creates a link to the previous page.
+ #
+ # ==== Examples
+ # Basic usage:
+ #
+ # <%= link_to_previous_page @items, 'Previous Page' %>
+ #
+ # Ajax:
+ #
+ # <%= link_to_previous_page @items, 'Previous Page', :remote => true %>
+ #
+ # By default, it renders nothing if there are no more results on the previous page.
+ # You can customize this output by passing a block.
+ #
+ # <%= link_to_previous_page @users, 'Previous Page' do %>
+ # At the Beginning
+ # <% end %>
+ def link_to_previous_page(scope, name, **options)
+ prev_page = path_to_prev_page(scope, options)
+
+ options.except! :params, :param_name
+ options[:rel] ||= 'prev'
+
+ link_to_if prev_page, name, prev_page, options do
+ yield if block_given?
+ end
+ end
+
+ # A simple "Twitter like" pagination link that creates a link to the next page.
+ #
+ # ==== Examples
+ # Basic usage:
+ #
+ # <%= link_to_next_page @items, 'Next Page' %>
+ #
+ # Ajax:
+ #
+ # <%= link_to_next_page @items, 'Next Page', :remote => true %>
+ #
+ # By default, it renders nothing if there are no more results on the next page.
+ # You can customize this output by passing a block.
+ #
+ # <%= link_to_next_page @users, 'Next Page' do %>
+ # No More Pages
+ # <% end %>
+ def link_to_next_page(scope, name, **options)
+ next_page = path_to_next_page(scope, options)
+
+ options.except! :params, :param_name
+ options[:rel] ||= 'next'
+
+ link_to_if next_page, name, next_page, options do
+ yield if block_given?
+ end
+ end
+
+ # Renders a helpful message with numbers of displayed vs. total entries.
+ # Ported from mislav/will_paginate
+ #
+ # ==== Examples
+ # Basic usage:
+ #
+ # <%= page_entries_info @posts %>
+ # #-> Displaying posts 6 - 10 of 26 in total
+ #
+ # By default, the message will use the humanized class name of objects
+ # in collection: for instance, "project types" for ProjectType models.
+ # The namespace will be cutted out and only the last name will be used.
+ # Override this with the :entry_name parameter:
+ #
+ # <%= page_entries_info @posts, :entry_name => 'item' %>
+ # #-> Displaying items 6 - 10 of 26 in total
+ def page_entries_info(collection, entry_name: nil)
+ entry_name = if entry_name
+ entry_name.pluralize(collection.size)
+ else
+ collection.entry_name(count: collection.size).downcase
+ end
+
+ if collection.total_pages < 2
+ t('helpers.page_entries_info.one_page.display_entries', entry_name: entry_name, count: collection.total_count)
+ else
+ first = collection.offset_value + 1
+ last = (sum = collection.offset_value + collection.limit_value) > collection.total_count ? collection.total_count : sum
+ t('helpers.page_entries_info.more_pages.display_entries', entry_name: entry_name, first: first, last: last, total: collection.total_count)
+ end.html_safe
+ end
+
+ # Renders rel="next" and rel="prev" links to be used in the head.
+ #
+ # ==== Examples
+ # Basic usage:
+ #
+ # In head:
+ #
+ # My Website
+ # <%= yield :head %>
+ #
+ #
+ # Somewhere in body:
+ # <% content_for :head do %>
+ # <%= rel_next_prev_link_tags @items %>
+ # <% end %>
+ #
+ # #->
+ #
+ def rel_next_prev_link_tags(scope, options = {})
+ next_page = path_to_next_page(scope, options)
+ prev_page = path_to_prev_page(scope, options)
+
+ output = String.new
+ output << tag(:link, rel: "next", href: next_page) if next_page
+ output << tag(:link, rel: "prev", href: prev_page) if prev_page
+ output.html_safe
+ end
+
+ # A helper that calculates the path to the next page.
+ #
+ # ==== Examples
+ # Basic usage:
+ #
+ # <%= path_to_next_page @items %>
+ # #-> /items?page=2
+ #
+ # It will return `nil` if there is no next page.
+ def path_to_next_page(scope, options = {})
+ Kaminari::Helpers::NextPage.new(self, options.reverse_merge(current_page: scope.current_page)).url if scope.next_page
+ end
+
+ # A helper that calculates the path to the previous page.
+ #
+ # ==== Examples
+ # Basic usage:
+ #
+ # <%= path_to_prev_page @items %>
+ # #-> /items
+ #
+ # It will return `nil` if there is no previous page.
+ def path_to_prev_page(scope, options = {})
+ Kaminari::Helpers::PrevPage.new(self, options.reverse_merge(current_page: scope.current_page)).url if scope.prev_page
+ end
+ end
+ end
+end