Добавить пользовательский linkifier

Внимание

Эта функция доступна только владельцам и администраторам организации.

Linkifier (линкификатор) упрощает ссылки на задачи/тикеты во внешних трекерах, например GitHub, Salesforce, Zendesk и т.д. Например, вы можете добавить linkifier, который автоматически превращает #2468 в ссылку на ssues/2468.

Если шаблон встречается в теме, Zulip добавит кнопку Открыть () справа от темы в верхней панели получателя, ведущую на соответствующий URL.

Если у вас возникнут сложности с настройкой нужных linkifier, пожалуйста, напишите в поддержку Zulip и опишите, что вы хотите сделать.

Добавить linkifier

  1. Перейдите в Шаблоны ссылок.

  2. В разделе Добавить новый linkifier укажите Шаблон (Pattern) и Шаблон URL (URL template).

  3. Нажмите Добавить linkifier.

Редактировать linkifier

  1. Перейдите в Шаблоны ссылок.

  2. В колонке Действия нажмите значок редактирования () у нужного linkifier.

  3. Измените параметры и нажмите Сохранить изменения.

Удалить linkifier

  1. Перейдите в Шаблоны ссылок.

  2. В колонке Действия нажмите значок удаления () у нужного linkifier.

  3. Подтвердите действие, нажав Подтвердить.

Изменить порядок linkifier

Linkifier обрабатываются по порядку и не применяются к тексту, который уже превращен в ссылку. Поэтому вы можете выбрать, какие linkifier должны иметь приоритет, если подходят сразу несколько. Примеры см. в разделе перекрывающихся шаблонов.

  1. Перейдите в Шаблоны ссылок.

  2. В колонке Шаблон (Pattern) в списке Linkifier перетащите элемент за вертикальные точки, чтобы изменить порядок.

Типовые шаблоны linkifier

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

Ссылка на задачу или тикет

Шаблон превращает # и номер в ссылку. Часто используется для ссылок на задачи во внешних трекерах, например GitHub, Salesforce, Zendesk и т.д.

  • Шаблон (Pattern): #(?P<id>[0-9]+)
  • Шаблон URL (URL template): ssues/{id}
  • Исходный текст: #2468
  • Автоматически превращается в: ssues/2468

Ссылки на задачи в нескольких проектах или приложениях

Если вам нужны linkifier для нескольких проектов, удобно расширить формат #2468 вариантами с префиксом проекта. Например, сообщество разработчиков Zulip использует #M2468 для задач в репозитории мобильного приложения Zulip, #D2468 для задач в репозитории десктопного приложения и т.д.

  • Шаблон (Pattern): #F(?P<id>[0-9]+)
  • Шаблон URL (URL template): ssues/{id}
  • Исходный текст: #F245
  • Автоматически превращается в: ssues/245

Ссылки на задачи в нескольких репозиториях

Для организаций, которые часто ссылаются на разные GitHub-репозитории, этот шаблон превращает org/repo#ID в ссылку на задачу или pull request.

  • Шаблон (Pattern): (?P<org>[a-zA-Z0-9_-]+)/(?P<repo>[a-zA-Z0-9_-]+)#(?P<id>[0-9]+)
  • Шаблон URL (URL template): ssues/{id}
  • Исходный текст: zulip/zulip#2468
  • Автоматически превращается в: ssues/2468

Ссылка на шестнадцатеричный номер задачи/тикета

Следующий шаблон превращает в ссылку строку шестнадцатеричных символов длиной от 7 до 40, например идентификатор коммита Git.

  • Шаблон (Pattern): (?P<id>[0-9a-f]{7,40})
  • Шаблон URL (URL template): `
  • Исходный текст: abdc123
  • Автоматически превращается в: `

Расширенные шаблоны linkifier

Linkifier это гибкий механизм, с помощью которого можно описывать правила для самых разных случаев. Шаблоны linkifier это регулярные выражения для движка re2.

Для генерации ссылок linkifier используют URL-шаблоны, совместимые со стандартом RFC 6570. В этих шаблонах есть несколько типов выражений. Тип по умолчанию ({var}) кодирует специальные символы вроде / и &, что подходит для подавляющего большинства linkifier. Более сложные типы выражений полезны для редких случаев, например с опциональными query-параметрами. Например:

  • Используйте {+var}, если вы хотите, чтобы символы-разделители URL не кодировались.
  • Используйте {?var} и {&var} для переменных в query-параметрах URL.
  • Используйте {#var}, чтобы формировать #-фрагменты в URL.

В спецификации URL-шаблонов есть краткие примеры и подробные примеры, объясняющие точное поведение URL-шаблонов.

Ссылки на страницы документации

Этот пример это сокращение для ссылок на страницы документации Zulip на ReadTheDocs.

  • Шаблон (Pattern): RTD/(?P<article>[a-zA-Z0-9_/.#-]+)
  • Шаблон URL (URL template): s.io/en/latest/{+article}
  • Исходный текст: RTD/overview/changelog.html
  • Автоматически превращается в: s.io/en/latest/overview/changelog.html

Совет

В этом шаблоне используется тип выражения {+var}. Если бы использовался тип по умолчанию ({article}), то / между overview и changelog был бы ошибочно URL-encoded.

Ссылки на результаты поиска Google

Этот пример позволяет быстро вставлять ссылки на поиск в Google.

  • Шаблон (Pattern): google:(?P<q>\w+)?
  • Шаблон URL (URL template): search{?q}
  • Исходный текст: google:foo или google:
  • Автоматически превращается в: search?q=foo или search

Совет

В этом шаблоне используется тип выражения {?var}. С типом по умолчанию ({q}) невозможно было бы включать ? в URL только при наличии опциональной переменной q.

Перекрывающиеся шаблоны

В этом примере общий linkifier настроен так, чтобы ссылки на репозитории GitHub вида zulip-desktop#123 вели на задачи в этом репозитории внутри GitHub- организации zulip. Более специфичный linkifier переопределяет общий для конкретного репозитория интереса (django/django), который находится в другой организации.

  • Специфичный linkifier (расположен перед общим)
    • Шаблон (Pattern): django#(?P<id>[0-9]+)
    • Шаблон URL (URL template): `
  • Общий linkifier
    • Шаблон (Pattern): (?P<repo>[a-zA-Z0-9_-]+)#(?P<id>[0-9]+)
    • Шаблон URL (URL template): `
  • Пример, подходящий под оба linkifier (приоритет у специфичного):
    • Исходный текст: django#123
    • Автоматически превращается в: `
  • Пример, подходящий только под общий linkifier:
    • Исходный текст: zulip-desktop#123
    • Автоматически превращается в: sktop/pull/123

Совет

В этом наборе шаблонов есть перекрывающиеся регулярные выражения. Обратите внимание, что общий шаблон будет совпадать и с lorem#123. Специфичный шаблон будет иметь приоритет только если он расположен выше общего. Это можно настроить, перетаскивая существующие linkifier в нужный порядок. Новые linkifier по умолчанию добавляются в конец списка.