簡単なスクリプトサイドバープラグインの作成

はじめに


このドキュメントはVBScriptの知識があることを前提に記述しています。

また、XSLスタイルシートの知識があることを推奨します。

この解説について

ここでは、解析スクリプトでアイテムを追加する作業を行うことでサイドバー上にリンクが表示されるまでを解説します。

この解説ではLunaItemXmlBuilderオブジェクトとLunaScriptSidebarオブジェクトを使用しています。

LunaItemXmlBuilderオブジェクトとは解析スクリプトが取得したデータをいったん格納し、スクリプトサイドバーデフォルトで入っているXSLTに対応するXMLへの変換を手助けしてくれる機能を持ったオブジェクトです。

LunaScriptSidebarオブジェクトは、解析スクリプトからサイドバーの内容の素となるXMLを登録したり、解析スクリプトに対し解析の支援となる機能を提供するオブジェクトです。

これらのオブジェクトといくつかのメソッドを利用してみましょう。

使用するオブジェクトとメソッド


このサンプルで用いるオブジェクトとメソッドは以下のとおりです。

オブジェクト 利用するメソッド
LunaItemXmlBuilder GetRootItemID

AppendChild

ItemTitle

ItemURL

ToString

LunaScriptSidebar SetXml
Update

解析スクリプト


sample.vbsを次のように変更して、Lunascapeを再起動してサイドバーを表示します。

'Lunascape Co., LTD. All rights reserved.

Function main()
main = True

Dim idRoot
idRoot = LunaItemXmlBuilder.GetRootItemID()

Dim itemHelloWorld
itemHelloWorld = LunaItemXmlBuilder.AppendChild _
(idRoot, “FAVORITE_LINK”, “”)
LunaItemXmlBuilder.ItemTitle(itemHelloWorld) _
= “Hello World!”
LunaItemXmlBuilder.ItemURL(itemHelloWorld) _
= “http://www.luna.tv/”
LunaScriptSidebar.SetXml(LunaItemXmlBuilder.ToString())
LunaScriptSidebar.Update()
End Function

サイドバーに”Hello World!”というアイテムが追加されました。

追加したアイテムをクリックすればLunaTVにジャンプします。

スクリプトの解説

Function main()



End Function

サイドバー内のページが表示された際に実行される関数の宣言です。

main = True

関数を実行した結果の成否を設定している行です。

フレームワークは呼び出した関数の実行結果が”True”でない限りコンテントの内容を更新しません。

サンプルでは代入をしているだけですが、さまざまな方法で実行結果を判定することでプラグインの動作を詳細にコントロールすることが可能になります。

Dim idRoot
idRoot = LunaItemXmlBuilder.GetRootItemID()

LunaItemXmlBuilderから’ルートアイテム’の識別子を取得するコードです。

スクリプトが追加するアイテムは’ルートアイテム’を根とするツリー構造で表現されます。

Dim itemHelloWorld
itemHelloWorld = LunaItemXmlBuilder.AppendChild _
(idRoot, "FAVORITE_LINK", "")

ルートアイテムの下に’リンクアイテム’を追加している行です。

第一引数に’ルートアイテム’の識別子を指定し、第二引数に”FAVORITE_LINK”を指定しています。

第二引数に”FAVORITE_LINK”することでタイトル、URLおよびコメントを持つアイテムが作成できます。

LunaItemXmlBuilder.ItemTitle(itemHelloWorld) = "Hello World!"

これは追加した’リンクアイテム’にタイトルを設定している行です。

LunaItemXmlBuilderItemTitleメソッドの引数に追加した’リンクアイテム’の識別子を指定することでタイトルを設定しています。

なおAppendChildメソッドの第三引数に”Hello World!”と指定しても同様の結果が得られます。

LunaItemXmlBuilder.ItemURL(itemHelloWorld) = "http://www.luna.tv/"

これは追加した’リンクアイテム’にリンク先URLを設定している行です。

LunaItemXmlBuilderItemURLメソッドの引数に追加した’リンクアイテム’の識別子を指定することでリンク先URLを設定しています。

LunaScriptSidebar.SetXml(LunaItemXmlBuilder.ToString())

LunaItemXmlBuilderToStringメソッドを用いて、追加したアイテムからXMLデータを作成し、LunaScriptSidebarSetXmlメソッドを通じてXMLを登録しています。

