api.addPostMenuButton con condiciones

En primer lugar, me disculpo por mi pobre inglés.
Quiero añadir un botón de “Mostrar más…”.
La publicación en la imagen de abajo consta de 10 líneas de texto, pero solo se muestran 5 líneas.

El usuario puede ver el texto completo haciendo clic en Mostrar más.

Este botón debería ramificarse para dar o no un botón dependiendo de la altura de la parte cocida de cada publicación o del número de líneas.

No sé cómo ramificar usando api.addPostMenuButton, por lo que actualmente incluso una publicación pequeña con solo una línea como la siguiente recibe este botón.

Esto no es muy deseable para mí.

Estoy pensando que la rama condicional debería poder obtener la altura de lo COCIDO o el número de líneas (o caracteres).
Miré la documentación, pero no encuentro ninguna opción para api.addPostMenuButton.
Cualquier ayuda sería muy apreciada.

1 me gusta

El método api.addPostMenuButton solo se preocupa por el valor que devuelves. Ese valor debe ser un objeto. Cualquier cosa que hagas antes de ese retorno no importa. El botón se renderizará para cada publicación, y el método te da el objeto post que puedes usar para tu trabajo.

Por ejemplo, digamos que quiero que el botón solo aparezca en publicaciones que tengan más de 300 palabras. Entonces puedo hacer algo como esto.

common > header

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

  api.addPostMenuButton("myButton", (post) => {
    // puedes registrar las propiedades de la publicación para ver con qué trabajar
    // console.log(post);

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

    if (roughWordCount < MIN_WORD_COUNT) {
      // el botón no se renderizará
      return;
    }

    // el botón se renderizará, crea el objeto de retorno
    const result = {
      action: SOME_ACTION,
      icon: ICON_NAME,
      title: TITLE_TRANSLATION_KEY,
      className: CLASSNAMES,
      position: "first", // puede ser `first`, `last` o `second-last-hidden`
    };

    // añade una etiqueta si está en el escritorio
    if (!post.mobileView) {
      result.label = LABLE_TRANSLATION_KEY;
    }

    // devuelve el objeto
    return result;
  });
</script>

Cambia las mayúsculas por datos reales y pruébalo en una publicación que tenga más de 300 palabras. Verás que se renderiza allí.