jekyll-zettel 0.1.1 → 0.4.1

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
  SHA256:
3
- metadata.gz: 429c613abf3e702150740eb4c4442b2fe0fc49d7b3b4ec7e305c494c8dd13c61
4
- data.tar.gz: 72c0c9abbb7f46d75ec514e87a4fad0b65eaabe38ed2814a02ad4964728abac6
3
+ metadata.gz: 7293e5026d2854b40b1cc8660fc31b22d98ab1080d803c052a2e619de24b8cff
4
+ data.tar.gz: f55cf5c4105f4589d6ba1663d18878dd4e4c7a70dbf05cbc6bca17e2760a2cf4
5
5
  SHA512:
6
- metadata.gz: '09f66d5b88803ca6f018774e1f2eb09fe6145c9be6414b81b67b822204cc9ac4553987f814798efee58d351f29e0686013005235f5ba6899d3b6b7b56f499939'
7
- data.tar.gz: dea14c69a5327cf527a2717de3834cc57bf4110ec32321004f13f418053c6a9be923729c477b529d98cb7a559e6def8e396bf2b300acd3d958c4e0319ebfff1e
6
+ metadata.gz: c07d939e66707568bb54bc640f2be09c771b21361d2e8e16a6d90fc0ab7c90dd33bd1cbb2b9eef71c4f7b3038c2d1ae85ec47fc438f11d817f54c4e71ccb9df7
7
+ data.tar.gz: 249459ea018980190901d630c0bdc16c05fae38974211a8051bbea3a1ff74de7d2f28352ae0c20c44a43f656fd70568b3a1eadd74020eb85cdae058b59071d36
data/README.md CHANGED
@@ -24,9 +24,9 @@ TODO: Write usage instructions here
24
24
 
25
25
  ## Development
26
26
 
27
- After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
28
-
29
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
27
+ Gem zusammenbauen mit `gem build jekyll-zettel.gemspec -V --debug`
28
+ Gem publizieren mit `gem push jekyll-zettel-0.1.0.gem` (die Versionsnummer entsprechend anpassen).
29
+ Verwendet Google Authenticator ;-)
30
30
 
31
31
  ## Contributing
32
32
 
@@ -27,6 +27,8 @@ Gem::Specification.new do |spec|
27
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
28
  spec.require_paths = ['lib']
29
29
 
30
- spec.add_dependency 'fileutils', '>= 1.4', '< 2.0'
31
- spec.add_dependency 'jekyll', '>= 3.8', '< 5.0'
30
+ spec.add_runtime_dependency 'citeproc-ruby', '>= 2.0', '< 3.0'
31
+ spec.add_runtime_dependency 'csl-styles', '>= 2.0', '< 3.0'
32
+ spec.add_runtime_dependency 'fileutils', '>= 1.4', '< 2.0'
33
+ spec.add_runtime_dependency 'jekyll', '>= 3.8', '< 5.0'
32
34
  end
File without changes
@@ -1,4 +1,6 @@
1
1
  ---
2
+ layout: zettel
3
+ #
2
4
  # created_at: #{Time.now}
3
5
  #
4
6
  # Die UUID des Zettels entspricht dem Namen des Unterverzeichnisses.
@@ -9,14 +11,14 @@ zettel: #{uuid}
9
11
  # Die Dokumentation aller Properties findest du unter
10
12
  # https://jessas.org/dokumentation/zettel/#frontmatter
11
13
  #
12
- layout:
13
14
  title:
14
15
  description:
16
+ author:
15
17
  #
16
18
  # Optionale Properties
17
19
  #
18
- # author:
19
20
  # tags: []
21
+ # folgezettel: []
20
22
  # image:
21
23
  # via:
22
24
  # text:
