jekyll-itafroma-archive 0.1.3 → 0.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: b9db9109c4075f3d01236e4c785e8bfadf4bbd81
4
- data.tar.gz: 017053e6f01893e37526e1f809945720bc40eb7f
3
+ metadata.gz: ab0d1eafe7e7202e6ade0f08785acff15d18817b
4
+ data.tar.gz: 924cacc3a7c34d321a0aa5b5f86f54bda6c76132
5
5
  SHA512:
6
- metadata.gz: bc839479f6b3d44222df6dd346a11ec97037ba81df96597abe9fed85712dfaa2dc65ae641cca520e6e621a8e79f57be24382cd9a6de25106be93f6b461b60032
7
- data.tar.gz: c4537df2b5c1b40c4316afd0c9c20a7f7dfdf01bc7ce6c877c096dab104d72094e47dd346787ba4a0fd0459bf1676320f8e536da19fa83036e8120ea14b3db62
6
+ metadata.gz: 55ac6cf9979f3041f4689cdd8ad16fb751758be7616de616de40c71e0010560b8af9799542ec9a081d199df4ef3b7f4a297454b4b18663e5ac824a5c01734e31
7
+ data.tar.gz: 05c833f81b8cfe010fc198e2a1220ba0e11a3876467b3b1cacae093b592dcab25e56472bc6b9dd9880da5e8d2843b7dcec144fa90218cba1d4d975f68f45914d
@@ -1,2 +1,3 @@
1
1
  require 'jekyll/itafroma/archive_generator'
2
2
  require 'jekyll/itafroma/archive_page'
3
+ require 'jekyll/itafroma/archive_pager'
@@ -10,9 +10,16 @@
10
10
 
11
11
  module Jekyll
12
12
  module Itafroma
13
+ # Generator for archive listings.
13
14
  class ArchiveGenerator < Generator
15
+ # This generator is safe from arbitrary code execution.
14
16
  safe true
15
17
 
18
+ # Generate archive pages.
19
+ #
20
+ # site - The site.
21
+ #
22
+ # Returns nothing.
16
23
  def generate(site)
17
24
  layout = site.config['archive']['layout'] || 'archive'
18
25
  if site.layouts.key? layout
@@ -28,14 +35,33 @@ module Jekyll
28
35
 
29
36
  private
30
37
 
38
+ # Generate an archive page group.
39
+ #
40
+ # site - The site.
41
+ # posts - The Posts to include in the archive.
42
+ # pattern - The date pattern to collate the archive on
43
+ #
44
+ # Returns an Array of archive Pages.
31
45
  def generate_archive_pages(site, posts, pattern)
32
46
  pages = []
47
+
33
48
  collate(posts, pattern).each do |_, collated_posts|
34
49
  pages << ArchivePage.new(site, site.source, pattern, collated_posts)
35
50
  end
51
+
52
+ pages.each_with_index do |page, index|
53
+ page.pager = ArchivePager.new(site, index + 1, pages, pages.size)
54
+ end
55
+
36
56
  pages
37
57
  end
38
58
 
59
+ # Collate an Array of Posts by a date pattern.
60
+ #
61
+ # posts - The Posts to collate
62
+ # pattern - The date pattern to collate the Posts on
63
+ #
64
+ # Returns a collated Hash of Posts.
39
65
  def collate(posts, pattern)
40
66
  collated = {}
41
67
  posts.each do |post|
@@ -12,44 +12,70 @@
12
12
 
13
13
  module Jekyll
14
14
  module Itafroma
15
- ##
16
15
  # Represents an archive listing page.
17
-
18
16
  class ArchivePage < Page
19
- def initialize(site, base, pattern, posts)
17
+ # Initalize a new ArchivePage.
18
+ #
19
+ # site - The site.
20
+ # base - The path to the site's root
21
+ # date_pattern - The pattern of the date the posts are collated on
22
+ # posts - The posts to be added to the ArchivePage.
23
+ def initialize(site, base, date_pattern, posts)
20
24
  @site = site
25
+ @config = site.config['archive']
26
+ @posts = posts
27
+
28
+ @date_pattern = date_pattern
21
29
  @base = base
22
- @dir = posts.first.date.strftime(pattern)
30
+ @dir = dir
23
31
  @name = 'index.html'
24
- @config = site.config['archive']
25
32
 
26
33
  process(@name)
27
34
 
28
35
  layout = @config['layout'] || 'archive'
29
36
  read_yaml(File.join(base, '_layouts'), "#{layout}.html")
30
37
 
