api.addPostMenuButton avec conditions

Tout d’abord, je m’excuse pour mon mauvais anglais.
Je veux ajouter un bouton « Afficher plus… ».
Le message dans l’image ci-dessous se compose de 10 lignes de texte, mais seulement 5 lignes sont affichées.

L’utilisateur peut voir le texte complet en cliquant sur Afficher plus.

Ce bouton doit être conditionné pour donner ou non un bouton en fonction de la hauteur de la partie traitée de chaque message ou du nombre de lignes.

Je ne sais pas comment faire une branche avec api.addPostMenuButton, donc actuellement même un petit message avec une seule ligne comme suit se voit attribuer ce bouton.

Ce n’est pas très souhaitable pour moi.

Je pense que la branche conditionnelle devrait pouvoir obtenir la hauteur du TRAITÉ ou le nombre de lignes (ou de caractères).
J’ai consulté la documentation, mais je n’ai trouvé aucune option pour api.addPostMenuButton.
Toute aide serait grandement appréciée.

1 « J'aime »

La méthode api.addPostMenuButton ne se soucie que de la valeur que vous retournez. Cette valeur doit être un objet. Tout ce que vous faites avant ce retour n’a pas d’importance. Le bouton sera rendu pour chaque publication, et la méthode vous donne l’objet post que vous pouvez utiliser pour votre travail.

Par exemple, disons que je veux que le bouton n’apparaisse que sur les publications de plus de 300 mots. Je peux alors faire quelque chose comme ceci.

common > header

<script type="text/discourse-plugin" version="0.8">
  const MIN_WORD_COUNT = 300;

  api.addPostMenuButton("myButton", (post) => {
    // vous pouvez enregistrer les propriétés de la publication pour voir ce que vous avez
    // console.log(post);

    // exemple
    const roughWordCount = post.cooked.match(/\S+/g).length;

    if (roughWordCount < MIN_WORD_COUNT) {
      // le bouton ne sera pas rendu
      return;
    }

    // le bouton sera rendu, créez l'objet de retour
    const result = {
      action: SOME_ACTION,
      icon: ICON_NAME,
      title: TITLE_TRANSLATION_KEY,
      className: CLASSNAMES,
      position: "first", // peut être `first`, `last` ou `second-last-hidden`
    };

    // ajoutez une étiquette si sur ordinateur
    if (!post.mobileView) {
      result.label = LABLE_TRANSLATION_KEY;
    }

    // retournez l'objet
    return result;
  });
</script>

Changez les éléments en majuscules en données réelles et essayez sur une publication de plus de 300 mots. Vous verrez qu’elle s’affiche là.