bridgetown-paginate 1.0.0.alpha1 → 1.0.0.alpha2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -3
- data/lib/bridgetown-paginate/pagination_generator.rb +5 -4
- data/lib/bridgetown-paginate/pagination_indexer.rb +3 -5
- data/lib/bridgetown-paginate/pagination_model.rb +64 -65
- data/lib/bridgetown-paginate/pagination_page.rb +1 -1
- data/lib/bridgetown-paginate/paginator.rb +3 -3
- data/lib/bridgetown-paginate/utils.rb +4 -8
- metadata +3 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7f4ddd4a70ec92776ef3aa0ef66b3962795bed297e7a9dc82823254b9ed0192a
         | 
| 4 | 
            +
              data.tar.gz: c8f3a2c8df7fc1fcc53cc5dff9a55241bbdba95f9779fc350ab11caaece8fce6
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: fe5262a059bb676c9c16f9d81c50cf3b006319da0c6fe28aeba1c6b1faaec84b0b8e158d6e15b4719b20c39e249222a2a54cef12d1c88c342079572d5778ac42
         | 
| 7 | 
            +
              data.tar.gz: cfda5839ca555de2c8bb99a1639656bbb26a6c0074b99491db9469e4f451b3cdeb9cfb48a98d0fdad035802199bb800799bafe963cbe39e767ed16d59ac8650c
         | 
    
        data/.rubocop.yml
    CHANGED
    
    
| @@ -36,7 +36,7 @@ module Bridgetown | |
| 36 36 | 
             
                    # If disabled then simply quit
         | 
| 37 37 | 
             
                    unless default_config["enabled"]
         | 
| 38 38 | 
             
                      Bridgetown.logger.info "Pagination:", "disabled. Enable in site config" \
         | 
| 39 | 
            -
             | 
| 39 | 
            +
                                                            " with pagination:\\n  enabled: true"
         | 
| 40 40 | 
             
                      return
         | 
| 41 41 | 
             
                    end
         | 
| 42 42 |  | 
| @@ -102,11 +102,12 @@ module Bridgetown | |
| 102 102 | 
             
                    # Create a proc that will delegate logging
         | 
| 103 103 | 
             
                    # Decoupling Bridgetown specific logging
         | 
| 104 104 | 
             
                    logging_lambda = ->(message, type = "info") do
         | 
| 105 | 
            -
                       | 
| 105 | 
            +
                      case type
         | 
| 106 | 
            +
                      when "debug"
         | 
| 106 107 | 
             
                        Bridgetown.logger.debug "Pagination:", message.to_s
         | 
| 107 | 
            -
                       | 
| 108 | 
            +
                      when "error"
         | 
| 108 109 | 
             
                        Bridgetown.logger.error "Pagination:", message.to_s
         | 
| 109 | 
            -
                       | 
| 110 | 
            +
                      when "warn"
         | 
| 110 111 | 
             
                        Bridgetown.logger.warn "Pagination:", message.to_s
         | 
| 111 112 | 
             
                      else
         | 
| 112 113 | 
             
                        Bridgetown.logger.info "Pagination:", message.to_s
         | 
| @@ -7,7 +7,7 @@ module Bridgetown | |
| 7 7 | 
             
                # filtering said collections when requested by the defined filters.
         | 
| 8 8 | 
             
                #
         | 
| 9 9 | 
             
                class PaginationIndexer
         | 
| 10 | 
            -
                  @cached_index = {}
         | 
| 10 | 
            +
                  @cached_index = {}.compare_by_identity
         | 
| 11 11 |  | 
| 12 12 | 
             
                  class << self
         | 
| 13 13 | 
             
                    attr_accessor :cached_index
         | 
| @@ -53,10 +53,8 @@ module Bridgetown | |
| 53 53 | 
             
                      end
         | 
| 54 54 | 
             
                    end
         | 
