Как создать собственный вывод HTML для существующего макроса Asciidoctor Asciidoc?

Например, я хочу добавить loading="lazy" ко всем моим изображениям, например:

image::myimage.jpg[]

но вывод элемента HTML <img> по умолчанию не имеет этого атрибута.

Возможно, это было задано по адресу: Создание пользовательского HTML с помощью asciidoctor, но вопрос не ясен достаточно, чтобы я был в этом уверен.


person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 16.09.2020    source источник


Ответы (1)


Это задокументировано по адресу: https://asciidoctor.org/docs/user-manual/#provide-custom-templates, но кажется, что минимальный пример был бы полезен.

основной.адок

image::myimage.jpg[]

template_dir/block_image.html.erb

<%#encoding:UTF-8%><div<%= @id && %( id="#{@id}") %> class="<%= ['imageblock',@style,role].compact * ' ' %>"<%
if (attr? :align) || (attr? :float)
%> style="<%= [("text-align: #{attr :align};" if attr? :align),("float: #{attr :float};" if attr? :float)].compact * ' ' %>"<%
end %>>
<div class="content"><%
if attr? :link %>
<a class="image" href="<%= attr :link %>"><img src="<%= image_uri(attr :target) %>" loading="lazy" alt="<%= attr :alt %>"<%= (attr? :width) ? %( width="#{attr :width}") : nil %><%= (attr? :height) ? %( height="#{attr :height}") : nil %>></a><%
else %>
<img src="<%= image_uri(attr :target) %>" loading="lazy" alt="<%= attr :alt %>"<%= (attr? :width) ? %( width="#{attr :width}") : nil %><%= (attr? :height) ? %( height="#{attr :height}") : nil %>><%
end %>
</div><%
if title? %>
<div class="title"><%= captioned_title %></div><%
end %>
</div>

Это копия шаблона по умолчанию с https://github.com/asciidoctor/asciidoctor-backends/blob/master/erb/html5/block_image.html.erb, но с измененным HTML путем добавления loading="lazy".

Gemfile

gem 'asciidoctor', '2.0.10'
gem 'concurrent-ruby', '1.1.7'
gem 'tilt', '2.0.10'

Нам нужно установить эти дополнительные драгоценные камни, чтобы он работал.

Скомпилировать:

asciidoctor --template-dir template_dir main.adoc

и все, выходной HTML теперь содержит loading="lazy".

Проверено в Asciidoctor 2.0.10.

person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 16.09.2020