関連記事: We're upgrading our icons to Font Awesome 6!
まもなく、Discourse を Font Awesome 5.5.0(無料版)にアップグレードし、アイコンフォントの代わりに SVG アイコンを使用するように切り替えるブランチを master ブランチにマージします。これは大きな変更であり、多くの利点をもたらしますが、開発者にとって重要な変更も含まれています。
以下に、変更点の概要を示します。
- SVG アイコンを使用することで、より鮮明なアイコン、アクセシビリティの向上、カスタマイズの容易さが実現します。詳細については、こちらの GitHub 記事をご覧ください。
- Font Awesome アイコンセットはバージョン 5 で 1300 以上まで増加したため、クライアントに対してすべての FA アイコンのサブセット(つまり、その Discourse インスタンスで使用されているアイコンのみ)を配信する内部 API を構築しました。
- おかげでサブセットのサイズは小さくなりました。Meta サイトですでに動作しており、FA 4.7 のアイコンフォントの 75.7 kb に対し、わずか 27.5 kb です。
- プラグインやテーマ(テーマコンポーネントを含む)は、追加の FA アイコンをセットに追加できます。
- グループのフラアとバッジのアイコンは自動的にセットに含まれます。また、サイト管理者は新しいサイト設定
svg icon subsetを使用して、選択したアイコンを登録し、サイトのサブセットに追加することもできます。 - 破壊的変更: プラグインやテーマの開発者は、
<i class="fa fa-icon"></i>の使用や:before疑似セレクターのオーバーライドによるアイコンの参照/置換ができなくなりました。これらは、ページに SVG を注入する Discourse 関数を使用するように置き換える必要があります。
以下に、プラグインやテーマを新しいセットのアイコンを使用するように更新する方法に関する手順を示します。
Font Awesome 5 の新機能
Font Awesome 5 では多くの新しいアイコンが追加されましたが、命名規則の変更も行われました。変更点の完全な議論については、Font Awesome のアップグレードドキュメントをご覧ください。主な変更点は、FA のアイコンが現在、個別のスタイルで提供されるようになったことです。スタイルは以下の 3 つです。
- solid(デフォルト)--
fas - regular –
far - brands –
fab
regular または brands スタイルを使用するには、FA 5 で新しいクラスプレフィックス「far」と「fab」が導入されました。したがって、regular または brands スタイルのアイコンを使用するには、新しい命名規則 "far fa-address-book" または "fab fa-facebook" を使用する必要があります。(solid アイコンは以前と同様に「fa-icon-name」として参照できます)。
3 つのスタイルを 1 つの SVG スプライトにバンドルできるようにするため、Discourse 内では regular およびブランドスタイルのアイコンが far-icon-name および fab-icon-name に変換されます。プラグイン、テーマ、グループフラア、バッジは、標準の FontAwesome 5 命名規則を使用できます。svg icon subset サイト設定を通じてアイコンをセットに追加するサイト管理者は、内部命名規則を使用する必要があります。
開発者向け:プラグインまたはテーマで SVG アイコンを使用または追加する方法
-
新しいアイコンの追加
プラグイン:
プラグインの
plugin.rbファイルでアイコンを登録します。register_svg_icon "user-times" if respond_to?(:register_svg_icon)(注:この変更を反映するには、開発環境で Rails サーバーを再起動する必要があります。)
テーマまたはコンポーネント:
_iconを含む名前の文字列またはリスト設定を追加します。例:svg_icons: default: 'question-circle|wallet' type: 'list' list_type: 'compact'これにより、Discourse はそのテーマ設定で定義されたアイコンをサブセットに含めます。
-
JavaScript でのアイコンの使用
プラグイン:
import { iconNode } from "discourse-common/lib/icon-library"; ... let icon = iconNode('user-times');または
iconHTMLヘルパーを使用します。import { iconHTML } from "discourse-common/lib/icon-library"; ... let icon = iconHTML('user-times');テーマまたはコンポーネント:
const { iconNode } = require("discourse-common/lib/icon-library"); ... let icon = iconNode('user-times');または
iconHTMLヘルパーを使用します。const { iconHTML } = require("discourse-common/lib/icon-library"); ... let icon = iconHTML('user-times');これらのヘルパーは、title や class などのプロパティを持つ 2 番目のパラメータも受け取ります。これはプラグインとテーマ/コンポーネントで同じように機能します。例:
iconHTML('user-times', { class: "reply-to-glyph" }) -
Handlebars テンプレートでのアイコンの使用
Handlebars テンプレートでは、以下のようにd-iconを使用できます。{{d-icon 'user-times'}}これはプラグインとテーマ/コンポーネントでも同じように機能します。
カスタムアイコンの追加
FontAwesome で利用可能なもの以上のアイコンが必要な場合は、プラグインまたはテーマで独自の SVG アイコンを追加できます。スプライトの構造の例については、こちらの SVG スプライト をご覧ください。(これは、それぞれ固有の ID を持つ <symbol> 要素のリストです)。
テーマおよびコンポーネントの場合: /assets フォルダに SVG スプライトを追加し、about.json で変数名 icons-sprite を使用して参照します。my-icons.svg という名前のスプライトの場合、assets.json には以下を含める必要があります。
"assets": {
"icons-sprite": "/assets/my-icons.svg"
}
UI を通じてテーマまたはコンポーネントに SVG スプライトを追加することもできます。その際、SCSS 変数名が icons-sprite に設定されていることを確認してください。スクリーンショット:
プラグインの場合: plugins/your-plugin-name/svg-icons フォルダに SVG スプライトファイルを Simply 含めます。サーバーを再起動(開発中の場合)または Docker コンテナの場合はサイトを再構築すると、カスタムアイコンが自動的に利用可能になります。
Font Awesome のアイコン ID との競合を避けるため、プラグインまたはテーマのカスタムアイコンの ID にはプレフィックスを付ける必要があります。


