Вход в тему как плагин для тегов

Привет! Я работаю над своим первым плагином Discourse.

Идея

Мы хотим немного изменить поведение ссылок на теги: при клике на тег в любом месте Discourse вместо перехода сразу к нему должно появляться два варианта — обычная ссылка на тег (forum.com/tag/tag-name) или связанная (внешняя) страница на наш выбор (something.site.com/some-name). Этот вариант должен отображаться только для тегов, присутствующих в списке.

Список будет представлен в виде массива Ruby хешей (или JSON), и его можно либо добавить непосредственно в плагин, либо сделать доступным по URL. (Первый вариант кажется более ресурсоэффективным — мы можем просто обновлять список и пересобирать плагин при необходимости, так как обновления будут происходить нечасто.)

# Массив Ruby хешей
array = [
  {forum_tag: "discourse", external_slug: "discourse"},
  {forum_tag: "dc", external_slug: "discourse"},
  {forum_tag: "xenforo", external_slug: "xenforo"},
  {forum_tag: "xf", external_slug: "xenforo"}
]

# ИЛИ

array.to_json
=\u003e "[{\"forum_tag\":\"discourse\",\"external_slug\":\"discourse\"},{\"forum_tag\":\"dc\",\"external_slug\":\"discourse\"},{\"forum_tag\":\"xenforo\",\"external_slug\":\"xenforo\"},{\"forum_tag\":\"xf\",\"external_slug\":\"xenforo\"}]"

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

Мои мысли

Я нашел в API Discourse два метода, связанных с тегами:

  1. addTagsHtmlCallback — в этом случае мне нужно было бы установить topic.tags в пустой массив сразу после присвоения его значения другой переменной. Таким образом я предотвращу рендеринг тегов и смогу написать свой собственный код.

  2. replaceTagRenderer — второй метод позволяет изменить рендеринг тегов, что выглядит менее «костыльно», чем первый метод.

Однако обратите внимание, что в обоих случаях мне нужно возвращать строку raw. Насколько я понял, я не могу вручную написать и скомпилировать шаблон Ember. Конечно, я могу просто отрендерить пользовательские ссылки и написать простую функцию на jQuery, поместив её в корень app/assets/javascripts, но это совершенно иное решение по сравнению с кодом Discourse.

Я на правильном пути? Любая помощь будет очень кстати.

Для всех, кто заинтересован, с радостью сообщаю о первом выпуске моего плагина!

С нетерпением жду ваших отзывов!

Всем заинтересованным рекомендую ознакомиться с последними изменениями, особенно:

Хорошего… дня (?) всем!

:smiling_imp:

Отлично, @Eiji!


Мы надеемся использовать этот плагин на Devtalk… Если у кого-то есть опыт работы с плагинами Discourse, не могли бы вы взглянуть и посмотреть, можно ли что-то улучшить? Будем признательны :blush: