Modèles de compositeur d'URL

Merci d’avoir signalé cela @NateDhaliwal

Non, il analyse simplement l’URL à la recherche d’une chaîne spécifique et préremplit le compositeur avec l’un des quelques modèles lorsqu’il trouve cette chaîne.

Le plugin Docus insère cette chaîne dans les URL comme l’une de ses fonctions, mais ce composant fonctionnera avec n’importe quelle chaîne ou mécanisme de livraison que quelqu’un souhaite utiliser, il peut donc être autonome. Je mettrai à jour le fichier README pour l’expliquer.

Par exemple, vous pourriez lui dire de rechercher : /tag/introductions et il deviendrait un composant de modèle de balise. Ou vous pourriez l’utiliser comme je le fais pour insérer ce modèle dans des intersections de balises, comme : tags/intersection/introductions/webdevs

Je vais déplacer la chaîne qu’il recherche dans la section d’administration afin qu’il soit plus facile pour les autres de la modifier et de l’utiliser sans avoir à fouiller dans le code.

Honnêtement, je lutte contre un bug avec cela depuis quelques jours et j’ai perdu (les quelques cheveux qui me restent) et je n’aurais probablement pas dû le partager tout de suite. Il insère toujours un modèle lorsqu’il trouve cette chaîne dans l’URL.

Parfois, vous voulez que cela se produise chaque fois qu’il trouve cette chaîne, parfois vous ne voulez que cela se produise s’il n’y a pas d’autres fils de discussion déjà présents, et parfois vous ne voulez que cela se produise si cet utilisateur spécifique n’a pas déjà créé de fil de discussion à cet endroit.

Ce qui se passe actuellement :
L’initialiseur surveille une balise/chaîne dans l’URL et ouvre automatiquement un modèle dans Discourse chaque fois qu’il voit une correspondance. Cela fonctionne bien lorsque je veux toujours ouvrir un modèle, mais cela s’effondre lorsque j’ai besoin de conditions comme « ne pas ouvrir si un sujet existe déjà » ou « ne pas ouvrir si cet utilisateur a déjà publié ».

Ce que j’ai tenté :

  • J’ai introduit un indicateur settings.auto_open_check_user_only. Lorsqu’il est activé, le code recherche tags:tag1+tag2 @username ; lorsqu’il est désactivé, il recherche uniquement tags:tag1+tag2. L’objectif était de distinguer « tout sujet existe » de « le sujet de cet utilisateur existe ».
  • J’ai ajouté un délai de 500 ms avant de réactiver la sauvegarde des brouillons pour éviter les conflits avec la sauvegarde automatique de Discourse.
  • J’ai commencé à enregistrer des informations de base (ID du déclencheur, nom du modèle) afin de pouvoir au moins voir quand l’ouverture automatique se déclenche.

Je soupçonne que les problèmes sont :

  • L’API de recherche de Discourse renvoie des résultats avant que l’index de recherche ne soit mis à jour, de sorte que le système continue de penser « aucun sujet n’existe », même juste après qu’un utilisateur ait publié.
  • Le filtrage par @username n’aide pas si le nom d’utilisateur ne correspond pas exactement ou si les balises ne correspondent pas aux paramètres du modèle.
  • Je n’annule jamais les minuteries de brouillon en attente de Discourse, donc même si je bloque les sauvegardes pendant 500 ms, les sauvegardes mises en file d’attente s’exécutent toujours plus tard et font réapparaître le brouillon/compositeur.

J’essaie actuellement :

  • Après avoir appelé deleteDraft, annuler immédiatement le debounce _saveDraft de Discourse afin que les anciens brouillons ne puissent pas réapparaître.
  • Créer un cache de courte durée mémorisant « J’ai déjà créé un sujet ici avec ces balises » pour couvrir le décalage de l’index de recherche.
  • Créer 3 modes qui peuvent être choisis dans la section Administration

always (toujours)
Ouvre le modèle chaque fois que la ou les balises correspondent. Aucune recherche, aucune vérification — ouvre simplement le compositeur.

ifNoTopics (s’il n’y a pas de sujets)
Utilise la recherche Discourse pour demander : Y a-t-il déjà un sujet avec ces balises ?

  • Si oui → ne pas ouvrir.
  • Si non → ouvrir.
    Bon pour les situations où « un seul sujet devrait exister ».

ifUserHasNoTopic (si l’utilisateur n’a pas de sujet)
Recherche : Cet utilisateur spécifique a-t-il déjà créé un sujet avec ces balises ?

  • Si oui → ne pas ouvrir.
  • Si non → ouvrir.
    Utile lorsque chaque utilisateur devrait avoir son propre fil de discussion personnel.

Si quelqu’un a des suggestions sur la façon dont il aborderait la création de ces paramètres, j’aimerais beaucoup les entendre.