OSDN Git Service

Version 0.6.87, fix SuperConstructor @ X.Class & force convert to PointerEvent @...
[pettanr/clientJs.git] / 0.6.x / js / 00_core / 02_XType.js
index 43316dd..b30d82d 100644 (file)
@@ -5,50 +5,83 @@
  */\r
 \r
 X.Type = {\r
-       isObject : function(v) {\r
-               return v !== null && typeof v === 'object';\r
+       isObject : function( v ){\r
+               return v && typeof v === 'object'; // typeof null === 'object' に対策\r
        },\r
        \r
-       isFunction : function(v) {\r
+       isFunction : function( v ){\r
                return typeof v === 'function';\r
        },\r
+       \r
+       isUnknown : function( v ){\r
+               return typeof v === 'unknown'; // ie の XHR.open など\r
+       },\r
+       \r
        isArray :\r
                new Function( 'v',\r
-                       X.UA.IE < 5.5 ? 'return v && v.push === Array.prototype.push;' : // win ie5-, MacIE5.2\r
-                       X.UA.IE ? 'return v && Object.prototype.toString.call(v) === "[object Array]"' :\r
-                               'return v instanceof Array;'\r
+                       X.UA.IE < 5.5 ?\r
+                               'return v&&v.push===Array.prototype.push' : // win ie5-, MacIE5.2\r
+                       X.UA.IE ?\r
+                               'return v&&Object.prototype.toString.call(v)==="[object Array]"' :\r
+                               'return v instanceof Array'\r
                ),\r
                \r
-       isBoolean : function(v) {\r
-               return typeof v === 'boolean'; // v === true || v === false;\r
+       isBoolean : function( v ){\r
+               return v === true || v === false;\r
        },\r
-       isString : function(v) {\r
+       \r
+       isString : function( v ){\r
                return typeof v === 'string';\r
        },\r
-       isNumber : function(v) {\r
-               return typeof v === 'number';\r
+       \r
+       isNumber : function( v ){\r
+               return typeof v === 'number'; // v !== v || v + 0 === v;\r
        },\r
-       isFinite : function(v){\r
-               return typeof v === 'number' && isFinite(v);\r
+       \r
+       isFinite : function( v ){\r
+               return typeof v === 'number' && isFinite( v ); // isFinite( '123' ) とかに対策\r
        },\r
-       isNaN : function(v){\r
-               return typeof v === 'number' && v !== v;\r
+       \r
+       isNaN : function( v ){\r
+               return v !== v; // isNaN( 'NaN' ) になってしまう\r
        },\r
+       \r
        isHTMLElement :\r
-               // ie4 or MacIE5.23\r
-               ( X.UA.IE4 || X.UA.MacIE ) ? (function(v){ return v && v.tagName && v.all;}) :\r
-               window['HTMLElement'] ? (new Function('v', 'return v instanceof HTMLElement')) :\r
-               (function(v){ return v && v.nodeType === 1 && v.appendChild;}),\r
+               new Function( 'v',\r
+                       ( X.UA.IE4 || X.UA.MacIE ) ?\r
+                               'return v&&v.tagName' : // ie4 or MacIE5.23, v.all <- 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
+               ),\r
+       \r
+       /*\r
+        * new Image した場合に HTMLElement の img が作られるブラウザもある\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( 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
+                       };\r
+                       return false;\r
+               },\r
        /*\r
        isElementCollection : function(v) {\r
                return (Object.prototype.toString.call(v) === "[object HTMLCollection]");\r
        },\r
        */\r
-       isNull : function(v) {\r
+       isNull : function( v ){\r
                return v === null;\r
        },\r
-       isUndefined : function(v) {\r
-               return typeof v === 'undefined';\r
+       \r
+       isUndefined : function( v ){\r
+               return v === void 0;\r
        }\r
 };\r
 \r