Entrada de tema como plugin para etiquetas

Hola, estoy trabajando en mi primer plugin de Discourse.

La idea

Queremos modificar ligeramente el comportamiento de los enlaces de las etiquetas. Cuando se hace clic en una etiqueta en cualquier lugar de Discourse, en lugar de ir directamente a ella, se mostrarán dos opciones: la URL normal de la etiqueta (forum.com/tag/tag-name) o una página externa relacionada de nuestra elección (something.site.com/some-name). Esta opción solo se mostrará para las etiquetas que estén en la lista.

La lista estará en forma de un array de hashes de Ruby (o JSON) y se puede añadir directamente al plugin o estar disponible en una URL. (La primera opción parece ser más eficiente en recursos: solo necesitamos actualizar la lista y recompilar el plugin cuando haya cambios, ya que las actualizaciones no serán muy frecuentes.)

# Array de hashes de 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"}
]

# O

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

Básicamente, queremos que la opción se muestre como cuando haces clic en el número de replies en la página principal del foro:

Mis reflexiones

Encontré 2 métodos en la API de Discourse relacionados con las etiquetas:

  1. addTagsHtmlCallback: En este caso, tendría que establecer topic.tags como un array vacío inmediatamente después de asignar su valor a otra variable. De esta manera, evitaría la renderización de tags y podría escribir mi propio código.

  2. replaceTagRenderer: El segundo método me permite cambiar la renderización de tag, lo cual no parece tan truculento como el primer método.

Sin embargo, en ambos casos necesito devolver una cadena raw. Por lo que he investigado, no puedo escribir y compilar una plantilla de Ember manualmente. Obviamente, podría simplemente renderizar enlaces personalizados y escribir una función sencilla con jQuery colocándola en la raíz de app/assets/javascripts, pero esa sería una solución muy diferente en comparación con el código de Discourse.

¿Estoy en el buen camino? Cualquier ayuda será muy apreciada.

5 Me gusta

Para cualquiera que esté interesado, me complace anunciar el primer lanzamiento de mi complemento:

¡Espero sus comentarios!

3 Me gusta

Para todos los interesados, recomiendo revisar los últimos cambios, especialmente:

¡Buen… día (?) para todos!

:smiling_imp:

1 me gusta

¡Bien hecho, @Eiji!


Esperamos usar este plugin en Devtalk… Si alguien tiene experiencia con plugins de Discourse, ¿podrías echar un vistazo para ver si se pueden hacer mejoras? Lo agradeceríamos mucho :blush:

1 me gusta