| 55 55 |  | 
| 56 | 
            -
                    unless cached_index[all_documents | 
| 57 | 
            -
             | 
| 58 | 
            -
                    end
         | 
| 59 | 
            -
                    cached_index[all_documents.object_id][index_key] = index
         | 
| 56 | 
            +
                    cached_index[all_documents] = {} unless cached_index[all_documents].is_a?(Hash)
         | 
| 57 | 
            +
                    cached_index[all_documents][index_key] = index
         | 
| 60 58 | 
             
                    index
         | 
| 61 59 | 
             
                  end
         | 
| 62 60 |  | 
| @@ -32,8 +32,11 @@ module Bridgetown | |
| 32 32 | 
             
                  # rubocop:disable Metrics/BlockLength
         | 
| 33 33 | 
             
                  def run(default_config, templates, site_title) # rubocop:todo Metrics/AbcSize
         | 
| 34 34 | 
             
                    if templates.size.to_i <= 0
         | 
| 35 | 
            -
                      @logging_lambda.call | 
| 36 | 
            -
                        "  | 
| 35 | 
            +
                      @logging_lambda.call(
         | 
| 36 | 
            +
                        "is enabled in the config, but no paginated pages found." \
         | 
| 37 | 
            +
                        " Add 'pagination:\\n  collection: <label>' to the front-matter of a page.",
         | 
| 38 | 
            +
                        "warn"
         | 
| 39 | 
            +
                      )
         | 
| 37 40 | 
             
                      return
         | 
| 38 41 | 
             
                    end
         | 
| 39 42 |  | 
| @@ -63,7 +66,7 @@ module Bridgetown | |
| 63 66 |  | 
| 64 67 | 
             
                      next unless template_config["enabled"]
         | 
| 65 68 |  | 
| 66 | 
            -
                      @logging_lambda.call "found page:  | 
| 69 | 
            +
                      @logging_lambda.call "found page: #{template.path}", "debug" unless @debug
         | 
| 67 70 |  | 
| 68 71 | 
             
                      # Request all documents in all collections that the user has requested
         | 
| 69 72 | 
             
                      all_posts = get_docs_in_collections(template_config["collection"], template)
         | 
| @@ -154,34 +157,34 @@ module Bridgetown | |
| 154 157 | 
             
                    r = 20
         | 
| 155 158 | 
             
                    f = "Pagination: ".rjust(20)
         | 
| 156 159 | 
             
                    # Debug print the config
         | 
| 157 | 
            -
                     | 
| 158 | 
            -
             | 
| 159 | 
            -
             | 
| 160 | 
            -
             | 
| 161 | 
            -
             | 
| 162 | 
            -
             | 
| 163 | 
            -
             | 
| 164 | 
            -
             | 
| 165 | 
            -
             | 
| 166 | 
            -
             | 
| 167 | 
            -
             | 
| 168 | 
            -
             | 
| 169 | 
            -
             | 
| 170 | 
            -
             | 
| 171 | 
            -
             | 
| 172 | 
            -
             | 
| 173 | 
            -
             | 
| 174 | 
            -
             | 
| 175 | 
            -
                     | 
| 160 | 
            +
                    return unless @debug
         | 
| 161 | 
            +
             | 
| 162 | 
            +
                    puts "#{f}----------------------------"
         | 
| 163 | 
            +
                    puts "#{f}Page: #{page_path}"
         | 
| 164 | 
            +
                    puts "#{f} Active configuration"
         | 
| 165 | 
            +
                    puts f + "  Enabled: ".ljust(r) + config["enabled"].to_s
         | 
| 166 | 
            +
                    puts f + "  Items per page: ".ljust(r) + config["per_page"].to_s
         | 
| 167 | 
            +
                    puts f + "  Permalink: ".ljust(r) + config["permalink"].to_s
         | 
| 168 | 
            +
                    puts f + "  Title: ".ljust(r) + config["title"].to_s
         | 
| 169 | 
            +
                    puts f + "  Limit: ".ljust(r) + config["limit"].to_s
         | 
| 170 | 
            +
                    puts f + "  Sort by: ".ljust(r) + config["sort_field"].to_s
         | 
| 171 | 
            +
                    puts f + "  Sort reverse: ".ljust(r) + config["sort_reverse"].to_s
         | 
| 172 | 
            +
             | 
| 173 | 
            +
                    puts "#{f} Active Filters"
         | 
| 174 | 
            +
                    puts f + "  Collection: ".ljust(r) + config["collection"].to_s
         | 
| 175 | 
            +
                    puts f + "  Offset: ".ljust(r) + config["offset"].to_s
         | 
| 176 | 
            +
                    puts f + "  Category: ".ljust(r) + (config["category"].nil? || config["category"] == "posts" ? "[Not set]" : config["category"].to_s)
         | 
| 177 | 
            +
                    puts f + "  Tag: ".ljust(r) + (config["tag"].nil? ? "[Not set]" : config["tag"].to_s)
         | 
| 178 | 
            +
                    puts f + "  Locale: ".ljust(r) + (config["locale"].nil? ? "[Not set]" : config["locale"].to_s)
         | 
| 176 179 | 
             
                  end
         | 
| 177 180 | 
             
                  # rubocop:enable Layout/LineLength
         | 
| 178 181 |  | 
| 179 182 | 
             
                  # rubocop:disable Layout/LineLength
         | 
| 180 183 | 
             
                  def _debug_print_filtering_info(filter_name, before_count, after_count)
         | 
| 181 184 | 
             
                    # Debug print the config
         | 
| 182 | 
            -
                     | 
| 183 | 
            -
             | 
| 184 | 
            -
                     | 
| 185 | 
            +
                    return unless @debug
         | 
| 186 | 
            +
             | 
| 187 | 
            +
                    puts "#{"Pagination: ".rjust(20)} Filtering by: #{filter_name.to_s.ljust(9)} #{before_count.to_s.rjust(3)} => #{after_count}"
         | 
| 185 188 | 
             
                  end
         | 
| 186 189 | 
             
                  # rubocop:enable Layout/LineLength
         | 
| 187 190 |  | 
| @@ -263,7 +266,7 @@ module Bridgetown | |
| 263 266 | 
             
                      # So to unblock this common issue for the date field I simply iterate
         | 
| 264 267 | 
             
                      # once over every document and initialize the .date field explicitly
         | 
| 265 268 | 
             
                      if @debug
         | 
| 266 | 
            -
                        puts "Pagination: ".rjust(20) | 
| 269 | 
            +
                        puts "#{"Pagination: ".rjust(20)}Rolling through the date fields for all documents"
         | 
| 267 270 | 
             
                      end
         | 
| 268 271 | 
             
                      using_posts.each do |u_post|
         | 
| 269 272 | 
             
                        next unless u_post.respond_to?("date")
         | 
| @@ -378,11 +381,7 @@ module Bridgetown | |
| 378 381 | 
             
                      newpage.data["permalink"] = newpage.paginator.page_path if template.data["permalink"]
         | 
| 379 382 |  | 
| 380 383 | 
             
                      # Transfer the title across to the new page
         | 
| 381 | 
            -
                      tmp_title =  | 
| 382 | 
            -
                                    site_title
         | 
| 383 | 
            -
                                  else
         | 
| 384 | 
            -
                                    template.data["title"]
         | 
| 385 | 
            -
                                  end
         | 
| 384 | 
            +
                      tmp_title = template.data["title"] || site_title
         | 
| 386 385 |  | 
| 387 386 | 
             
                      # If the user specified a title suffix to be added then let's add that
         | 
| 388 387 | 
             
                      # to all the pages except the first
         | 
| @@ -419,40 +418,40 @@ module Bridgetown | |
| 419 418 | 
             
                    # simplest is to include all of the links to the pages preceeding the
         | 
| 420 419 | 
             
                    # current one (e.g for page 1 you get the list 2, 3, 4.... and for
         | 
| 421 420 | 
             
                    # page 2 you get the list 3,4,5...)
         | 
| 422 | 
            -
                     | 
| 423 | 
            -
             | 
| 424 | 
            -
             | 
| 425 | 
            -
             | 
| 426 | 
            -
             | 
| 427 | 
            -
             | 
| 428 | 
            -
             | 
| 429 | 
            -
             | 
| 430 | 
            -
             | 
| 431 | 
            -
             | 
| 432 | 
            -
             | 
| 433 | 
            -
             | 
| 434 | 
            -
             | 
| 435 | 
            -
             | 
| 436 | 
            -
             | 
| 437 | 
            -
             | 
| 438 | 
            -
             | 
| 439 | 
            -
             | 
| 440 | 
            -
             | 
| 441 | 
            -
             | 
| 442 | 
            -
             | 
| 443 | 
            -
                           | 
| 444 | 
            -
             | 
| 445 | 
            -
             | 
| 446 | 
            -
             | 
| 447 | 
            -
             | 
| 448 | 
            -
             | 
| 449 | 
            -
             | 
| 450 | 
            -
             | 
| 451 | 
            -
             | 
| 452 | 
            -
             | 
| 453 | 
            -
             | 
| 454 | 
            -
                           | 
| 455 | 
            -
                         | 
| 421 | 
            +
                    return unless config["trail"] && !config["trail"].nil? && newpages.size.to_i.positive?
         | 
| 422 | 
            +
             | 
| 423 | 
            +
                    trail_before = [config["trail"]["before"].to_i, 0].max
         | 
| 424 | 
            +
                    trail_after = [config["trail"]["after"].to_i, 0].max
         | 
| 425 | 
            +
                    trail_length = trail_before + trail_after + 1
         | 
| 426 | 
            +
             | 
| 427 | 
            +
                    return unless trail_before.positive? || trail_after.positive?
         | 
| 428 | 
            +
             | 
| 429 | 
            +
                    newpages.select do |npage|
         | 
| 430 | 
            +
                      # Selecting the beginning of the trail
         | 
| 431 | 
            +
                      idx_start = [npage.paginator.page - trail_before - 1, 0].max
         | 
| 432 | 
            +
                      # Selecting the end of the trail
         | 
| 433 | 
            +
                      idx_end = [idx_start + trail_length, newpages.size.to_i].min
         | 
| 434 | 
            +
             | 
| 435 | 
            +
                      # Always attempt to maintain the max total of <trail_length> pages
         | 
| 436 | 
            +
                      # in the trail (it will look better if the trail doesn't shrink)
         | 
| 437 | 
            +
                      if idx_end - idx_start < trail_length
         | 
| 438 | 
            +
                        # Attempt to pad the beginning if we have enough pages
         | 
| 439 | 
            +
                        # Never go beyond the zero index
         | 
| 440 | 
            +
                        idx_start = [
         | 
| 441 | 
            +
                          idx_start - (trail_length - (idx_end - idx_start)),
         | 
| 442 | 
            +
                          0,
         | 
| 443 | 
            +
                        ].max
         | 
| 444 | 
            +
                      end
         | 
| 445 | 
            +
             | 
| 446 | 
            +
                      # Convert the newpages array into a two dimensional array that has
         | 
| 447 | 
            +
                      # [index, page_url] as items
         | 
| 448 | 
            +
                      npage.paginator.page_trail = newpages[idx_start...idx_end] \
         | 
| 449 | 
            +
                        .each_with_index.map do |ipage, idx|
         | 
| 450 | 
            +
                        PageTrail.new(
         | 
| 451 | 
            +
                          idx_start + idx + 1,
         | 
| 452 | 
            +
                          ipage.paginator.page_path,
         | 
| 453 | 
            +
                          ipage.data["title"]
         | 
| 454 | 
            +
                        )
         | 
| 456 455 | 
             
                      end
         | 
| 457 456 | 
             
                    end
         | 
| 458 457 | 
             
                  end
         | 
| @@ -11,7 +11,7 @@ module Bridgetown | |
| 11 11 | 
             
                # not read from disk
         | 
| 12 12 | 
             
                #
         | 
| 13 13 | 
             
                class PaginationPage < Bridgetown::GeneratedPage
         | 
| 14 | 
            -
                  def initialize(page_to_copy, cur_page_nr, total_pages, index_pageandext, template_ext)
         | 
| 14 | 
            +
                  def initialize(page_to_copy, cur_page_nr, total_pages, index_pageandext, template_ext) # rubocop:disable Lint/MissingSuper
         | 
| 15 15 | 
             
                    @site = page_to_copy.site
         | 
| 16 16 | 
             
                    @base = ""
         | 
| 17 17 | 
             
                    @url = ""
         | 
| @@ -29,7 +29,7 @@ module Bridgetown | |
| 29 29 |  | 
| 30 30 | 
             
                    if @page > @total_pages
         | 
| 31 31 | 
             
                      raise "page number can't be greater than total pages:" \
         | 
| 32 | 
            -
             | 
| 32 | 
            +
                            " #{@page} > #{@total_pages}"
         | 
| 33 33 | 
             
                    end
         | 
| 34 34 |  | 
| 35 35 | 
             
                    init = (@page - 1) * @per_page
         | 
| @@ -63,7 +63,7 @@ module Bridgetown | |
| 63 63 | 
             
                    @documents = documents[init..offset]
         | 
| 64 64 | 
             
                    @page_path = Utils.format_page_number(this_page_url, cur_page_nr, @total_pages)
         | 
| 65 65 |  | 
| 66 | 
            -
                    @previous_page = @page  | 
| 66 | 
            +
                    @previous_page = @page == 1 ? nil : @page - 1
         | 
| 67 67 | 
             
                    @previous_page_path = unless @page == 1
         | 
| 68 68 | 
             
                                            if @page == 2
         | 
| 69 69 | 
             
                                              Utils.format_page_number(
         | 
| @@ -77,7 +77,7 @@ module Bridgetown | |
| 77 77 | 
             
                                              )
         | 
| 78 78 | 
             
                                            end
         | 
| 79 79 | 
             
                                          end
         | 
| 80 | 
            -
                    @next_page = @page  | 
| 80 | 
            +
                    @next_page = @page == @total_pages ? nil : @page + 1
         | 
| 81 81 | 
             
                    @next_page_path = if @page != @total_pages
         | 
| 82 82 | 
             
                                        Utils.format_page_number(
         | 
| 83 83 | 
             
                                          paginated_page_url, @next_page, @total_pages
         | 
| @@ -74,14 +74,10 @@ module Bridgetown | |
| 74 74 | 
             
                  # Sorting routine used for ordering posts by custom fields.
         | 
| 75 75 | 
             
                  # Handles Strings separately as we want a case-insenstive sorting
         | 
| 76 76 | 
             
                  #
         | 
| 77 | 
            -
                  # rubocop:disable Naming/MethodParameterName, Metrics/CyclomaticComplexity | 
| 77 | 
            +
                  # rubocop:disable Naming/MethodParameterName, Metrics/CyclomaticComplexity
         | 
| 78 78 | 
             
                  def self.sort_values(a, b)
         | 
| 79 | 
            -
                    if a.nil? && !b.nil?
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                    elsif !a.nil? && b.nil?
         | 
| 82 | 
            -
                      return 1
         | 
| 83 | 
            -
                    end
         | 
| 84 | 
            -
             | 
| 79 | 
            +
                    return -1 if a.nil? && !b.nil?
         | 
| 80 | 
            +
                    return 1 if !a.nil? && b.nil?
         | 
| 85 81 | 
             
                    return a.downcase <=> b.downcase if a.is_a?(String)
         | 
| 86 82 |  | 
| 87 83 | 
             
                    if a.respond_to?("to_datetime") && b.respond_to?("to_datetime")
         | 
| @@ -91,7 +87,7 @@ module Bridgetown | |
| 91 87 | 
             
                    # By default use the built in sorting for the data type
         | 
| 92 88 | 
             
                    a <=> b
         | 
| 93 89 | 
             
                  end
         | 
| 94 | 
            -
                  # rubocop:enable Naming/MethodParameterName, Metrics/CyclomaticComplexity | 
| 90 | 
            +
                  # rubocop:enable Naming/MethodParameterName, Metrics/CyclomaticComplexity
         | 
| 95 91 |  | 
| 96 92 | 
             
                  # Retrieves the given sort field from the given post
         | 
| 97 93 | 
             
                  # the sort_field variable can be a hierarchical value on the form
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: bridgetown-paginate
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0.0. | 
| 4 | 
            +
              version: 1.0.0.alpha2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Bridgetown Team
         | 
| @@ -16,14 +16,14 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - '='
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: 1.0.0. | 
| 19 | 
            +
                    version: 1.0.0.alpha2
         | 
| 20 20 | 
             
              type: :runtime
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - '='
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: 1.0.0. | 
| 26 | 
            +
                    version: 1.0.0.alpha2
         | 
| 27 27 | 
             
            description: 
         | 
| 28 28 | 
             
            email: maintainers@bridgetownrb.com
         | 
| 29 29 | 
             
            executables: []
         |