From 971f2c68e67e568e7569857acb9d19ef9fa10891 Mon Sep 17 00:00:00 2001
From: Mike Rodriguez
Date: Thu, 25 Apr 2024 10:35:43 -0500
Subject: [PATCH] My Haikus Part 1 (#16)
---
_includes/anchor_headings.html | 174 ++++++++++++++++++++++++++++++
_layouts/post.html | 2 +-
_layouts/style.css | 40 +++++++
_posts/2024-04-25-haikus.markdown | 43 ++++++++
4 files changed, 258 insertions(+), 1 deletion(-)
create mode 100644 _includes/anchor_headings.html
create mode 100644 _layouts/style.css
create mode 100644 _posts/2024-04-25-haikus.markdown
diff --git a/_includes/anchor_headings.html b/_includes/anchor_headings.html
new file mode 100644
index 0000000..ee5c2a6
--- /dev/null
+++ b/_includes/anchor_headings.html
@@ -0,0 +1,174 @@
+{% capture headingsWorkspace %}
+ {% comment %}
+ Copyright (c) 2018 Vladimir "allejo" Jimenez
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+ {% endcomment %}
+ {% comment %}
+ Version 1.0.13
+ https://github.com/allejo/jekyll-anchor-headings
+
+ "Be the pull request you wish to see in the world." ~Ben Balter
+
+ Usage:
+ {% include anchor_headings.html html=content anchorBody="#" %}
+
+ Parameters:
+ * html (string) - the HTML of compiled markdown generated by kramdown in Jekyll
+
+ Optional Parameters:
+ * beforeHeading (bool) : false - Set to true if the anchor should be placed _before_ the heading's content
+ * headerAttrs (string) : '' - Any custom HTML attributes that will be added to the heading tag; you may NOT use `id`;
+ the `%heading%` and `%html_id%` placeholders are available
+ * anchorAttrs (string) : '' - Any custom HTML attributes that will be added to the `` tag; you may NOT use `href`, `class` or `title`;
+ the `%heading%` and `%html_id%` placeholders are available
+ * anchorBody (string) : '' - The content that will be placed inside the anchor; the `%heading%` placeholder is available
+ * anchorClass (string) : '' - The class(es) that will be used for each anchor. Separate multiple classes with a space
+ * anchorTitle (string) : '' - The `title` attribute that will be used for anchors
+ * h_min (int) : 1 - The minimum header level to build an anchor for; any header lower than this value will be ignored
+ * h_max (int) : 6 - The maximum header level to build an anchor for; any header greater than this value will be ignored
+ * bodyPrefix (string) : '' - Anything that should be inserted inside of the heading tag _before_ its anchor and content
+ * bodySuffix (string) : '' - Anything that should be inserted inside of the heading tag _after_ its anchor and content
+ * generateId (true) : false - Set to true if a header without id should generate an id to use.
+
+ Output:
+ The original HTML with the addition of anchors inside of all of the h1-h6 headings.
+ {% endcomment %}
+
+ {% assign minHeader = include.h_min | default: 1 %}
+ {% assign maxHeader = include.h_max | default: 6 %}
+ {% assign beforeHeading = include.beforeHeading %}
+ {% assign headerAttrs = include.headerAttrs %}
+ {% assign nodes = include.html | split: '
+ {% if headerLevel == 0 %}
+
+ {% assign firstChunk = node | split: '>' | first %}
+
+
+ {% unless firstChunk contains '<' %}
+ {% capture node %}{% endcapture %}
+ {% assign _workspace = node | split: _closingTag %}
+ {% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %}
+ {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}
+ {% assign escaped_header = header | strip_html | strip %}
+
+ {% assign _classWorkspace = _workspace[0] | split: 'class="' %}
+ {% assign _classWorkspace = _classWorkspace[1] | split: '"' %}
+ {% assign _html_class = _classWorkspace[0] %}
+
+ {% if _html_class contains "no_anchor" %}
+ {% assign skip_anchor = true %}
+ {% else %}
+ {% assign skip_anchor = false %}
+ {% endif %}
+
+ {% assign _idWorkspace = _workspace[0] | split: 'id="' %}
+ {% if _idWorkspace[1] %}
+ {% assign _idWorkspace = _idWorkspace[1] | split: '"' %}
+ {% assign html_id = _idWorkspace[0] %}
+ {% assign h_attrs = headerAttrs %}
+ {% elsif include.generateId %}
+
+ {% assign html_id = escaped_header | slugify %}
+ {% if html_id == "" %}
+ {% assign html_id = false %}
+ {% endif %}
+
+ {% capture h_attrs %}{{ headerAttrs }} id="%html_id%"{% endcapture %}
+ {% endif %}
+
+
+ {% capture anchor %}{% endcapture %}
+
+ {% if skip_anchor == false and html_id and headerLevel >= minHeader and headerLevel <= maxHeader %}
+ {% if h_attrs %}
+ {% capture _hAttrToStrip %}{{ _hAttrToStrip | split: '>' | first }} {{ h_attrs | strip | replace: '%heading%', escaped_header | replace: '%html_id%', html_id }}>{% endcapture %}
+ {% endif %}
+
+ {% capture anchor %}href="#{{ html_id }}"{% endcapture %}
+
+ {% if include.anchorClass %}
+ {% capture anchor %}{{ anchor }} class="{{ include.anchorClass }}"{% endcapture %}
+ {% endif %}
+
+ {% if include.anchorTitle %}
+ {% capture anchor %}{{ anchor }} title="{{ include.anchorTitle | replace: '%heading%', escaped_header }}"{% endcapture %}
+ {% endif %}
+
+ {% if include.anchorAttrs %}
+ {% capture anchor %}{{ anchor }} {{ include.anchorAttrs | replace: '%heading%', escaped_header | replace: '%html_id%', html_id }}{% endcapture %}
+ {% endif %}
+
+ {% capture anchor %}{{ include.anchorBody | replace: '%heading%', escaped_header | default: '' }}{% endcapture %}
+
+
+ {% if beforeHeading %}
+ {% capture anchor %}{{ anchor }} {% endcapture %}
+ {% else %}
+ {% capture anchor %} {{ anchor }}{% endcapture %}
+ {% endif %}
+ {% endif %}
+
+ {% capture new_heading %}
+
+ {% endcapture %}
+
+
+ {% assign chunkCount = _workspace | size %}
+ {% if chunkCount > 1 %}
+ {% capture new_heading %}{{ new_heading }}{{ _workspace | last }}{% endcapture %}
+ {% endif %}
+
+ {% capture edited_headings %}{{ edited_headings }}{{ new_heading }}{% endcapture %}
+ {% endfor %}
+{% endcapture %}{% assign headingsWorkspace = '' %}{{ edited_headings | strip }}
diff --git a/_layouts/post.html b/_layouts/post.html
index c6deb58..1cd36b7 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -7,4 +7,4 @@ {{ page.title }}
{{ page.date | date: "%b %-d, %Y" }}
-{{ content }}
+{% include anchor_headings.html html=content beforeHeading=true anchorBody="" %}
diff --git a/_layouts/style.css b/_layouts/style.css
new file mode 100644
index 0000000..da37e2f
--- /dev/null
+++ b/_layouts/style.css
@@ -0,0 +1,40 @@
+/* From https://github.com/allejo/jekyll-anchor-headings/wiki/Examples#github-style-octicon-links */
+
+h1 {
+ text-indent: -12px;
+}
+
+h2 {
+ text-indent: -10px;
+}
+
+h3 {
+ text-indent: -8px;
+}
+
+h4 {
+ text-indent: -6px;
+}
+
+h5 {
+ text-indent: -4px;
+}
+
+h6 {
+ text-indent: -2px;
+}
+
+h1 .octicon, h2 .octicon, h3 .octicon, h4 .octicon, h5 .octicon, h6 .octicon {
+ visibility: hidden;
+}
+
+h1:hover .octicon, h2:hover .octicon, h3:hover .octicon, h4:hover .octicon, h5:hover .octicon, h6:hover .octicon {
+ visibility: visible;
+}
+
+.octicon {
+ fill: currentColor;
+ padding: 0;
+ margin-left: -16px;
+ vertical-align: middle;
+}
diff --git a/_posts/2024-04-25-haikus.markdown b/_posts/2024-04-25-haikus.markdown
new file mode 100644
index 0000000..d3ad115
--- /dev/null
+++ b/_posts/2024-04-25-haikus.markdown
@@ -0,0 +1,43 @@
+---
+layout: post
+title: "My Haikus (Part 1)"
+author: Mike Rodriguez
+date: 2024-04-25
+tags: [haiku, development, programming, ai, poetry, funny]
+---
+
+## AI
+
+```
+I have a problem
+I cannot figure it out
+I ask the AI
+```
+
+## Meta
+
+```
+With five syllables
+I can say nothing useful
+With seven I can
+```
+
+```
+I wrote this myself
+I knew it would be real good
+I think I was wrong
+```
+
+## Programming
+
+```
+At work I write code
+Sometimes it makes me angry
+Then I type faster
+```
+
+```
+I’m using TypeScript
+It’s JavaScript but better
+No more type errors
+```