Definir imagem destacada sem postá-la no tópico

Eu acho que geralmente o nome é adicionado no atributo alt. Quando eu faço upload de um arquivo, o nome é geralmente adicionado na frente do tamanho em markdown, e essa é a parte usada pelo “alt”.

Como não sou especialista em CSS, perguntei ao ChatGPT sobre sua opção e obtive esta resposta, pois quero ocultar imagens que começam com hide-this-image-, mas depois têm outra coisa. Obtive esta resposta:

Não, o CSS puro não suporta seletores de curinga ou “começa com” para atributos alt em imagens.

Os seletores de atributos CSS suportam apenas:

  • Correspondência exata: [alt=\"valor\"]
  • Contém palavra: [alt~=\"valor\"]
  • Contém substring: [alt*=\"valor\"]
  • Começa com: [alt^=\"valor\"]
  • Termina com: [alt$=\"valor\"]

No entanto, alt^=\"hide-this-image-\" não funcionará de forma confiável em seu exemplo porque o CSS não consegue corresponder ao atributo alt de <img> em todos os navegadores quando a imagem é renderizada, especialmente em sistemas como o Discourse, onde o atributo alt não é necessariamente refletido no DOM de uma forma que o CSS possa acessar.

Solução alternativa com CSS (funciona apenas em alguns ambientes):

.cooked img[alt^="hide-this-image-"] {
  display: none;
}

Mas, novamente, isso pode não funcionar de forma consistente no Discourse devido à forma como as imagens são renderizadas (por exemplo, por meio de markdown ou JS). Nesse caso, você precisaria de JavaScript.

Alternativa confiável com JavaScript:

document.querySelectorAll('.cooked img[alt^="hide-this-image-"]').forEach(img => {
  img.style.display = 'none';
});

Isso funcionará de forma confiável em todos os ambientes, incluindo o Discourse.

A solução do ChatGPT parece funcionar:

E o Depurador do Facebook o vê como a imagem em destaque:

Componente com o Javascript:

import { apiInitializer } from "discourse/lib/api";

export default apiInitializer((api) => {
  api.onPageChange(() => {
    document
      .querySelectorAll('.cooked img[alt^="featured-image-"]')
      .forEach((img) => {
        const parent = img.closest("div");
        if (parent) {
          parent.style.display = "none";
        } else {
          img.style.display = "none";
        }
      });
  });
});

Notei que ele estava mantendo algum espaço onde a imagem deveria estar, então perguntei novamente ao ChatGPT e ele acrescentou que era necessário ocultar o contêiner pai, que neste caso é a tag <div>.

Está funcionando muito bem agora!

Obrigado por isso. Adicionado às minhas notas.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.