Mostrar números de mensagens

Is it possible to show post numbers for each post (Or easy to do via CSS or similar). My use case is running forum mafia, where allowing users to easily refer to a post without the bulk of quoting it would be amazing.

1 curtida

Just press the link button under each post, and the post number is visible there.

It is hard to say if this is what you are looking for, but it should get you close.

https://github.com/sitepoint/discourse-theme/blob/b4b4a7218ffbbfd4ee3cf8aa7421d29c96fdc4ed/assets/stylesheets/desktop/topic-post.scss#L45-L51

We use that CSS to put #1, #2, et al on a topic after the date/timestamp.

10 curtidas

Yes, it is, this is amazing :slight_smile:

Thanks so much!

a.post-date span {
  margin-right: 1em;
}

a.post-date:after {
  content: "#"attr(data-post-number);
}

Isso não parece mais funcionar. Existe uma maneira atual de mostrar os números das postagens?

2 curtidas

Agora, a tag post não tem um identificador data-post-number, este estilo CSS não funciona, não sei se há outra maneira de resolver?

Não sem javascript.

3 curtidas

Obrigado pela resposta, este é um plugin que precisa ser escrito para chamar a API? Ou ele é simplesmente escrito no componente do tema?

Muito obrigado. Resolvi o problema agora!

api.decorateCooked(() => {
          var add_post_number_timer = setTimeout(() => {
            var articles = document.getElementsByTagName("article");
            for (var i = 0; i < articles.length; i++) {
              var post_date = articles[i].getElementsByClassName("post-date");
              if (post_date.length != 0) {
                var post_number = articles[i].getAttribute("id").replace("post_", "");
                post_date[1].setAttribute("data-post-number", post_number);
              }
            }
            clearTimeout(add_post_number_timer);
          }, 500);
        }, {
        id: 'add_post_number'
    });

Incrível! Você descobriu como fazer isso. :+1:

Aqui estão algumas melhorias que você pode fazer:

  • api.decoratedCooked será descontinuado e é chamado em cada postagem.
    Você pode usar decorateCookedElement em vez disso, que funciona sem jQuery.

  • Um element representando a postagem atual é passado para a API; você pode usá-lo como contexto da sua postagem.

  • Você pode trabalhar com a função schedule do Ember para esperar que o elemento seja renderizado.

import { schedule } from "@ember/runloop";
// const { schedule } = require("@ember/runloop");  // use isso se estiver executando no Admin UI

api.decorateCookedElement((element,  /* helper */) => {
  schedule("afterRender", () => {
    const article = element.closest("article");
    if (article) {
      article.dataset.postNumber = article.id.replace("post_", "");
    }
  });
});

image

3 curtidas

:+1: Muito obrigado pela correção.