From 1f3e306e0a70652b98fcbd86f7a32cc5423f41cf Mon Sep 17 00:00:00 2001 From: ada Date: Fri, 22 Aug 2025 12:11:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BA=D0=BE=D0=BD=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D1=82=D0=B0=D1=86=D0=B8=D0=B8=20wikilinks=20=D0=B2=20?= =?UTF-8?q?=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B8=20=D0=BF=D0=BE=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BB=D0=BB=D0=B5=D0=BA=D1=86=D0=B8=D0=B8=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _plugins/wikilinks.rb | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 _plugins/wikilinks.rb diff --git a/_plugins/wikilinks.rb b/_plugins/wikilinks.rb new file mode 100644 index 0000000..53fef98 --- /dev/null +++ b/_plugins/wikilinks.rb @@ -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