jekyll-zettel 0.1.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 86d3e01f1ce8dd712930648f3275e4d83233da974377133502b561ee456a5695
4
- data.tar.gz: 67b8e434c7583fb9ffca4ce55d1598aab65bc3312558181525bd2a4f94d1464a
3
+ metadata.gz: 5cad30485acb8a165fe6513d503c7230c321a6c5b7ca47a3aff343feb98f552e
4
+ data.tar.gz: 31c461aa7b6f22745b55eed8d66c14ccc40e9a34945e17bc236170657d73a994
5
5
  SHA512:
6
- metadata.gz: 7420a97a318c4fe0cdb9707ebdb1b1460c3bec6b7d9580fe88fd71cd944b10d6010f8e6882b024bcf72f3f6b01e478a6ddab232df57413f5f48388f0c7d12c89
7
- data.tar.gz: '083f0d824f9df40b45b5685060082088ff3e63335550bf97d167b74e1f569cb1b9cf6a36535c9eff078ff9dafd19b46e97899e07806c79667ea8369507d2df64'
6
+ metadata.gz: 01f9dd813b5bdc69a49329d6b87fc04019313046f66efaed07286c04937eb0d604f9f8ab3be9a5026feed1f671ab9b365e9a7bb47def4dff65a405bc7ded5b4e
7
+ data.tar.gz: faecf137658c630d2a57c4979d7630154d6c6aa6ec251110e6bfdadf13668770887a6532c0570db783e242fd64429e128355226559f2e1a73d44d67f04e0c6f3
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  .idea
2
- Gemfile.lock
2
+ *.lock
3
+ *.gem
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
@@ -10,9 +10,11 @@ module Jekyll
10
10
  c.description 'Creates a new Zettel within subdir zettel'
11
11
  c.action do |_args, _options|
12
12
  uuid = new_zettel
13
- new_page(uuid, "zettel/#{uuid}/index.md")
13
+ file = "zettel/#{uuid}/index.md"
14
+ new_page(uuid, file)
14
15
 
15
16
  Jekyll.logger.info '✓', "Created new Zettel with UUID: `#{uuid}`"
17
+ system("code #{File.expand_path(file)}")
16
18
  end
17
19
  end
18
20
  end
@@ -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,36 @@
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
+
15
+ site.pages.each do |page|
16
+ next unless SLUG_FORMAT.match?(page.path.to_s)
17
+
18
+ register_tag(page)
19
+ end
20
+
21
+ write_catalog 'tags'
22
+ end
23
+
24
+ def register_tag(doc)
25
+ parts = doc.path.to_s.match(SLUG_FORMAT)
26
+ @site.data['tags'][parts[:slug]] = {
27
+ 'slug' => parts[:slug],
28
+ 'tag' => doc.data['tag'] || 'Missing @tag',
29
+ 'label' => doc.data['title'] || 'Missing @title',
30
+ 'description' => doc.data['description'] || 'Missing @description'
31
+ }
32
+ end
33
+
34
+ end
35
+ end
36
+ 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.0'.freeze
3
+ VERSION = '0.4.0'.freeze
4
4
  end
5
5
  end
@@ -0,0 +1,41 @@
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
+
17
+ site.pages.each do |page|
18
+ next unless SLUG_FORMAT.match?(page.path.to_s)
19
+
20
+ register_zettel(page)
21
+ end
22
+
23
+ write_catalog 'zettelkasten'
24
+ end
25
+
26
+ def register_zettel(doc)
27
+ @site.data['zettelkasten'][doc.data['zettel']] = {
28
+ 'zettel' => doc.data['zettel'],
29
+ 'title' => doc.data['title'],
30
+ 'description' => doc.data['description'],
31
+ 'author' => doc.data['author'],
32
+ 'tags' => doc.data['tags'],
33
+ 'folgezettel' => doc.data['folgezettel'],
34
+ 'via' => doc.data['via'],
35
+ 'citekey' => doc.data['citekey']
36
+ }
37
+ end
38
+
39
+ end
40
+ end
41
+ end
data/lib/jekyll/zettel.rb CHANGED
@@ -1,17 +1,40 @@
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
7
9
  module Zettel
8
10
 
9
- autoload :VERSION, 'jekyll/laravel/bridge/version'
11
+ autoload :VERSION, 'jekyll/zettel/version'
10
12
 
11
- LOG_KEY = 'Laravel 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.0
4
+ version: 0.4.0
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