Ingresso argomento come plugin per i tag

Ciao, sto lavorando al mio primo plugin per Discourse.

L’idea

Vogliamo modificare leggermente il comportamento dei collegamenti ai tag: quando si clicca su un tag in qualsiasi punto di Discourse, invece di reindirizzare direttamente ad esso, vengono mostrate due opzioni: l’URL normale del tag (forum.com/tag/nome-tag) o una pagina esterna correlata di nostra scelta (something.site.com/some-name). Questa opzione dovrebbe apparire solo per i tag presenti nell’elenco.

L’elenco sarà sotto forma di un array Ruby di hash (o JSON) e può essere aggiunto direttamente al plugin o reso disponibile tramite un URL. (La prima opzione sembra più efficiente in termini di risorse: possiamo aggiornare l’elenco e ricostruire il plugin quando necessario, dato che gli aggiornamenti non saranno frequenti.)

# Array Ruby di hash
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"}
]

# OPPURE

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\"}]"

In pratica, vogliamo che l’opzione appaia come quando si clicca sul numero di risposte nella pagina principale del forum:

Le mie riflessioni

Ho trovato 2 metodi nell’API di Discourse relativi ai tag:

  1. addTagsHtmlCallback - In questo caso, dovrei impostare topic.tags come array vuoto subito dopo aver assegnato il suo valore a un’altra variabile. In questo modo impedirei il rendering dei tag e potrei scrivere il mio codice personalizzato.

  2. replaceTagRenderer - Il secondo metodo mi permette di modificare il rendering del tag, il che sembra meno “hacky” rispetto al primo metodo.

Tuttavia, in entrambi i casi devo restituire una stringa raw. Da quanto ho scoperto, non posso scrivere e compilare manualmente un template Ember. Ovviamente potrei semplicemente renderizzare collegamenti personalizzati e scrivere una semplice funzione con jQuery inserendola nella radice di app/assets/javascripts, ma si tratta di una soluzione molto diversa rispetto al codice di Discourse.

Sto seguendo la strada giusta? Qualsiasi aiuto sarà molto apprezzato.

Per chiunque sia interessato, sono felice di annunciare la prima release del mio plugin!

Non vedo l’ora di ricevere i vostri feedback!

Per tutti coloro che sono interessati, consiglio di controllare le ultime modifiche, in particolare:

Buon… giorno (?) a tutti!

:smiling_imp:

Bene fatto @Eiji!


Speriamo di utilizzare questo plugin su Devtalk… per chiunque abbia esperienza con i plugin di Discourse, potreste dare un’occhiata per vedere se è possibile apportare qualche miglioramento? Lo apprezzeremmo molto :blush: