by WebSurfer
2010年5月29日 17:07
SyntaxHighlighter 2.0 Extension For BlogEngine.NET を導入してみました。前のエントリのコード表示と比べて、かなり見栄えがよくなったと思いますが、いかがでしょうか?
private void RemoveSetting(string settingName)
{
foreach (ManagedExtension x in ExtensionManager.Extensions)
{
if (x.Name == extensionName)
{
// x.Initialized(settingName) ではコンパイルエラー。以下に変更
if (x.Initialized(ExtensionManager.GetSettings(extensionName, settingName)))
{
foreach (ExtensionSettings y in x.Settings)
{
if (y.Name == settingName)
{
x.Settings.Remove(y);
break;
}
}
ExtensionManager.SaveToStorage(x);
}
break;
}
}
}
このソースコードは CodePlex のサイト から入手できます。
SyntaxHighlighter の 本家のサイト からダウンロードできるのは JavaScript と CSS のみですが、CodePlex からダウンロードできるものは、それらに加えて、BlogEmgine.NET に統合して操作するためのコード(Admin.aspx, Admin.aspx.cs, SyntaxHighlighter.cs)が含まれています。
ただし、Admin.aspx.cs にバグがあって、修正しないとエラーで動きません。上記の 8 行目(ハイライトした行)のように修正すれば OK です。
このコードは、JavaScript や CSS を追加したり削除したりした場合、それをコントロールパネルに反映させるためのものです。
例えば、不要な JavaScript を scripts フォルダから削除した場合、コントロールパネルの Brushes の一覧から当該アイテムを削除するには、[Update Brush List] ボタンをクリックしますが、そのときに RemoveSetting メソッドを使うようです。
BlogEngine と SyntaxHighlighter をキーワードにググってみても、上記の問題が報告されているページは見あたらなかったのが不思議です。
Initialized メソッドは、ManagedExtension クラスの中で以下のように定義されていて、引数が String のオーバーロードもないので、上記のように直さないとコンパイラも通らないのですが。
public bool Initialized(ExtensionSettings xs)
{
if (xs != null)
{
foreach (ExtensionSettings setItem in _settings)
{
if (setItem.Name == xs.Name)
{
if (setItem.Parameters.Count == xs.Parameters.Count)
{
return true;
}
}
}
}
return false;
}
---------------------------------------------------
2010/5/31 追記
IE8 以外のブラウザでどう見えるか試してみましたが、Firefox 3.6.3, Safari 4.0.5 では表示が乱れ、クリップボードで取得したコードをメモ帳にペーストすると改行がうまくいきません。IE6, Opera 10.53 も若干問題ありでした。IE7 は試せる環境がないので分かりません。どうも、問題ないのは IE8 のみのようです。