RabotaRu / DocHub

Управление архитектурой как кодом
https://dochub.info/
Apache License 2.0
272 stars 66 forks source link

[Bug] Не работают якорные ссылки на внешний документ/ метод Swagger/ markdown-файл #539

Open villanella opened 5 months ago

villanella commented 5 months ago

Не работают якорные ссылки на внешнюю страницу. Ожидаемое поведение - якорные ссылки должны работать в стандартном для markdown формате, аналогично тому, как они работают в Gitlab - переадресуют на нужный раздел внешней страницы, указанный в виде относительного пути к md-файлу страницы с названия раздела (или метки-anchor) после решетки. Аналогично должны работать якорные ссылки на DocHub-документ.

Пример 1 - относительная ссылка на markdown-файл + якорь: [action flow](verify-backups-action-flow.md#processing) Формируется неправильная http-ссылка: [http://localhost:8080/entities/docs/verify-backups-action-flow.md-](http://10.92.41.232:8080/entities/docs/verify-backups-action-flow.md%60-) ищет файл в корне, а не относительно того пути, откуда была дана, поэтому файл не найден, и выдается ошибка:

Неизвестный тип документа [unknown]
 Path: /entities/docs/presentations/verify-backups-action-flow.md Params: {}
 Profile:           {
  "$base": "/entities/docs/presentations/verify-backups-action-flow.md"}

Без якоря ссылка формируется нормально: http://localhost:3030/entities/docs/blank?dh-doc-id=ad.adbm.binary_backup.backup_concept&redirect=backend%3A%2F%2F81d89219098253dba512f4989163b38c%2Fcomponents%2Fcore%2Factions%2Fbinary%2Fbackup%2Fverify-backups-action-flow.md

Пример 2 - относительная ссылка на .md с возвратами + якорь: [Start action flow](../../common/common-actions.md#prepare-action-flow) приводит к нерабочей http-ссылке - http://10.92.41.232:8080/common/common-actions.md#prepare-action-flow Если убрать якорь (решетку и все, что после), то ссылка формируется нормально: http://localhost:3030/entities/docs/blank?dh-doc-id=ad.adbm.binary_backup.backup_concept&redirect=backend%3A%2F%2F81d89219098253dba512f4989163b38c%2Fcomponents%2Fcore%2Factions%2Fbinary%2Fbackup%2F%25E2%2586%2590%2F%25E2%2586%2590%2Fcommon%2Fcommon-actions.md

Пример 3 - якорь + id DocHub-документа Ссылка на id документа - [Test](blank?dh-doc-id=test.doc#test-anchor) - якорь отрезается, но ссылка, в отличие от предыдудщих примеров, ведет на нужную страницу, только без учета якоря - в v3.13.2 уже такая ссылка не работает, ни с якорем, ни без, формат неактуален.

Пример 4 - якорная ссылка на DocHub-документ [test](/entities/docs/blank?dh-doc-id=my_doc#anchor) - такая ссылка изначально отображается правильно (если навести курсор, URI корректный - http://localhost:8080/entities/docs/blank?dh-doc-id=my_doc#anchor), но при клике якорь отрезается и ссылка ведет на начало указанной страницы.

В консоли видно, что ссылка парсится как id=my_doc&path=/docs/my_doc, то есть без якоря. В коде такая ссылка формируется здесь https://github.com/RabotaRu/DocHub/blob/a3b6de6a1b4754a1bda3a4751d7dc183aa297ff2/src/frontend/components/Docs/DocMixin.js#L169

Пример 5 - якорная ссылка на DocHub-документ, другой формат [test](@document/my_doc#anchor) - не работает ни с якорем ни без в v3.13.2.

Пример 6 - Ссылка на якорь-ключевое слово Якоря в формате ![test](@anchor/test), проставленные на целевой странице тоже не работают, если ссылка на них вида [test](file.md#test) или [test](/entities/docs/blank?dh-doc-id=my_doc#test) - дана с внешней страницы.

Пример 7 - ссылка на метод Swagger Нет возможности дать ссылку на определенный метод OpenApi/Swagger.

Внутри одной страницы якорные ссылки работают.