@@ -0,0 +1,15 @@
1
+ module Jekyll
2
+ module Zettel
3
+ # Liquid tag that renders the reference the Zettel is based on
4
+ class Reference < Liquid::Tag
5
+
6
+ def render(context)
7
+ return unless context.registers[:page].key?('citekey')
8
+
9
+ context.registers[:site].config['citeproc'].render :bibliography, id: context.registers[:page]['citekey']
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ Liquid::Template.register_tag('reference', Jekyll::Zettel::Reference)
@@ -0,0 +1,57 @@
1
+ module Jekyll
2
+ module Zettel
3
+ # Enrich page front matter with object meta data
4
+ class References < Jekyll::Generator
5
+ include Zettel
6
+
7
+ priority :highest
8
+
9
+ attr_reader :site
10
+
11
+ def generate(site)
12
+ @site = site
13
+
14
+ @site.data['references'] = {}
15
+ configure_citeproc
16
+
17
+ site.pages.each do |page|
18
+ next unless page.path.to_s.end_with?('index.html') || page.path.to_s.end_with?('index.md')
19
+
20
+ tie_reference(page)
21
+ end
22
+
23
+ write_catalog 'references'
24
+ end
25
+
26
+ def configure_citeproc
27
+ locale = @site.config['citation']['locale'] || 'en-US'
28
+ style = @site.config['citation']['style'] || 'apa'
29
+
30
+ @site.config['citeproc'] = CiteProc::Processor.new locale: locale, style: style, format: 'html'
31
+ Jekyll.logger.info LOG_KEY, "Configured cite processor `#{locale}`/`#{style}`"
32
+ end
33
+
34
+ def tie_reference(doc)
35
+ dir = File.dirname(doc.path)
36
+ file = @site.in_source_dir(dir, 'reference.json')
37
+ return unless File.exist?(file)
38
+
39
+ doc.data['reference'] = SafeYAML.load_file(file)
40
+
41
+ register_reference(doc, file)
42
+ end
43
+
44
+ def register_reference(doc, file)
45
+ if doc.data['reference'].include?('id')
46
+ @site.data['references'][doc.data['reference']['id']] = doc.data['reference']
47
+ @site.config['citeproc'].register doc.data['reference']
48
+ doc.data['citekey'] = doc.data['reference']['id']
49
+ else
50
+ Jekyll.logger.warn LOG_KEY, 'missing property @id'
51
+ Jekyll.logger.warn '', "./#{file}"
52
+ end
53
+ end
54
+
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,48 @@
1
+ module Jekyll
2
+ module Zettel
3
+ # Generate tags.json from page front matter
4
+ class Tags < Jekyll::Generator
5
+ include Zettel
6
+
7
+ SLUG_FORMAT = %r{glosse/(?<slug>.*)/index.(?<ext>html|md)}i.freeze
8
+
9
+ attr_reader :site
10
+
11
+ def generate(site)
12
+ @site = site
13
+ @site.data['tags'] = {}
14
+ @site.data['tag2glosse'] = {}
15
+
16
+ site.pages.each do |page|
17
+ next unless SLUG_FORMAT.match?(page.path.to_s)
18
+
19
+ register_tag(page)
20
+ end
21
+
22
+ write_catalog 'tags'
23
+ write_catalog 'tag2glosse'
24
+ end
25
+
26
+ def register_tag(doc)
27
+ parts = doc.path.to_s.match(SLUG_FORMAT)
28
+ @site.data['tags'][parts[:slug]] = {
29
+ 'slug' => parts[:slug],
30
+ 'tag' => doc.data['tag'] || 'Missing @tag',
31
+ 'label' => doc.data['title'] || 'Missing @title',
32
+ 'description' => doc.data['description'] || 'Missing @description'
33
+ }
34
+ register_tags(doc, parts[:slug])
35
+ end
36
+
37
+ def register_tags(doc, slug)
38
+ return unless doc.data.key?('tags')
39
+
40
+ doc.data['tags'].each { |tag|
41
+ @site.data['tag2glosse'][slug] = [] unless @site.data['tag2glosse'].key?(slug)
42
+
43
+ @site.data['tag2glosse'][slug] << tag
44
+ }
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,29 @@
1
+ module Jekyll
2
+ module Zettel
3
+ # Enrich page front matter with timeline data
4
+ class Timeline < Jekyll::Generator
5
+
6
+ attr_reader :site
7
+
8
+ def generate(site)
9
+ @site = site
10
+
11
+ site.pages.each do |page|
12
+ next unless page.path.to_s.end_with?('index.html') || page.path.to_s.end_with?('index.md')
13
+
14
+ tie_timeline(page)
15
+ end
16
+ end
17
+
18
+ def tie_timeline(doc)
19
+ dir = File.dirname(doc.path)
20
+ file = @site.in_source_dir(dir, 'timeline.json')
21
+ return unless File.exist?(file)
22
+
23
+ doc.data['timeline'] = SafeYAML.load_file(file)
24
+ doc.data['timeline']['src'] = "#{doc.url}timeline.json"
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module Zettel
3
- VERSION = '0.1.1'.freeze
3
+ VERSION = '0.4.1'.freeze
4
4
  end
5
5
  end
