jekyll-gfm-admonitions 1.0.0 → 1.0.1

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/jekyll-gfm-admonitions.rb +18 -7
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 36fde0cfed94f6d07ba07bb23551ddfb045ba9a1d587811a78b6be9407bc4ad9
4
- data.tar.gz: efcf212c70ccffeb7f4d834445adec477d2c748e15e2408ea94782bbee70852d
3
+ metadata.gz: 75cc2a5cd4eaf0017bf2a47ca438f1be25b4a20212faf13e3e40f048ec263cb4
4
+ data.tar.gz: 274fe45c83097424b627c66d721c68760298f6e2413b361d0f87cb0d62cc6462
5
5
  SHA512:
6
- metadata.gz: 230a0a16955e61fd32809530db0ca343730d9ce366f89416696ca5d8f85843f824121bfa3ab816aa5c264b9761aff3b3d1eabfa72264154b748a5fdaf4121c2e
7
- data.tar.gz: 2c4b40928769e81341fc9961e0a8b8c6a55c02d492e1ac93d9db6ba38912a8ba09a0c0a3c16448bf69d292282b1ccf3a2a3e837bd80287db5fe25cdb34b4b2d4
6
+ metadata.gz: 10967a4046bd913e5611421e3fb5d2d2253fde61161b588af2c294ad79340e53143a83390590b1a7252c616df73f3e3ba7991e1f4646731d045af7960c0592bd
7
+ data.tar.gz: 50fc8c02dc6b000e4824bd60da24b1f324289b83784d8e6e870879eaeb65d887916e142bbb5daaf232d15617483046ac4009821e163bb3f76a83303dd7d04840
@@ -23,6 +23,7 @@ module JekyllGFMAdmonitions
23
23
  # syntax with HTML markup that includes appropriate iconography and CSS styling.
24
24
  class GFMAdmonitionConverter < Jekyll::Generator
25
25
  safe true
26
+ priority :lowest
26
27
  @@admonition_pages = []
27
28
 
28
29
  def initialize(*args)
@@ -49,6 +50,7 @@ module JekyllGFMAdmonitions
49
50
  Jekyll.logger.info 'GFMA:', "Patched /README.html to /index.html"
50
51
  page.instance_variable_set(:@url, '/index.html')
51
52
  end
53
+
52
54
  Jekyll.logger.debug 'GFMA:', "Processing page '#{page.path}' (#{page.content.length} characters)."
53
55
  process(page)
54
56
  end
@@ -61,7 +63,8 @@ module JekyllGFMAdmonitions
61
63
  convert_admonitions(doc)
62
64
 
63
65
  return unless doc.content != original_content
64
-
66
+ # Store a reference to all the pages we modified, to inject the CSS post render
67
+ # (otherwise GitHub Pages sanitizes the CSS into plaintext)
65
68
  @@admonition_pages << doc
66
69
  @converted += 1
67
70
  end
@@ -72,11 +75,14 @@ module JekyllGFMAdmonitions
72
75
 
73
76
  def convert_admonitions(doc)
74
77
  code_blocks = []
75
- doc.content.gsub!(/```.*?```/m) do |match|
78
+ # Temporarily replace code blocks by a tag, so that we don't process any admonitions
79
+ # inside of code blocks.
80
+ doc.content.gsub!(/(?:^|\n)(?<!>)\s*```.*?```/m) do |match|
76
81
  code_blocks << match
77
82
  "```{{CODE_BLOCK_#{code_blocks.length - 1}}}```"
78
83
  end
79
84
 
85
+ # Match the admonition syntax
80
86
  doc.content.gsub!(/>\s*\[!(IMPORTANT|NOTE|WARNING|TIP|CAUTION)\]\s*\n((?:>.*\n?)*)/) do
81
87
  type = ::Regexp.last_match(1).downcase
82
88
  title = type.capitalize
@@ -84,26 +90,31 @@ module JekyllGFMAdmonitions
84
90
  icon = Octicons::Octicon.new(ADMONITION_ICONS[type]).to_svg
85
91
  Jekyll.logger.debug 'GFMA:', "Converting #{type} admonition."
86
92
 
93
+ # Replace them by the GFM admonition HTML
87
94
  "<div class='markdown-alert markdown-alert-#{type}'>
88
95
  <p class='markdown-alert-title'>#{icon} #{title}</p>
89
96
  <p>#{@markdown.convert(text)}</p>
90
97
  </div>\n\n"
91
98
  end
92
99
 
100
+ # Put the code blocks back in place
93
101
  doc.content.gsub!(/```\{\{CODE_BLOCK_(\d+)}}```/) do
94
- "```#{code_blocks[$1.to_i]}```"
102
+ code_blocks[$1.to_i]
95
103
  end
96
104
  end
97
105
  end
98
106
 
99
- Jekyll::Hooks.register :site, :post_render do |site|
100
- Jekyll.logger.info 'GFMA:', "Injecting admonition CSS in #{GFMAdmonitionConverter.admonition_pages.length} page(s)."
107
+ # Insert the minified CSS before the closing head tag of all pages we put admonitions on
108
+ Jekyll::Hooks.register :site, :post_render do
109
+ Jekyll.logger.info 'GFMA:', "Inserting admonition CSS in #{GFMAdmonitionConverter.admonition_pages.length} page(s)."
101
110
 
102
- for page in GFMAdmonitionConverter.admonition_pages do
111
+ GFMAdmonitionConverter.admonition_pages.each do |page|
103
112
  Jekyll.logger.debug 'GFMA:', "Appending admonition style to '#{page.path}'."
104
113
  css = File.read(File.expand_path('../assets/admonitions.css', __dir__))
105
114
 
106
- page.output += "<style>#{CSSminify.compress(css)}</style>"
115
+ page.output.gsub!(/<head>(.*?)<\/head>/m) do |match|
116
+ "#{match[0..-7]}<style>#{CSSminify.compress(css)}</style>#{match[-7..-1]}"
117
+ end
107
118
  end
108
119
  end
109
120
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-gfm-admonitions
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robin De Schepper