Создан  demius PM 4 года назад; Обновил  demius PM год и 4 месяца назад

Система позволяющая легко вставлять ссылки на любые страницы сайта, даже еще не существующие, но возможные (с целью побудить их создание)

Ядро и минимальная функциональность.

Собственный обработчик тега ссылки, если подпадает под один из определенных форматов превращается в полноценную ссылку на указанную страницы.

формат ссылок

  • Краткий *уже внедренный сейчас формат ссылок на задачи и документы как самые часто используемые сущности
  • [abc-35] - ссылка на задачу
  • [abc#28] - ссылка на документ
  • Полный позволяет дать ссылку на что угодно, на что можно сослаться - [<type>:<project>:<id>]
  • [p:abc] - ссылка на проект, тут нет <id>, так как проект и так идентифицирует себя
  • [t:abc:35] - ссылка на задачу на самом деле избыточна, просто для унификации
  • [d:abc:28] - ссылка на документ
  • [r:abc:12] - ссылка на релиз
  • [b:abc:8] - ссылка на доску

Полный формат не вытесянет краткий, а существует параллельно, скорее для автомтаически…

Система позволяющая легко вставлять ссылки на любые страницы сайта, даже еще не существующие, но возможные (с целью побудить их создание)

Ядро и минимальная функциональность.

Собственный обработчик тега ссылки, если подпадает под один из определенных форматов превращается в полноценную ссылку на указанную страницы.

формат ссылок

  • Краткий *уже внедренный сейчас формат ссылок на задачи и документы как самые часто используемые сущности
  • [abc-35] - ссылка на задачу
  • [abc#28] - ссылка на документ
  • Полный позволяет дать ссылку на что угодно, на что можно сослаться - [<type>:<project>:<id>]
  • [p:abc] - ссылка на проект, тут нет <id>, так как проект и так идентифицирует себя
  • [t:abc:35] - ссылка на задачу на самом деле избыточна, просто для унификации
  • [d:abc:28] - ссылка на документ
  • [r:abc:12] - ссылка на релиз
  • [b:abc:8] - ссылка на доску

Полный формат не вытесянет краткий, а существует параллельно, скорее для автомтаически добавленных ссылок ил ссылок на особые сущности, вроде релизов

Статистика ссылок

Каждая валидная (даже не существующая) ссылка записывается в кеш, где помечается как рабочая или нет. При отрисовке в зависимости от этого она окрашивается в синий или красный цвет и ведет или на запрошенный ресурс, или форму создания.

  • [tndt-4] - реальная задача, выведется как < href="tasks.demius.ru/p/tndt-4" alt="Система справочников и справочник тип задачи">tndt-4</a>
  • [tndt-65535] - несуществующая задача, выведется сообщение об ошибке
  • [tndt#dokumenty] - реальный документ, выведется как < href="tasks.demius.ru/p/tndt/doc/dokumenty" alt="Документы">tndt#2</a>
  • [tndt#bla-bla-bla] - несуществующий документ, выведется как < href="tasks.demius.ru/p/tndt/doc/create/bla-bla-bla" class="not-created" alt="bla-bla-bla">bla-bla-bla</a>. Путь create/bla-bla-bla сразу заполнит slug и заголовок (но позволит его отредактировать (при этом надо будет ретроспективно поправить и ссылку)
  • [tndt#Система гипертекста для wiki] нормализует тег до [tndt#sistema-giperteksta-dlia-wiki] и выведет корректную ссылку

В сервисе ссылок будет доступен как прямой путь, по тегу найти адрес реальной страницы, так и обратный по странице можно найти все места, где на неё ссылаются. Когда страница будет создана, все эти ссылки посинеют.

Сервис так же будет предоставлять хендлерам из Статистика проекта информацию о количестве связей, количестве страниц на которые никто не ссылается.

Сервис ссылок в будущем будет предоставлять информацию для систем генерации содержаний. Для категорий и тегов.

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

Стоит расширить такой тег аналогично вики-ссылки, позволяя отображать его не так, как он записан, например смотри в системе [tndt#documenty|документации]

Архитектура

В БД записывается объект ссылка, ключ её описание tndt-2, tndt#5 tndt#long_caption В объекте хранится

  • есть ли такой документ.
  • Как найти его по ключу в БД.
  • Как его создать если его нет
  • Какие для его просмотра/создания требуются права

обратная сторона, документ/задача должен знать о всех ссылках на него, чтобы иметь возможность их обновить

Комментарии могут оставлять только авторизованные пользователи
 demius 2 года назад

В рамках tndt-9 мы уже сделали отрисовку ссылки из тега. она даже подставляет во всплывашку заголовок задачи или докумнета, помечает красным несуществующие, стилизует закрытые и архивные. Для документов работает с номерами и слагами. Для несуществующих документов ведет на создание документа, для несуществующих задач на список задач. ничего туда не проставляет, и сама после создания задачи не отредактируется, ибо никакой бд wiki-связей еще нет.

 demius 2 года назад
  • https://commonmark.thephpleague.com/2.4/extensions/inlines-only/ минимальный набор тегов для комментов (правда лишит коменты списков, как этот, но можно расширить его)
  • https://commonmark.thephpleague.com/2.4/extensions/mentions/ тоже не нужное само по себе, но полезное посмотреть как делаются кастомные линки (впрочем сделать тег @demius как ссылку на пользователя - почему бы и нет
  • https://commonmark.thephpleague.com/2.4/extensions/task-lists/ интересная затея
 demius 2 года назад
  • https://commonmark.thephpleague.com/2.4/extensions/external-links/
  • https://commonmark.thephpleague.com/2.4/extensions/front-matter/ - само расширение может мне и не нужно, но это пример того, как можно из md-текста вытягивать какие-нибудь управляющие теги, вроде {{category:}} {{оглавление}} и т.д. когда будем их придумывать
  • https://commonmark.thephpleague.com/2.4/extensions/heading-permalinks/ содержание самого документа из заголовков документа. (не факт, что используем как есть, не всем документам нужно содержание), но использовать стоит
  • https://commonmark.thephpleague.com/2.4/extensions/table-of-contents/ еще одно расширение про содержание страницы
 demius 2 года назад
  • https://commonmark.thephpleague.com/2.4/configuration/
  • https://github.com/OWS/commonmark-sup-sub-extensions добавляют элемент 10^2^ (трактуется как 10<sup>2</sup>)
  • https://commonmark.thephpleague.com/2.4/extensions/overview/ здесь и другие расширения, которые нам могут пригодиться
 demius 2 года назад

вобще вопрос как интерпретируются ссылки зависит от используемого парсера. Сейчас twig-функция markdown_to_html перебирает несколько парсеров, и использует вероятно Parsedown. Он конечно самый быстрый, но работает на регулярках, что сильно усложняет добавление новой функциональности, а ведь link это не единственное, что я хочу добавлять. Так что думаю сначала надо

  • поменять либу на https://commonmark.thephpleague.com/
  • посмотреть как там рендерятся ссылки и заного выбрать формат между [], [[]], и
  • потому уже приводить наши к указанным
 demius 3 года назад

Судя по всему ![]() ожидает, что в () будет ссылка на изображение, а []() что в () будет ссылка. Так что предлагаемый синтаксис это [](tndt-114) при этом наш рендерер должен сам подставить что-то на место []

 demius 3 года назад

Это большой довод в пользу ссылок вида [](prj-123) либо ![](prj-123) (Можно и [та самая задача](prj-123)

 demius 3 года назад

Кстати третий путь уже работает в нашем диалекте md, AnotherText

 demius 3 года назад

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

  • С самого начала мы использовали формат [[prj-123]]
    • достаточно выделющийся, и сложно представить как он встретится непреднамерено
  • В какой-то момент, наверно под влиянием собственных тегов md мы перешли на [prj-123]
    • он у нас уже повсюду, и его надо будет парсить и выправлять.
  • github, и другие распространенные md-диалекты предполагают формат [описание](link)
    • Позволит прозрачно и единообразно использовать с внешними ссылками
    • Так на том же github ужа вставляются нестандартные ссылки, например ![Gitea](https://img.shields.io/badge/Gitea-34495E?style=for-the-badge&logo=gitea&logoColor=5D9425) Gitea
 demius 3 года назад

tndt-114 учимся отрисовывать свои теги, и отрисовываем link, просто как ссылку без собствено связи.

На следующем этапе уже будем прикручивать БД с метаинформации по ссылке