\r
X.emptyFunction = new Function;\r
\r
- // defer の場合もあるので、document.readyState を見る\r
+ // defer の場合もあるので、document.readyState を見る MacIE で false\r
X.inHead = (function( s ){\r
if( !s ) return false;\r
if( !s.length ) return false; // Safari1.3 312.8 でerror\r
};\r
})(); */\r
\r
+/*\r
+ * Safari の JavaScript の不備 \r
+ * http://nanto.asablo.jp/blog/2006/01/13/209495\r
+ * \r
+ * web.paulownia.jp - JavaScriptとクロージャ\r
+ * https://web.archive.org/web/20070526063400/http://web.paulownia.jp/script/oop/closure.html\r
+ * MacOSX 10.3のsafariにはhasOwnPropertyが実装されていないので、独自に追加する必要があります。\r
+ */\r
+/*-----------------\r
+result | 1 | 2 | 3 |\r
+this | NaN | | | NaN | NaN | NaN |\r
+_proto_ | | NaN | | NaN | | NaN |\r
+_super_ | | | NaN | | NaN | NaN |\r
+*/\r
\r
+/*\r
+Object.prototype.hasOwnProperty || (Object.prototype.hasOwnProperty = function( p ){\r
+ var _proto_ = this.constructor && this.constructor.prototype,\r
+ v = this[ p ],\r
+ nan = v !== v; // isNaN\r
+ save, r = false;\r
+ if( nan ){\r
+ // NaN の判定は完全に chain を辿る必要がある\r
+ save = _proto_[ p ];\r
+ _proto_[ p ] = true;\r
+ r = this[ p ] !== this[ p ]; // isNaN\r
+ \r
+ delete _proto_[ p ];\r
+ // もっと深い chain で定義されていた.\r
+ if( this[ p ] !== this[ p ] ) return r; // 1\r
+ // __proto__ で定義されていた.\r
+ _proto_[ p ] = save;\r
+ } else\r
+ if( p in this ){\r
+ if(\r
+ !_proto_ ||\r
+ !( p in _proto_ ) ||\r
+ ( _proto_[ p ] !== v )\r
+ ) return true;\r
+ \r
+ // this と __proto__ に同名で同値が書かれている可能性あり\r
+\r
+ save = _proto_[ p ];\r
+ _proto_[ p ] = v + ' ';\r
+ r = v === this[ p ];\r
+ \r
+ delete _proto_[ p ];\r
+ // もっと深い chain で定義されていた.\r
+ if( _proto_[ p ] === v ) return r;\r
+ // __proto__ で定義されていた.\r
+ _proto_[ p ] = save;\r
+ };\r
+ return r;\r
+ }); */
\ No newline at end of file
if( document.all ){\r
acme.ActiveX = !!window[ 'ActiveXObject' ];\r
acme.IE = parseFloat(dav.split("MSIE ")[1]) || parseFloat(dua.split("rv:")[1]) || 0;\r
+ acme.MacIE = !!dav.indexOf( 'Mac_PowerPC' ) || !!dav.indexOf( 'Mac_PPC' ) || !!dav.indexOf( 'Mac_68K' );\r
acme.IEMobile = dua.toLowerCase().indexOf( 'iemobile' ) !== -1 ||\r
dua.toLowerCase().indexOf( 'windows phone' ) !== -1; \r
return acme;\r
\r
return acme;\r
})( navigator );\r
-\r
+/* ie5 でerror...\r
X.inObject = X.UA.IE && X.UA.IE < 5 ? // TODO JScript で判定\r
(function( name, obj ){\r
var p;\r
};\r
return false;\r
}) :\r
- new Function( 'a,b', 'return a in b' );\r
- \r
+ new Function( 'a,b', 'return a in b' ); \r
\r
// Safari 3.1 未満は開発コンソールがない!\r
// http://shimax.cocolog-nifty.com/search/2006/09/safarijavascrip_c54d.html\r
-/*@+debug[*/\r
+\r
if( X.UA.Safari && X.UA.WebKit < 525.13 ){ \r
window.onerror = function( x, y, z ){\r
var n = String.fromCharCode( 10 );\r
return true;\r
};\r
};\r
-/*]@+debug*/\r
\r
if( X.UA.IE && X.UA.IE < 7 ){ // error @ NN7.2\r
// bonus: hotfix for IE6 SP1 (bug KB823727)\r
document.execCommand && document.execCommand( 'BackgroundImageCache', false, true );\r
-};\r
+};*/\r
return typeof v === 'function';\r
},\r
isArray :\r
- X.UA.IE && X.UA.IE < 5 ? (function(v){ return v && typeof v.length === 'number';}) :\r
+ X.UA.IE && ( X.UA.IE < 5 || X.UA.MacIE ) ? (function(v){ return v && typeof v.length === 'number';}) :\r
window['Array'] ? (new Function('v', 'return v instanceof Array;')) :\r
(function(v){ return Object.prototype.toString.call(v) === '[object Array]';}),\r
+ \r
isBoolean : function(v) {\r
return typeof v === 'boolean';\r
},\r
return typeof v === 'number';\r
},\r
isFinite : function(v){\r
- return X.Type.isNumber(v) === true && isFinite(v);\r
+ return X.Type.isNumber(v) && isFinite(v);\r
},\r
isHTMLElement :\r
- // ie4\r
- X.UA.IE && X.UA.IE < 5 ? (function(v){ return v && v.tagName && v.all;}) :\r
+ // ie4 or MacIE5.23\r
+ X.UA.IE && ( X.UA.IE < 5 || 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
/*\r
\r
klass = new Function( 'var a=arguments,f=a.callee;if(f.__new)return f.__new(a)' );\r
klass.__new = C;\r
- if( X.UA.Safari && X.UA.Safari < 2 ){\r
+ klass.superClassOf = X.Class._superClassOf;\r
+ klass.subClassOf = X.Class._subClassOf;\r
+ \r
+ if( X.UA.Safari && X.UA.Safari < 2 ){ // Webkit で判定、Gecko もこちら\r
// Safari では、prototype の差し替えができない, 1.3 で確認\r
// あとから super class にプロパティを足しても、sub に伝播しない、、、\r
- traits && X.Class._override( klass.prototype, traits, false );\r
- X.Class._override( X.Class._override( klass.prototype, CommonProps, false ), props, true );\r
+ //traits && X.Class._override( klass.prototype, traits, false );\r
+ //X.Class._override( X.Class._override( klass.prototype, CommonProps, false ), props, true );\r
+ // F = new Function; F.prototype = traits; traits.constructor = klass; klass.prototype = new F;\r
+ X.Class._override( X.Class._override( traits || klass.prototype, props, true ), CommonProps, false );\r
+ if( traits ) klass.prototype.__proto__ = traits;\r
} else {\r
klass.prototype = X.Class._override( X.Class._override( traits || klass.prototype, props, true ), CommonProps, false );\r
klass.prototype.constructor = klass;\r
};\r
};\r
return target;\r
+ },\r
+ _superClassOf : function(){\r
+ \r
+ },\r
+ _subClassOf : function(){\r
+ \r
}\r
};\r
})();
\ No newline at end of file
} );\r
};\r
\r
-if( X.UA.IE && X.UA.IE < 5 ){\r
- X.Timer[ '_ie4_loop' ] = X.Timer._loop;\r
- X.Timer._loop = 'X.Timer._ie4_loop()';\r
+if( X.UA.IE && ( X.UA.IE < 5 || X.UA.MacIE ) ){\r
+ X.Timer[ '_ie_loop' ] = X.Timer._loop;\r
+ X.Timer._loop = 'X.Timer._ie_loop()';\r
};\r
-\r
X.Dom.Dirty = {\r
CLEAN : 0,\r
CHILD_IS_DIRTY : 1,\r
IE4_TEXTNODE_FIX : 256\r
};\r
\r
-ie55 = 7;\r
-\r
X.Dom.State = {\r
DESTROYED : 0,\r
EXIST : 1,\r
HAS_HEIGHT_LENGTH : 512,\r
HAS_HEIGHT_PERCENT : 1024,\r
IE4_ONLY_TEXT : 2048,\r
- IE5_DISPLAY_NONE_FIX : 5 <= X.UA.IE && X.UA.IE < ie55 ? 4096 : 0\r
+ IE5_DISPLAY_NONE_FIX : 5 <= X.UA.IE && X.UA.IE < 5.5 ? 4096 : 0 // MacIE5.2- は ?\r
};\r
\r
+X.Dom._strictElmCreation = X.UA.IE && X.UA.IE < 9;// && !X.UA.MacIE;\r
+\r
/*\r
* Node( rawElement | rawTextnode | htmlString | textString )\r
*/\r
\r
Node._html._dirty ? Node._html._commitUpdate() : this._commitUpdate();\r
\r
- //X.Dom._listeners && X.Dom._listeners[ X.Dom.Event.AFTER_UPDATE ] && X.Dom.dispatch( { type : X.Dom.Event.AFTER_UPDATE } );\r
X.Dom._listeners && X.Dom._listeners[ X.Dom.Event.AFTER_UPDATE ] && X.Dom.asyncDispatch( 0, { type : X.Dom.Event.AFTER_UPDATE } );\r
//this._rawNode.style.visibility = tmp;\r
};\r
};\r
this._isNew = true;\r
this._rawNode = elm =\r
- ie55 <= X.UA.IE && X.UA.IE < 9 ?\r
+ X.Dom._strictElmCreation ?\r
document.createElement( [\r
'<', this._tag,\r
' UID="', this._uid, '"',\r
// this._dirty = X.Dom.Dirty.CSS | X.Dom.Dirty.IE_FILTER;\r
// this._updateRawNode( elm );\r
//} else\r
- if( !X.UA.IE || X.UA.IE < ie55 || 9 <= X.UA.IE ){\r
+ if( !X.Dom._strictElmCreation ){\r
elm.UID = this._uid;\r
this._newAttrs = this._attrs;\r
this._dirty = X.Dom.Dirty.ID | X.Dom.Dirty.CLASSNAME | X.Dom.Dirty.CSS | X.Dom.Dirty.ATTR | X.Dom.Dirty.IE_FILTER;\r
this._rawNode.attachEvent( 'on' + type, this._handleEvent );\r
}) :\r
(function( type ){\r
- var elm = this._ie4getRawNode();\r
+ var elm = this._rawNode || this._ie4getRawNode && this._ie4getRawNode();\r
if( !elm ) return;\r
this._handleEvent = elm[ 'on' + type ] = this._handleEvent || X.Callback.create( this );\r
});\r
};\r
}) :\r
(function( type ){\r
- var elm = this._rawNode || this._ie4getRawNode();\r
+ var elm = this._rawNode || this._ie4getRawNode && this._ie4getRawNode();\r
if( !elm ) return;\r
elm[ 'on' + type ] = X.emptyFunction;\r
elm[ 'on' + type ] = '';\r
\r
// 以下、パースと探索\r
for( ; queryString.length; ){\r
- console.log( 'queryString[' + queryString + ']' );\r
+ //console.log( 'queryString[' + queryString + ']' );\r
\r
// 初期化処理\r
if( !parsed ){\r
queryString = queryString.substr( parsed[ 0 ] );\r
parsed = parsed[ 1 ];\r
\r
- console.log( 'X.Dom.Query._parse ' + parsed );\r
+ //console.log( 'X.Dom.Query._parse ' + parsed );\r
\r
if( parsed === 5 ){\r
isMulti = true;\r
if( combinator !== 0 ){\r
parents = xnodes;\r
xnodes = [];\r
- console.log( 'cobinator !== 0 ' + parents.length + ' : ' + xnodes.length );\r
+ //console.log( 'cobinator !== 0 ' + parents.length + ' : ' + xnodes.length );\r
};\r
};\r
\r
\r
default :\r
if( combinator === 1 || ( isStart && selector < 7 ) ){\r
- console.log( l + ' > ' + xnodes.length + ' tag:' + tagName );\r
+ //console.log( l + ' > ' + xnodes.length + ' tag:' + tagName );\r
for( ; i < l; ++i ){\r
xnode = parents[ i ];\r
xnode._xnodes && xnode._xnodes.length && X.Dom.Query._fetchElements( xnodes, xnode, isAll ? null : tagName );\r
};\r
- console.log( l + ' >> ' + xnodes.length + ' tag:' + tagName );\r
+ //console.log( l + ' >> ' + xnodes.length + ' tag:' + tagName );\r
};\r
};\r
\r
isNot = false;\r
parsed = null;\r
\r
- console.log( '//end :' + ( xnodes && xnodes.length ) );\r
+ //console.log( '//end :' + ( xnodes && xnodes.length ) );\r
};\r
- console.log( 'multi:' + ( xnodes && xnodes.length ) );\r
+ //console.log( 'multi:' + ( xnodes && xnodes.length ) );\r
\r
// tree 順に並び替え、同一要素の排除\r
if( isMulti ){\r
// textarea の内容を控えて、消す。xnode tree 構築後に復帰。でないと、html パースでこける\r
\r
// cleanup tree \r
- (function/*cleanUpTree*/( elm, skip, head ){\r
+ X.UA.MacIE || (function/*cleanUpTree*/( elm, skip, head ){\r
var nodes = X.copyArray( elm.childNodes ),\r
i = 0,\r
l = nodes.length,\r