jekyll-paginate-v2 1.1.0 → 1.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 80775a1edd643521212d16cdaab6e1c983a0e7dd
4
- data.tar.gz: 2fde95bfee813f020993d8076e8ba95897a07017
3
+ metadata.gz: 80659d18067d2e6e70c308778083386e55baa867
4
+ data.tar.gz: 24d4018f4b1df421583e0412079e6fd71cb6ab9d
5
5
  SHA512:
6
- metadata.gz: 054388632b1064bda7bdb101ef988cb4b3abb28203f674fcf3e69e930c67fab6783fe3c1ce0d672bbd344489095797e119b74517a2039eeb6a12a4fb6c022f61
7
- data.tar.gz: 2970a984f3ef365a0ad3ff329793a6ea45a7d1a845e0ed8068e3c4db0f4bf049fe85c725da720f26f79f613ee5fecdd021a3e12c3186dd9c2e9d2bba85308499
6
+ metadata.gz: 8a49c16c2a1e5e450e39a169362a4702ec769160338a9ad081ad0e3a84a4c118117e3ea6039debdd16f05d2d3de35b7837558bf967ac06b5a62f5ecbf065a849
7
+ data.tar.gz: f34d20de449ce50b39f7c6015425f0f9f8b4ee52d7e04b9faaf5961470b90e6c2e4c0e6fc486714b7c11d29e20394c09c6d25e9c6e690cac14a5186938801594
data/README.md CHANGED
@@ -38,6 +38,15 @@ In addition to all the features offered by the older [jekyll-paginate gem](https
38
38
 
39
39
  All this while being fully backwards compatible with the old [jekyll-paginate](https://github.com/jekyll/jekyll-paginate) gem (requires minimal additional front-matter, see [page-configuration](#page-configuration)).
40
40
 
41
+ ## Issues / to-be-completed
42
+ * Not fully compatible with the old jekyll-paginate plugin configuration yet.
43
+ * Incomplete unit-tests
44
+ * Missing integration tests [#2](https://github.com/jekyll/jekyll-paginate/pull/2)
45
+ * Missing more detailed examples
46
+ * Code is still too tightly coupled with `site` [#26](https://github.com/jekyll/jekyll-paginate/issues/26)
47
+ * Unable to paginate _pages_ (still under consideration)
48
+ * Unable to auto-generate category/tag/language pagination pages. Still requires programmer to specify the pages him/herself.
49
+ * _Exclude_ filter not implemented [#6](https://github.com/jekyll/jekyll-paginate/issues/6)
41
50
 
42
51
  ## Contributing
43
52
 
@@ -45,11 +54,12 @@ I currently need testers and people willing to give me feedback and code reviews
45
54
 
46
55
  1. Fork it ( https://github.com/sverrirs/jekyll-paginate-v2/fork )
47
56
  2. Create your feature branch (`git checkout -b my-new-feature`)
48
- 3. Commit your changes (`git commit -am 'Add some feature'`)
49
- 4. Build the gem locally (`gem build jekyll-paginate-v2.gemspec`)
50
- 5. Test and verify the gem locally (`gem install ./jekyll-paginate-v2-x.x.x.gem`)
51
- 6. Push to the branch (`git push origin my-new-feature`)
52
- 7. Create new Pull Request
57
+ 3. Run the unit tests (`rake`)
58
+ 4. Commit your changes (`git commit -am 'Add some feature'`)
59
+ 5. Build the gem locally (`gem build jekyll-paginate-v2.gemspec`)
60
+ 6. Test and verify the gem locally (`gem install ./jekyll-paginate-v2-x.x.x.gem`)
61
+ 7. Push to the branch (`git push origin my-new-feature`)
62
+ 8. Create new Pull Request
53
63
 
54
64
  Note: This project uses [semantic versioning](http://semver.org/).
55
65
 
@@ -136,6 +146,8 @@ And to display pagination links, simply
136
146
  {% endif %}
137
147
  ```
138
148
 
149
+ > All posts that have the `hidden: true` in their front matter are ignored by the pagination logic.
150
+
139
151
  The code is fully backwards compatible and you will have access to all the normal paginator variables defined in the [official jekyll documentation](https://jekyllrb.com/docs/pagination/#liquid-attributes-available).
140
152
 
141
153
  Neat!
@@ -241,4 +253,12 @@ pagination:
241
253
  category: ruby
242
254
  sort_field: 'title'
243
255
  sort_reverse: false
244
- ```
256
+ ```
257
+
258
+ ## Common issues
259
+
260
+ #### I'm getting a bundler error after upgrading the gem (Bundler::GemNotFound)
261
+
262
+ > bundler/spec_set.rb:95:in `block in materialize': Could not find jekyll-paginate-v2-1.0.0 in any of the sources (Bundler::GemNotFound)
263
+
264
+ When running `jekyll serve` if you ever get an error similar to the one above the solution is to delete your `Gemfile.lock` file and try again.
@@ -13,7 +13,8 @@ require "jekyll-paginate-v2/version"
13
13
  require "jekyll-paginate-v2/defaults"
14
14
  require "jekyll-paginate-v2/utils"
15
15
  require "jekyll-paginate-v2/paginator"
16
- require "jekyll-paginate-v2/pagination"
16
+ require "jekyll-paginate-v2/paginationModel"
17
+ require "jekyll-paginate-v2/paginationGenerator"
17
18
 
18
19
  module Jekyll
19
20
  module PaginateV2
@@ -0,0 +1,66 @@
1
+ module Jekyll
2
+ module PaginateV2
3
+
4
+ #
5
+ # The main entry point into the generator, called by Jekyll
6
+ # this function extracts all the necessary information from the jekyll end and passes it into the pagination
7
+ # logic. Additionally it also contains all site specific actions that the pagination logic needs access to
8
+ # (such as how to create new pages)
9
+ #
10
+ class PaginationGenerator < Generator
11
+ # This generator is safe from arbitrary code execution.
12
+ safe true
13
+
14
+ # This generator should be passive with regard to its execution
15
+ priority :lowest
16
+
17
+ # Generate paginated pages if necessary (Default entry point)
18
+ # site - The Site.
19
+ #
20
+ # Returns nothing.
21
+ def generate(site)
22
+
23
+ # Retrieve and merge the pagination configuration from the site yml file
24
+ default_config = DEFAULT.merge(site.config['pagination'] || {})
25
+
26
+ # If disabled then simply quit
27
+ if !default_config['enabled']
28
+ Jekyll.logger.info "Pagination:","disabled in site.config."
29
+ return
30
+ end
31
+
32
+ Jekyll.logger.debug "Pagination:","Starting"
33
+
34
+ ################# 1 ###################
35
+ # Extract the necessary information out of the site object and then instantiate the model
36
+
37
+ # Get all posts that will be generated (excluding hidden posts that have hidden:true in the front matter)
38
+ all_posts = site.site_payload['site']['posts'].reject { |post| post['hidden'] }
39
+
40
+ # Get all pages in the site (this will be used to find the pagination templates)
41
+ all_pages = site.pages
42
+
43
+ # Get the default title of the site (used as backup when there is no title available for pagination)
44
+ site_title = site.config['title']
45
+
46
+ ################ 2 ####################
47
+ # Create the proc that constructs the real-life site page
48
+ page_create_lambda = lambda do | template_dir, template_name |
49
+ # Create the new page
50
+ newpage = Page.new( site, site.source, template_dir, template_name)
51
+ # Add the page to the site so that it is generated correctly
52
+ site.pages << newpage
53
+ # Return the site to the calling code
54
+ return newpage
55
+ end
56
+
57
+ ################ 3 ####################
58
+ # Now create and call the model with the real-life page creation proc and site data
59
+ model = PaginationModel.new()
60
+ model.run(default_config, all_pages, site_title, all_posts, &page_create_lambda)
61
+
62
+ end
63
+ end # class PaginationGenerator
64
+
65
+ end # module PaginateV2
66
+ end # module Jekyll
@@ -1,41 +1,21 @@
1
1
  module Jekyll
2
2
  module PaginateV2
3
3
 
4
- class PaginationV2 < Generator
5
- # This generator is safe from arbitrary code execution.
6
- safe true
4
+ class PaginationModel
5
+
6
+ def run(default_config, site_pages, site_title, all_posts, &page_create_proc)
7
+ #if !block_given?
8
+ # raise ArgumentError.new("No page creation block given, cannot continue.")
9
+ #end
7
10
 
8
- # This generator should be passive with regard to its execution
9
- priority :lowest
10
-
11
- # Generate paginated pages if necessary (Default entry point)
12
- # site - The Site.
13
- #
14
- # Returns nothing.
15
- def generate(site)
16
-
17
- # Retrieve and merge the folate configuration from the site yml file
18
- default_config = DEFAULT.merge(site.config['pagination'] || {})
19
-
20
- # If disabled then simply quit
21
- if !default_config['enabled']
22
- Jekyll.logger.info "Pagination:","disabled in site.config."
23
- return
24
- end
25
-
26
- Jekyll.logger.debug "Pagination:","Starting"
27
-
28
11
  # By default if pagination is enabled we attempt to find all index.html pages in the site
29
- templates = self.discover_paginate_templates(site)
12
+ templates = self.discover_paginate_templates(site_pages)
30
13
  if( templates.size.to_i <= 0 )
31
14
  Jekyll.logger.warn "Pagination:","is enabled, but I couldn't find " +
32
15
  "any index.html page to use as the pagination template. Skipping pagination."
33
16
  return
34
17
  end
35
18
 
36
- # Get all posts that will be generated (excluding hidden posts such as drafts)
37
- all_posts = site.site_payload['site']['posts'].reject { |post| post['hidden'] }
38
-
39
19
  # Create the necessary indexes for the posts
40
20
  all_categories = self.index_posts_by(all_posts, 'categories')
41
21
  all_categories['posts'] = all_posts; # Popuplate a category for all posts
@@ -56,7 +36,8 @@ module Jekyll
56
36
  if( template_config['enabled'] )
57
37
  Jekyll.logger.info "Pagination:","found template: "+template.path
58
38
  # Now construct the pagination data for this template page
59
- self.paginate(site, template, template_config, all_posts, all_tags, all_categories, all_locales)
39
+ #self.paginate(site, template, template_config, all_posts, all_tags, all_categories, all_locales)
40
+ self.paginate(template, template_config, site_title, all_posts, all_tags, all_categories, all_locales, &page_create_proc)
60
41
  end
61
42
  end
62
43
  end #for
@@ -64,13 +45,14 @@ module Jekyll
64
45
  end # function generate
65
46
 
66
47
  #
67
- # Rolls through the entire site and finds all index.html pages available
48
+ # Rolls through all the pages passed in and finds all pages that have pagination enabled on them.
49
+ # These pages will be used as templates
68
50
  #
69
- # site - The Site.
51
+ # site_pages - All pages in the site
70
52
  #
71
- def discover_paginate_templates(site)
53
+ def discover_paginate_templates(site_pages)
72
54
  candidates = []
73
- site.pages.select do |page|
55
+ site_pages.select do |page|
74
56
  # If the page has the enabled config set, supports any type of file name html or md
75
57
  if page.data['pagination'].is_a?(Hash) && page.data['pagination']['enabled']
76
58
  candidates << page
@@ -183,8 +165,7 @@ module Jekyll
183
165
  # template - The index.html Page that requires pagination.
184
166
  # config - The configuration settings that should be used
185
167
  #
186
- def paginate(site, template, config, all_posts, all_tags, all_categories, all_locales)
187
-
168
+ def paginate(template, config, site_title, all_posts, all_tags, all_categories, all_locales, &page_create_proc)
188
169
  # By default paginate on all posts in the site
189
170
  using_posts = all_posts
190
171
 
@@ -215,21 +196,21 @@ module Jekyll
215
196
  # This .pager member is a built in thing in Jekyll and defines the paginator implementation
216
197
  # Simpy override to use mine
217
198
  (1..total_pages).each do |cur_page_nr|
218
- pager = PaginatorV2.new( config['per_page'], config['permalink'], using_posts, cur_page_nr, total_pages, template.url )
199
+ pager = Paginator.new( config['per_page'], config['permalink'], using_posts, cur_page_nr, total_pages, template.url )
219
200
  if( cur_page_nr > 1)
220
- newpage = Page.new( site, site.source, template.dir, template.name)
201
+ # External Proc call to create the actual page for us (this is passed in when the pagination is run)
202
+ newpage = page_create_proc.call( template.dir, template.name )
221
203
  newpage.pager = pager
222
204
  newpage.dir = Utils.paginate_path(template.url, cur_page_nr, config['permalink'])
223
205
  if( config.has_key?('title_suffix'))
224
206
  if( !template.data['title'] )
225
- tmp_title = site.config['title']
207
+ tmp_title = site_title
226
208
  else
227
209
  tmp_title = template.data['title']
228
210
  end
229
211
 
230
212
  newpage.data['title'] = "#{tmp_title}#{Utils.format_page_number(config['title_suffix'], cur_page_nr)}"
231
213
  end
232
- site.pages << newpage
233
214
  else
234
215
  template.pager = pager
235
216
  end
@@ -4,7 +4,7 @@ module Jekyll
4
4
  #
5
5
  # Handles the preparation of all the posts based on the current page index
6
6
  #
7
- class PaginatorV2
7
+ class Paginator
8
8
  attr_reader :page, :per_page, :posts, :total_posts, :total_pages,
9
9
  :previous_page, :previous_page_path, :next_page, :next_page_path
10
10
 
@@ -52,7 +52,7 @@ module Jekyll
52
52
  }
53
53
  end
54
54
 
55
- end # class PaginatorV2
55
+ end # class Paginator
56
56
 
57
57
  end # module PaginateV2
58
58
  end # module Jekyll
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module PaginateV2
3
- VERSION = "1.1.0"
3
+ VERSION = "1.2.0"
4
4
  end
5
5
  end
@@ -1,11 +1,11 @@
1
1
  require_relative 'spec_helper.rb'
2
2
 
3
3
  module Jekyll::PaginateV2
4
- describe PaginatorV2 do
4
+ describe Paginator do
5
5
 
6
6
  it "must include the necessary paginator attributes" do
7
7
 
8
- pager = PaginatorV2.new(10, "/page:num/", [], 1, 10, "/index.md")
8
+ pager = Paginator.new(10, "/page:num/", [], 1, 10, "/index.md")
9
9
 
10
10
  err = ->{ pager.page }.wont_raise NoMethodError
11
11
  err = ->{ pager.per_page }.wont_raise NoMethodError
@@ -20,8 +20,8 @@ module Jekyll::PaginateV2
20
20
  end
21
21
 
22
22
  it "must throw an error if the current page number is greater than the total pages" do
23
- err = -> { pager = PaginatorV2.new(10, "/page:num/", [], 10, 8, "/index.md") }.must_raise RuntimeError
24
- err = -> { pager = PaginatorV2.new(10, "/page:num/", [], 8, 10, "/index.md") }.wont_raise RuntimeError
23
+ err = -> { pager = Paginator.new(10, "/page:num/", [], 10, 8, "/index.md") }.must_raise RuntimeError
24
+ err = -> { pager = Paginator.new(10, "/page:num/", [], 8, 10, "/index.md") }.wont_raise RuntimeError
25
25
  end
26
26
 
27
27
  it "must trim the list of posts correctly based on the cur_page_nr and per_page" do
@@ -31,7 +31,7 @@ module Jekyll::PaginateV2
31
31
  # Initialize a pager with
32
32
  # 5 posts per page
33
33
  # at page 2 out of 5 pages
34
- pager = PaginatorV2.new(5, "/page:num/", posts, 2, 5, "/index.md")
34
+ pager = Paginator.new(5, "/page:num/", posts, 2, 5, "/index.md")
35
35
 
36
36
  pager.page.must_equal 2
37
37
  pager.per_page.must_equal 5
@@ -56,7 +56,7 @@ module Jekyll::PaginateV2
56
56
  # Initialize a pager with
57
57
  # 5 posts per page
58
58
  # at page 2 out of 5 pages
59
- pager = PaginatorV2.new(5, "/page:num/", posts, 1, 5, "/index.md")
59
+ pager = Paginator.new(5, "/page:num/", posts, 1, 5, "/index.md")
60
60
 
61
61
  pager.page.must_equal 1
62
62
  pager.per_page.must_equal 5
@@ -81,7 +81,7 @@ module Jekyll::PaginateV2
81
81
  # Initialize a pager with
82
82
  # 5 posts per page
83
83
  # at page 2 out of 5 pages
84
- pager = PaginatorV2.new(5, "/page:num/", posts, 5, 5, "/index.md")
84
+ pager = Paginator.new(5, "/page:num/", posts, 5, 5, "/index.md")
85
85
 
86
86
  pager.page.must_equal 5
87
87
  pager.per_page.must_equal 5
@@ -2,10 +2,12 @@ require 'minitest/spec'
2
2
  require 'minitest/autorun'
3
3
 
4
4
  require 'jekyll'
5
+ require_relative '../lib/jekyll-paginate-v2/version'
5
6
  require_relative '../lib/jekyll-paginate-v2/defaults'
6
7
  require_relative '../lib/jekyll-paginate-v2/utils'
7
8
  require_relative '../lib/jekyll-paginate-v2/paginator'
8
- require_relative '../lib/jekyll-paginate-v2/pagination'
9
+ require_relative '../lib/jekyll-paginate-v2/paginationModel'
10
+ require_relative '../lib/jekyll-paginate-v2/paginationGenerator'
9
11
 
10
12
  # From: http://stackoverflow.com/a/32335990/779521
11
13
  module MiniTest
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-paginate-v2
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sverrir Sigmundarson
@@ -69,7 +69,8 @@ files:
69
69
  - jekyll-paginate-v2.gemspec
70
70
  - lib/jekyll-paginate-v2.rb
71
71
  - lib/jekyll-paginate-v2/defaults.rb
72
- - lib/jekyll-paginate-v2/pagination.rb
72
+ - lib/jekyll-paginate-v2/paginationGenerator.rb
73
+ - lib/jekyll-paginate-v2/paginationModel.rb
73
74
  - lib/jekyll-paginate-v2/paginator.rb
74
75
  - lib/jekyll-paginate-v2/utils.rb
75
76
  - lib/jekyll-paginate-v2/version.rb