web/_includes/refactor-content.html

281 lines
8.5 KiB
HTML
Raw Normal View History

<!--
Refactor the HTML structure.
-->
{% assign _content = include.content %}
<!--
In order to allow a wide table to scroll horizontally,
we suround the markdown table with `<div class="table-wrapper">` and `</div>`
-->
{% if _content contains '<table' %}
2020-12-14 10:01:05 +03:00
{% assign _content = _content
| replace: '<table', '<div class="table-wrapper"><table'
2020-12-14 10:01:05 +03:00
| replace: '</table>', '</table></div>'
| replace: '<code><div class="table-wrapper">', '<code>'
2020-12-14 10:01:05 +03:00
| replace: '</table></div></code>', '</table></code>'
%}
{% endif %}
<!--
Fixed kramdown code highlight rendering:
https://github.com/penibelst/jekyll-compress-html/issues/101
https://github.com/penibelst/jekyll-compress-html/issues/71#issuecomment-188144901
-->
{% if _content contains '<pre class="highlight">' %}
2020-12-14 10:01:05 +03:00
{% assign _content = _content
| replace: '<div class="highlight"><pre class="highlight"><code', '<div class="highlight"><code'
| replace: '</code></pre></div>', '</code></div>'
%}
{% endif %}
<!-- Change the icon of checkbox -->
{% if _content contains '<input type="checkbox"' %}
2020-12-14 10:01:05 +03:00
{% assign _content = _content
| replace:
'<input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />',
'<i class="fas fa-check-circle fa-fw checked"></i>'
| replace:
'<input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />',
'<i class="far fa-circle fa-fw"></i>'
2020-12-14 10:01:05 +03:00
%}
{% endif %}
<!-- images -->
2021-12-14 18:28:15 +03:00
{% assign IMG_TAG = '<img ' %}
2021-06-30 14:08:42 +03:00
2021-12-14 18:28:15 +03:00
{% if _content contains IMG_TAG %}
2021-06-30 14:08:42 +03:00
{% assign _img_content = nil %}
2021-12-14 18:28:15 +03:00
{% assign _img_snippets = _content | split: IMG_TAG %}
2021-06-30 14:08:42 +03:00
2021-12-14 18:28:15 +03:00
{% for _img_snippet in _img_snippets %}
2021-06-30 14:08:42 +03:00
{% if forloop.first %}
2021-12-14 18:28:15 +03:00
{% assign _img_content = _img_snippet %}
2021-06-30 14:08:42 +03:00
{% continue %}
{% endif %}
{% assign _width = nil %}
{% assign _height = nil %}
2021-12-14 18:28:15 +03:00
{% assign _src = nil %}
{% assign _left = _img_snippet | split: '>' | first %}
{% assign _right = _img_snippet | remove: _left %}
{% assign _left = _left | remove: ' /' %}
2021-12-14 18:28:15 +03:00
{% assign _left = _left | replace: ' w=', ' width=' | replace: ' h=', ' height=' %}
{% assign _attrs = _left | split: ' ' %}
2021-06-30 14:08:42 +03:00
{% for _attr in _attrs %}
2021-12-14 18:28:15 +03:00
{% assign _pair = _attr | split: '=' %}
{% if _pair.size < 2 %}
{% continue %}
{% endif %}
{% capture _key %}{{ _pair | first }}{% endcapture %}
{% capture _value %}{{ _pair | last | replace: '"', '' }}{% endcapture %}
2021-06-30 14:08:42 +03:00
{% case _key %}
{% when 'width' %}
2021-06-30 14:08:42 +03:00
{% assign _width = _value %}
{% when 'height' %}
2021-06-30 14:08:42 +03:00
{% assign _height = _value %}
2021-12-14 18:28:15 +03:00
{% when 'src' %}
{% assign _src = _value %}
2021-06-30 14:08:42 +03:00
{% endcase %}
2021-12-14 18:28:15 +03:00
{% if _width and _height and _src %}
2021-06-30 14:08:42 +03:00
{% break %}
{% endif %}
{% endfor %}
2021-12-14 18:28:15 +03:00
{% if _src %}
{% unless _src contains '://' %}
<!-- Add CDN URL -->
{% if site.img_cdn %}
{% if site.img_cdn contains '//' %}
{% assign _src_prefix = site.img_cdn %}
{% else %}
{% assign _src_prefix = site.img_cdn | relative_url %}
{% endif %}
2021-12-14 18:28:15 +03:00
{% else %}
{% assign _src_prefix = site.baseurl %}
{% endif %}
<!-- Add image path -->
{% if page.img_path %}
{% assign _path = page.img_path | append: '/' | replace: '//', '/' %}
2021-12-14 18:28:15 +03:00
{% assign _src_prefix = _src_prefix | append: _path %}
{% endif %}
{% assign _final_src = _src_prefix | append: _src %}
{% assign _left = _left | replace: _src, _final_src %}
{% endunless %}
<!-- lazy-load images <https://github.com/ApoorvSaxena/lozad.js#usage> -->
{% assign _left = _left | replace: 'src=', 'data-src=' %}
{% endif %}
<!-- Add SVG placehoder to prevent layout reflow -->
{% if _width and _height %}
{%- capture _svg -%}
src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 {{ _width }} {{ _height }}'%3E%3C/svg%3E"
{%- endcapture -%}
{% assign _left = _svg | append: ' ' | append: _left %}
{% endif %}
<!-- Bypass the HTML-proofer test -->
{% assign _left = _left | append: ' data-proofer-ignore' %}
{% assign _img_content = _img_content | append: IMG_TAG | append: _left | append: _right %}
2021-06-30 14:08:42 +03:00
{% endfor %}
{% assign _content = _img_content %}
{% endif %}
2021-09-09 17:09:07 +03:00
<!-- Add header for code snippets -->
2021-09-15 17:50:28 +03:00
{% if _content contains '<div class="highlight"><code>' %}
{% assign _code_spippets = _content | split: '<div class="highlight"><code>' %}
{% assign _new_content = '' %}
{% for _snippet in _code_spippets %}
{% if forloop.last %}
{% assign _new_content = _new_content | append: _snippet %}
{% else %}
2021-09-15 17:50:28 +03:00
{% assign _left = _snippet | split: '><' | last%}
{% if _left contains 'file="' %}
2021-12-03 11:34:26 +03:00
{% assign _label_text = _left | split: 'file="' | last | split: '"' | first %}
{% assign _label_icon = 'far fa-file-code' %}
2021-09-15 17:50:28 +03:00
{% else %}
{% assign _lang = _left | split: 'language-' | last | split: ' ' | first %}
2021-12-03 11:34:26 +03:00
{% capture _label_text %}{% include language-alias.html language=_lang %}{% endcapture %}
2021-09-22 13:25:46 +03:00
{% assign _label_icon = 'fas fa-code small' %}
2021-09-15 17:50:28 +03:00
{% endif %}
2021-09-22 13:25:46 +03:00
{% capture _label %}
<span data-label-text="{{ _label_text | strip }}"><i class="{{ _label_icon }}"></i></span>
2021-09-22 13:25:46 +03:00
{% endcapture %}
2021-09-15 17:50:28 +03:00
{% assign _new_content = _new_content | append: _snippet
2021-09-22 13:25:46 +03:00
| append: '<div class="code-header">'
| append: _label
| append: '<button aria-label="copy" data-title-succeed="'
2022-10-18 22:53:47 +03:00
| append: site.data.locales[site.lang].post.button.copy_code.succeed
| append: '"><i class="far fa-clipboard"></i></button></div>'
2021-09-15 17:50:28 +03:00
| append: '<div class="highlight"><code>'
2021-09-09 16:07:07 +03:00
%}
2021-09-15 17:50:28 +03:00
{% endif %}
2021-09-15 17:50:28 +03:00
{% endfor %}
2021-09-15 17:50:28 +03:00
{% assign _content = _new_content %}
{% endif %}
2021-12-05 21:19:23 +03:00
<!-- Create heading anchors -->
{% assign heading_levels = '2,3,4,5' | split: ',' %}
{% assign _heading_content = _content %}
{% for level in heading_levels %}
{% capture mark_start %}<h{{ level }} id="{% endcapture %}
{% capture mark_end %}</h{{ level }}>{% endcapture %}
{% if _heading_content contains mark_start %}
{% assign _new_content = nil %}
{% assign heading_snippets = _heading_content | split: mark_start %}
{% for snippet in heading_snippets %}
{% if forloop.first %}
{% assign _new_content = snippet %}
{% continue %}
{% endif %}
{% assign id = snippet | split: '"' | first %}
{% capture anchor %}<a href="#{{ id }}" class="anchor text-muted"><i class="fas fa-hashtag"></i></a>{% endcapture %}
2021-12-05 21:19:23 +03:00
{% assign left = snippet | split: mark_end | first %}
{% assign right = snippet | slice: left.size, snippet.size %}
{% assign left = left | replace_first: '">', '"><span class="mr-2">' | append: '</span>' %}
2021-12-05 21:19:23 +03:00
{% assign _new_content = _new_content | append: mark_start
| append: left | append: anchor | append: right
2021-12-05 21:19:23 +03:00
%}
{% endfor %}
{% assign _heading_content = _new_content %}
{% endif %}
{% endfor %}
{% assign _content = _heading_content %}
2021-06-30 14:08:42 +03:00
2022-01-21 12:46:01 +03:00
<!-- Wrap prompt element of blockquote with the <div> tag -->
{% assign blockquote_start = '<blockquote class=' %}
{% assign blockquote_end = '</blockquote>' %}
{% assign cls_prefix = 'prompt-' %}
{% if _content contains blockquote_start %}
{% assign _prompt_content = nil %}
{% assign _prompt_snippets = _content | split: blockquote_start %}
{% for _snippet in _prompt_snippets %}
{% if forloop.first %}
{% assign _prompt_content = _snippet %}
{% continue %}
{% endif %}
{% assign left = _snippet | split: blockquote_end | first %}
{% assign right = _snippet | slice: left.size, _snippet.size %}
{% assign cls_str = left | split: '>' | first %}
{% assign cls_array = cls_str | remove: '"' | split: ' ' %}
{% assign is_prompt = false %}
{% for cls in cls_array %}
{% if cls contains cls_prefix %}
{% assign is_prompt = true %}
{% break %}
{% endif %}
{% endfor %}
{% unless is_prompt %}
{% assign _prompt_content = _prompt_content | append: blockquote_start | append: _snippet %}
{% continue %}
{% endunless %}
{% assign left = left | slice: cls_str.size, left.size %}
{% assign left = cls_str | append: '><div' | append: left | append: '</div>' %}
{% assign _prompt_content = _prompt_content | append: blockquote_start | append: left | append: right %}
{% endfor %}
{% assign _content = _prompt_content %}
{% endif %}
2020-12-14 10:01:05 +03:00
<!-- return -->
{{ _content }}