Таблица содержимого Kramdown не отображается внутри блока HTML

Я следил за этим вопросом, но, похоже, он не занимает эффект для меня. Любая помощь будет принята с благодарностью.

_includes/layout.html

<main>
<div>
<!-- Sidebar -->
<aside markdown="1">
<h4>Table of Contents</h4>
* ToC
{:toc}
</aside>
<!-- END Sidebar -->

<!-- Main content -->
<article>
{{ content }}
</article>
<!-- END Main content -->
</div>
</main>

_config.yml

markdown: kramdown

Результат:

введите здесь описание изображения

Обновлять

_layouts/сайт.html

<aside markdown="1">
mark**down**
</aside>

Он просто отображает, как указано выше. Крамдаун включен в конфиге.


person curious    schedule 10.05.2017    source источник
comment
Может быть интересно увидеть весь ваш код. У вас есть адрес репозитория?   -  person David Jacquel    schedule 11.05.2017
comment
@DavidJacquel Я только что создал образец сайта и поместил этот тег уценки в качестве примера. См. это: tu5.github.io/jekyll-now/Hello-World Также: github.com/tu5/jekyll-now/blob /master/_layouts/post.html   -  person curious    schedule 11.05.2017


Ответы (3)


Решено с помощью чистой жидкости ToC от allejo.

% capture tocWorkspace %}
{% comment %}
    "...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way" ~jaybe

    Usage:
        {% include toc_pure_liquid.html html=content sanitize=true class="inline_toc" id="my_toc" h_min=2 h_max=3  %}

    Parameters:
        * html     (string) - the HTML of compiled markdown generated by kramdown in Jekyll

    Optional Parameters:
        * sanitize (bool)   : false  - when set to true, the headers will be stripped of any HTML in the TOC
        * class    (string) :   ''   - a CSS class assigned to the TOC
        * id       (string) :   ''   - an ID to assigned to the TOC
        * h_min    (int)    :   1    - the minimum TOC header level to use; any header lower than this value will be ignored
        * h_max    (int)    :   6    - the maximum TOC header level to use; any header greater than this value will be ignored

    Output:
        An unordered list representing the table of contents of a markdown block. This snippet will only generate the table of contents and will NOT output the markdown given to it
{% endcomment %}

