Veja também: We're upgrading our icons to Font Awesome 6!
Em breve, mesclaremos na master uma branch que atualiza o Discourse para o Font Awesome 5.5.0 (versão gratuita) e alterna para o uso de ícones SVG em vez de uma fonte de ícones. Esta é uma mudança substancial, com muitos benefícios e uma alteração significativa para desenvolvedores.
Aqui está um resumo rápido das mudanças:
- o uso de ícones SVG proporcionará ícones mais nítidos, melhores para acessibilidade e mais fáceis de personalizar; consulte este artigo do GitHub para mais detalhes
- como o conjunto de ícones do Font Awesome cresceu para mais de 1300 ícones na versão 5, criamos uma API interna que entrega aos clientes um subconjunto de todos os ícones do FA, ou seja, apenas os ícones usados naquela instância do Discourse
- o subconjunto, felizmente, tem um tamanho menor: já está em execução aqui no Meta, e tem apenas 27,5 kB, contra 75,7 kB da fonte de ícones FA 4.7
- plugins e temas (incluindo componentes de tema) podem adicionar ícones FA adicionais ao conjunto
- ícones de grupo e de medalha serão incluídos automaticamente no conjunto, e administradores do site também podem usar uma nova configuração do site chamada
svg icon subsetpara registrar seus ícones escolhidos e adicioná-los ao subconjunto do site - mudança de quebra: desenvolvedores de plugins e temas não podem mais usar
<i class="fa fa-icon"></i>ou sobrescrever os seletores pseudo:beforepara referenciar/substituir ícones; agora, isso deve ser substituído pelo uso de funções do Discourse que injetam SVGs na página
Abaixo, você encontrará instruções sobre como atualizar plugins e temas para usar ícones do novo conjunto.
O que há de novo no Font Awesome 5
O Font Awesome 5 introduziu muitos novos ícones, mas também algumas alterações de nomenclatura. Para uma discussão completa das mudanças, consulte a documentação de atualização do Font Awesome. A principal mudança é que os ícones no FA agora vêm em estilos separados. Existem três estilos:
- sólido (padrão) –
fas - regular –
far - marcas –
fab
Para os estilos regular ou marcas, o FA 5 introduz novos prefixos de classe, “far” e “fab”, respectivamente. Para usar um ícone dos estilos regular ou marcas, então, precisamos usar essa nova convenção de nomenclatura: "far fa-address-book" ou "fab fa-facebook". (Ícones sólidos podem ser referenciados como antes: “fa-nome-do-ícone”).
Para permitir a agrupação dos três estilos em um sprite SVG único, os ícones nos estilos regular e de marca no Discourse são convertidos internamente para far-nome-do-ícone e fab-nome-do-ícone. Plugins, temas, grupos e medalhas podem usar a convenção de nomenclatura padrão do FontAwesome 5. Administradores de site que adicionam ícones ao conjunto por meio da configuração do site svg icon subset devem usar a convenção de nomenclatura interna.
Desenvolvedores: como usar ou adicionar um ícone SVG ao seu plugin ou tema
-
Adicionando novos ícones
plugins:
registre o ícone no arquivo
plugin.rbdo seu plugin:register_svg_icon "user-times" if respond_to?(:register_svg_icon)(Nota: você precisa reiniciar seu servidor Rails no seu ambiente de desenvolvimento para que essa alteração tenha efeito.)
temas ou componentes:
adicione uma configuração de string ou lista com um nome contendo
_icon, por exemplo:svg_icons: default: 'question-circle|wallet' type: 'list' list_type: 'compact'e o Discourse incluirá o(s) ícone(s) definido(s) nessa configuração do tema no subconjunto.
-
Usando ícones no seu JavaScript
plugins:
import { iconNode } from "discourse-common/lib/icon-library"; ... let icon = iconNode('user-times');ou use o helper
iconHTMLimport { iconHTML } from "discourse-common/lib/icon-library"; ... let icon = iconHTML('user-times');temas ou componentes:
const { iconNode } = require("discourse-common/lib/icon-library"); ... let icon = iconNode('user-times');ou use o helper
iconHTMLconst { iconHTML } = require("discourse-common/lib/icon-library"); ... let icon = iconHTML('user-times');os helpers também podem receber um segundo parâmetro com propriedades como título ou classe. Isso funciona da mesma maneira em plugins e temas/componentes, por exemplo:
iconHTML('user-times', { class: "reply-to-glyph" }) -
Usando ícones nos seus templates Handlebars
Em templates Handlebars, você pode usar
d-icon, assim:{{d-icon 'user-times'}}isso também funciona da mesma maneira para plugins e temas/componentes.
Adicionando ícones personalizados
Se você quiser ter mais ícones do que os disponíveis no FontAwesome, pode adicionar seus próprios ícones SVG em um plugin ou tema. Veja este sprite SVG para um exemplo de como estruturar seu sprite. (É essencialmente uma lista de elementos <symbol>, cada um com seu próprio ID exclusivo.)
Em temas e componentes: adicione o sprite SVG na pasta /assets e referencie-o no about.json usando o nome da variável icons-sprite. Para um sprite chamado my-icons.svg, seu assets.json deve incluir o seguinte:
"assets": {
"icons-sprite": "/assets/my-icons.svg"
}
Você também pode adicionar o sprite SVG a um tema ou componente via interface de usuário. Ao fazer isso, certifique-se de que o nome da variável SCSS esteja definido como icons-sprite. Captura de tela:
Em plugins: basta incluir um arquivo de sprite SVG na pasta plugins/nome-do-seu-plugin/svg-icons. Reinicie seu servidor (se estiver em desenvolvimento) ou reconstrua o site se estiver em um contêiner Docker, e seus ícones personalizados estarão automaticamente disponíveis.
Para evitar possíveis conflitos com IDs de ícones do FontAwesome, você deve prefixar os IDs dos ícones personalizados em seu plugin ou tema.


