+\r
/**\r
* <h4>はじめに:Web 開発の世界へようこそ!</h4>\r
* DHTML と XHR 等を活用した Ajax によってその真価を発揮した javascript は、現在では RIA に SPA や 3D ゲームなど、あらゆるアプリケーションがブラウザ上で動きつつあります。\r
* この意識は常にありましたが、このたび pettanR フレームワークの API ドキュメントを作成するにあたり、それに付記していく形で取り組んでみようと思います。\r
* \r
* <h4>フレームワークのレイヤー構造について</h4>\r
+ * <h5>\core 以下:javascript の整地を行い大規模開発の基礎を整える</h5>\r
+ * <p>ブラウザの種類とバージョンを調べ、続いて javascript 自体の差異を埋め、足りない関数を補います。\r
+ * <p>続いて、ファーストオブジェクトとも呼ばれる function について、その能力を引き出しつつ安心して使えるように、再利用可能クロージャの生成・破棄ができるようにします。\r
+ * ガベージコレクション周りが怪しいブラウザがあるため、クロージャを再利用可能にしておくことは重要です。\r
+ * <p>javascript が大規模開発に使えるように、クラス定義関数を用意します。prototype 周りの差異やバグを吸収するためにも、クラス定義の共通化は有効です。\r
+ * <p>このクラス定義関数を用いて EventDispatcher クラスを定義します。ブラウザの提供するイベントターゲットオブジェクトをラップしたり、単にアプリケーション独自のイベントを配信するためにも使えます。\r
+ * フレームワークの各所でサブクラスや単にインスタンスを拡張して使われています。フレームワークの API 設計の性格を決めている、とても重要なクラスです。\r
+ * 再利用可能クロージャや、タイマー(setTimeout のラッパー) とも密に結合しています。\r
+ * \r
+ * <h5>\dom 以下:DHTML の差異を吸収し、非同期化された仮想 Node を提供する</h5>\r
+ * <p>jQuery ライクな構文で DOM ツリーの操作を行います。チェーンメソッドは速い、と聞きかじったのでこのデザインにしました。\r
+ * <p>Real DOM の操作は非同期に行われるため高速です。Virtual DOM 時代のライバル達にひけをとることはありません。\r
+ * <p>10 年後の変化に対応するため、確かな抽象化実装を行う。それを証明するために 10 年前の環境でも動作させます。\r
* \r
+ * <h5>\ui 以下:UI フレームワーク</h5>\r
+ * <p>\dom までで吸収できなかった Web ブラウザの差異を最終的に吸収し、HTML 要素を UI 部品として利用するためのレイヤーです。\r
+ * <p>この層で吸収できなかった差異に関する情報を提供して、アプリケーションに UI をグレースフルグラデーションするための情報を提供します。\r
+ * <p>任意の UI を実現するための最適な HTML タグ構造がブラウザ毎に異なる場合に、その差異をカプセル化します。\r
+ * <p>Web ブラウザ自体のレンダリングコストを最小にし、高速な UI 部品を提供するために、独自のレイアウトルールを持ちます。\r
+ * <p>フォントサイズをベースとしたレイアウト指定のため、レスポンシブな画面作りを後押しします。\r
* \r
- * ライブラリは X という名前空間を使用します。\r
- * @example //ショートハンド\r
- * X( func ) == X.ViewPort.listenOnce(X.Event.XDOM_READY, func);\r
+ * @example // ライブラリは X という名前空間を使用します。\r
+ * //ショートハンド\r
+ * X( func ) == X.ViewPort[ 'listenOnce' ](X.Event.XDOM_READY, func);\r
* X('#mydiv') == X.Doc.find('#mydiv');\r
* @namespace X\r
- */ \r
+ */\r
function X( v ){\r
- if( X.Type.isFunction( v ) ){\r
- X.ViewPort.listenOnce( X.Event.XDOM_READY, v );\r
+ if( X_Type_isFunction( v ) ){\r
+ X[ 'ViewPort' ][ 'listenOnce' ]( X_EVENT_XDOM_READY, v );\r
} else\r
if( X_shortcutFunction ){\r
return X_shortcutFunction.apply( X_shortcutContext || X, arguments );\r
} };\r
//+DEV}\r
\r
+//{-AUDIO\r
+//-AUDIO}\r
+\r
var undefined,\r
X_EMPTY_OBJECT = {},\r
X_TEMP = { onSystemReady : [] },\r
+ X_emptyFunction = new Function,\r
X_shortcutFunction,\r
X_shortcutContext;\r
\r
/**\r
* バージョン文字列:"0.6.123"\r
* @type {string} */\r
-X.VERSION = '0.6.127';\r
+X[ 'VERSION' ] = '0.6.127';\r
\r
/**\r
* ブートタイム ms\r
* @type {number} */\r
-X.bootTime = + new Date;\r
+X[ 'bootTime' ] = + new Date;\r
\r
/**\r
* 空の関数\r
* @type {Function} */\r
-X.emptyFunction = new Function;\r
+X[ 'emptyFunction' ] = X_emptyFunction;\r
\r
/**\r
* このscriptはheadタグの中にあるか?\r
* @type {boolean} */\r
// TODO defer の場合もあるので、document.readyState を見る\r
// MacIE で false\r
-X.inHead = (function( s ){\r
+X[ 'inHead' ] = (function( s ){\r
if( !s ) return false;\r
if( !s.length ) return false; // Safari1.3 312.8 でerror\r
s = s[ s.length - 1 ];\r