Rose debug info
---------------

Как я настроил в Эгее расстановку якорей

Этот пост может быть интересен и полезен тем, кто ведет блог на Эгее. А может и не быть, читайте с осторожностью. Автор не программист и автоматизирует, как умеет.

Ставим задачу ⚓︎

У меня в блоге есть формат TIL — это ежемесячные посты-дайджесты на самые разные темы, попавшиеся мне за месяц. Обычно в таком посте 8-12 небольших заметок (на параграф-два), не связанных между собой. Иногда мне хочется дать ссылку на конкретный параграф, а не на весь пост.

Проблема: хочу ссылаться на конкретные параграфы страницы, т. к. некоторые посты большие и давать человеку ссылку на параграф удобнее, чем заставлять искать конкретное место самому.

Я решил, что буду ставить «якоря» на заголовки первого уровня, которые в эгеевском редакторе отмечаются одним диезом: #

В идеале, каждый заголовок параграфа приобретает вид:

<a name="anchor"></a>
# Имя параграфа <a href ="ссылка/напост/#anchor"> ⚓︎</a>

Где anchor — имя якоря, стоит перед названием параграфа. Если ставить в одну строчку с названием параграфа — страница при переходе по ссылке на якорь спозиционируется так, что названия не будет видно.
Дальше идет название параграфа в нотации Эгеи, после него стоит маленькая ссылочка на этот же якорь в виде — о боже, как оригинально — якоря. Это для того, чтобы ссылку можно было скопировать руками, в первую очередь мне самому. Я не хочу отдельно от блога еще и индекс якорей вести.

В посте это выглядит так:

Что нам для этого надо:

  1. Иметь название параграфа
  2. Придумать короткий якорь на латинице под этот параграф
  3. Засунуть в пост код якоря
  4. Засунуть в пост ссылку на якорь — после названия параграфа

Сначала я начал прописывать в старых постах это дело руками, но быстро сдался — долго и муторно. Захотелось автоматизации.

Версия первая, через гуглдокс ⚓︎

В поисках автоматизации надо сначала сходить в эксель — не ошибешься 🆒💪. Поэтому — гуглдокс.

Я накидал таблицу примерно такого вида:

Лежит тут

В таблицу надо вставить:

  1. Ссылку на пост
  2. Названия параграфов

Ссылку на пост берем из браузера, формула меняет признак драфта «?go=drafts» на признак опубликованного поста «?go=all». Названия параграфа я беру с помощью сервиса https://regex101.com/ — копирую туда весь пост, прописываю правило «^# .*» (находит все символы в строке, начинающейся с одного диеза, выделяет их), забираю как plain text из результатов.
После этого в столбце С генерируется автоназвание якорей — если лень делать кастомные. Там адская формула, переводящая с русского на английский, потом обрезающая пробелы, потом обрезающая все, кроме первых 7 символов.
В колонку D можно вписать кастомный якорь, по дефолту эта колонка просто ссылается на C. Дальше идут столбцы, собирающие отдельные части итоговой конструкции «закладка на якорь — название параграфа — ссылка на якорь». Сама конструкция лежит в столбце G, зелененькая такая 🐸

Дальше надо скопипастить оттуда значения и вставить в пост вместо названий параграфов, руками.

Адские костыли: в ячейке E2 — кавычки, они нужны для правильного оформления ссылок, но их хрен пропишешь в формуле корректно, т. к. они являются частью синтаксиса формулы, приходится ссылаться на ячейку.
В ячейке G2 лежит перенос строки — он нужен, чтобы перенести параграф после якоря на строчку вниз.

Он-то мою автоматизацию и погубил. Итоговый результат из гугл-таблиц копипастится вот так:

"<a name=""Music""></a>
# Музыка месяца <a href =""https://artemushanov.ru/?go=all/chto-ya-uznal-v-iyule-2021/#Music""> ⚓︎</a>"

С кучей лишних кавычек!

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

Так себе получилось:

  • Конструкция собирается неверная, нужно руками добавлять перенос
  • Вставлять параграфы нужно тоже руками, долго и муторно

Тут я решил, что надо пойти другим путем.

Регулярные выражения 🔞 ⚓︎

Уж если regex101 способен найти параграфы, то он наверняка и чего побольше может?

Может.
Проковырявшись с ним около часа, я смог решить задачу без гуглдоков.

Что надо:

  1. Пишем пост, параграфы форматируем так: «# Название &anchor», где anchor — имя якоря на латинице
  2. Текст поста (весь) — копируем из Эгеи в режиме редактирования
  3. Ссылку на пост — берем из браузера

Идем в regexp101 и делаем так:

  1. В поле Regular Expression пишем следующее, без кавычек: «(# .*) &(.*)»
  2. В поле Test String вставляем весь текст поста из редактора
  3. Слева внизу в блоке Function выбираем Substitution (замена)
  4. В появившемся поле Substitution пишем:
<a name="$2"></a>\n$1 <a href="link/#$2"> ⚓︎</a>

заменяем «link» ссылкой на пост. Руками в ссылке меняем «?go=drafts» на «?go=all», не забываем стереть «/edit/».

  1. Копируем текст из поля ниже, вставляем в свой пост.

Теперь у нас названия параграфов с якорями.

Мою задачу решило.

Черновик поста я обычно готовлю в Drafts (писал про него тут). Один из огромных плюсов программы — кастомизация функций. Какой-то добрый человек написал скрипт для доступа к regexp101, можно прямо в нем прописать ссылку к своему темплейту на сайте и делать автозамены в драфтсе.

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

Поделиться
Отправить
Запинить
 69   18 дн   post   автоматизация   хтмл   эгея