<!-- 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' %}
  {% assign _content = _content
    | replace: '<table', '<div class="table-wrapper"><table'
    | replace: '</table>', '</table></div>'
    | replace: '<code><div class="table-wrapper">', '<code>'
    | 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">' %}
  {% 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"' %}
  {% 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>'
  %}
{% endif %}

<!-- images -->
{% assign IMG_TAG = '<img ' %}

{% if _content contains IMG_TAG %}
  {% assign _img_content = nil %}
  {% assign _img_snippets = _content | split: IMG_TAG %}

  <!-- CDN URL -->
  {% if site.img_cdn %}
    {% if site.img_cdn contains '//' %}
      {% assign _path_prefix = site.img_cdn %}
    {% else %}
      {% assign _path_prefix = site.img_cdn | relative_url %}
    {% endif %}
  {% else %}
    {% assign _path_prefix = site.baseurl %}
  {% endif %}

  <!-- Add image path -->
  {% if page.img_path %}
    {% assign _path = page.img_path | append: '/' | replace: '//', '/' %}
    {% assign _path_prefix = _path_prefix | append: _path %}
  {% endif %}

  {% for _img_snippet in _img_snippets %}
    {% if forloop.first %}
      {% assign _img_content = _img_snippet %}
      {% continue %}
    {% endif %}

    {% assign _left = _img_snippet | split: '>' | first %}
    {% assign _right = _img_snippet | remove: _left %}

    {% unless _left contains 'src=' %}
      {% continue %}
    {% endunless %}

    {% assign _left = _left | remove: ' /' | replace: ' w=', ' width=' | replace: ' h=', ' height=' %}
    {% assign _attrs = _left | split: '" ' %}

    {% assign _width = nil %}
    {% assign _height = nil %}
    {% assign _lqip = nil %}
    {% assign _class = nil %}

    {% for _attr in _attrs %}
      {% unless _attr contains '=' %}
        {% continue %}
      {% endunless %}

      {% assign _pair = _attr | split: '="' %}
      {% capture _key %}{{ _pair | first }}{% endcapture %}
      {% capture _value %}{{ _pair | last | remove: '"' }}{% endcapture %}

      {% case _key %}
        {% when 'width' %}
          {% assign _width = _value %}
        {% when 'height' %}
          {% assign _height = _value %}
        {% when 'src' %}
          {% assign _src = _value %}
        {% when 'lqip' %}
          {% assign _lqip = _value %}
        {% when 'class' %}
          {% assign _class = _value %}
      {% endcase %}
    {% endfor %}

    <!-- take out classes -->
    {% if _class %}
      {% capture _old_class %}class="{{ _class }}"{% endcapture %}
      {% assign _left = _left | remove: _old_class %}
    {% endif %}

    {% assign _final_src = nil %}

    {% unless _src contains '//' %}
      {% assign _final_src = _path_prefix | append: _src %}
      {% capture _src_from %}"{{ _src }}"{% endcapture %}
      {% capture _src_to %}"{{ _final_src }}"{% endcapture %}
      {% assign _left = _left | replace: _src_from, _src_to %}
    {% endunless %}

    {% if _lqip %}
      {% unless _lqip contains ':' %}
        {% assign _final_lqip = _path_prefix | append: _lqip %}
        {% capture _lqip_from %}"{{ _lqip }}"{% endcapture %}
        {% capture _lqip_to %}"{{ _final_lqip }}"{% endcapture %}
        {% assign _left = _left | replace: _lqip_from, _lqip_to %}
      {% endunless %}
    {% endif %}

    <!-- lazy-load images <https://github.com/aFarkas/lazysizes#readme> -->
    {% assign _left = _left | replace: 'src=', 'data-src=' %}
    {% if _left contains 'class=' %}
      {% assign _left = _left | replace: 'class="', 'class="lazyload '%}
    {% else %}
      {% assign _left = _left | append: ' class="lazyload"' %}
    {% endif %}

    <!-- add image placeholder -->
    {% if _lqip %}
      {% assign _left = _left | replace: ' lqip=', ' data-lqip="true" src=' %}
    {% else %}
      {% if _width and _height %}
        <!-- add SVG placehoder -->
        {%- 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 %}
        {% assign _class = _class | append: ' shimmer' %}
      {% endif %}
    {% endif %}

    <!-- Bypass the HTML-proofer test -->
    {% assign _left = _left | append: ' data-proofer-ignore' %}

    {% if page.layout == 'home' %}
      <!-- create the image wrapper -->
      {%- capture _wrapper_start -%}
        <div class="preview-img {{ _class | strip }}">
      {%- endcapture -%}
      {% assign _img_content = _img_content | append: _wrapper_start %}
      {% assign _right = _right | prepend: '></div' %}

    {% else %}
      <!-- make sure the `<img>` is wrapped by `<a>` -->
      {% assign _parent = _right | slice: 1, 4 %}

      {% if _parent == '</a>' %}
        <!-- add class to exist <a> tag -->
        {% assign _size = _img_content | size | minus: 1 %}
        {% capture _class %}
          class="img-link{% unless _lqip %} shimmer{% endunless %}"
        {% endcapture %}
        {% assign _img_content = _img_content | slice: 0, _size | append: _class | append: '>'  %}
      {% else %}
        <!-- create the image wrapper -->
        {%- capture _wrapper_start -%}
          <a href="{{ _final_src | default: _src  }}" class="popup img-link {{ _class }}">
        {%- endcapture -%}
        {% assign _img_content = _img_content | append: _wrapper_start %}
        {% assign _right = _right | prepend: '></a' %}
      {% endif %}
    {% endif %}

    <!-- combine -->
    {% assign _img_content = _img_content | append: debug | append: IMG_TAG | append: _left | append: _right %}

  {% endfor %}

  {% if _img_content %}
    {% assign _content = _img_content %}
  {% endif %}

{% endif %}

<!-- Add header for code snippets -->

{% 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 %}

      {% assign _left = _snippet | split: '><' | last%}

      {% if _left contains 'file="' %}
        {% assign _label_text = _left | split: 'file="' | last | split: '"' | first %}
        {% assign _label_icon = 'far fa-file-code fa-fw' %}
      {% else %}
        {% assign _lang = _left | split: 'language-' | last | split: ' ' | first %}
        {% capture _label_text %}{% include language-alias.html language=_lang %}{% endcapture %}
        {% assign _label_icon = 'fas fa-code fa-fw small' %}
      {% endif %}

      {% capture _label %}
        <span data-label-text="{{ _label_text | strip }}"><i class="{{ _label_icon }}"></i></span>
      {% endcapture %}

      {% assign _new_content = _new_content | append: _snippet
          | append: '<div class="code-header">'
          | append: _label
          | append: '<button aria-label="copy" data-title-succeed="'
          | append: site.data.locales[include.lang].post.button.copy_code.succeed
          | append: '"><i class="far fa-clipboard"></i></button></div>'
          | append: '<div class="highlight"><code>'
      %}

    {% endif %}

  {% endfor %}

  {% assign _content = _new_content %}

{% endif %}

<!-- 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 %}

      {% assign left = snippet | split: mark_end | first %}
      {% assign right = snippet | slice: left.size, snippet.size %}
      {% assign left = left | replace_first: '">', '"><span class="me-2">' | append: '</span>' %}

      {% assign _new_content = _new_content | append: mark_start
          | append: left | append: anchor | append: right
      %}

    {% endfor %}

    {% assign _heading_content = _new_content %}

  {% endif %}
{% endfor %}

{% assign _content = _heading_content %}

<!-- return -->
{{ _content }}
