OSDN Git Service

Version 0.6.132, fix X.Node._flags & fix X.EventDispatcher._listeners & start to...
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 01_X.js
1 /**\r
2  * <h4>はじめに:Web 開発の世界へようこそ!</h4>\r
3  * DHTML と XHR 等を活用した Ajax によってその真価を発揮した javascript は、現在では RIA に SPA や 3D ゲームなど、あらゆるアプリケーションがブラウザ上で動きつつあります。\r
4  * それらの素晴らしいデモに触れ、これから Web 開発に望む皆さんは、胸をときめかせていることでしょう。\r
5  * そうです、今や Web ブラウザは、あなたの夢を何でも描くことの出来る自由なフロンティアです。\r
6  * \r
7  * しかし、いざ Javascript を触り始め、初めての開発に着手すると、Web ブラウザというフロンティアは、少し雑草の茂るだけの荒野だと気付くでしょう。\r
8  * ここに RIA や 3D ゲームといった素晴らしいテーマパークを築機上げるには、まずは測量に整地、地盤や土壌の改良といった膨大な作業をしなくてはいけません。\r
9  * \r
10  * 簡素な物置小屋のための最初の柱を建てるのにも、それ以前に膨大な作業の必要なことに、あなたは唖然となるでしょう。\r
11  * そのような基礎もそこそこに、勇んで建てた一本目の柱は傾き、または無残に朽ち果てるのを目撃し、あなたは深いため息をつくかもしれません。\r
12  * \r
13  * Javascript は様々な問題を孕みつつも、今や最もあらゆるプラットフォームで動作する言語のひとつへと躍進しました。\r
14  * これから、このフロンティアに如何に基礎を作り、その上にテーマパークを作るのか?一緒に考えていきましょう。\r
15  * ようこそ、Web 開発の世界へ!\r
16  * \r
17  * <h4>pettanR フレームワーク API ドキュメントについて</h4>\r
18  * このAPIドキュメントには、折に触れこのような長文が登場します。\r
19  * Web 開発は今では、そのカジュアルなイメージとは裏腹に、膨大な知識と経験が必要なものになってしまっています。\r
20  * どのようにして、それらの情報を、妥当な業務時間の間に継承していけばよいか?\r
21  * \r
22  * この意識は常にありましたが、このたび pettanR フレームワークの API ドキュメントを作成するにあたり、それに付記していく形で取り組んでみようと思います。\r
23  * \r
24  * <h4>フレームワークのレイヤー構造について</h4>\r
25  * \r
26  * \r
27  * ライブラリは X という名前空間を使用します。\r
28  * @example //ショートハンド\r
29  * X( func ) == X.ViewPort.listenOnce(X.Event.XDOM_READY, func);\r
30  * X('#mydiv') == X.Doc.find('#mydiv');\r
31  * @namespace X\r
32  */ \r
33 function X( v ){\r
34         if( X.Type.isFunction( v ) ){\r
35                 X.ViewPort.listenOnce( X.Event.XDOM_READY, v );\r
36         } else\r
37         if( X_shortcutFunction ){\r
38                 return X_shortcutFunction.apply( X_shortcutContext || X, arguments );\r
39         };\r
40 };\r
41 \r
42 //{+DEV\r
43 if( !window['console'] || ( window.parent && window.parent.log ) )\r
44         console = { log : function(a){\r
45                 var win, elm;\r
46                 //alert(a);\r
47                 if( window.parent ){\r
48                         elm = parent.document.all ? parent.document.all.log : parent.log || parent.document.getElementById( 'log' );\r
49                         elm && ( elm.innerHTML = a + '<br>' + elm.innerHTML );\r
50                 };\r
51         } };\r
52 //+DEV}\r
53 \r
54 var undefined,\r
55         X_EMPTY_OBJECT = {},\r
56         X_TEMP = { onSystemReady : [] },\r
57         X_shortcutFunction,\r
58         X_shortcutContext;\r
59 \r
60 /**\r
61  * バージョン文字列:"0.6.123"\r
62  * @type {string} */\r
63 X.VERSION = '0.6.127';\r
64 \r
65 /**\r
66  * ブートタイム ms\r
67  * @type {number} */\r
68 X.bootTime = + new Date;\r
69 \r
70 /**\r
71  * 空の関数\r
72  * @type {Function} */\r
73 X.emptyFunction = new Function;\r
74 \r
75 /**\r
76  * このscriptはheadタグの中にあるか?\r
77  *  @type {boolean} */\r
78 // TODO defer の場合もあるので、document.readyState を見る\r
79 // MacIE で false\r
80 X.inHead = (function( s ){\r
81         if( !s ) return false;\r
82         if( !s.length ) return false; // Safari1.3 312.8 でerror\r
83         s = s[ s.length - 1 ];\r
84         // Dom0 || Dom1\r
85         s = s.parentElement || s.parentNode || s;// s is for opera7.11\r
86         return s.tagName.toLowerCase() === 'head';// opera7.23 s.tagName is 'HTML'\r
87 })( document.scripts || document.getElementsByTagName && document.getElementsByTagName( 'script' ) || document.all && document.all.tags( 'script' ) );\r
88 \r