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 / 03_XType.js
index b30d82d..28c100a 100644 (file)
@@ -1,70 +1,96 @@
-/*\r
+/**\r
  * http://pettanr.sourceforge.jp/test/type.html\r
+ * ビルトイン方の判定に使用する関数を集めたもの。ブラウザのネイティブな判定関数には不可解な挙動があるので、X.Type を使用するほうがよい。\r
  * \r
- * need xua\r
+ * @namespace X.Type\r
+ * @alias X.Type\r
  */\r
-\r
 X.Type = {\r
+       /**\r
+        * Object か?判定する。typeof null === 'object' に対策済なので null は Object ではない。\r
+        */\r
        isObject : function( v ){\r
                return v && typeof v === 'object'; // typeof null === 'object' に対策\r
        },\r
-       \r
+       /**\r
+        * Function か?判定する。\r
+        */\r
        isFunction : function( v ){\r
                return typeof v === 'function';\r
        },\r
-       \r
+       /**\r
+        * ie の XHR.open 等ビルトインオブジェクトか?判定する。\r
+        */\r
        isUnknown : function( v ){\r
-               return typeof v === 'unknown'; // ie の XHR.open など\r
+               return typeof v === 'unknown';\r
        },\r
-       \r
+       /**\r
+        * Array か?判定する。argumnets 等のファイク Array は false なので注意。\r
+        * @funciton\r
+        */\r
        isArray :\r
                new Function( 'v',\r
-                       X.UA.IE < 5.5 ?\r
+                       X_UA.IE < 5.5 || X_UA.NetFront < 4 ? // netfront3.4 は html に  instanceof をすると error になる\r
                                'return v&&v.push===Array.prototype.push' : // win ie5-, MacIE5.2\r
-                       X.UA.IE ?\r
+                       X_UA.IE ?\r
                                'return v&&Object.prototype.toString.call(v)==="[object Array]"' :\r
                                'return v instanceof Array'\r
                ),\r
-               \r
+       /**\r
+        * 真偽値か?判定する。\r
+        */\r
        isBoolean : function( v ){\r
                return v === true || v === false;\r
        },\r
-       \r
+       /**\r
+        * 文字列か?判定する。\r
+        */\r
        isString : function( v ){\r
-               return typeof v === 'string';\r
+               return typeof v === 'string'; // v === v + ''; // 文字列の加算は IE で遅いかも。\r
        },\r
-       \r
+       /**\r
+        * 数値値か?判定する。\r
+        */\r
        isNumber : function( v ){\r
                return typeof v === 'number'; // v !== v || v + 0 === v;\r
        },\r
-       \r
+       /**\r
+        * finite か?判定する。isFinite( '123' ) === true に対策済。\r
+        */\r
        isFinite : function( v ){\r
-               return typeof v === 'number' && isFinite( v ); // isFinite( '123' ) とかに対策\r
+               return typeof v === 'number' && isFinite( v );\r
        },\r
-       \r
+       /**\r
+        * NaN か?判定する。isNaN( 'NaN' ) === true     に対策済。\r
+        */\r
        isNaN : function( v ){\r
-               return v !== v; // isNaN( 'NaN' ) になってしまう\r
+               return v !== v;\r
        },\r
-       \r
+       /**\r
+        * HTMLElement か?判定する。\r
+        * @funciton\r
+        */\r
        isHTMLElement :\r
                new Function( 'v',\r
-                       ( X.UA.IE4 || X.UA.MacIE ) ?\r
-                               'return v&&v.tagName' : // ie4 or MacIE5.23, v.all <- error\r
+                       ( X_UA.IE4 || X_UA.MacIE ) ?\r
+                               'return v&&v.tagName&&v.insertAdjacentHTML&&true' : // ie4 or MacIE5.23, v.all <- error\r
+                       X_UA.NetFront < 4 ?\r
+                               'return v&&v.nodeType===1' : // instanceof not a function. netfront3.4 は html に  instanceof をすると error になる\r
                        window[ 'HTMLElement' ] ?\r
                                'return v instanceof HTMLElement' :\r
                        //window[ 'Element' ] ?\r
                        //      'return v instanceof Element' : // error @ie8\r
-                               'return v&&v.nodeType===1&&v.appendChild'\r
+                               'return v&&v.appendChild&&v.nodeType===1'\r
                ),\r
        \r
        /*\r
-        * new Image した場合に HTMLElement の img が作られるブラウザもある\r
+        * new Image した場合に HTMLImageElement が作られるブラウザと,そうでないブラウザ(IE8-)がある\r
         */     \r
        isImage :\r
                function( v ){\r
                        if( v && v.constructor === window.Image ) return true;\r
                        if( v && window.HTMLImageElement && v.constructor === window.HTMLImageElement ) return true; // ie6- は constructor が undef、HTMLImageElement が undef なので、HTMLElement の存在確認が必要\r
-                       if( X.UA.WebKit < 525.13 ){ // Safari3-\r
+                       if( X_UA.WebKit < 525.13 ){ // Safari3-\r
                                if( v && v.src !== undefined && v.onload !== undefined && X.Type.isNumber( v.height ) && X.Type.isNumber( v.width ) && X.Type.isBoolean( v.complete ) ){\r
                                        return true;\r
                                };\r
@@ -76,10 +102,15 @@ X.Type = {
                return (Object.prototype.toString.call(v) === "[object HTMLCollection]");\r
        },\r
        */\r
+       /**\r
+        * Null か?判定する。\r
+        */\r
        isNull : function( v ){\r
                return v === null;\r
        },\r
-       \r
+       /**\r
+        * undefined か?判定する。\r
+        */\r
        isUndefined : function( v ){\r
                return v === void 0;\r
        }\r