Silverlightコンテンツを埋め込むTracマクロ
TracにはWiki用のマクロをPythonで記述して簡単に組み込むための機構が用意されている。これを利用するとTracに大抵の機能は追加することができる。
そこで、今回はSilverlightコンテンツを埋め込むマクロを作ってみた。
Download Silverlight.py
# -*- coding: UTF-8 -*- """ Silverlightコンテンツを埋め込みます。 Silverlightコンテンツはプロジェクト毎の「htdocs」ディレクトリに「ClientBin」というディレクトリ を作り、その下に配置する必要があります。 ex. [[Silverlight(src=Hoge.xap)]] [[Silverlight(src=Hoge.xap, width=200, height=200)]] """ from StringIO import StringIO def execute(hdf, txt, env): args = {} for arg in txt.split(','): val = arg.split('=') args[val[0].strip()] = val[1] xap_width, xap_height = 100, 100 xap_src = env.abs_href.chrome('site', 'ClientBin', args['src']) if args.has_key('width'): xap_width = args['width'] if args.has_key('height'): xap_height = args['height'] buf = StringIO() buf.write( '<object data="data:application/x-silverlight," type="application/x-silverlight-2-b1" width="%(xap_width)s" height="%(xap_height)s">' \ '<param name="source" value="%(xap_src)s" />' \ '<param name="background" value="white" />' \ '<a href="http://go.microsoft.com/fwlink/?LinkID=108182" style="text-decoration: none;">' \ '<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>' \ '</a>' \ '</object>' % vars() ) return buf.getvalue()
このPythonファイルをTracのプロジェクト毎に用意されている「wiki-macros」ディレクトリに置くと使うことができる。
使い方
「Silverlight」という名前のマクロを宣言すると使える。引数として「src=ファイル名」を渡す必要がある。
ここでは「Hello.xap」*1というファイル名のSilverlightコンテンツを埋めこんでいる。
[[Silverlight(src=Hello.xap)]]
このマクロで表示するSilverlightコンテンツはTracのプロジェクト毎に用意されている「htdocs」ディレクトリに「ClientBin」というディレクトリを作って、その下に配置しておく必要がある。
このWiki ページのスクリーンショット
これを使うと結構お手軽にSilverlightコンテンツをTracに埋め込めると思う。
Tracに埋め込まれて実行されるということはSilverlightからTracへのアクセスはクロスドメインアクセスにならないので、直接XML-RPCを使ってTracの情報を取り出せるというのもおいしい。
これでTracにリッチなUIを持ったマクロを作ってみよう。
*1:Helloと表示するだけのSilverlightコンテンツ