DocHub icon indicating copy to clipboard operation
DocHub copied to clipboard

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

Open villanella opened this issue 1 year ago • 1 comments

Не работают якорные ссылки на внешнюю страницу.
Ожидаемое поведение - якорные ссылки работают в стандартном для 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:

components:
  schemas:
    User:
      $ref: './external-schemas/user.yaml#/User'  # Относительный путь

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

villanella avatar May 24 '24 09:05 villanella

@rpiontik Ретест самого критичного примера 4 на DocHub 3.14 до сих пор неуспешен.

Любые якорные ссылки на внешний (т.е. в не внутри одной страницы) Докхаб-документ - на markdown, на yaml-сущность, на openapi-документ - не работают для переходов.

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

Так выглядят правильные ссылки при наведении курсора: http://localhost:8080/entities/docs/blank?dh-doc-id=test.doc#test.anchor - якорная ссылка на объект в документе http://localhost:8080/entities/seaf.change.adr/blank?seaf-adr-id=test.adr#test.anchor - якорная ссылка на объект в отрендеренной сущности http://localhost:8080/entities/docs/blank?dh-doc-id=test.openapi#/TestTable/addTestTable - якорная ссылка на метод OpenApi

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

villanella avatar Jun 19 '25 08:06 villanella