{% capture my_toc %}{% endcapture %}
{% assign minHeader = include.h_min | default: 1 %}
{% assign maxHeader = include.h_max | default: 6 %}
{% assign nodes = include.html | split: '<h' %}
{% for node in nodes %}
    {% if node == "" %}
        {% continue %}
    {% endif %}
    {% assign headerLevel = node | replace: '"', '' | slice: 0, 1 %}
    {% assign headerLevel = headerLevel | times: 1 %}
    {% assign indentAmount = headerLevel | minus: minHeader | add: 1 %}
    {% assign _workspace = node | split: '</h' %}
    {% unless headerLevel >= minHeader %}
        {% continue %}
    {% endunless %}
    {% if headerLevel > maxHeader %}
        {% continue %}
    {% endif %}
    {% assign _idWorkspace = _workspace[0] | split: '"' %}
    {% assign html_id = _idWorkspace[1] %}
    {% capture _hAttrToStrip %}{{ headerLevel }} id="{{ html_id }}">{% endcapture %}
    {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}
    {% assign space = '' %}
    {% for i in (1..indentAmount) %}
        {% assign space = space | prepend: '  ' %}
    {% endfor %}
    {% capture my_toc %}{{ my_toc }}
{{ space }}- [{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}](#{{ html_id }}){% endcapture %}
    {% endfor %}
    {% if include.class %}
        {% capture my_toc %}{:.{{ include.class }}}
{{ my_toc | lstrip }}{% endcapture %}
    {% endif %}
    {% if include.id %}
        {% capture my_toc %}{: #{{ include.id }}}
{{ my_toc | lstrip }}{% endcapture %}
    {% endif %}
{% endcapture %}{% assign tocWorkspace = '' %}
{{ my_toc | markdownify }}
person curious    schedule 19.05.2017

Теоретически это должно работать таким образом (у меня это тоже не работает), но вы можете принудительно обработать код внутри блока с помощью `markdown="1" следующим образом:

<aside markdown="1">
<h4>Table of Contents</h4>
* ToC
{:toc}
</aside>

Убедитесь, что вы не делаете отступ в коде внутри тега aside, иначе он будет проанализирован как код Kramdown.

По умолчанию kramdown анализирует все блочные теги HTML и все теги XML как необработанные блоки HTML. Однако это можно настроить с помощью файла parse_block_html. Если установлено значение true, синтаксический анализ в блоках HTML включен глобально. Также возможно включить/отключить анализ синтаксиса для каждого тега отдельно, используя атрибут уценки:

Если тег HTML имеет атрибут markdown="0", то тег анализируется как необработанный блок HTML.

Если HTML-тег имеет атрибут markdown="1", то используется механизм разбора синтаксиса по умолчанию в этом теге.

Обновлять

Я проверил ваш репозиторий, вам нужно переименовать index.html в index.md, так что kramdown проанализирует его, а затем вы также можете добавить строку в _config.yml для анализа уценки внутри блоков html.

person marcanuy    schedule 10.05.2017
comment
Извините, я решил упростить свой вопрос, пока вы писали ответ. Во всяком случае, он остается прежним. Markdown по-прежнему не работает в моем блоке HTML. - person curious; 11.05.2017
comment
Ответ тоже остается прежним, это тоже работает. Вы не должны полностью менять исходный вопрос, лучше обновить вопрос, чтобы другие ответы не стали бесполезными. - person marcanuy; 11.05.2017
comment
Хорошо, спасибо, буду знать на будущее. Есть ли у вас, может быть, какие-либо другие идеи, почему он все еще не хочет работать? - person curious; 11.05.2017
comment
Я сделал запрос на перенос с изменениями и обновил ответ, теперь работает;) - person marcanuy; 11.05.2017
comment
Я №3 тебя. Кажется, работает. Сыграю после выходных. Спасибо, что спасли мой компьютер от выброса из окна! - person curious; 11.05.2017
comment
Рад помочь. Если этот или любой другой ответ решил вашу проблему, отметьте его как принятый. - person marcanuy; 11.05.2017
comment
На самом деле не решено, так как у меня все еще возникают проблемы с его встраиванием в мой файл макета. Превращение файла макета HTML в уценку нарушает некоторые вещи, и мой вопрос: есть ли другой способ встроить этот ToC? У вас есть идея, может быть? - person curious; 17.05.2017
comment
У вас есть несколько генераторов плагинов toc, например этот, но если вы используете страницы github, вам понадобится для создания сайта перед его загрузкой - person marcanuy; 17.05.2017
comment
Спасибо, @marcanuy. Ваш запрос на включение действительно помог продемонстрировать, как это можно сделать. - person olavimmanuel; 11.12.2017
comment
Также обратите внимание, что существует разница между markdown=1 (включает для некоторых элементов - см. ссылку), markdown=block (включает для элементов уровня блока) и markdown=span (включает для элементов уровня диапазона). Глобальная опция parse_block_html включает парсинг тех же элементов, что и markdown=1. Подробнее об опциях и элементах, которые они позволяют анализировать, здесь: kramdown.gettalong.org/syntax .html#html-блоки - person olavimmanuel; 11.12.2017

Jekyll анализирует только файлы .md или .mardown.

.html файлы не обрабатываются парсером уценки.

Если вы переименуете файл с .html на .md, он будет обработан как kramdown.

Но там у вас будут проблемы с отступами.

Смешивать html и уценку не так-то просто ;-)

person David Jacquel    schedule 11.05.2017
comment
Пробовал включать {% include my.md %} и ставить там единственную уценку, но тоже не получилось. - person curious; 11.05.2017
comment
Я думаю, что включение уценки в html-файл не работает. - person David Jacquel; 12.05.2017