jekyll-series-links 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 227d180344b8879c35e383835be6f3d6df525c35234ed1bacf99a03c37ac9647
4
+ data.tar.gz: bcb720700201224ee5d9c6709bd2db885aa80661a9124e6a28123ca48b585dc8
5
+ SHA512:
6
+ metadata.gz: 19a459e21007b5d7fa123a2e97fd9d96a80e4ef408611a91cbf5d335ca08cd140fa9c2ed63563040ea3499675c0781fa6cbb9042725e025977b1a996e8d332ea
7
+ data.tar.gz: '018868b0c27ecab7556f69d410663a13ad2ff82410844ed45ee2d4a3110425322dfc19c24809d5748caa479292ec0357f2c4710894c49770e386a6daac59a187'
@@ -0,0 +1,40 @@
1
+ module Jekyll
2
+ module Series
3
+ class Generator < Jekyll::Generator
4
+ safe true
5
+ priority :low
6
+
7
+ def generate(site)
8
+ series_groups = {}
9
+
10
+ site.posts.docs.each do |post|
11
+ series_name = post.data["series"]
12
+ next unless series_name
13
+
14
+ series_groups[series_name] ||= []
15
+ series_groups[series_name] << post
16
+ end
17
+
18
+ series_groups.each do |series_name, posts|
19
+ sorted = posts.sort_by { |p| [p.data["series_part"]&.to_i || p.date, p.data["title"].to_s] }
20
+
21
+ sorted.each_with_index do |p, i|
22
+ p.data["series_part"] ||= i + 1
23
+ end
24
+
25
+ series_data = sorted.map do |p|
26
+ {
27
+ "title" => p.data["title"],
28
+ "url" => p.url,
29
+ "part" => p.data["series_part"].to_i
30
+ }
31
+ end
32
+
33
+ sorted.each do |post|
34
+ post.data["series_posts"] = series_data
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,53 @@
1
+ module Jekyll
2
+ module Series
3
+ class SeriesLinksTag < Liquid::Tag
4
+ def initialize(tag_name, markup, tokens)
5
+ super
6
+ end
7
+
8
+ def render(context)
9
+ site = context.registers[:site]
10
+ page = context.registers[:page]
11
+
12
+ series_posts = page["series_posts"]
13
+ return "" unless series_posts
14
+
15
+ series_name = page["series"]
16
+ current_url = page["url"]
17
+
18
+ include_path = File.join(site.source, "_includes", "series_links.html")
19
+ if File.exist?(include_path)
20
+ template = File.read(include_path)
21
+ context["series_posts"] = series_posts
22
+ context["series_name"] = series_name
23
+ Liquid::Template.parse(template).render(context)
24
+ else
25
+ render_default(series_name, series_posts, current_url)
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def render_default(series_name, series_posts, current_url)
32
+ items = series_posts.map do |post|
33
+ if post["url"] == current_url
34
+ %(<li class="series-nav-item series-nav-current"><strong>Part #{post["part"]}: #{post["title"]}</strong></li>)
35
+ else
36
+ %(<li class="series-nav-item"><a href="#{post["url"]}">Part #{post["part"]}: #{post["title"]}</a></li>)
37
+ end
38
+ end.join("\n ")
39
+
40
+ <<~HTML
41
+ <nav class="series-nav">
42
+ <h4>Series: #{series_name}</h4>
43
+ <ol>
44
+ #{items}
45
+ </ol>
46
+ </nav>
47
+ HTML
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ Liquid::Template.register_tag("series_links", Jekyll::Series::SeriesLinksTag)
@@ -0,0 +1,3 @@
1
+ require "jekyll"
2
+ require "jekyll/series/generator"
3
+ require "jekyll/series/tag"
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-series-links
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Armand Halbert
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: jekyll
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '3.7'
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '5.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '3.7'
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '5.0'
32
+ - !ruby/object:Gem::Dependency
33
+ name: minitest
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - "~>"
37
+ - !ruby/object:Gem::Version
38
+ version: '5.0'
39
+ type: :development
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - "~>"
44
+ - !ruby/object:Gem::Version
45
+ version: '5.0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '13.0'
53
+ type: :development
54
+ prerelease: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '13.0'
60
+ description: A Jekyll plugin that lets blog posts declare membership in a series via
61
+ front matter and renders navigation links to all parts.
62
+ email:
63
+ - armand.halbert@gmail.com
64
+ executables: []
65
+ extensions: []
66
+ extra_rdoc_files: []
67
+ files:
68
+ - lib/jekyll-series-links.rb
69
+ - lib/jekyll/series/generator.rb
70
+ - lib/jekyll/series/tag.rb
71
+ homepage: https://github.com/ahalbert/jekyll-series-links
72
+ licenses:
73
+ - MIT
74
+ metadata: {}
75
+ rdoc_options: []
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '2.5'
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ requirements: []
89
+ rubygems_version: 4.0.6
90
+ specification_version: 4
91
+ summary: Jekyll plugin for organizing posts into series
92
+ test_files: []