Module: JekyllAlertsPlugin
- Defined in:
- lib/jekyll-alerts-plugin.rb
Defined Under Namespace
Classes: Tag
Constant Summary collapse
- VERSION =
"1.1.1"- TYPES =
%w[note tip important warning caution].freeze
- LABELS =
{ "note" => "Note", "tip" => "Tip", "important" => "Important", "warning" => "Warning", "caution" => "Caution" }.freeze
- ICONS =
{ "note" => %q(<svg class="octicon octicon-info mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>), "tip" => %q(<svg class="octicon octicon-tip mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z"></path></svg>), "important" => %q(<svg class="octicon octicon-important mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>), "warning" => %q(<svg class="octicon octicon-warning mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>), "caution" => %q(<svg class="octicon octicon-caution mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>) }.freeze
- CSS =
Default styles, injected automatically. The background falls back to a light GitHub-ish surface but honors a --bg-secondary theme variable if the site defines one, so it looks right in both standalone and themed sites.
<<~CSS .markdown-alert{margin-bottom:16px;color:inherit;background-color:var(--bg-secondary,#f6f8fa);border-left:.3rem solid;border-radius:.3rem;padding:.5em} .markdown-alert-body{margin-left:.75em;margin-top:-2px} .markdown-alert-body>:first-child{margin-top:0} .markdown-alert-body>:last-child{margin-bottom:0} .markdown-alert>:first-child{margin-top:0} .markdown-alert>:last-child{margin-bottom:0} .markdown-alert .markdown-alert-title{display:flex;font-weight:bold;align-items:center;line-height:1;margin-bottom:0} .markdown-alert.markdown-alert-note{border-left-color:#539bf5} .markdown-alert.markdown-alert-note .markdown-alert-title{color:#539bf5} .markdown-alert.markdown-alert-important{border-left-color:#986ee2} .markdown-alert.markdown-alert-important .markdown-alert-title{color:#986ee2} .markdown-alert.markdown-alert-warning{border-left-color:#c69026} .markdown-alert.markdown-alert-warning .markdown-alert-title{color:#c69026} .markdown-alert.markdown-alert-tip{border-left-color:#57ab5a} .markdown-alert.markdown-alert-tip .markdown-alert-title{color:#57ab5a} .markdown-alert.markdown-alert-caution{border-left-color:#e5534b} .markdown-alert.markdown-alert-caution .markdown-alert-title{color:#e5534b} .markdown-alert .octicon{color:inherit;padding:.75em;transform:scale(1.1);overflow:visible} .markdown-alert .octicon-info{filter:invert(55%) sepia(55%) saturate(2060%) hue-rotate(191deg) brightness(99%) contrast(93%)} .markdown-alert .octicon-tip{filter:invert(58%) sepia(64%) saturate(351%) hue-rotate(73deg) brightness(89%) contrast(90%)} .markdown-alert .octicon-important{filter:invert(67%) sepia(41%) saturate(6791%) hue-rotate(225deg) brightness(92%) contrast(92%)} .markdown-alert .octicon-caution{filter:invert(45%) sepia(68%) saturate(2586%) hue-rotate(333deg) brightness(95%) contrast(88%)} .markdown-alert .octicon-warning{filter:invert(78%) sepia(17%) saturate(5107%) hue-rotate(350deg) brightness(85%) contrast(78%)} CSS
Class Method Summary collapse
- .inject_css?(site) ⇒ Boolean
-
.rewrite_blockquotes(content) ⇒ Object
Rewrite
> [!TYPE]blockquotes into `alert type % ... - .wrap(type, body_html) ⇒ Object
Class Method Details
.inject_css?(site) ⇒ Boolean
120 121 122 123 124 |
# File 'lib/jekyll-alerts-plugin.rb', line 120 def self.inject_css?(site) cfg = site.config["jekyll_alerts"] || site.config["alerts"] return true unless cfg.is_a?(Hash) && cfg.key?("inject_css") cfg["inject_css"] != false end |
.rewrite_blockquotes(content) ⇒ Object
Rewrite > [!TYPE] blockquotes into {% alert type %} ... {% endalert %},
skipping fenced code blocks so a > inside code is never mistaken for one.
75 76 77 78 79 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 116 117 118 |
# File 'lib/jekyll-alerts-plugin.rb', line 75 def self.rewrite_blockquotes(content) return content unless content&.include?("[!") lines = content.split("\n", -1) out = [] fence = nil i = 0 while i < lines.length line = lines[i] if fence out << line fence = nil if line.strip.start_with?(fence) i += 1 next end if (m = line.match(/^\s*(```+|~~~+)/)) fence = m[1] out << line i += 1 next end if (m = line.match(/^(\s*)>\s*\[!(NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]\s*$/i)) type = m[2].downcase body = [] i += 1 while i < lines.length && lines[i].match?(/^\s*>/) body << lines[i].sub(/^\s*>\s?/, "") i += 1 end out << "{% alert #{type} %}" out.concat(body) out << "{% endalert %}" next end out << line i += 1 end out.join("\n") end |
.wrap(type, body_html) ⇒ Object
69 70 71 |
# File 'lib/jekyll-alerts-plugin.rb', line 69 def self.wrap(type, body_html) %Q(<div class="markdown-alert markdown-alert-#{type}" dir="auto"><p class="markdown-alert-title" dir="auto">#{ICONS[type]}#{LABELS[type]}</p><div class="markdown-alert-body">#{body_html}</div></div>) end |