jekyll-hover-popup 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.
@@ -0,0 +1,17 @@
1
+ module Jekyll
2
+ module HoverPopup
3
+ class AssetFile < Jekyll::StaticFile
4
+ def initialize(site, base, dir, name, source_path:)
5
+ super(site, base, dir, name)
6
+ @source_path = source_path
7
+ end
8
+
9
+ def write(dest)
10
+ dest_path = destination(dest)
11
+ FileUtils.mkdir_p(File.dirname(dest_path))
12
+ FileUtils.cp(@source_path, dest_path)
13
+ true
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,34 @@
1
+ module Jekyll
2
+ module HoverPopup
3
+ class Generator < Jekyll::Generator
4
+ safe true
5
+ priority :low
6
+
7
+ def generate(site)
8
+ cfg = (site.config["hover_popup"] || {})
9
+ return if cfg["enabled"] == false
10
+
11
+ assets_path = cfg["assets_path"] || "/assets/jekyll-hover-popup"
12
+ assets_path = "/#{assets_path}" unless assets_path.start_with?("/")
13
+
14
+ asset_dir = File.expand_path("../../../assets/jekyll-hover-popup", __dir__)
15
+
16
+ files = {
17
+ "hover_popup.js" => File.join(asset_dir, "hover_popup.js"),
18
+ "hover_popup.css" => File.join(asset_dir, "hover_popup.css"),
19
+ }
20
+
21
+ files.each do |name, source_path|
22
+ next unless File.file?(source_path)
23
+ site.static_files << AssetFile.new(
24
+ site,
25
+ site.source,
26
+ assets_path.sub(%r{\A/}, ""),
27
+ name,
28
+ source_path: source_path
29
+ )
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,48 @@
1
+ module Jekyll
2
+ module HoverPopup
3
+ module Hooks
4
+ def self.register!
5
+ Jekyll::Hooks.register(%i[pages documents], :post_render) do |doc|
6
+ site = doc.site
7
+ cfg = (site.config["hover_popup"] || {})
8
+ next if cfg["enabled"] == false
9
+ next unless doc.respond_to?(:output_ext) && doc.output_ext == ".html"
10
+
11
+ assets_path = cfg["assets_path"] || "/assets/jekyll-hover-popup"
12
+ assets_path = "/#{assets_path}" unless assets_path.start_with?("/")
13
+ hover_delay_ms = cfg["hover_delay_ms"] || 0
14
+ nav_hover_preview = cfg.fetch("nav_hover_preview", true)
15
+
16
+ begin
17
+ doc.output = inject_assets(doc.output.to_s, assets_path: assets_path, hover_delay_ms: hover_delay_ms, nav_hover_preview: nav_hover_preview)
18
+ rescue StandardError => e
19
+ Jekyll.logger.warn("jekyll-hover-popup:", "Failed to process #{doc.relative_path}: #{e.class}: #{e.message}")
20
+ end
21
+ end
22
+ end
23
+
24
+ def self.inject_assets(html, assets_path:, hover_delay_ms:, nav_hover_preview: true)
25
+ return html if html.include?('data-hover-popup-root="true"')
26
+
27
+ tags = <<~HTML
28
+ <script>
29
+ window.__JHP_CONFIG__ = #{{
30
+ hoverDelayMs: hover_delay_ms,
31
+ navHoverPreview: nav_hover_preview
32
+ }.to_json};
33
+ </script>
34
+ <link rel="stylesheet" href="#{assets_path}/hover_popup.css" />
35
+ <script defer src="#{assets_path}/hover_popup.js" data-hover-popup-root="true"></script>
36
+ HTML
37
+
38
+ if html.include?("</body>")
39
+ html.sub("</body>", "#{tags}\n</body>")
40
+ else
41
+ "#{html}\n#{tags}\n"
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ Jekyll::HoverPopup::Hooks.register!
@@ -0,0 +1,5 @@
1
+ module Jekyll
2
+ module HoverPopup
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ require "jekyll"
2
+
3
+ require_relative "jekyll/hover_popup/version"
4
+ require_relative "jekyll/hover_popup/asset_file"
5
+ require_relative "jekyll/hover_popup/generator"
6
+ require_relative "jekyll/hover_popup/hooks"
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-hover-popup
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - directsun
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
+ email: []
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - LICENSE
38
+ - README.md
39
+ - assets/jekyll-hover-popup/hover_popup.css
40
+ - assets/jekyll-hover-popup/hover_popup.js
41
+ - lib/jekyll-hover-popup.rb
42
+ - lib/jekyll/hover_popup/asset_file.rb
43
+ - lib/jekyll/hover_popup/generator.rb
44
+ - lib/jekyll/hover_popup/hooks.rb
45
+ - lib/jekyll/hover_popup/version.rb
46
+ homepage: https://github.com/sunflowermans/hover-popup
47
+ licenses:
48
+ - MIT
49
+ metadata: {}
50
+ rdoc_options: []
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '3.0'
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubygems_version: 3.6.9
65
+ specification_version: 4
66
+ summary: Jekyll plugin that shows in-page hover previews for internal documentation
67
+ links.
68
+ test_files: []