Ícone do Discourse

:discourse2: Resumo Discourse Icon permite que você use ícones do seu subconjunto de ícones SVG em uma postagem.
:eyeglasses: Pré-visualização Pré-visualizar no Discourse Theme Creator
:hammer_and_wrench: Link do Repositório https://github.com/discourse/discourse-icon
:open_book: Novo em Temas do Discourse? Guia para iniciantes sobre o uso de Temas do Discourse

Instale este componente de tema

Funcionalidades

Uso:

[wrap=icon id=square][/wrap]

Exemplo:
Este é o ícone e o ícone .

Este é o ícone [wrap=icon id=far-square][/wrap] e o ícone [wrap=icon id=pencil][/wrap].

Nota: se o ícone não aparecer, é porque ele não está no seu subconjunto. Se você for administrador, pode adicioná-lo nas configurações do seu site: svg icon subset.


:discourse2: Hospedado por nós? Componentes de tema estão disponíveis para uso em nossos planos Standard, Business e Enterprise.

31 curtidas

Incrível! Isso é icônico!

(meta tem muitos e muitos temas, mas, felizmente, graças a @kris.kotlarek, temos um botão para adicionar a todos os temas… precisamos organizar o progresso lá, porque leva um tempo para fazer sua mágica)

13 curtidas

Sim, não quis adicionar a todos por enquanto, pois acabei de terminar de codificar :grin:, mas farei agora.

Edição: ah, já está feito.

10 curtidas

Obrigado, isso é super divertido! :sunglasses:

Nunca entrei nos tags de script BB, nem codifiquei FontAwesome manualmente, então a prática de usar um par de tags vazias sempre me pareceu estranha. Isso é por convenção popular ou há uma razão técnica para usar pares de tags? Além disso, eles podem ter conteúdo entre eles? Isso afeta o texto?

3 curtidas

Existem várias causas aqui.

Primeiro, quando escrevi o recurso de BBCode de envoltório, @sam pediu explicitamente que eu suportasse 3 formatos:

[wrap=foo][/wrap]
[wrap=foo]bar[/wrap]
[wrap=foo]
bar
[/wrap]

Isso foi feito para ser consistente com o nosso uso existente de BBCode no Discourse.

Eu poderia ter uma sintaxe melhor como: [icon=times], mas aí teria que ser um plugin e não um componente de tema.

Como uma experimentação, acho que está tudo bem como está hoje, e se as pessoas fossem usá-lo muito, poderíamos pensar em ter um plugin fazendo isso com uma sintaxe mais concisa.

Outra ideia que tive foi adicionar uma API para adicionar símbolos de autocompletar no editor, assim como temos para usuários/categorias/emojis… Mas tenho medo de que isso se tornaria um pesadelo com vários componentes escolhendo seus próprios símbolos…

5 curtidas

Ah! Preciso adicionar suporte a outro bbcode e pensei que usaria isso como ponto de partida, mas você está dizendo que o tratamento do “wrap” é feito no núcleo, o que explica por que não consigo encontrar como ele é tratado pelo seu componente de tema.

Minha solução atual é usar o componente de palavras vinculadas e uma regex feia, mas ainda estou lutando para adicionar as classes necessárias aos links.

3 curtidas

Sim, leia este tópico para saber mais:

4 curtidas

Certo, eu olhei para isso uma dúzia de vezes. E imprimi o código do seu componente e fiquei encarando-o por horas, tentando entender se é o grau de JavaScript ou Ember que eu não compreendo. Não consigo adicionar uma tag [foo] sem um plugin? Ou posso de alguma forma substituir o wrap no seu código por foo para cobrir meu novo bbcode?

1 curtida

Não, você não pode. Porque parte disso é feita no lado do servidor. Se você quiser seu próprio BBCode personalizado, precisará criar um plugin e analisar como o wrap é implementado, por exemplo:

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/pretty-text/engines/discourse-markdown/d-wrap.js.es6

5 curtidas

Obrigado! Está começando a fazer sentido. Não tenho tantos problemas aprendendo uma nova linguagem desde C++ e Pascal objetivo em 1990.

Meu hack atual de regex quase funciona. Vou precisar decidir se sigo pela rota do plugin ou se mantenho meu hack (e descubro como adicionar as classes).

Pelo menos agora entendo por que não consigo encontrar esse wrap no componente do tema!

3 curtidas

Consigo pensar em alguns layouts de sintaxe possíveis para adicionar ao plugin wrap para isso:

[wrap=foo /]
[wrap/=foo]

(imitando as tags de fechamento automático do XML), mas ambos são bastante feios :confused:

Alguém tem ideias incríveis para algo que pareça bom?

3 curtidas

Não sou muito fã dessas coisas :confused:

6 curtidas

Encontrei um grande bug…

Se você usar um wrapper de ícone e depois destacar a citação, a imagem resultante fica enormemente ampliada:

  • Use um wrapper de ícone em uma frase em uma postagem. Ex: Este é um ícone [wrap=icon id=far-check-square][/wrap]
  • Destaque o texto relevante e ‘Cite’
  • O ícone fica super grande na citação em destaque

Esta é a aparência da sintaxe quando a citação é destacada:

[quote="JammyDodger, post:1, topic:294, full:true"]
Este é um ícone ![](/svg-sprite/grumpy.jammydodger.monster/icon/222222/far-check-square.svg)
[/quote]

Esta é uma resposta onde ele fica enorme

Embora citá-lo usando a bolha de fala na barra de formato funcione bem.

4 curtidas

Como você consegue destacar o ícone da citação? No meu site de teste, o ícone é ignorado.

Não tenho certeza? Eu apenas uso o mouse.

Qual navegador você está usando?

Usando o mouse, testei com Chrome e Firefox e não consegui selecionar o ícone. :thinking:


EDIT:

Se você encapsular um ícone indisponível no subconjunto atual, ele criará uma imagem SVG em vez disso.
Então, você pode citá-lo.

2 curtidas

Você pode fornecer um exemplo? Sua captura de tela mostra uma caixa de seleção marcada e não tenho problemas em selecioná-la em minha instância de teste (bem como outros ícones que provavelmente não são usados pelo Discourse, como x-ray.

2 curtidas

Eu vejo o problema. O componente pesquisa verificando se há um wrapper com a classe d-wrap; mas não há wrapper se o ícone fornecido não for do subconjunto. Ele cria uma imagem como SVG em vez disso.

Por exemplo:

SVG, ícone dentro do subconjunto

Imagem como SVG, ícone não dentro do subconjunto

Se você citar as imagens, o componente não faz nada, pois não há wrapper (e a imagem é convertida para markdown, resultando em uma imagem sem nenhuma classe)

1 curtida

Isso significa que preciso ter um campo svg_icons em settings.yml disponível no meu tema? Ou eu poderia usar qualquer campo svg_icons disponível em qualquer componente de tema habilitado também? E se for esse o caso, faria sentido adicionar este campo a este componente de tema?

svg_icons:
  default: ''
  type: 'list'
  list_type: 'compact'

Porque na minha experiência, os ícones SVG são transformados em tags <img />, e eles não herdam currentColor quando o esquema de cores é alterado:
Por favor, compare o parágrafo Exemplo:

2 curtidas

A renderização no modo escuro poderia ser aprimorada?

Gostaria de ter as mesmas cores da interface:

3 curtidas