【Blogger】b:widget 由来の div の属性を削除する
Blogger のテーマ編集上で使える独自タグには様々な種類があり、ウィジェットを表すタグ b:widget もそのうちの一つです。
例えばウィジェットバージョン1のブログの投稿ウィジェットの場合、このようなコードで表すことができます。
<b:widget id='Blog1' locked='false' title='ブログの投稿' type='Blog' version='1'/>
...
</b:widget>
この b:widget は実際の HTML 上では以下の通り div として出力されます。
<div class='widget Blog' data-version='1' id='Blog1'>
...
</div>
b:widget が div に変換される前後の属性を比較してみると、id はそのままに、type は属性値に widget が加わり class に、version は data-version にそれぞれ置き換わっているのがわかると思います。
正直に言うと筆者の Blogger の使い方ならこれらの属性全てが不要なので、ソースコードを少しでもすっきりさせるためにも、この b:widget 由来の div の属性を削除する方法を考えてみました。
b:widget 由来の div の属性を削除する
属性を消したいウィジェット b:widget 内の <b:includable id='main'>(開始タグ)の直後に以下のコードを追加するだけです。
<b:attr name='id' value=''/>
<b:attr name='class' value=''/>
<b:attr name='data-version' value=''/>
b:attr の name に削除したい属性の名前を入れつつ value の中身を空にしておくと、その属性自体を削除できます。こうすることで b:widget 由来の div タグが以下のようにとてもシンプルになります。
<div>
...
</div>
ただし思わぬ表示崩れや機能の不具合を起こさないためにも、Blogger の標準 JavaScript を有効にしている場合は id を、標準 CSS を有効にしている場合は class を、削除せず残しておいたほうが無難です。
少なくとも、ブログアーカイブウィジェットの id を消してしまうと、階層アーカイブにおいて記事タイトルと URL が取得できなくなることが確認できました。ちなみにブログの投稿ウィジェットのライトボックスは id を消しても通常通り使えます。
筆者は高速化のために標準 JS と CSS を無効にしているため容赦なく全属性を削除しましたが、テスト用のブログで様子を見てからの実装をおすすめします。
b:defaultmarkups でテンプレート化する
様々なウィジェットの b:widget 由来の div の属性を削除したいとき、いちいち b:attr を3つずつ記述するとそこそこかさばりますし、一括で残したい属性が見つかったら修正するのもひと苦労。そんなときはテンプレート化するのが手っ取り早いです。
以下のコードをできれば </head> または </body> の前に追加します。
<b:defaultmarkups>
<b:defaultmarkup type='Common'>
<b:includable id='remove-attributes'>
<b:attr name='id' value=''/>
<b:attr name='class' value=''/>
<b:attr name='data-version' value=''/>
</b:includable>
</b:defaultmarkup>
</b:defaultmarkups>
remove-attributes の文字列は任意のものに変更していただいて構いませんが、必ず他の b:includable の id や b:include の name と被らないものにしてください。
上記のコードが設置できたら、前項と同様に ウィジェット内の <b:includable id='main'>(開始タグ)の直後に以下のコードを追加します。
<b:include name='remove-attributes'/>
一度テンプレ化してしまえば、b:widget に b:attr を複数個並べるより追加するコードも少なくて済みますし、 b:defaultmarkups 内の b:includable の中身を書き換えるだけでウィジェットの属性を一括で変更できます。
このウィジェットにはやっぱり個別にこの属性が必要!という場合には、属性削除用の b:include の直後に新たに b:attr を追加すればオッケーです。
こうして b:widget 由来の div をすっきりさせたことですし、同じように b:section 由来の div の属性も一括削除できないかなと思いましたが、これはどうやら無理みたいでした。残念!