拡張ヘッドリンク(ExtendedHeadLinks)は動かない
プリザンターのソースには ExtendedHeadLink というクラスがあり、名前からは「<head> に任意の <link> タグを足す拡張機能」に見えます。しかし 1.5.8.1 では読み込み処理も呼び出し元も無く、ファイルを置いても何も起きません。<head> に CSS を足したいときは 拡張スタイル を使います。
ソースにあるもの
| 要素 | 場所 | 内容 |
|---|---|---|
| クラス | ExtendedHeadLink.cs | ExtendedBase を継承し、Link(string)だけを足したクラス |
| パラメータ | Parameters.cs | public static List<ExtendedHeadLink> ExtendedHeadLinks;(初期化子なし) |
| 描画 | HtmlHeadLinks.cs | hb.ExtendedHeadLinks(context) と、内容を組み立てる ExtendedHeadLinks(...) |
| 配信 | HeadLink.cs | クエリ文字列から条件を読んで ExtendedHeadLinks(...) を返す Get |
動かない理由
図を読み込み中…
- 読み込まれない: 起動時の
Initializer.SetParametersはExtendedStyles・ExtendedScripts・ExtendedPluginsなどを読み込みますが、ExtendedHeadLinksを設定する行はありません(Initializer.cs)。パラメータの一括リロードのswitchにもありません。本体のApp_Data/ParametersにExtendedHeadLinksフォルダもありません。そのためParameters.ExtendedHeadLinksは常にnullです。 - 呼ばれない:
hb.ExtendedHeadLinks(context)もHeadLink.Get(context)も、ソース中のどこからも呼ばれていません。ページの<head>を組み立てるHtmlTemplatesが呼ぶのは同じファイルのLinkedHeadLink(favicon と ES モジュールのmodulepreloadを出すメソッド)だけで(HtmlTemplates.cs)、/resources/stylesを返すのはCss.Getです(ResourcesController.cs)。
仮に読み込んだとしても壊れている箇所
描画側のコードは拡張スタイルのコードを写したような形のままで、ExtendedHeadLink を扱うようにはなっていません。
ExtensionUtilities.ExtensionWhere<ExtendedStyle>(extensions: Parameters.ExtendedHeadLinks, ...)と型引数にExtendedStyleを渡し、.Select(o => o.Style)でStyleを読んでいます。ExtensionWhereは最後に.Cast<T>()するため、ExtendedHeadLinkの要素が入っていればInvalidCastExceptionになります(ExtendedHeadLinkとExtendedStyleはどちらもExtendedBaseの子で、互いに継承関係はありません)。ExtendedHeadLink.Linkはどこからも読まれていません。- 出力する
<link>はhrefがresources/styles?...(拡張スタイルと同じ URL)で、relを指定していません。
代わりに使うもの
| やりたいこと | 使うもの |
|---|---|
| 全体または条件付きで CSS を足す | 拡張スタイル(条件で絞るなら Extensions テーブル) |
<head> に外部 CSS やフォントの <link> を足す | 拡張 HTML の HtmlHeaderTop / HtmlHeaderBottom で HTML を差し込む |