OSDN Git Service

Version 0.6.138, working X.UI.ScrollBox!, fix Node.prev & Node.next.
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 03_XType.js
1 var\r
2         /**\r
3          * Array か?判定する。argumnets 等のフェイク Array は false なので注意。\r
4          * @funciton\r
5          * @alias X.Type._isArray\r
6          */\r
7         X_Type_isArray =\r
8                 new Function( 'v',\r
9                         X_UA[ 'IE' ] < 5.5 || X_UA[ 'NetFront' ] < 4 ? // netfront3.4 は html に  instanceof をすると error になる\r
10                                 'return v&&v.push===Array.prototype.push' : // win ie5-, MacIE5.2\r
11                         X_UA[ 'IE' ] ?\r
12                                 'return v&&Object.prototype.toString.call(v)==="[object Array]"' :\r
13                                 'return v instanceof Array'\r
14                 ),\r
15 \r
16         /**\r
17          * HTMLElement か?判定する。ちなみに return v instanceof Element は ie8 でエラー。\r
18          * @funciton\r
19          * @alias X.Type.isHTMLElement\r
20          */\r
21         X_Type_isHTMLElement =\r
22                 new Function( 'v',\r
23                         ( X_UA[ 'IE4' ] || X_UA[ 'MacIE' ] ) ?\r
24                                 'return v&&v.tagName&&v.insertAdjacentHTML&&true' : // ie4 or MacIE5.23, v.all <- error\r
25                         X_UA[ 'NetFront' ] < 4 ?\r
26                                 'return v&&v.nodeType===1' : // instanceof not a function. netfront3.4 は html に  instanceof をすると error になる\r
27                         window[ 'HTMLElement' ] ?\r
28                                 'return v instanceof HTMLElement' :\r
29                                 'return v&&v.appendChild&&v.nodeType===1'\r
30                 );\r
31 \r
32 \r
33 \r
34 /**\r
35  * http://pettanr.sourceforge.jp/test/type.html\r
36  * ビルトイン方の判定に使用する関数を集めたもの。ブラウザのネイティブな判定関数には不可解な挙動があるので、X.Type を使用するほうがよい。\r
37  * \r
38  * @namespace X.Type\r
39  * @alias X.Type\r
40  */\r
41 X[ 'Type' ] = {\r
42         'isObject'      : X_Type_isObject,\r
43         'isFunction'    : X_Type_isFunction,\r
44         'isUnknown'     : X_Type_isUnknown,\r
45         'isArray'       : X_Type_isArray,\r
46         'isBoolean'     : X_Type_isBoolean,\r
47         'isString'      : X_Type_isString,\r
48         'isNumber'      : X_Type_isNumber,\r
49         'isFinite'      : X_Type_isFinite,\r
50         'isNaN'         : X_Type_isNaN,\r
51         'isHTMLElement' : X_Type_isHTMLElement,\r
52         'isImage'       : X_Type_isImage,\r
53         'isNull'        : X_Type_isNull,\r
54         'isUndefined'   : X_Type_isUndefined\r
55 };\r
56 \r
57         /**\r
58          * Object か?判定する。typeof null === 'object' に対策済なので null は Object ではない。\r
59          * new String(), new Number(), new Boolean() も typeof object なので対策\r
60          * @alias X.Type.isObject\r
61          */\r
62         function X_Type_isObject( v ){\r
63                 return v && typeof v === 'object'; // && ( v !== v + '' && v !== v + 0 && v !== true ) ; // typeof null === 'object' に対策\r
64         };\r
65         /**\r
66          * Function か?判定する。\r
67          * @alias X.Type.isFunction\r
68          */\r
69         function X_Type_isFunction( v ){\r
70                 return typeof v === 'function';\r
71         };\r
72         /**\r
73          * ie の XHR.open 等ビルトインオブジェクトか?判定する。\r
74          * @alias X.Type.isUnknown\r
75          */\r
76         function X_Type_isUnknown( v ){\r
77                 return typeof v === 'unknown';\r
78         };\r
79 \r
80         /**\r
81          * 真偽値か?判定する。\r
82          * @alias X.Type.isBoolean\r
83          */\r
84         function X_Type_isBoolean( v ){\r
85                 return v === true || v === false;\r
86         };\r
87         /**\r
88          * 文字列か?判定する。\r
89          * @alias X.Type.isString\r
90          */\r
91         function X_Type_isString( v ){\r
92                 return typeof v === 'string'; // v === v + ''; // 文字列の加算は IE で遅いかも。\r
93         };\r
94         /**\r
95          * 数値値か?判定する。\r
96          * @alias X.Type.isNumber\r
97          */\r
98         function X_Type_isNumber( v ){\r
99                 return typeof v === 'number'; // v !== v || v + 0 === v;\r
100         };\r
101         /**\r
102          * finite か?判定する。isFinite( '123' ) === true に対策済。\r
103          * @alias X.Type.isFinite\r
104          */\r
105         function X_Type_isFinite( v ){\r
106                 return typeof v === 'number' && isFinite( v );\r
107         };\r
108         /**\r
109          * NaN か?判定する。isNaN( 'NaN' ) === true に対策済。\r
110          * @alias X.Type.isNaN\r
111          */\r
112         function X_Type_isNaN( v ){\r
113                 return v !== v;\r
114         };\r
115 \r
116         \r
117         /*\r
118          * new Image した場合に HTMLImageElement が作られるブラウザと,そうでないブラウザ(IE8-)がある\r
119          * @alias X.Type.isImage\r
120          */     \r
121         function X_Type_isImage( v ){\r
122                 if( v && v.constructor === window.Image ) return true;\r
123                 if( v && window.HTMLImageElement && v.constructor === window.HTMLImageElement ) return true; // ie6- は constructor が undef、HTMLImageElement が undef なので、HTMLElement の存在確認が必要\r
124                 if( X_UA[ 'WebKit' ] < 525.13 ){ // Safari3-\r
125                         if( v && v.src !== undefined && v.onload !== undefined && X_Type_isNumber( v.height ) && X_Type_isNumber( v.width ) && X_Type_isBoolean( v.complete ) ){\r
126                                 return true;\r
127                         };\r
128                 };\r
129                 return false;\r
130         };\r
131         /*\r
132         isElementCollection : function(v) {\r
133                 return (Object.prototype.toString.call(v) === "[object HTMLCollection]");\r
134         },\r
135         */\r
136         /**\r
137          * Null か?判定する。\r
138          * @alias X.Type.isNull\r
139          */\r
140         function X_Type_isNull( v ){\r
141                 return v === null;\r
142         };\r
143         /**\r
144          * undefined か?判定する。\r
145          * @alias X.Type.isUndefined\r
146          */\r
147         function X_Type_isUndefined( v ){\r
148                 return v === void 0;\r
149         };\r
150 \r
151 console.log( 'X.Core.Type' );\r