Voir aussi : We're upgrading our icons to Font Awesome 6!
Nous fusionnerons bientôt dans master une branche qui met à niveau Discourse vers Font Awesome 5.5.0 (version gratuite) et passe à l’utilisation d’icônes SVG au lieu d’une police d’icônes. Il s’agit d’un changement substantiel, offrant de nombreux avantages et une modification significative pour les développeurs.
Voici un aperçu rapide des changements :
- L’utilisation d’icônes SVG fournira des icônes plus nettes, meilleures pour l’accessibilité et plus faciles à personnaliser ; consultez cet article de GitHub pour plus de détails.
- Puisque l’ensemble d’icônes Font Awesome est passé à plus de 1300 icônes dans la version 5, nous avons créé une API interne qui délivre aux clients un sous-ensemble de toutes les icônes FA, à savoir uniquement celles utilisées par cette instance Discourse.
- Heureusement, ce sous-ensemble a une empreinte de taille plus petite : il est déjà en cours d’exécution ici sur Meta, avec seulement 27,5 ko contre 75,7 ko pour la police d’icônes FA 4.7.
- Les plugins et les thèmes (y compris les composants de thème) peuvent ajouter des icônes FA supplémentaires à l’ensemble.
- Les icônes de groupe et de badges seront automatiquement incluses dans l’ensemble, et les administrateurs de site peuvent également utiliser un nouveau paramètre de site appelé
svg icon subsetpour enregistrer leurs icônes choisies et les ajouter au sous-ensemble de leur site. - Changement cassant : les développeurs de plugins et de thèmes ne peuvent plus utiliser
<i class="fa fa-icon"></i>ou remplacer les sélecteurs pseudo:beforepour référencer/remplacer des icônes ; ceux-ci doivent désormais être remplacés par l’utilisation de fonctions Discourse qui injectent des SVG dans la page.
Ci-dessous, vous trouverez des instructions sur la façon de mettre à jour les plugins et les thèmes pour utiliser des icônes du nouvel ensemble.
Quoi de neuf dans Font Awesome 5
Font Awesome 5 a introduit de nombreuses nouvelles icônes, mais aussi quelques changements de nommage. Pour une discussion complète sur les changements, veuillez consulter la documentation de mise à niveau Font Awesome. Le changement principal est que les icônes dans FA sont désormais disponibles dans des styles séparés. Il existe trois styles :
- solide (par défaut) –
fas - régulier –
far - marques –
fab
Pour les styles régulier ou marques, FA 5 introduit de nouveaux préfixes de classe, « far » et « fab » respectivement. Pour utiliser une icône du style régulier ou marques, nous devons donc utiliser cette nouvelle convention de nommage : « far fa-address-book » ou « fab fa-facebook ». (Les icônes solides peuvent simplement être référencées comme auparavant « fa-nom-de-l’icône »).
Pour permettre l’association des trois styles en un seul sprite SVG, les icônes des styles régulier et marque dans Discourse sont converties en interne en far-nom-de-l'icône et fab-nom-de-l'icône. Les plugins, les thèmes, les groupes et les badges peuvent utiliser la convention de nommage standard de FontAwesome 5. Les administrateurs de site ajoutant des icônes à l’ensemble via le paramètre de site svg icon subset doivent utiliser la convention de nommage interne.
Développeurs : comment utiliser ou ajouter une icône SVG à votre plugin ou thème
-
Ajout de nouvelles icônes
plugins :
Enregistrez l’icône dans le fichier
plugin.rbde votre plugin :register_svg_icon "user-times" if respond_to?(:register_svg_icon)(Remarque : vous devez redémarrer votre serveur Rails dans votre environnement de développement pour que ce changement prenne effet.)
thèmes ou composants :
Ajoutez un paramètre de chaîne ou de liste avec un nom contenant
_icon, par exemple :svg_icons: default: 'question-circle|wallet' type: 'list' list_type: 'compact'et Discourse inclura l’(les) icône(s) définie(s) dans ce paramètre de thème dans le sous-ensemble.
-
Utilisation d’icônes dans votre JavaScript
plugins :
import { iconNode } from "discourse-common/lib/icon-library"; ... let icon = iconNode('user-times');ou utilisez l’helper
iconHTMLimport { iconHTML } from "discourse-common/lib/icon-library"; ... let icon = iconHTML('user-times');thèmes ou composants :
const { iconNode } = require("discourse-common/lib/icon-library"); ... let icon = iconNode('user-times');ou utilisez l’helper
iconHTMLconst { iconHTML } = require("discourse-common/lib/icon-library"); ... let icon = iconHTML('user-times');Les helpers peuvent également prendre un deuxième paramètre avec des propriétés comme le titre ou la classe. Cela fonctionne de la même manière dans les plugins et les thèmes / composants, par exemple :
iconHTML('user-times', { class: "reply-to-glyph" }) -
Utilisation d’icônes dans vos modèles Handlebars
Dans les modèles Handlebars, vous pouvez utiliserd-icon, comme ceci :{{d-icon 'user-times'}}cela fonctionne également de la même manière pour les plugins et les thèmes / composants.
Ajout d’icônes personnalisées
Si vous souhaitez avoir plus d’icônes que celles disponibles dans FontAwesome, vous pouvez ajouter vos propres icônes SVG dans un plugin ou un thème. Consultez ce sprite SVG pour un exemple de structure de sprite. (Il s’agit essentiellement d’une liste d’éléments <symbol>, chacun avec son propre ID unique.)
Dans les thèmes et les composants : ajoutez le sprite SVG dans le dossier /assets et référencez-le dans about.json en utilisant le nom de variable icons-sprite. Pour un sprite nommé my-icons.svg, votre assets.json doit inclure ceci :
"assets": {
"icons-sprite": "/assets/my-icons.svg"
}
Vous pouvez également ajouter le sprite SVG à un thème ou un composant via l’interface utilisateur. Dans ce cas, assurez-vous que le nom de la variable SCSS est défini sur icons-sprite. Capture d’écran :
Dans les plugins : incluez simplement un fichier sprite SVG dans le dossier plugins/votre-nom-de-plugin/svg-icons. Redémarrez votre serveur (si en développement) ou reconstruisez le site si vous êtes dans un conteneur Docker, et vos icônes personnalisées devraient être automatiquement disponibles.
Pour éviter tout conflit potentiel avec les IDs d’icônes Font Awesome, vous devez préfixer les IDs des icônes personnalisées dans votre plugin ou thème.


