api.addPostMenuButton con condizioni

Innanzitutto, mi scuso per il mio scarso inglese.
Voglio aggiungere un pulsante “Mostra altro…”.
Il post nell’immagine sottostante è composto da 10 righe di testo, ma ne vengono visualizzate solo 5.

L’utente può vedere il testo completo cliccando su Mostra altro.

Questo pulsante dovrebbe essere ramificato per dare o non dare un pulsante a seconda dell’altezza della parte cotta di ogni post o del numero di righe.

Non so come ramificare usando api.addPostMenuButton, quindi attualmente anche un piccolo post con una sola riga come il seguente riceve questo pulsante.

Questo non è molto desiderabile per me.

Sto pensando che il ramo condizionale dovrebbe essere in grado di ottenere l’altezza del COTTO o il numero di righe (o caratteri).
Ho consultato la documentazione, ma non riesco a trovare alcuna opzione per api.addPostMenuButton.
Qualsiasi aiuto sarebbe molto apprezzato.

1 Mi Piace

Il metodo api.addPostMenuButton si preoccupa solo del valore che restituisci. Tale valore deve essere un oggetto. Qualsiasi cosa tu faccia prima di quel return non ha importanza. Il pulsante verrà visualizzato per ogni post e il metodo ti fornirà l’oggetto post che puoi utilizzare per il tuo lavoro.

Ad esempio, supponiamo che io voglia che il pulsante appaia solo nei post che hanno più di 300 parole. Posso quindi fare qualcosa di simile.

common > header

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

  api.addPostMenuButton("myButton", (post) => {
    // puoi registrare le proprietà del post per vedere con cosa hai a che fare
    // console.log(post);

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

    if (roughWordCount < MIN_WORD_COUNT) {
      // il pulsante non verrà visualizzato
      return;
    }

    // il pulsante verrà visualizzato, crea l'oggetto di ritorno
    const result = {
      action: SOME_ACTION,
      icon: ICON_NAME,
      title: TITLE_TRANSLATION_KEY,
      className: CLASSNAMES,
      position: "first", // può essere `first`, `last` o `second-last-hidden`
    };

    // aggiungi un'etichetta se su desktop
    if (!post.mobileView) {
      result.label = LABLE_TRANSLATION_KEY;
    }

    // restituisci l'oggetto
    return result;
  });
</script>

Cambia le cose in maiuscolo con dati effettivi e provalo su un post che ha più di 300 parole. Vedrai che lì viene visualizzato.