@@ -0,0 +1,53 @@
1
+ module Jekyll
2
+ module Zettel
3
+ # Generate tags.json from page front matter
4
+ class Zettelkasten < Jekyll::Generator
5
+ include Zettel
6
+
7
+ priority :low
8
+
9
+ SLUG_FORMAT = %r{zettel/(?<uuid>.*)/index.(?<ext>html|md)}i.freeze
10
+
11
+ attr_reader :site
12
+
13
+ def generate(site)
14
+ @site = site
15
+ @site.data['zettelkasten'] = {}
16
+ @site.data['tag2zettel'] = {}
17
+
18
+ site.pages.each do |page|
19
+ next unless SLUG_FORMAT.match?(page.path.to_s)
20
+
21
+ register_zettel(page)
22
+ register_tags(page)
23
+ end
24
+
25
+ write_catalog 'zettelkasten'
26
+ write_catalog 'tag2zettel'
27
+ end
28
+
29
+ def register_zettel(doc)
30
+ @site.data['zettelkasten'][doc.data['zettel']] = {
31
+ 'zettel' => doc.data['zettel'],
32
+ 'title' => doc.data['title'],
33
+ 'description' => doc.data['description'],
34
+ 'author' => doc.data['author'],
35
+ 'tags' => doc.data['tags'],
36
+ 'folgezettel' => doc.data['folgezettel'],
37
+ 'via' => doc.data['via'],
38
+ 'citekey' => doc.data['citekey']
39
+ }
40
+ end
41
+
42
+ def register_tags(doc)
43
+ return unless doc.data.key?('tags')
44
+
45
+ doc.data['tags'].each { |tag|
46
+ @site.data['tag2zettel'][tag] = [] unless @site.data['tag2zettel'].key?(tag)
47
+
48
+ @site.data['tag2zettel'][tag] << doc.data['zettel']
49
+ }
50
+ end
51
+ end
52
+ end
53
+ end
data/lib/jekyll/zettel.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'jekyll'
2
2
  require 'securerandom'
3
3
  require 'fileutils'
4
+ require 'citeproc'
5
+ require 'csl/styles'
4
6
 
5
7
  module Jekyll
6
8
  # Jekyll zettel to your service
@@ -8,10 +10,31 @@ module Jekyll
8
10
 
9
11
  autoload :VERSION, 'jekyll/zettel/version'
10
12
 
11
- LOG_KEY = 'Jekyll Zettel'.freeze
13
+ LOG_KEY = 'Zettel:'.freeze
12
14
 
13
15
  class Error < StandardError; end
16
+
17
+ def write_catalog(object)
18
+ Jekyll.logger.info LOG_KEY, "Created references in `#{@site.in_dest_dir('.objects', "#{object}.json")}`"
19
+
20
+ page = Jekyll::PageWithoutAFile.new(@site, @site.source, '.objects', "#{object}.json").tap do |file|
21
+ file.content = JSON.pretty_generate(@site.data[object.to_s])
22
+ file.data.merge!(
23
+ 'layout' => nil,
24
+ 'sitemap' => false,
25
+ )
26
+
27
+ file.output
28
+ end
29
+
30
+ @site.pages << page
31
+ end
14
32
  end
15
33
  end
16
34
 
17
- require 'jekyll/zettel/commands/zettel'
35
+ require 'jekyll/commands/zettel'
36
+ require 'jekyll/zettel/references'
37
+ require 'jekyll/zettel/reference'
38
+ require 'jekyll/zettel/timeline'
39
+ require 'jekyll/zettel/tags'
40
+ require 'jekyll/zettel/zettelkasten'
metadata CHANGED
@@ -1,15 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-zettel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Gerzabek
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-03 00:00:00.000000000 Z
11
+ date: 2022-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: citeproc-ruby
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '3.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '2.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '3.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: csl-styles
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '2.0'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '3.0'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '2.0'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '3.0'
13
53
  - !ruby/object:Gem::Dependency
14
54
  name: fileutils
15
55
  requirement: !ruby/object:Gem::Requirement
@@ -65,10 +105,15 @@ files:
65
105
  - README.md
66
106
  - Rakefile
67
107
  - jekyll-zettel.gemspec
108
+ - lib/jekyll/commands/zettel.rb
109
+ - lib/jekyll/stubs/index.md
68
110
  - lib/jekyll/zettel.rb
69
- - lib/jekyll/zettel/commands/zettel.rb
70
- - lib/jekyll/zettel/stubs/index.md
111
+ - lib/jekyll/zettel/reference.rb
112
+ - lib/jekyll/zettel/references.rb
113
+ - lib/jekyll/zettel/tags.rb
114
+ - lib/jekyll/zettel/timeline.rb
71
115
  - lib/jekyll/zettel/version.rb
116
+ - lib/jekyll/zettel/zettelkasten.rb
72
117
  homepage: https://michaelgerzabek.com/gems/jekyll-zettel
73
118
  licenses:
74
119
  - MIT