jekyll-wikilinks 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: aaacfcf7a6de57c6c9d002a59c332521c0883cafafc0d724b6df45bee5be3053
4
+ data.tar.gz: adebf54d3556e767e8c96c5d083b7dd444b9ba5747b86be28f6724b59aca9881
5
+ SHA512:
6
+ metadata.gz: afc278ad86c5cae713715435216b4514d28b81d62132394ed7703eefa17794171197ddaeeb306cecef5aa111e511c14d3923fe2e5404ba4a4064305bc1f53746
7
+ data.tar.gz: 1357f4c985b87fc762020001acc3eed0cb6a7e900e89127690606749a6b9063349d6ed75c36a133be964256993ba0e2ea081dc88a1bc58ceb0c2ac737a131ab9
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+ require "jekyll"
3
+ require_relative "jekyll-wikilinks/version"
4
+
5
+ # can't use converters because it does not have access to jekyll's 'site'
6
+ # object -- which we need to build a element's href attribute.
7
+ class JekyllWikilinks < Jekyll::Generator
8
+
9
+ def generate(site)
10
+ wikilinks_collection = site.config["wikilinks_collection"]
11
+ wikilinks_collection = "notes" if wikilinks_collection.nil? || wikilinks_collection.empty?
12
+ all_notes = site.collections[wikilinks_collection].docs
13
+ # i like the idea, but the solution style isn't robust enough yet...
14
+ # all_pages = site.pages
15
+ all_docs = all_notes # + all_pages
16
+ link_extension = !!site.config["use_html_extension"] ? '.html' : ''
17
+
18
+ all_docs.each do |cur_note|
19
+ parse_wiki_links(site, all_docs, cur_note, link_extension)
20
+ end
21
+ end
22
+
23
+ def parse_wiki_links(site, all_notes, note, link_extension)
24
+ # some regex taken from vscode-markdown-notes: https://github.com/kortina/vscode-markdown-notes/blob/master/syntaxes/notes.tmLanguage.json
25
+ # Convert all Wiki/Roam-style double-bracket link syntax to plain HTML
26
+ # anchor tag elements (<a>) with "internal-link" CSS class
27
+ all_notes.each do |note_potentially_linked_to|
28
+ namespace_from_filename = File.basename(
29
+ note_potentially_linked_to.basename,
30
+ File.extname(note_potentially_linked_to.basename)
31
+ )
32
+
33
+ # Replace double-bracketed links using note title
34
+ # [[feline.cats]]
35
+ # ⬜️ vscode-markdown-notes version: (\[\[)([^\|\]]+)(\]\])
36
+ note.content = note.content.gsub(
37
+ /\[\[#{namespace_from_filename}\]\]/i,
38
+ "<a class='wiki-link' href='#{site.baseurl}#{note_potentially_linked_to.data['permalink']}#{link_extension}'>#{note_potentially_linked_to.data['title'].downcase}</a>"
39
+ )
40
+
41
+ # Replace double-bracketed links with alias (right)
42
+ # [[feline.cats|this is a link to the note about cats]]
43
+ # ✅ vscode-markdown-notes version: (\[\[)([^\]\|]+)(\|)([^\]]+)(\]\])
44
+ note.content = note.content.gsub(
45
+ /(\[\[)(#{namespace_from_filename})(\|)([^\]]+)(\]\])/i,
46
+ "<a class='wiki-link' href='#{site.baseurl}#{note_potentially_linked_to.data['permalink']}#{link_extension}'>\\4</a>"
47
+ )
48
+
49
+ # Replace double-bracketed links with alias (left)
50
+ # [[this is a link to the note about cats|feline.cats]]
51
+ # ✅ vscode-markdown-notes version: (\[\[)([^\]\|]+)(\|)([^\]]+)(\]\])
52
+ note.content = note.content.gsub(
53
+ /(\[\[)([^\]\|]+)(\|)(#{namespace_from_filename})(\]\])/i,
54
+ "<a class='wiki-link' href='#{site.baseurl}#{note_potentially_linked_to.data['permalink']}#{link_extension}'>\\2</a>"
55
+ )
56
+ end
57
+
58
+ # At this point, all remaining double-bracket-wrapped words are
59
+ # pointing to non-existing pages, so let's turn them into disabled
60
+ # links by greying them out and changing the cursor
61
+ note.content = note.content.gsub(
62
+ /\[\[(.*)\]\]/i, # match on the remaining double-bracket links
63
+ <<~HTML.chomp # replace with this HTML (\\1 is what was inside the brackets)
64
+ <span title='There is no note that matches this link.' class='invalid-wiki-link'>[[\\1]]</span>
65
+ HTML
66
+ )
67
+ end
68
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module Wikilinks
5
+ VERSION = "0.0.2"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-wikilinks
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - shorty25h0r7
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2021-05-07 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ - short2thingz@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/jekyll-wikilinks.rb
21
+ - lib/jekyll-wikilinks/version.rb
22
+ homepage: https://github.com/shorty25h0r7/jekyll-wikilinks
23
+ licenses:
24
+ - MIT
25
+ metadata:
26
+ homepage_uri: https://github.com/shorty25h0r7/jekyll-wikilinks
27
+ source_code_uri: https://github.com/shorty25h0r7/jekyll-wikilinks
28
+ post_install_message:
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 2.4.0
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubygems_version: 3.2.17
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: Add support for [[wikilinks]] (in markdown).
47
+ test_files: []