Hikiプラグインの作り方 第二回 HTML表示プラグイン

前回は、HTMLタグを表示する時には直接全部書く以外の方法はしないように、という警告で終わりました。
何故なのでしょう。


結論から言うと、僕の勘違いでした。
プラグインで、引数の文字列中の「<」や「"」なんかをエスケープしないと、表示が崩れてしまうと思っていたのですが、実際やってみると、きちんと「&lt;」や「&quot;」に変換されるようです*1*2


というわけでこの話題お仕舞い。
とにかく、Rubyのメソッドの戻り値が、表示されます。
これが分かるだけで、大分色々なプラグインが作れるでしょう。
あとは、表示するテキストをどうやって組み立てるかという問題なのです。


こんなプラグインも問題無いようです*3

def img_a(img_src, link_uri, text = '')
  %Q|<a href="#{link_uri}"><img src="#{img_src}" alt="#{text}">#{text}</a>|
end

画像を使ってリンクを張るプラグインです。
画像のURI、リンク先のURI、テキスト(省略可)を置きます。

{{img_a(https://twintails.chat/theme/twintails/twintail_fox_small.png https://twintails.chat/ ツインテイルズ)}}

URIとテキストを、空白ではなく改行で区切ることもできます(長いので折り返されているかも知れませんが、画像用のURIは一行です)。

{{img_a
https://twintails.chat/theme/twintails/twintail_fox_small.png
https://twintails.chat/
ツインテイルズ
}}

通常Rubyのメソッドの引数はカンマで区切りますが、Hikiでは空白や改行でも区切れるのです。


表示結果はこう*4
ツインテイルズツインテイルズ
(この凛々しい双尾の狐はid:Mya-3eさんに描いてもらいました)

*1:汚染状態を見て選んでいるんだろうか?

*2:うーんしかし、サニタイズはどこまでがプラグイン製作者の責務なのかよく分からなくなっちゃったな。まあ全部やっとけば問題ないんだろうけど。

*3:URI中にダブルクォートを入れると表示は崩れますが、XSS脆弱性にはならないようになっています。

*4:とうぜん宣伝です。