Sha256: 04c760761d0803925687f3e7d3b981effc5ee1a29880be59da3d6dd6547ff685

Contents?: true

Size: 1.77 KB

Versions: 49

Compression:

Stored size: 1.77 KB

Contents

require 'active_support/core_ext/object/deep_dup'
require 'middleman-core/util'

module Middleman
  module Pagination
    module ArrayHelpers
      def per_page(per_page)
        return to_enum(__method__, per_page) unless block_given?

        parts = if per_page.respond_to? :call
          per_page.call(dup)
        else
          each_slice(per_page).reduce([]) do |sum, items|
            sum << items
          end
        end

        num_pages = parts.length
        collection = self

        current_start_i = 0
        parts.each_with_index do |items, i|
          num = i + 1

          meta = ::Middleman::Pagination.page_locals(
            num,
            num_pages,
            collection,
            items,
            current_start_i
          )

          yield items, num, meta, num >= num_pages

          current_start_i += items.length
        end
      end
    end

    def self.page_locals(page_num, num_pages, collection, items, page_start)
      per_page = items.length

      # Index into collection of the last item of this page
      page_end = (page_start + per_page) - 1

      ::Middleman::Util.recursively_enhance(page_number: page_num,
                                            num_pages: num_pages,
                                            per_page: per_page,

                                            # The range of item numbers on this page
                                            # (1-based, for showing "Items X to Y of Z")
                                            page_start: page_start + 1,
                                            page_end: [page_end + 1, collection.length].min,

                                            # Use "collection" in templates.
                                            collection: collection)
    end
  end
end

Version data entries

49 entries across 49 versions & 3 rubygems

Version Path
middleman-core-4.6.0 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-4.5.1 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-4.5.0 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-4.4.3 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-4.4.2 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-4.4.0 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-4.3.11 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-4.3.10 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-4.3.8 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-4.3.7 lib/middleman-core/core_extensions/collections/pagination.rb
files.com-1.0.55 docs/vendor/bundle/ruby/2.5.0/gems/middleman-core-4.3.3/lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-4.3.6 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-4.3.5 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-4.3.4 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-4.3.3 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-4.3.2 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-4.3.1 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-4.3.0 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-with-external-sources-watch-fix-4.1.10 lib/middleman-core/core_extensions/collections/pagination.rb
middleman-core-with-external-sources-watch-fix-4.1.0 lib/middleman-core/core_extensions/collections/pagination.rb