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

Class Method Details

.inject_css?(site) ⇒ Boolean

Returns:

  • (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