Novembre 2023 - rifattorizzazione delle route Discovery: come influenzerà il mio tema/plugin?

Nell’ambito del nostro progetto per l’aggiornamento di Discourse alla versione più recente di Ember, abbiamo lavorato a un significativo refactoring delle route di Discovery (alias la “lista degli argomenti”).

Questo argomento è rivolto agli sviluppatori di temi/plugin e mira a elencare i tipi di attività di temi/plugin che potrebbero essere interessati dal refactoring.

Contesto

Questo refactoring è necessario perché Ember moderno non supporta più i “named outlet” come {{outlet \"topics\"}}, che utilizzavamo ampiamente in queste route. Essenzialmente, tutti i controller/template precedentemente renderizzati in named outlet sono stati convertiti in Componenti.

Lungo il percorso, abbiamo colto l’occasione per modernizzare e consolidare il codice pertinente (ad esempio, tutti i tipi di route di discovery ora condividono lo stesso controller e template).

L’implementazione della modifica nel core non è ancora finalizzata, ma un lavoro in corso può essere trovato su questo branch. Non abbiamo una data specifica per il merge, ma prevediamo che avvenga nelle prossime settimane. Se hai domande o dubbi, faccelo sapere!

Quali attività di temi/plugin sono interessate?

Questo refactoring interessa prevalentemente il livello del “controller”. Le route sono in gran parte invariate e tutto ciò che va dal componente <TopicList /> in giù non è interessato.

Ci aspettiamo che l’unico impatto sia sui temi/plugin che accedono in profondità al codice del core (ad esempio, tramite modifyClass e override di template). Le API e gli outlet definiti non sono interessati.

Override di Template

:shushing_face: Questi template sono stati refattorizzati in componenti. Qualsiasi override esistente smetterà di funzionare silenziosamente

  • navigation/categories
  • navigation/category
  • navigation/default
  • navigation/filter
  • discovery/topics

:boom: Questi template sono stati pesantemente refattorizzati. Qualsiasi override di template esistente probabilmente causerà errori catastrofici sul sito.

  • discovery
  • tag/show
  • user-topics-list
  • user/messages
  • discovery/categories
  • components/basic-topic-list
  • components/d-navigation

Tecnicamente, è possibile sovrascrivere i nuovi template introdotti da questa modifica. Tuttavia, gli override di template non sono raccomandati e sono in uscita.

Pertanto, tutti gli override di template dovrebbero essere rimossi e sostituiti con API di estensione più robuste (ad esempio, plugin outlets). Se stai facendo qualcosa che non sembra possibile con i punti di estensione esistenti di Discourse, faccelo sapere!

Chiamate a modifyClass e lookup()

:wastebasket: Queste classi non esistono più. modifyClass smetterà di funzionare silenziosamente. Le ricerche restituiranno null (e quindi potrebbero causare errori). Nei casi più diffusi, abbiamo introdotto degli shim per la retrocompatibilità (vedi note a piè di pagina).

  • controller:discovery
  • controller:discovery/topics[1]
  • controller:discovery-sortable (-> controller:discovery/list)
  • controller:discovery-filter (-> controller:discovery/filter)
  • controller:navigation/categories
  • controller:navigation/category [2]
  • controller:navigation/default
  • controller:tag/show [3]
  • controller:discovery.* (-> controller:discovery/list)

:technologist: Queste classi hanno subito un refactoring significativo. Le chiamate a modifyClass e lookup potrebbero richiedere un refactoring:

  • route/discovery
  • route/discovery.*
  • route/tag-show

Route

:motorway: I nomi delle route (cioè router.currentRouteName) non sono cambiati

:clipboard: Gli hook model() delle route di Discovery (cioè router.currentRoute.attributes) sono per lo più invariati.

Plugin Outlets

:electric_plug: Tutti i plugin outlets e i loro argomenti non sono cambiati.

HTML / CSS

:art: La struttura HTML e le classi sono in gran parte non interessate.


  1. L’accesso in sola lettura alla proprietà ‘model’ è stato sottoposto a shim con un avviso di deprecazione ↩︎

  2. L’accesso in sola lettura alla proprietà ‘category’ è stato sottoposto a shim con un avviso di deprecazione ↩︎

  3. L’accesso in sola lettura alla proprietà ‘tag’ è stato sottoposto a shim con un avviso di deprecazione ↩︎

16 Mi Piace

Espanderemo il test di questa modifica in tutti i nostri hosting questa settimana, con l’obiettivo di unirci a main/tests-passed all’inizio della prossima settimana (6 novembre).

6 Mi Piace

Questa modifica è ora attiva in main/tests-passed

3 Mi Piace