###################### だぶ天 -- JavaScript用テンプレートエンジン -- dabten.js 1.0.h (C) Wataru Kanzaki, Wings-Winds, http://www.wi-wi.jp/, 2007-2010 ###################### This file is writen in Japanese. (UTF-8) ================================= だぶ天ホームページ http://dabten.wi-wi.jp/ ================================= メソッド ################################ Dabten.Load(files, option) テンプレートファイルをロードします。 XMLHttpRequest、またはActiveXObjectの Microsoft.XMLHTTP, Msxml2.XMLHTTP, Msxml2.XMLHTTP.2.0, Msxml2.XMLHTTP.3.0 のいずれかが使えるブラウザのみ動作します。 ----- arguments ----------- files (Object) {ID1: ファイル1, ID2: ファイル2 [, ...] } このIDはテンプレートからHTMLやDOMノードツリーを作成するときに参照します。 Load()関数は何度でも呼び出せますが、IDは共有されます。 同じIDが指定された場合は上書きされます。 option (Object) ファイルをロードするために必要なデータです。 主にCGIスクリプト等でテンプレートを生成している場合に使用します。 これらのデータは第一引数のファイルが複数ある場合は、全てに同じデータが送信されますので、 個々に指定する場合は1つずつLoad()を呼び出すか、 ファイル名の後ろにQUERY_STRING形式で送信データをつけて下さい。 method: (String) 送信メソッド postData: (String | Object) サーバーに送信するデータ user: (String) Authroizationが必要なページで使用するユーザー名 password: (String) Authroizationが必要なページで使用するパスワード onsuccess: (Function) Load()関数が呼び出されたときの第一引数のセットを1つのグループとして、 全てのファイルを読み終えた後に実行されるコールバック関数です。 エラーがあった場合でも呼び出されます。 ---- sample ------------ Dabten.Load( { id1: 'template1.txt' ,id2:'template2.txt' ,id3:'template3.txt' } , { onsuccess:callback } ); ---- sample ------------ Dabten.Load( { id1:'templage.cgi?id=1' ,id2:'template.cgi?id=2' ,id3:'template.cgi?id=3' } ); ################################ Dabten.LoadMixed(uri, files, option) 全てのテンプレートファイルを、multipart/form-dataの形式で送信、および受信します。 methodに"GET"が指定されるとapplication/x-www-urlencodedとして送信します。 1回の送受信で全てのファイルの受信が完了しますので、 テンプレート数が多いときに、ネットワークリソースの消費を押さえるのに有効です。 一部のブラウザでmultipart/mixedのデータの受信に不具合があるため、 text/plainからエミュレートする方法もあります。 詳しくはウェブサイトをご覧下さい。 http://dabten.wi-wi.jp/method/multipart.html ----- arguments ----------- uri (String) テンプレートファイルを受信するためのCGIスクリプトファイルなどのURI files (Object) {ID1: ファイル名1, ID2: ファイル名2 [, ...] } このIDはテンプレートからHTMLやDOMノードツリーを作成するときに参照します。 Load()関数は何度でも呼び出せますが、IDは共有されます。 同じIDが指定された場合は上書きされます。 option (Object) ファイルをロードするために必要なデータです。 主にCGIスクリプト等でテンプレートを生成している場合に使用します。 これらのデータは第一引数のファイルが複数ある場合は、全てに同じデータが送信されますので、 個々に指定する場合は1つずつLoad()を呼び出すか、 ファイル名の後ろにQUERY_STRING形式で送信データをつけて下さい。 ################################ Dabten.GetHTML('templateID', data) Dabten.InsertHTML('elementID', 'templateID', data) HTMLを作成します。 戻り値はStringです。 Load()で指定されていないIDが指定された場合、 またはLoad()に失敗したファイルのIDが指定された場合は空文字列が返されます。 InsertHTMLでは、生成したHTMLを第一引数のエレメントに挿入します。 戻り値は成功時true、失敗時falseです。 ----- arguments ----------- ID (String) Load()の第一引数のIDに対応。 data (オブジェクト) {id1: value1, id2: value2 [...]} テンプレートの{tpl:id}に適用するデータ ---- sample ------------ document.getElementById('docid').innerHTML=Dabten.GetHTML('id', {name:'Joe',age:33}); ======================== 1つのテンプレートで完結しない場合は、1回ずつinnerHTMLに代入するのではなく、 先に必要なテンプレートを全て読み込んでから、まとめてinnerHTMLに入れてください。 Dabten.Load( { head: 'head.tpl' foot: 'foot.tpl' cont: 'cont.tpl' } ); head.tpl ------------------------

