Impossible de remplacer topic-list-item.raw.hbs / topic-list-item.hbr sur mobile

Bonjour à tous,

Je travaille sur un thème pour personnaliser plusieurs aspects de Discourse par défaut. Dans cette optique, l’un des éléments que je dois modifier est topic-list-item, qui semble assez simple. J’ajoute dans mon thème un fichier situé au chemin javascripts/discourse/templates/components/topic-list-item.hbs et je peux y insérer mon code. Cependant, c’est là que les questions commencent à émerger.

Il existe une méthode dans le composant pour ce template appelée renderTopicListItem, qui définit une propriété topicListItemContents rendue par défaut. Vérifiez :

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/components/topic-list-item.hbs

La première question est POURQUOI ? Pourquoi devons-nous faire cela ? Pourquoi ne pas simplement utiliser le code Handlebars comme d’habitude ?

Afin de ne pas trop interférer avec le code principal, j’ai décidé de laisser topic-list-item tel quel et de remplacer topic-list-item.raw.hbs dans mon thème, ce qui fonctionne sans problème.

Néanmoins, je m’attendais à ce qu’ajouter un fichier comme javascripts/discourse/templates/mobile/list/topic-list-item.raw.hbs dans mon thème remplace la vue mobile, mais ce n’est pas le cas.

La méthode findRawTemplate renvoie toujours le template mobile par défaut de Discourse, qui contient :

Même en effectuant une édition manuelle dans mon projet Discourse local, je ne parviens pas à mettre à jour la version mobile avec mes modifications.

J’espère que l’explication est claire et que quelqu’un a des connaissances à ce sujet. Cela semble vraiment cassé pour le moment, et peut-être devrions-nous le réparer SI c’est vraiment cassé (je peux le faire si je comprends un peu mieux ce qui se passe).

En attendant, je continuerai à chercher une réponse moi-même et je partagerai toute nouvelle information. Ci-dessous, une petite capture GIF de ce que j’ai dans mon environnement local.

http://g.recordit.co/AtOJlltJ8o

MISE À JOUR : J’ai également renommé raw en .hbr suite à un commit récent qui a modifié les fichiers, mais je n’arrive toujours pas à faire fonctionner cela.

Je viens de le tester et je constate le même problème… Je ne peux absolument pas remplacer ce modèle. Cela semble s’être produit au cours des dernières 24 à 48 heures. Cela pourrait-il être lié au passage à hbr @markvanlan ?

Lorsque j’ai créé ce sujet, mon Discourse local datait du 17 janvier, si je ne me trompe pas. Avec cela dit, j’ai rencontré ce problème avec cette version et, après la mise à jour avec les dernières modifications et le renommage de raw.hbs en hbr, je rencontre toujours les mêmes problèmes.

Pour l’instant, ce que j’ai fait, c’est personnaliser depuis javascripts/discourse/templates/components/topic-list-item.hbs, mais idéalement, les modèles raw devraient se comporter comme les autres modèles (en termes de substitution et de personnalisation).

@awesomerobot si vous vérifiez le commit juste avant le changement hbr, est-ce que ça fonctionne ?

Ah, oui, merci pour la date @duranmla… C’est un problème un peu ancien @markvanlan, je suis en train de le localiser.

Pour info, je n’ai pas constaté que ce problème affecte Topic List Previews (legacy), qui remplace l’élément brut de la liste des sujets mobile. https://github.com/paviliondev/discourse-topic-previews/tree/master/assets/javascripts/discourse/templates/mobile/list Cependant, cela n’a été testé que sur la configuration « tests-passed ».

D’accord, j’ai eu un peu de mal à localiser le problème car, après avoir annulé, j’ai dû supprimer puis réappliquer la personnalisation pour reproduire l’erreur.

Je pense qu’il s’agit en réalité du commit hbr de @markvanlan (DEV: Use .hbr for raw template file extension (#8883) · discourse/discourse@3e89774 · GitHub), désolé d’avoir hésité là-dessus.

Pour tester, j’ai ajouté ceci à la section <head> du thème actuel via la section de personnalisation du panneau d’administration :

<script type='text/x-handlebars' data-template-name='mobile/list/topic-list-item.raw'>
  test
</script>

Avant ce commit, cela fonctionnait parfaitement. Une fois ce commit appliqué, puis la personnalisation réappliquée, le modèle est ignoré.

Peut-être que j’étais confus après tout, je pensais que c’était plus ancien que ça. Je garderai un œil sur ce fil de toute façon. Merci pour votre réponse rapide afin de tracer cela @awesomerobot

Une correction est disponible si vous mettez à jour vers la dernière version.

Mark va effectuer des travaux supplémentaires pour comprendre pourquoi les tests réussissaient alors que ce problème existait.

Néanmoins, j’ai effectué la mise à jour et l’erreur persiste lorsque je travaille avec la structure de projet du thème (qui est probablement la plus courante pour les projets de taille moyenne et grande). Je partage ici une vidéo où je montre l’erreur : https://www.loom.com/share/d3f437347c8f4d5aa4dd1c7ce08e1bf9

PS : Je laisserai la vidéo en ligne un certain temps, au cas où elle serait utile pour comprendre le problème et le reproduire. Je devrai la supprimer dans quelques semaines :grimacing:

NOTE : J’ai également essayé de renommer le fichier en topic-list-item.raw.hbs au lieu de topic-list-item.hbr, mais le problème est le même.

Ça fonctionne pour moi avec le répertoire javascripts (que ce soit avec l’ancienne ou la nouvelle extension).

Une chose que j’ai rencontrée hier soir, c’est qu’il se peut que vous deviez modifier le fichier et l’enregistrer, ou supprimer le fichier et le réajouter (les modèles sont compilés à l’enregistrement, il est donc possible que vous soyez temporairement bloqué dans un état buggy.).