プラグインの作成
この章では、独自のプラグイン・クラスを作成する場合に従う基本的な要件について説明しています。以下のトピックについて説明します。
ページ・マネージャ・プラグインの作成
ページ・マネージャ・プラグインを作成するには、ページ・クラスが以下の要件を満たしている必要があります。
-
%ZEN.Mojo.Plugin.basePageManagerOpens in a new tab を拡張する必要があります。
-
論理名を指定する必要があります。これを行うには、pluginName プロパティを組み込み、その InitialExpression を指定します。規約では、XData ブロックで使用されるものと同じ名前を指定します (次の項目を参照)。
-
XMLNAME パラメータを指定できます。これは、XData ブロックで使用されているプラグインの名前にバージョン番号 (ダッシュおよびピリオド文字を使用) を含める場合に役立ちます。XMLNAME が指定されていない場合、プラグインの名前は既定の短いクラス名になります。
-
バージョンを指定できます。これを行うには、version プロパティを組み込み、その InitialExpression を指定します。
-
onCheckLibraries()、afterRenderDocument()、および afterPopDocument() メソッドを実装する必要があります (詳細は、以下のセクションを参照)。
必要なページ・マネージャ・メソッド
以下のページ・クラスのメソッドがページ・マネージャ・プラグインで必要とされます。
ClientMethod onCheckLibraries() [ Language = javascript ]
必要なライブラリを使用できない場合、ユーザに警告します。Zen Mojo は、このページ・マネージャ・クラスを使用する Zen Mojo ページを表示すると、このメソッドを呼び出します。このメソッドは、このページ・クラスによって必要とされるライブラリがページ・クラスに使用可能かどうかについて、適切なチェックを実行する必要があります。ライブラリが使用可能でない場合、このメソッドは alert() を使用して、ユーザに警告を表示します。
以下に例を示します。
ClientMethod onCheckLibraries() [ Language = javascript ]
{
if (typeof $ === 'undefined') {
alert('jQuery library is not loaded correctly. Check your includes.');
return false;
} else if (typeof $.UIGoToArticle === 'undefined') {
alert('Chocolate Chip UI library is not loaded correctly. Check your includes.');
return false;
}
return true;
}
ライブラリが必要でない場合、このメソッドは True を返します。
ClientMethod afterRenderDocument(docView, displayMode, html) [ Language = javascript ]
ここで、docView は documentView インスタンスの ID、displayMode はインスタンスの現行の表示モード、html はこのインスタンスについて生成された HTML です。displayMode は、'layout'、'data'、'html'、または 'iframe' にすることができます。
このメソッドは、ブラウザで使用される DOM (ドキュメント・オブジェクト・モデル) を Zen Mojo が定義する方法を制御します。イベントの順序は以下のとおりです。
-
ページが要求されます。
-
Zen Mojo は、それぞれの documentView に必要な HTML を生成します。
-
プロパティ suppressRender が False の場合、Zen Mojo は DOM に HTML を挿入します。
そうでない場合、Zen Mojo はこの手順をスキップします。
-
Zen Mojo は afterRenderDocument() を呼び出します。
このメソッドが何もする必要がない場合、NULL を返します。
ClientMethod afterPopDocument(docView, render) [ Language = javascript ]
popDocument() が呼び出されるときに、ページ・マネージャが移行を処理する方法を制御します。イベントの順序は以下のとおりです。
-
クライアント・メソッドは popDocument() を呼び出します。
-
afterRenderDocument() エントリの説明にあるように、Zen Mojo は新規のドキュメントをレンダリングします。
-
Zen Mojo は afterPopDocument() を呼び出します。
このメソッドが何もする必要がない場合、NULL を返します。
ヘルパー・プラグインの作成
ヘルパー・プラグインを作成するには、ヘルパー・クラスが以下の要件を満たしている必要があります。
-
%ZEN.Mojo.Plugin.baseHelperPluginOpens in a new tab を拡張する必要があります。
-
論理名を指定する必要があります。これを行うには、pluginName プロパティを組み込み、その InitialExpression を指定します。規約では、XData ブロックで使用されるものと同じ名前を指定します (次の項目を参照)。
-
XMLNAME パラメータを指定できます。これは、XData ブロックで使用されているプラグインの名前にバージョン番号 (ダッシュおよびピリオド文字を使用) を含める場合に役立ちます。XMLNAME が指定されていない場合、プラグインの名前は既定の短いクラス名になります。
-
(推奨) バージョンを指定できます。これを行うには、version プロパティを組み込み、その InitialExpression を指定します。
-
onCheckLibraries()、getFeatures()、および createLayoutObjects() メソッドを実装する必要があります (詳細は、以下のセクションを参照)。
必要なヘルパー・プラグイン・メソッド
以下のヘルパー・クラスのメソッドがヘルパー・プラグインで必要とされます。
ClientMethod onCheckLibraries() [ Language = javascript ]
必要なライブラリを使用できない場合、ユーザに警告します。Zen Mojo は、このヘルパー・プラグイン・クラスを使用する Zen Mojo ページを表示するときに、このメソッドを呼び出します。このメソッドは、このプラグインによって必要とされるライブラリがロードされているかどうかについて、適切なチェックを実行する必要があります (前述の “必要なページ・マネージャ・メソッド” で示されている、onCheckLibraries() のページ・クラス・バージョンの例を参照)。ライブラリが使用可能でない場合、このメソッドは alert() を使用して、ユーザに警告を表示します。
ライブラリが必要でない場合、このメソッドは True を返します。
ClientMethod getFeatures() [ Language = javascript ]
オブジェクトの配列を返します。この配列には、このヘルパー・プラグインによってサポートされているレイアウト要素ごとに 1 つのオブジェクトが含まれます。この配列内のそれぞれのオブジェクトには、identifier プロパティが含まれている必要があります。また、このプロパティの値はレイアウト要素の論理名でなければなりません。Zen Mojo は、この情報を内部的に使用して、レンダリング要求を配信する方法を決定します。
ClientMethod createLayoutObjects(type, instance) [ Language = javascript ]
このヘルパー・プラグインによってサポートされているレイアウト・オブジェクトごとに HTML を生成します。Zen Mojo は、レイアウト・グラフ内のレイアウト・オブジェクトごとにこのメソッドを 1 回呼び出します。引数は、type (レイアウト・オブジェクトのタイプ) と instance (レイアウト・オブジェクト自体) です。
このメソッドは、指定できるタイプごとに instance.$render を定義する必要があり、instance.$render はそのタイプに適した HTML を返す必要があります。
生成された特定の HTML 要素を取得する方法を公開する場合は、それらの要素の固有 ID を作成します。固有 ID を生成するには、Zen Mojo $makeId() 関数を使用します。この関数は、ドキュメント・スタックを使用している場合でも、すべてのシナリオで固有 ID を生成します。以下に例を示します。
html.push('<h1 id="'+this.$makeId('caption')+'" class="'+captionClass+'" style="'+zenGet(this.captionStyle)+'">');
特定のレイアウト・オブジェクトに対して HTML を定義するロジック内では、ID を持つ必要がある HTML 要素ごとに、この関数に異なる文字列値を渡してください。
プラグイン・ドキュメントの作成
ページ・マネージャのプラグイン・ドキュメントを作成するには、そのクラスにコメントを指定します (各行の先頭に 3 個のスラッシュを付けます)。プラグイン・ドキュメント・アプリケーションにより、これらのコメントが自動的に表示されます (“プラグイン・ドキュメントおよびウィジェット・リファレンス・アプリケーションの使用” を参照してください)。
ヘルパー・プラグインのプラグイン・ドキュメントを作成するには、以下のようにして、関連するクラスを定義します。
-
%ZEN.Mojo.Plugin.baseHelperDocumentationOpens in a new tab を拡張する必要があります。
-
その名前は fullPluginClassNameDocumentation でなければなりません。
-
以下の手順に従って、getDocumentation() を実装する必要があります。
ClientMethod getDocumentation(identifier) [ Language = javascript ]
ここで、identifier は、ヘルパー・プラグインによって提供されるレイアウト・オブジェクトのタイプです。使用できる identifier ごとに、このメソッドは以下のプロパティを持つオブジェクトを返す必要があります。
-
description — レイアウト・オブジェクトの簡単な説明。
-
attributes — このレイアウト・オブジェクトについてサポートされている属性を説明するオブジェクトの配列。この配列内のそれぞれのオブジェクトは、以下のプロパティを指定する必要があります。
-
name — 属性の名前
-
type — 属性のタイプ (有効なタイプは、string、number、boolean、date、object、array、または function です)
-
description — 属性の説明
-
以下に例を示します。
{ description: 'Description of the identifier e.g. $loop', attributes: [ { name:'value', type:'string', description:'Holds the value of the html element' } ] }
-