jekyll-hyperlinkify-glossary 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/hooks/enrich_documents_with_glossary.rb +15 -0
- data/lib/jekyll-hyperlinkify-glossary.rb +65 -0
- metadata +58 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 41e9782180bc4ffd77b76f183662c4e31699de31caa970d8df05f0ea35d12ac1
|
4
|
+
data.tar.gz: cc88cf2676d7d04ca84f91087e634978fcef9ad9bff420aa28568c84f89b744b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2bd4a877e1c070f42cb71d35e90cc83795fd1b8850684d9e3380c90efaa8a2c2232dd6302f744060ec639b3cfc39d16c6aaf79d2f11cfcd0d6b54fc4fc69d925
|
7
|
+
data.tar.gz: ff77b9cc5540c1a73ff237473e6c6657d2e2377a30bcaa8868cc796529f401141da18149cb82b5f39543751df79ced0a199ca015bf4ced04db157640c61c4344
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Enrich all documents and pages with an array of all glossary entries and their synonyms
|
2
|
+
Jekyll::Hooks.register :site, :post_read do |site|
|
3
|
+
puts 'Enriching documents with glossary collection'
|
4
|
+
glossary_entries = []
|
5
|
+
site.collections["glossary"].docs.each do |item|
|
6
|
+
next_glossary_entry = [[item.url, item.data['title']],item.data['synonyms']].compact.reduce([], :|)
|
7
|
+
glossary_entries.push next_glossary_entry.map(&:downcase )
|
8
|
+
end
|
9
|
+
site.documents.each{ |document|
|
10
|
+
document.data['glossary_entries'] = glossary_entries
|
11
|
+
}
|
12
|
+
site.pages.each{ |document|
|
13
|
+
document.data['glossary_entries'] = glossary_entries
|
14
|
+
}
|
15
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'jekyll'
|
2
|
+
require 'hooks/enrich_documents_with_glossary'
|
3
|
+
|
4
|
+
# Get all glossary entries from the page an replace all terms with appropriate hyperlinks
|
5
|
+
module Jekyll
|
6
|
+
class HyperlinkGlossaryEntries
|
7
|
+
BODY_START_TAG = "<body"
|
8
|
+
OPENING_BODY_TAG_REGEX = %r!<body(.*)>\s*!
|
9
|
+
class << self
|
10
|
+
# Replace all oocurances of glossary entries with a hyperlink.
|
11
|
+
def hyperlinkify(document)
|
12
|
+
@glossary_entries = document.data["glossary_entries"]
|
13
|
+
if @glossary_entries.nil?
|
14
|
+
puts "This document has no glossary entries: " + document.data["title"].to_s
|
15
|
+
return
|
16
|
+
end
|
17
|
+
@test_word = "icf"
|
18
|
+
@test_array = ["icf","inklusion"]
|
19
|
+
@test_url = "/glossary/icf.html"
|
20
|
+
document.output = if document.output.include? BODY_START_TAG
|
21
|
+
process_document(document)
|
22
|
+
else
|
23
|
+
process_html_body(document.output)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
# Determine if the content should be processed.
|
29
|
+
def processable?(document)
|
30
|
+
(document.is_a?(Jekyll::Page) || document.write?) &&
|
31
|
+
(document.output_ext == ".html" || document.permalink&.end_with?("/")) &&
|
32
|
+
(document.data["jekyll-hyperlink-glossary"] != false)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
# Process html content which has an body opening tag
|
38
|
+
def process_document(document)
|
39
|
+
head, opener, tail = document.output.partition(OPENING_BODY_TAG_REGEX)
|
40
|
+
body_content, *rest = tail.partition("</body>")
|
41
|
+
|
42
|
+
processed_markup = process_html_body(body_content, document.data["title"])
|
43
|
+
|
44
|
+
document.output = String.new(head) << opener << processed_markup << rest.join
|
45
|
+
end
|
46
|
+
|
47
|
+
# Process every word of content and replace glossary entries
|
48
|
+
def process_html_body(html, title)
|
49
|
+
@glossary_entries.each do |glossary_entry|
|
50
|
+
if glossary_entry[1].to_s != title.to_s.downcase
|
51
|
+
exclude_regex="\\b(?!<(h\\d|a).*>)(?!.*<\/(h\\d|a)>)(?!.html)"
|
52
|
+
glossary_entry_regex = Regexp.new("\\b"+glossary_entry.drop(1).join(exclude_regex+"|")+exclude_regex, true)
|
53
|
+
first_half_of_hyperlink = "<a href=\"#{ glossary_entry[0] }\">"
|
54
|
+
html = html.gsub(glossary_entry_regex, first_half_of_hyperlink+ '\0</a>')
|
55
|
+
end
|
56
|
+
end
|
57
|
+
html
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
Jekyll::Hooks.register %i[documents pages], :post_render do |document|
|
64
|
+
Jekyll::HyperlinkGlossaryEntries.hyperlinkify(document) if Jekyll::HyperlinkGlossaryEntries.processable?(document)
|
65
|
+
end
|
metadata
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jekyll-hyperlinkify-glossary
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Marc Schmidt
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-06-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: jekyll
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.7'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.7'
|
27
|
+
description: A Jekyll gem to replace glossary entries in html with hyperlinks
|
28
|
+
email:
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/hooks/enrich_documents_with_glossary.rb
|
34
|
+
- lib/jekyll-hyperlinkify-glossary.rb
|
35
|
+
homepage: https://github.com/MarcSchmidt/jekyll-hyperlinkify-glossary
|
36
|
+
licenses:
|
37
|
+
- MIT
|
38
|
+
metadata: {}
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 2.4.0
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
requirements: []
|
54
|
+
rubygems_version: 3.2.19
|
55
|
+
signing_key:
|
56
|
+
specification_version: 4
|
57
|
+
summary: A Jekyll gem to replace glossary entries in html with hyperlinks
|
58
|
+
test_files: []
|