Я хотел бы использовать плагин Jekyll Responsive Image для создания соответствующих адаптивных изображений с помощью {{X0 }} / sizes для изображений моих сообщений.

Но я также хотел бы иметь возможность редактировать свои сообщения в программном обеспечении, обеспечивающем предварительный просмотр в реальном времени, например MacDown, которое только понимает стандартный синтаксис Markdown для изображений.

Вот почему я хотел бы знать, есть ли способ - своего рода плагин - сказать Jekyll, чтобы он преобразовал стандартный синтаксис Markdown для изображений, который я бы поместил в свои файлы Markdown ...

![alt text](path/to/image.jpg)

… В этот синтаксис, специфичный для подключаемого модуля Jekyll Responsive Image:

{% responsive_image path: path/to/image.jpg alt: "alt text" %}

И ЗАТЕМ, Джекилл мог продолжить и использовать Kramdown для генерации HTML ...

Я также создал проблему в Github плагина, но более общий ответ тоже было бы неплохо и, возможно, полезно для других нужд.

3
Nicolas Hoizey 25 Фев 2016 в 01:32

3 ответа

Лучший ответ

Да, это определенно возможно. Начиная с Jekyll 3, у вас может быть несколько конвертеров для каждого расширения файла . Это позволяет вам создать такой конвертер, как:

class ResponsiveImageify < Jekyll::Converter
  priority :high

  def matches(ext)
    ext.downcase == ".md"
  end

  def convert(content)
    content.gsub(/\!\[(.+)\]\((.+)\)/, '{% responsive_image path: \2 alt: \1  %}')
  end
end

Этот конвертер будет gsub содержимым любого файла .md.

Надеюсь это поможет!

5
parkr 25 Фев 2016 в 19:03

Примеры, размещенные здесь, нарушают тег alt. Строку alt необходимо заключить в кавычки, иначе она будет усечена до одного слова.

Например content.gsub(/\!\[(.+)\]\((.+)\)/, '{% responsive_image path: \2 alt: "\1" %}')

Также сообщение Николаса Хойзи - единственное, которое у меня работает с последней версией Jekyll (3.7), я не могу заставить другие примеры выводить html. Похоже, что Markdown был отрисован до того, как были вставлены жидкие теги.

0
hyde in the dark 8 Май 2018 в 05:44

Самое простое решение - использовать новые хуки Jekyll.

Очень сырой плагин может быть:

Jekyll::Hooks.register :posts, :pre_render do |post, payload|
  docExt = post.extname.tr('.', '')
  # only process if we deal with a markdown file
  if payload['site']['markdown_ext'].include? docExt
    newContent = post.content.gsub(/\!\[(.+)\]\((.+)\)/, '{% responsive_image path: \2 alt: \1  %}')
    post.content = newContent
  end
end

Сохраните это в _plugins/img-tag-transform.rb

2
David Jacquel 25 Фев 2016 в 18:28