31
- data['posts'] = posts
32
- data['date'] = {
33
- 'value' => posts.first.date,
34
- 'pattern' => pattern,
35
- }
36
- data['title'] = title
38
+ populate_data!
37
39
  end
38
40
 
39
- def url
40
- base = site.config['archive']['path'] || '/'
41
- File.join(base, @dir, 'index.html')
41
+ # Generate the start date of the archive.
42
+ #
43
+ # To determine the archive's start date, the date of the first post is
44
+ # converted to a string using `@date_pattern`. Doing this will clear any
45
+ # precision beyond what's specified in `@date_pattern`.
46
+ #
47
+ # Returns a DateTime containing the archive's start date.
48
+ def date
49
+ date_string = @posts.first.date.strftime(@date_pattern)
50
+ DateTime.strptime(date_string, @date_pattern)
42
51
  end
43
52
 
53
+ # Generate the ArchivePage title.
54
+ #
55
+ # Returns a String containing the ArchivePage title.
44
56
  def title
45
57
  tokenized_title = @config['title'] || 'Blog archive - :date'
46
- date = data['date']['value']
47
- pattern = data['date']['pattern']
48
- tokenized_title.gsub(':date', date.strftime(pattern))
58
+ tokenized_title.gsub(':date', date.strftime(@date_pattern))
59
+ end
60
+
61
+ # Generate the ArchivePage url.
62
+ #
63
+ # Returns a String containing the ArchivePage url.
64
+ def url
65
+ base = @config['path'] || '/'
66
+ File.join(base, date.strftime(@date_pattern), 'index.html')
49
67
  end
50
68
 
51
- def to_liquid
52
- data.deep_merge('url' => url, 'content' => content)
69
+ # Add the ArchivePage-specific data to the regular Page data.
70
+ #
71
+ # Returns nothing.
72
+ def populate_data!
73
+ data.merge!('date' => date,
74
+ 'title' => title,
75
+ 'archive' => {
76
+ 'date_pattern' => @date_pattern,
77
+ 'posts' => @posts
78
+ })
53
79
  end
54
80
  end
55
81
  end
@@ -0,0 +1,43 @@
1
+ #
2
+ # An archive listing pager.
3
+ #
4
+ # Author:: Mark Trapp
5
+ # Copyright: Copyright (c) 2013 Mark Trapp
6
+ # License:: MIT
7
+ # Acknowledgements:: Inspired by the work done by nlindley and ilkka on Github:
8
+ # https://gist.github.com/nlindley/6409459
9
+ # https://gist.github.com/nlindley/6409441
10
+ # https://gist.github.com/ilkka/707020
11
+ # https://gist.github.com/ilkka/707909
12
+ module Jekyll
13
+ module Itafroma
14
+ # Represents the pager used for ArchivePages.
15
+ class ArchivePager < Pager
16
+ # Static: Return the pagination path of the archive page
17
+ #
18
+ # posts - The Array of the archive's Posts.
19
+ # num_page - the pagination page number
20
+ #
21
+ # Returns the pagination path as a string
22
+ def self.paginate_archive_path(posts, num_page)
23
+ return posts.first.url if num_page.nil?
24
+ return nil if num_page < 1
25
+ return nil if num_page > posts.size
26
+ posts[num_page - 1].url
27
+ end
28
+
29
+ # Initialize a new Archive Pager.
30
+ #
31
+ # site - the Jekyll::Site object
32
+ # page - The Integer page number.
33
+ # all_posts - The Array of the archive's Posts.
34
+ # num_pages - The Integer number of pages or nil if you'd like the number
35
+ # of pages calculated.
36
+ def initialize(site, page, all_posts, num_pages = nil)
37
+ super
38
+ @previous_page_path = ArchivePager.paginate_archive_path(all_posts, @previous_page)
39
+ @next_page_path = ArchivePager.paginate_archive_path(all_posts, @next_page)
40
+ end
41
+ end
42
+ end
43
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-itafroma-archive
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Trapp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-05 00:00:00.000000000 Z
11
+ date: 2014-02-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Jekyll plugin to create a set of archive pages.
14
14
  email: mark@marktrapp.com
@@ -19,6 +19,7 @@ files:
19
19
  - lib/jekyll/itafroma/archive.rb
20
20
  - lib/jekyll/itafroma/archive_generator.rb
21
21
  - lib/jekyll/itafroma/archive_page.rb
22
+ - lib/jekyll/itafroma/archive_pager.rb
22
23
  homepage: http://marktrapp.com/projects/jekyll-archive
23
24
  licenses:
24
25
  - MIT