From 20c3a948b20e52efc28fd103fc075d787c6d65d2 Mon Sep 17 00:00:00 2001 From: itozyun Date: Mon, 29 Jun 2015 06:47:15 +0900 Subject: [PATCH] Version 0.6.167, add X.Audio.canPlay. --- 0.6.x/js/01_core/11_XClosure.js | 2 +- 0.6.x/js/01_core/15_XEventDispatcher.js | 1 + 0.6.x/js/06_net/01_XNetXHR.js | 4 ++-- 0.6.x/js/06_net/10_XOAuth2.js | 11 +++++++++-- 0.6.x/js/07_audio/00_XAudio.js | 12 +++++++++--- 0.6.x/js/07_audio/01_XWebAudio.js | 2 ++ 0.6.x/js/07_audio/02_XHTMLAudio.js | 2 ++ 0.6.x/js/07_audio/03_XSilverlightAudio.js | 6 ++++++ 8 files changed, 32 insertions(+), 8 deletions(-) diff --git a/0.6.x/js/01_core/11_XClosure.js b/0.6.x/js/01_core/11_XClosure.js index c9338f1..5d90451 100644 --- a/0.6.x/js/01_core/11_XClosure.js +++ b/0.6.x/js/01_core/11_XClosure.js @@ -150,7 +150,7 @@ function X_Callback_classifyCallbackArgs( arg1, arg2, arg3, alt_context ){ function X_Callback_actualClosure( obj ){ return function(){ if( arguments[ 0 ] === X_Closure_COMMAND_BACK ) return obj; - if( arguments[ 0 ] !== X_Closure_COMMAND_DROP ) return obj.proxy( obj, arguments ); + if( arguments[ 0 ] !== X_Closure_COMMAND_DROP ) return obj.proxy && obj.proxy( obj, arguments ); }; }; diff --git a/0.6.x/js/01_core/15_XEventDispatcher.js b/0.6.x/js/01_core/15_XEventDispatcher.js index 22142fe..aceaca5 100644 --- a/0.6.x/js/01_core/15_XEventDispatcher.js +++ b/0.6.x/js/01_core/15_XEventDispatcher.js @@ -695,6 +695,7 @@ function X_EventDispatcher_actualRemoveEvent( that, type, raw, list, skip ){ default : if( raw.attachEvent ){ raw.detachEvent( 'on' + type, that[ '_listeners' ][ X_LISTENERS_ACTUAL_HANDLER ] ); + console.log( 'raw rmEvent ' + type ); } else { raw[ 'on' + type ] = X_emptyFunction; raw[ 'on' + type ] = ''; diff --git a/0.6.x/js/06_net/01_XNetXHR.js b/0.6.x/js/06_net/01_XNetXHR.js index f6b8357..265cc79 100644 --- a/0.6.x/js/06_net/01_XNetXHR.js +++ b/0.6.x/js/06_net/01_XNetXHR.js @@ -487,7 +487,7 @@ X_TEMP.X_Net_XHR_params = { case 'timeout' : // Gecko 12.0 https://developer.mozilla.org/ja/docs/XMLHttpRequest/Synchronous_and_Asynchronous_Requests X_NET_XHRWrapper._busy = false; X_NET_XHRWrapper._error = !!X_UA[ 'Gecko' ]; - X_NET_XHRWrapper[ 'asyncDispatch' ]( { type :X_EVENT_ERROR, 'timeout' : true } ); + X_NET_XHRWrapper[ 'asyncDispatch' ]( { type :X_EVENT_ERROR, 'timeout' : true, status : 408 } ); break; }; }, @@ -498,7 +498,7 @@ X_TEMP.X_Net_XHR_params = { if( live || raw.readyState < 3 ){ this._busy = false; - live && this[ 'asyncDispatch' ]( { type : X_EVENT_ERROR, 'timeout' : true } ); + live && this[ 'asyncDispatch' ]( { type : X_EVENT_ERROR, 'timeout' : true, status : 408 } ); }; this._timerID = 0; }, diff --git a/0.6.x/js/06_net/10_XOAuth2.js b/0.6.x/js/06_net/10_XOAuth2.js index fb9206a..63e220d 100644 --- a/0.6.x/js/06_net/10_XOAuth2.js +++ b/0.6.x/js/06_net/10_XOAuth2.js @@ -167,7 +167,14 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ]( * アクセストークンのリフレッシュ。 */ 'refreshToken' : function(){ - var pair = X_Pair_get( this ); + var pair = X_Pair_get( this ), + refreshToken = X_OAuth2_getRefreshToken( this ); + + if( !refreshToken ){ + pair.oauth2State = 0; + this[ 'asyncDispatch' ]( X_EVENT_NEED_AUTH ); + return; + }; if( pair.net ) return; @@ -184,7 +191,7 @@ X[ 'OAuth2' ] = X_EventDispatcher[ 'inherits' ]( 'client_id' : pair[ 'clientID' ], 'client_secret' : pair[ 'clientSecret' ], 'grant_type' : 'refresh_token', - 'refresh_token' : X_OAuth2_getRefreshToken( this ) + 'refresh_token' : refreshToken }), 'dataType' : 'json', 'headers' : { diff --git a/0.6.x/js/07_audio/00_XAudio.js b/0.6.x/js/07_audio/00_XAudio.js index 017f79e..c0a39d8 100644 --- a/0.6.x/js/07_audio/00_XAudio.js +++ b/0.6.x/js/07_audio/00_XAudio.js @@ -12,6 +12,15 @@ var X_Audio_BACKENDS = []; // Array. +X_TEMP.onSystemReady.push( + function(){ + var canPlay = X[ 'Audio' ][ 'canPlay' ] = {}, + i = X_Audio_BACKENDS.length; + for( ; i; ){ + X_Object_override( canPlay, X_Audio_BACKENDS[ --i ].canPlay ); + }; + }); + /** *

複数のバックエンドから、与えられた音声を再生可能なものを見つけ、音声を再生します。 *

HTMLAudio の動作・機能がブラウザ毎にバラバラなのに業を煮やし、メソッドやイベントは独自に定義しています。 @@ -163,9 +172,6 @@ X[ 'Audio' ] = X_EventDispatcher[ 'inherits' ]( } ); -// TODO -X[ 'Audio' ][ 'canPlay' ] = {}; - function X_Audio_handleEvent( e ){ var backend; diff --git a/0.6.x/js/07_audio/01_XWebAudio.js b/0.6.x/js/07_audio/01_XWebAudio.js index 56fdc2e..db538e4 100644 --- a/0.6.x/js/07_audio/01_XWebAudio.js +++ b/0.6.x/js/07_audio/01_XWebAudio.js @@ -348,6 +348,8 @@ if( X_Audio_WebAudio_context ){ { backendName : 'Web Audio', + canPlay : {}, // TODO HTMLAudio と同じ + // detect : function( proxy, source, ext ){ proxy[ 'asyncDispatch' ]( { type : X_EVENT_COMPLETE, canPlay : X_Audio_codecs[ ext ] } ); diff --git a/0.6.x/js/07_audio/02_XHTMLAudio.js b/0.6.x/js/07_audio/02_XHTMLAudio.js index 3e84d3d..b15b064 100644 --- a/0.6.x/js/07_audio/02_XHTMLAudio.js +++ b/0.6.x/js/07_audio/02_XHTMLAudio.js @@ -452,6 +452,8 @@ if( X_Audio_constructor && !X_Audio_HTMLAudioWrapper_badOperaAndroid ){ X_Audio_BACKENDS.push( { backendName : 'HTML Audio', + + canPlay : X_Audio_codecs, /* * HTML5 の audio 要素と video 要素でサポートされているメディアフォーマット * https://developer.mozilla.org/ja/docs/Web/HTML/Supported_media_formats diff --git a/0.6.x/js/07_audio/03_XSilverlightAudio.js b/0.6.x/js/07_audio/03_XSilverlightAudio.js index a12ee10..501326d 100644 --- a/0.6.x/js/07_audio/03_XSilverlightAudio.js +++ b/0.6.x/js/07_audio/03_XSilverlightAudio.js @@ -397,6 +397,12 @@ if( X[ 'Pulgin' ][ 'SilverlightEnabled' ] ){ X_Audio_BACKENDS.push( { backendName : 'Silverlight Audio', + canPlay : { + 'mp3' : true, + 'wma' : true, + 'wav' : true + }, + detect : function( proxy, source, ext ){ var ok = ext === 'mp3' || ext === 'wma' || ext === 'wav'; proxy[ 'asyncDispatch' ]( { type : X_EVENT_COMPLETE, canPlay : ok } ); -- 2.11.0