Topic

<- 開始タグで終わる ------------------------ foot.tpl ------------------------
<- 終了タグから始まる

End of Table

------------------------ cont.tpl ------------------------ {tpl::contain} ------------------------ document.getElementById('docid').innerHTML= Dabten.GetHTML('head', {}) + Dabten.GetHTML('cont', {contain:'contants'}) + Dabten.GetHTML('foot', {}); この形式のテンプレートはGetDOMで取得すると開始タグで終わるエレメントは閉じられます。 終了タグで始まるタグは無視されます。 ======================== InternetExplorerにおいて、テーブルコンテンツのtbodyやtrだけを挿入する場合など、 innerHTMLを使用できない場合はDabten.GetDOM()を使用してください。 template ------------------------ 1行1列1行2列 2行1列2行2列 ------------------------ HTML ------------------------
------------------------ // ERROR tbody=document.getElementById('tableid').getElementsByTagName('tbody')[0]; tbody.innerHTML=Dabten.GetHTML(table, data) // SUCCESS domarray = Dabten.GetHTML(table, data) tbody = document.getElementById('tableid').getElementsByTagName('tbody')[0]; for(var i=0;i 1行1列1行2列 2行1列2行2列 ################################ Dabten.GetDOM('teplateID', data, namespace) DOMエレメントを作成します。 戻り値はリスト(配列)となります。 存在しないテンプレートIDが指定された場合は、サイズ0のリストを返します。 ----- arguments ----------- ID (String) Load()の第一引数のテンプレートIDに対応。 data (オブジェクト) {id1: value1, id2: value2 [...]} テンプレートの{tpl:id}に適用するデータ namespace XHTMLで作成している場合に true、または、htmlタグのxmlns属性を指定してください。 DOMエレメント作成時にnamespace付きで作成するようになります。 MIME-Typeがapplication/xmlなど、*/xmlである必要があり、text/htmlではnamespaceは無視します。 この形式は一部のブラウザで対応していません。そのようなブラウザではnamespaceなしとして作成します。 ---- sample ------------ ------------------------

{tpl:title}

{tpl:summary}

------------------------ domarray=Dabten.GetDOM(tplId, {title:'学生簿', summary:'2年1組男子生徒一覧'}, true); docobj=document.getElementById('doc'); for(var id=0;i {tpl:sid} {tpl:name} {tpl::endrepeat} ------------------------ data={students:[ {sid:1, name:'Joe'} ,{age:2, name:'Peat'} ]}; domarray=Dabten.GetDOM(tplId, data); table=document.getElementsByTagName('table')[0]; tbody=table.getElementsByTagName('tbody')[0] for(var i=0;i

{tpl:title}

{tpl:summary}

------------------------ document.getElementById('doc').appendChild( Dabten.GetDOM(tplId, {title:'学生簿', summary:'2年1組男子生徒一覧'})[0] ); ======================== Safariでは配列に対してfor(var i in domarray)を使うと取得できないことがあります。 for(var i=0;i{tpl:title}

{tpl:summary}

------------------------ domarray=Dabten.GetURI('dom', tplId, 'data.cgi'); docobj=document.getElementById('doc'); for(var id=0;i{tpl:title}

{tpl:summary}

------------------------ Dabten.InsertFromURI('element', 'dom', templateId, 'data.cgi', {onSuccess:callback}); ################################ Dabten.InsertJSONP(elementId, templateID, uri, cbkey, post, callback) JSONPを使用してデータを受信します。 JSONPデータはサーバーによって形式が異なるため、 通常は受信するデータを受けるための関数(callback)を用意して下さい。 callback({key1:value1, key2:value2}) の形式で受け取れるサーバーでは、 callbackが指定されていない場合、 [{key: key1, value: value1}, {key:key2, value:value2}] の配列に変換し、InsertDOMを実行します。 ----- arguments ----------- elementID (String | Object) HTMLドキュメントのエレメントID。 templateID (String) Load()の第一引数のテンプレートIDに対応。 uri (String) JSONP送信プログラムのURI cbkey (String) JSONP送信者が指定したcallback関数の呼び出し名 ほとんどのサーバーで "callback" のようです。 post (Object) {id1: value1, id2: value2 [...]} サーバーに送信するデータ callback (Function) データ受信後(