+\r
if( !window['console'] || ( window.parent && window.parent.log ) ) console = { log : function(a){\r
var win, elm;\r
//alert(a);\r
},\r
\r
isString : function( v ){\r
- return typeof v === 'string';\r
+ return typeof v === 'string'; // v === v + '';\r
},\r
\r
isNumber : function( v ){\r
},\r
\r
isFinite : function( v ){\r
- return typeof v === 'number' && isFinite( v ); // isFinite( '123' ) とかに対策\r
+ return typeof v === 'number' && isFinite( v ); // isFinite( '123' ) === true に対策\r
},\r
\r
isNaN : function( v ){\r
- return v !== v; // isNaN( 'NaN' ) になってしまう\r
+ return v !== v; // isNaN( 'NaN' ) === true に対策\r
},\r
\r
isHTMLElement :\r
opt_final = !!( classSetting & X.Class.FINAL );\r
opt_private = !!( classSetting & X.Class.PRIVATE_DATA );\r
if( opt_final && opt_abstract ){\r
- X.Notification.critical( 'final & Abstract!' );\r
+ X.Logger.critical( 'final & Abstract!' );\r
return;\r
}; \r
args.shift();\r
if( X_Class_PRIVATE_CLASS_LIST.indexOf( args[ 0 ] ) !== -1 ){\r
privateDef = X_Class_getClassDef( args[ 0 ] );\r
if( privateDef.isPrivate !== true ){\r
- X.Notification.critical( 'PrivateClass not found! please, X.Class.create( X.Class.PRIVATE, {...} ).' );\r
+ X.Logger.critical( 'PrivateClass not found! please, X.Class.create( X.Class.PRIVATE, {...} ).' );\r
return;\r
} else\r
if( privateDef.Abstract === true ){\r
- X.Notification.critical( 'PrivateClass is Abstract!' );\r
+ X.Logger.critical( 'PrivateClass is Abstract!' );\r
return;\r
};\r
classDef.privateClass = args.shift();\r
// サブクラスの場合、クラス定義の上書きがなくても作成可能\r
// サブクラスでなくても、クラスメンバ用オブジェクトが無しでも作成可能\r
//if( !X_Class_traits ){\r
- // X.Notification.critical( 'No Class Def!' );\r
+ // X.Logger.critical( 'No Class Def!' );\r
// return;\r
//};\r
props = {};\r
}; \r
if( opt_private === true ){\r
if( classDef.privateClass ){\r
- X.Notification.critical( 'Private Data Class has no PrivateClass!' );\r
+ X.Logger.critical( 'Private Data Class has no PrivateClass!' );\r
return;\r
};\r
classDef.isPrivate = true;\r
def.dataList = [];\r
};\r
if( i !== -1 ){\r
- X.Notification.critical( 'PrivateData already exist!' );\r
+ X.Logger.critical( 'PrivateData already exist!' );\r
return;\r
};\r
if( privateDef._tempUser ){\r
- X.Notification.critical( 'newPrivate を連続呼び出しされたところ破綻' );\r
+ X.Logger.critical( 'newPrivate を連続呼び出しされたところ破綻' );\r
return;\r
};\r
privateDef._tempUser = user;\r
var p;\r
for( p in src ){\r
if( p === 'Super' || p === 'SuperConstructor' || p === '__proto__' || p === 'prototype' || p === 'constructor' ){\r
- X.Notification.critical( 'Super & SuperConstructor is reserved!' );\r
+ X.Logger.critical( 'Super & SuperConstructor is reserved!' );\r
return;\r
};\r
if( force || target[ p ] === void 0 ){\r
classSetting,\r
opt_super,\r
klass, def;\r
- if( superDef.Final ) X.Notification.critical( 'X.Class inherits, Class is final!' );\r
+ if( superDef.Final ) X.Logger.critical( 'X.Class inherits, Class is final!' );\r
\r
// サブクラス名\r
if( X.Type.isString( displayName ) ){\r
def = X_Class_getClassDef( klass ),\r
data, p, i;\r
if( def.isPrivate && !X_Class_killPrivateFlag ){\r
- X.Notification.critical( 'PrivateInstance.kill() work in PrivateUser.kill().' );\r
+ X.Logger.critical( 'PrivateInstance.kill() work in PrivateUser.kill().' );\r
return;\r
};\r
X_Class_killPrivateFlag = false; // onKill 内で PrivateInstance.kill() を防ぐため\r
} else {\r
this.dispatch( X.Event.BEFORE_KILL_INSTANCE ); \r
};\r
+ console.log('kill ' + this._dispatching);\r
this.dispatch( X.Event.KILL_INSTANCE );\r
this._listeners && this.unlisten();\r
} else\r
return;\r
};\r
\r
- console.log('kill ' + this._dispatching);\r
- \r
for( p in instance ){\r
if( instance.hasOwnProperty && !instance.hasOwnProperty( p ) ) continue;\r
delete instance[ p ];\r
instance, obj,\r
userDef;\r
if( def.Abstract ){\r
- X.Notification.critical( 'AbstractClass!' );\r
+ X.Logger.critical( 'AbstractClass!' );\r
return;\r
};\r
if( def.isPrivate && !dataUser ){\r
- X.Notification.critical( 'use myClass.newPrivate( instance, ...args )!' );\r
+ X.Logger.critical( 'use myClass.newPrivate( instance, ...args )!' );\r
return;\r
};\r
klass.__new = null;\r
+X.Event = {\r
+ COMPLETE : 1,\r
+ READY : 2,\r
+ SUCCESS : 3,\r
+ ERROR : 4,\r
+ PROGRESS : 5,\r
+ BEFORE_CANCEL : 6,\r
+ CANCELED : 7,\r
+ TIMEOUT : 8,\r
+ BEFORE_KILL_INSTANCE : 9,\r
+ KILL_INSTANCE : 10,\r
+ KILL_INSTANCE_CANCELED : 11,\r
+ _LAST_EVENT : 11\r
+};
\ No newline at end of file
* イベントターゲット上にある現在のどのイベントリスナーも指定していない引数付きの removeEventListener は、何の効果もありません。\r
*/\r
\r
-X.Event = {\r
- COMPLETE : 1,\r
- READY : 2,\r
- SUCCESS : 3,\r
- ERROR : 4,\r
- PROGRESS : 5,\r
- BEFORE_CANCEL : 6,\r
- CANCELED : 7,\r
- TIMEOUT : 8,\r
- BEFORE_KILL_INSTANCE : 9,\r
- KILL_INSTANCE : 10,\r
- KILL_INSTANCE_CANCELED : 11,\r
- _LAST_EVENT : 11\r
-};\r
-\r
// ------------------------------------------------------------------------- //\r
// ------------ local variables -------------------------------------------- //\r
// ------------------------------------------------------------------------- //\r
raw = this._rawObject || this._ie4getRawNode && this._ie4getRawNode();\r
delete list[ opt_type ];\r
if( empty = X.isEmptyObject( list ) ) delete this._listeners;\r
- if( raw && '' + parseFloat( opt_type ) !== opt_type ){ // 数字イベントの除外\r
+ if( raw && '' + parseFloat( opt_type ) !== '' + opt_type ){ // 数字イベントの除外\r
X_EventDispatcher_actualRemoveEvent( this, opt_type, raw, _list, !empty );\r
};\r
};\r
} else {\r
that._handleEvent || ( that._handleEvent = X.Callback.create( that, X_EventDispatcher_actualHandleEvent ) );\r
\r
- if( that._isSilverLight ){\r
+ if( that._isSilverlight ){\r
list.slcallback = X.Callback.create( that, X_EventDispatcher_sliverLightDispatch, [ type ] );\r
list.sltoken = raw.AddEventListener( type, list.slcallback );\r
} else\r
} else{\r
that._handleEvent || ( that._handleEvent = X.Callback.create( that, X_EventDispatcher_actualHandleEvent ) );\r
\r
- if( that._isSilverLight ){\r
+ if( that._isSilverlight ){\r
list.slcallback = X.Callback.create( that, X_EventDispatcher_sliverLightDispatch, [ type ] );\r
list.sltoken = raw.AddEventListener( type, list.slcallback );\r
} else\r
} else {\r
that._handleEvent || ( that._handleEvent = X.Callback.create( that, X_EventDispatcher_actualHandleEvent ) );\r
\r
- if( that._isSilverLight ){\r
+ if( that._isSilverlight ){\r
list.slcallback = X.Callback.create( that, X_EventDispatcher_sliverLightDispatch, [ type ] );\r
list.sltoken = raw.AddEventListener( type, list.slcallback );\r
} else {\r
};\r
} else {\r
\r
- if( that._isSilverLight ){\r
+ if( that._isSilverlight ){\r
raw.RemoveEventListener( type, list.sltoken ); // token\r
X.Callback._correct( list.slcallback );\r
delete list.sltoken;\r
};\r
} else {\r
\r
- if( that._isSilverLight ){\r
+ if( that._isSilverlight ){\r
raw.RemoveEventListener( type, list.sltoken ); // token\r
X.Callback._correct( list.slcallback );\r
delete list.sltoken;\r
};\r
} else {\r
\r
- if( that._isSilverLight ){\r
+ if( that._isSilverlight ){\r
raw.RemoveEventListener( type, list.sltoken ); // token\r
X.Callback._correct( list.slcallback );\r
delete list.sltoken;\r
-X.Notification = {\r
+X.Logger = {\r
_$LogArea : null,\r
debug : function( msg ){\r
- X.Notification._output( msg, 0 );\r
+ X.Logger._output( msg, 0 );\r
},\r
info : function( msg ){\r
- X.Notification._output( msg, 1 );\r
+ X.Logger._output( msg, 1 );\r
},\r
warn : function( msg ){\r
- X.Notification._output( msg, 2 );\r
+ X.Logger._output( msg, 2 );\r
},\r
critical : function( msg ){\r
- X.Notification._output( msg, 3 );\r
+ X.Logger._output( msg, 3 );\r
},\r
_output : function( msg, level ){\r
var body, $Area;\r
if( X.Dom && X.Dom.ready === true ){\r
- if( $Area = X.Notification._$LogArea ){\r
+ if( $Area = X.Logger._$LogArea ){\r
$Area.remove();\r
- delete X.Notification._$LogArea;\r
+ delete X.Logger._$LogArea;\r
};\r
\r
\r
} else\r
if( X.Dom && X.Dom.ready === true ){\r
- if( !( $Area = X.Notification._$LogArea ) ){\r
- $Area = X.Notification._$LogArea = X.Dom.Node( 'div' ).addToRoot( 0 );\r
+ if( !( $Area = X.Logger._$LogArea ) ){\r
+ $Area = X.Logger._$LogArea = X.Dom.Node( 'div' ).addToRoot( 0 );\r
};\r
$Area.add( '<p>' + msg + '</p>' );\r
} else \r
debug デバック用の情報\r
*/\r
\r
-console.log( 'X.Core.Notification' );\r
+console.log( 'X.Core.Log' );\r
if( this._dirty & X.Dom.Dirty.ATTR && ( attrs = this._newAttrs || this._attrs ) ){\r
rename = X.Dom.Attr.renameForDOM;\r
for( k in attrs ){\r
- if( !X.UA.MacIE && 5 <= X.UA.IE && X.UA.IE < 6 ){ // IETester 5.5 ではエラーが出なかった.MultipulIE5.5 ではエラーが出たので\r
+ if( !X.UA.MacIE && ( X.UA.IE5 || X.UA.IE55 ) ){ // IETester 5.5 ではエラーが出なかった.MultipulIE5.5 ではエラーが出たので\r
if( this._tag === 'TEXTAREA' && k === 'value' ){\r
elm.firstChild ?\r
( elm.firstChild.data = attrs[ k ] ) :\r
continue;\r
};\r
};\r
- // TODO IE では input, なぜか buttonも、type の変更が出来ない、k === 'type' && alert( this._dirty + ' ' + elm.outerHTML );\r
+ // TODO IE では input, なぜか buttonも、type の変更が出来ない、object も 同値で置き換えようとしても不可\r
( v = attrs[ k ] ) === undefined ?\r
elm.removeAttribute( rename[ k ] || k ) :\r
( elm[ rename[ k ] || k ] = X.Dom.Attr.noValue[ k ] ? k : v ); \r
for( k in attrs ){\r
( v = attrs[ k ] ) === undefined ?\r
elm.removeAttribute( rename[ k ] || k ) :\r
- elm.setAttribute( rename[ k ] || k, v ); // TODO X.Dom.Attr.noValue\r
+ elm.setAttribute( rename[ k ] || k, v ); // TODO X.Dom.Attr.noValue[ k ] ? k : v\r
};\r
delete this._newAttrs;\r
};\r
elm.appendChild( xnodes[ i ]._actualCreate( true ) );\r
};\r
};\r
- if( !X.Dom._strictElmCreation ){\r
+ if( X.Dom._strictElmCreation ){\r
+ if( this._dirty & X.Dom.Dirty.IE_FILTER ){\r
+ elm.style.filter = X.Dom.Style.SPECIAL_FIX( this._css );\r
+ };\r
+ delete this._dirty;\r
+ } else {\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._updateRawNode( elm );\r
- } else\r
- if( this._dirty & X.Dom.Dirty.IE_FILTER ){\r
- elm.style.filter = X.Dom.Style.SPECIAL_FIX( this._css );\r
- delete this._dirty;\r
};\r
\r
delete this._isNew;\r
this._dirty && this._updateRawNode( elm );\r
};\r
\r
- if( l ){\r
- for( i = 0; i < l; ++i ){\r
- xnodes[ i ]._afterActualCreate();\r
- };\r
+ for( i = 0; i < l; ++i ){\r
+ xnodes[ i ]._afterActualCreate();\r
};\r
// src の onload があるので先ではないか?\r
// ie の str から要素を作る場合、srcだけ イベント設定後ではないか?\r
};\r
X.Dom.Node.prototype._setAttr = function( attrs, newAttrs, name, v ){\r
switch( name ){\r
- // case 'type' : TODO IE は input, button に対して type の再設定が出来ない _state が要素生成済なら不可\r
+ // case 'type' : TODO IE は input, button, object に対して type の再設定が出来ない _state が要素生成済なら不可\r
case 'UID' :\r
case 'tag' :\r
case 'tagName' :\r
};\r
// debug\r
if( name.indexOf( 'on' ) === 0 ){\r
- X.Notification.warn( 'xnode.attr("' + name + '") is wrong, xnode.listen() & xnode.unlisten().' );\r
+ X.Logger.warn( 'xnode.attr("' + name + '") is wrong, xnode.listen() & xnode.unlisten().' );\r
return;\r
};\r
\r
nest : [],\r
err : function( html ){\r
X.Dom._htmlStringToXNode.flat.length = 0;\r
- X.Dom._htmlStringToXNode.ignoreError !== true && X.Notification.warn( 'X_Dom_Parser() error ' + html );\r
+ X.Dom._htmlStringToXNode.ignoreError !== true && X.Logger.warn( 'X_Dom_Parser() error ' + html );\r
},\r
start : function( tagName, attrs, noChild, length ){\r
var xnode,\r
-X.Audio = {\r
+X.Audio = {\r
HTML5 : 1,\r
Flash : 2,\r
Silverlight : 3,\r
\r
var X_Audio_BACKENDS = [];\r
\r
+/*\r
+ * TODO preplayerror play してみたら error が出た、backend の変更。\r
+ */\r
+\r
function X_Audio_detectBackend( proxy, sourceList, option ){\r
var source = sourceList.shift() || '', \r
parts = source.split( '?' )[ 0 ].split( '#' )[ 0 ].split( '.' ),\r
-/*\r
+/*\r
* original : uupaa-js HTML5Audio.js\r
* https://code.google.com/p/uupaa-js/source/browse/trunk/0.8/src/Audio/HTML5Audio.js?r=568\r
*/\r
\r
};\r
\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
-/*\r
+/*\r
* original : uupaa-js SilverlightAudio.js\r
* https://code.google.com/p/uupaa-js/source/browse/trunk/0.8/src/Audio/SilverlightAudio.js?r=568\r
- */\r
-\r
-/*\r
+ *\r
* Silverlight 4 → 5における不具合の状況\r
* http://www.slideshare.net/wakabayashiy/silverlight-4-5 \r
*\r
* SilverlLight5 ie6&7(ietester,winxp), ie8(winxp) で動作確認。firefox32 では動作しない。(4以下の方がよい?)\r
*/\r
+\r
var X_Audio_SLAudio, X_Audio_SLAudioWrapper,\r
X_Audio_SLAudio_uid = 0,\r
X_Audio_SLAudio_LIVE_LIST = [],\r
case 'MediaOpened' :\r
// http://msdn.microsoft.com/ja-jp/library/bb979710(VS.95).aspx\r
this._duration = this._rawObject.NaturalDuration.Seconds;\r
- \r
+ // TODO 'canplaythrough'\r
this.proxy.dispatch( 'canplay' );\r
break;\r
case 'MediaEnded' :\r
);\r
\r
};\r
+\r
+\r
+\r