登録したXMLは、XSLスタイルシートによりHTMLに変換されます。

LunaScriptSidebar.Update()

変換されたHTMLは、LunaScriptSidebarUpdateメソッドを用いてサイドバーの表示が更新されます。

フレームワークには、LunaItemXmlBuilderオブジェクトやLunaScriptSidebarオブジェクト以外にもさまざまなオブジェクトが利用可能です。

次の高度なスクリプトサイドバープラグインの作成では、さまざまなオブジェクトを利用したプラグインの作成を解説します。

LunaItemXmlBuilderオブジェクトが出力するXML


出力されるXMLについて

LunaItemXmlBuilderToStringメソッドが作成するXMLは以下のようになります。

<?xml version="1.0" encoding="UTF-16"?>
<opml>
<head/>
<body>
<outline type="link" htmlUrl="http://www.luna.tv/" itemtype="FAVORITE_LINK"
text="Hello World!"/>
</body>
</opml>

作成されるXMLはOPML形式で記述されており、後述するXSLスタイルシートもOPMLを処理できる形式で記述してあります。

OPMLはRSSの配信等に用いられている汎用のXMLフォーマットであり、フォーマットや対応するXSLスタイルシートの解説が豊富にあります

OPML形式についての詳細は、

などを参考にしてください。

解析スクリプトと出力されるXMLの対応関係

LunaItemXmlBuilderが自動的に作成するXMLを利用する開発において、XML自体を目にすることはありません。

しかし、解析スクリプトによるアイテムの追加と作成されるXMLの内容の関係を理解することはXSLスタイルシートを記述する上で重要です。

上記XMLにおいては、

<outline type="link" htmlUrl="http://www.luna.tv/"
text="Hello World!"/>

の部分が解析スクリプトで追加したアイテムに対応する部分となります。

<outline>要素内に各種属性が登録されているのが確認できます。

スクリプトのコードと各種属性の詳細な対応関係は以下のとおりです。

解析スクリプトのコード <outline>要素内の属性
    itemHelloWorld = LunaItemXmlBuilder.AppendChild _
        (idRoot, "FAVORITE_LINK", "")
type="link"

LunaItemXmlBuilder.ItemTitle(itemHelloWorld) _
       = "Hello World!"
text="Hello World!"

    LunaItemXmlBuilder.ItemURL(itemHelloWorld) _
        = "http://www.luna.tv/"
htmlUrl="http://www.luna.tv/"

XSLスタイルシートの記述では要素内の各種属性の処理が中心となります。

XSLスタイルシート


XSLスタイルシートは以下のとおりです。

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rss="http://purl.org/rss/1.0/">
<xsl:output method="html" encoding="utf-8" />
<xsl:template match="/">
<html>
<head>
<base href="%BASE%" />
</head>
<body>
< table>
<tr>
<td>
<img src=”./image/refresh.png”
onclick=”LunaScriptSidebar.Reload()”
alt=”更新” style=”cursor:hand;” /></td>
</tr>
<xsl:apply-templates select=”opml/body/outline” />
</table>
</body>
</html></xsl:template>
<xsl:template match=”outline”>
<xsl:if test=”@type=’link'”>
<tr>
<td>
<a>

<xsl:attribute name=”href”>
<xsl:value-of select=”@htmlUrl” />
</xsl:attribute>
<xsl:value-of select=”./@text” />
</a>
</td>

</tr>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

スタイルシートの解説

<base href="%BASE%" />

フレームワークはスタイルシートを読み込んだ際に、%BASE%を”プラグインのルートディレクトリ\templates\”に変換します。

スタイルシート内で利用する画像ファイルやCSSファイルは”プラグインのルートディレクトリ\templates\”を基準とした相対パスで記述することができます。

<img src="./image/refresh.png"
onclick="LunaScriptSidebar.Reload()"
alt="更新" style="cursor:hand;" />

このHTMLにより表示されるイメージをクリックすると、サイドバーの内容が再表示されます。

srcで指定している画像は前述のように”プラグインのルートディレクトリ\resource\”を基準とした相対パスで記述しています。

onclickイベントにはLunaScriptSidebarオブジェクトのReloadメソッドを呼び出すスクリプトを記述しています。

サイドバー内に表示されるHTML内のスクリプトではLunaScriptSidebarオブジェクトが利用可能です。

スクリプトサイドバープラグインリファレンス