Vedi anche: We're upgrading our icons to Font Awesome 6!
A breve fusioneremo in master un branch che aggiorna Discourse a Font Awesome 5.5.0 (versione gratuita) e passa all’uso di icone SVG invece di un font di icone. Si tratta di un cambiamento sostanziale, con molti vantaggi e un cambiamento significativo per gli sviluppatori.
Ecco un rapido riassunto delle modifiche:
- l’uso di icone SVG fornirà icone più nitide, migliori per l’accessibilità e più facili da personalizzare; consulta questo articolo di GitHub per maggiori dettagli
- poiché il set di icone Font Awesome è cresciuto fino a oltre 1300 icone nella versione 5, abbiamo creato un’API interna che fornisce ai client un sottoinsieme di tutte le icone FA, ovvero solo quelle utilizzate da quella specifica istanza di Discourse
- il sottoinsieme ha fortunatamente un footprint di dimensioni più ridotte: è già in esecuzione qui su Meta ed è di soli 27,5 kB contro i 75,7 kB del font di icone FA 4.7
- plugin e temi (inclusi i componenti del tema) possono aggiungere ulteriori icone FA al set
- le icone di flair dei gruppi e dei distintivi verranno incluse automaticamente nel set, e gli amministratori del sito possono anche utilizzare una nuova impostazione del sito chiamata
svg icon subsetper registrare le icone scelte e aggiungerle al sottoinsieme del loro sito - cambiamento distruttivo: gli sviluppatori di plugin e temi non possono più utilizzare
<i class="fa fa-icon"></i>o sovrascrivere i selettori pseudo:beforeper fare riferimento/sostituire le icone; questi dovrebbero ora essere sostituiti utilizzando le funzioni di Discourse che iniettano SVG nella pagina
Di seguito sono riportate le istruzioni su come aggiornare plugin e temi per utilizzare le icone dal nuovo set.
Novità in Font Awesome 5
Font Awesome 5 ha introdotto molte nuove icone ma anche alcune modifiche ai nomi. Per una discussione completa sulle modifiche, consulta la documentazione di aggiornamento di Font Awesome. La modifica principale è che le icone in FA ora sono disponibili in stili separati. Ci sono tre stili:
- solid (predefinito) –
fas - regular –
far - brands –
fab
Per gli stili regular o brands, FA 5 introduce nuovi prefissi di classe, rispettivamente “far” e “fab”. Per utilizzare un’icona dagli stili regular o brands, è quindi necessario utilizzare questa nuova convenzione di denominazione: "far fa-address-book" o "fab fa-facebook". (Le icone solid possono essere semplicemente referenziate come prima: “fa-nome-icona”).
Per consentire l’impacchettamento dei tre stili in un’unica sprite SVG, le icone negli stili regular e brand in Discourse vengono convertite internamente in far-nome-icona e fab-nome-icona. Plugin, temi, flair dei gruppi e distintivi possono utilizzare la convenzione di denominazione standard di FontAwesome 5. Gli amministratori del sito che aggiungono icone al set tramite l’impostazione del sito svg icon subset devono utilizzare la convenzione di denominazione interna.
Sviluppatori: come usare o aggiungere un’icona SVG al tuo plugin o tema
-
Aggiunta di nuove icone
plugin:
registra l’icona nel file
plugin.rbdel tuo plugin:register_svg_icon "user-times" if respond_to?(:register_svg_icon)(Nota: è necessario riavviare il server Rails nell’ambiente di sviluppo affinché questa modifica abbia effetto.)
temi o componenti:
aggiungi un’impostazione di tipo stringa o elenco con un nome contenente
_icon, ad esempio:svg_icons: default: 'question-circle|wallet' type: 'list' list_type: 'compact'e Discourse includerà l’icona/e definita/e in quell’impostazione del tema nel sottoinsieme.
-
Utilizzo delle icone nel tuo JavaScript
plugin:
import { iconNode } from "discourse-common/lib/icon-library"; ... let icon = iconNode('user-times');oppure utilizza l’helper
iconHTMLimport { iconHTML } from "discourse-common/lib/icon-library"; ... let icon = iconHTML('user-times');temi o componenti:
const { iconNode } = require("discourse-common/lib/icon-library"); ... let icon = iconNode('user-times');oppure utilizza l’helper
iconHTMLconst { iconHTML } = require("discourse-common/lib/icon-library"); ... let icon = iconHTML('user-times');Gli helper possono anche accettare un secondo parametro con proprietà come titolo o classe. Questo funziona allo stesso modo nei plugin e nei temi/componenti, ad esempio:
iconHTML('user-times', { class: "reply-to-glyph" }) -
Utilizzo delle icone nei tuoi template Handlebars
Nei template Handlebars, puoi utilizzared-icon, come segue:{{d-icon 'user-times'}}Questo funziona allo stesso modo anche per plugin e temi/componenti.
Aggiunta di icone personalizzate
Se desideri avere più icone di quelle disponibili in FontAwesome, puoi aggiungere le tue icone SVG in un plugin o in un tema. Consulta questa sprite SVG per un esempio di come strutturare la tua sprite. (È essenzialmente un elenco di elementi <symbol>, ciascuno con un proprio ID univoco.)
Nei temi e nei componenti: aggiungi la sprite SVG nella cartella /assets e fai riferimento ad essa in about.json utilizzando il nome della variabile icons-sprite. Per una sprite chiamata my-icons.svg, il tuo assets.json dovrebbe includere quanto segue:
"assets": {
"icons-sprite": "/assets/my-icons.svg"
}
Puoi anche aggiungere la sprite SVG a un tema o a un componente tramite l’interfaccia utente; quando lo fai, assicurati che il nome della variabile SCSS sia impostato su icons-sprite. Screenshot:
Nei plugin: includi semplicemente un file di sprite SVG nella cartella plugins/nome-del-tuo-plugin/svg-icons. Riavvia il server (se in sviluppo) o ricostruisci il sito se in un contenitore Docker e le tue icone personalizzate dovrebbero essere automaticamente disponibili.
Per evitare eventuali conflitti con gli ID delle icone di FontAwesome, dovresti prefixare gli ID delle icone personalizzate nel tuo plugin o tema.


