Module: JekyllMermaidPrebuild::Hooks
- Defined in:
- lib/jekyll-mermaid-prebuild/hooks.rb
Overview
Jekyll hook integration
Class Method Summary collapse
-
.copy_generated_svgs(site) ⇒ Object
Copy SVGs into _site after write (:post_write).
-
.copy_svgs_to_site(site, config, svgs) ⇒ Object
Copy generated SVGs to _site directory.
-
.initialize_system(site) ⇒ Object
Initialize plugin state after site data is loaded (:post_read).
-
.log_puppeteer_error ⇒ Object
Log helpful error message for Puppeteer issues.
-
.process_site(site) ⇒ Object
Process documents/pages before rendering (:pre_render).
Class Method Details
.copy_generated_svgs(site) ⇒ Object
Copy SVGs into _site after write (:post_write)
120 121 122 123 124 125 126 |
# File 'lib/jekyll-mermaid-prebuild/hooks.rb', line 120 def self.copy_generated_svgs(site) return unless site.data["mermaid_prebuild_enabled"] config = site.data["mermaid_prebuild_config"] svgs = site.data["mermaid_prebuild_svgs"] copy_svgs_to_site(site, config, svgs) end |
.copy_svgs_to_site(site, config, svgs) ⇒ Object
Copy generated SVGs to _site directory
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/jekyll-mermaid-prebuild/hooks.rb', line 13 def self.copy_svgs_to_site(site, config, svgs) return if svgs.nil? || svgs.empty? dest_dir = File.join(site.dest, config.output_dir) FileUtils.mkdir_p(dest_dir) copied_count = 0 svgs.each do |cache_key, cached_path| unless cached_path && File.exist?(cached_path) Jekyll.logger.warn "MermaidPrebuild:", "Missing cached SVG for #{cache_key} (expected: #{cached_path})" next end dest_path = File.join(dest_dir, "#{cache_key}.svg") FileUtils.cp(cached_path, dest_path) copied_count += 1 end Jekyll.logger.info "MermaidPrebuild:", "Copied #{copied_count} SVG(s) to #{config.output_dir}/" end |
.initialize_system(site) ⇒ Object
Initialize plugin state after site data is loaded (:post_read)
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/jekyll-mermaid-prebuild/hooks.rb', line 43 def self.initialize_system(site) config = Configuration.new(site) site.data["mermaid_prebuild_config"] = config unless config.enabled? Jekyll.logger.info "MermaidPrebuild:", "Disabled in configuration" site.data["mermaid_prebuild_enabled"] = false return end status = MmdcWrapper.check_status case status when :ok Jekyll.logger.info "MermaidPrebuild:", "Initialized (mmdc #{MmdcWrapper.version || "unknown version"})" Jekyll.logger.info "MermaidPrebuild:", "Output directory: #{config.output_dir}" site.data["mermaid_prebuild_enabled"] = true generator = Generator.new(config) site.data["mermaid_prebuild_generator"] = generator site.data["mermaid_prebuild_processor"] = Processor.new(config, generator) site.data["mermaid_prebuild_svgs"] = {} when :not_found Jekyll.logger.warn "MermaidPrebuild:", "mmdc not found - mermaid diagrams will not be converted" Jekyll.logger.warn "MermaidPrebuild:", "Install with: npm install -g @mermaid-js/mermaid-cli" site.data["mermaid_prebuild_enabled"] = false when :puppeteer_error log_puppeteer_error site.data["mermaid_prebuild_enabled"] = false else Jekyll.logger.warn "MermaidPrebuild:", "mmdc check failed with unknown error" site.data["mermaid_prebuild_enabled"] = false end end |
.log_puppeteer_error ⇒ Object
Log helpful error message for Puppeteer issues
35 36 37 38 |
# File 'lib/jekyll-mermaid-prebuild/hooks.rb', line 35 def self.log_puppeteer_error Jekyll.logger.error "MermaidPrebuild:", "mmdc failed: Puppeteer cannot launch headless Chrome" Jekyll.logger.error "MermaidPrebuild:", "Install system libraries (see https://pptr.dev/troubleshooting)" end |
.process_site(site) ⇒ Object
Process documents/pages before rendering (:pre_render)
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/jekyll-mermaid-prebuild/hooks.rb', line 80 def self.process_site(site) return unless site.data["mermaid_prebuild_enabled"] processor = site.data["mermaid_prebuild_processor"] total_count = 0 site.documents.each do |document| next unless document.content processed, count, svgs = processor.process_content(document.content, site) if count.positive? document.content = processed site.data["mermaid_prebuild_svgs"].merge!(svgs) Jekyll.logger.info "MermaidPrebuild:", "Converted #{count} diagram(s) in #{document.relative_path}" total_count += count end rescue StandardError => e Jekyll.logger.error "MermaidPrebuild:", "Error processing #{document.relative_path}: #{e.}" end site.pages.each do |page| next unless page.content processed, count, svgs = processor.process_content(page.content, site) if count.positive? page.content = processed site.data["mermaid_prebuild_svgs"].merge!(svgs) Jekyll.logger.info "MermaidPrebuild:", "Converted #{count} diagram(s) in #{page.relative_path}" total_count += count end rescue StandardError => e Jekyll.logger.error "MermaidPrebuild:", "Error processing #{page.relative_path}: #{e.}" end Jekyll.logger.info "MermaidPrebuild:", "Total: #{total_count} diagram(s) converted" if total_count.positive? end |