Добавить плагин для автоконвертации wikilinks в ссылки по коллекции notes

This commit is contained in:
ada
2025-08-22 12:11:09 +03:00
parent e3abca8670
commit 1f3e306e0a
+42
View File
@@ -0,0 +1,42 @@
# _plugins/wikilinks.rb
# Автоконвертация [[wikilinks]] -> [label](url) по коллекции _notes (и др. коллекциям, если надо)
module Wikilinks
def self.build_index(site)
# Возьмём все документы из коллекции notes
notes = site.collections['notes']&.docs || []
index = {}
notes.each do |d|
# ключи для поиска: title и basename без расширения
title = (d.data['title'] || File.basename(d.basename, '.*')).to_s
slug = File.basename(d.basename, '.*').to_s
[title, slug].each do |k|
next if k.empty?
index[k.downcase] = d.url
end
end
index
end
def self.convert(content, site)
idx = build_index(site)
content.gsub(/\[\[([^\]|#]+)(?:\|([^\]]+))?\]\]/) do
key = Regexp.last_match(1).strip
label = (Regexp.last_match(2) || key).strip
url = idx[key.downcase]
# если нашли — заменяем, иначе оставляем как есть
url ? "[#{label}](#{site.baseurl}#{url})" : Regexp.last_match(0)
end
end
end
# Прогоним через фильтр все страницы/посты/доки до рендера
Jekyll::Hooks.register [:pages, :posts, :documents], :pre_render do |doc, payload|
site = payload['site']
doc.content = Wikilinks.convert(doc.content, site)
end