};\r
*/\r
\r
-/* 正規表現が使われているため、まだ投入しない itozyun\r
+/* 正規表現が使われているため、まだ投入しない itozyun*/\r
window.encodeURI || (window.encodeURI = function (x) {\r
return ("" + x).replace(/[^!#$&-;=?-Z_a-z~]/g, function (s) {\r
var c = s.charCodeAt(0), p = "%";\r
);\r
});\r
});\r
-*/\r
+\r
\r
\r
//window.decodeURIComponent || (window.decodeURIComponent = window.decodeURI);\r
/**\r
* バージョン文字列:"0.6.123"\r
* @type {string} */\r
-X[ 'VERSION' ] = '0.6.127';\r
+X[ 'VERSION' ] = '0.6.143';\r
\r
/**\r
* ブートタイム ms\r
// ------------------------------------------------------------------------- //\r
\r
/**\r
- * UserAgent ã\81®関する定数を保持する。\r
+ * UserAgent ã\81«関する定数を保持する。\r
* @namespace X.UA\r
* @alias X.UA\r
* @type {object}\r
X_Timer_timeStamp = now;\r
X_Timer_waitTime = last / X_Timer_INTERVAL_TIME | 0;\r
};\r
+ X_ViewPort[ 'getScrollPosition' ](); // X_DomEvent のための X_ViewPort_scrollX & Y の更新、\r
});\r
};\r
\r
X_ViewPort_lock,
X_ViewPort_width,
X_ViewPort_height,
+ X_ViewPort_scrollX = 0,
+ X_ViewPort_scrollY = 0,
X_ViewPort_baseFontSize,
X_ViewPort_vScrollbarSize,
X_ViewPort_hScrollbarSize,
window.pageXOffset !== undefined ?
( function(){
X_Node_updateTimerID && X_Node_startUpdate();
- return[ window.pageXOffset, window.pageYOffset ];
+ return[ X_ViewPort_scrollX = window.pageXOffset, X_ViewPort_scrollY = window.pageYOffset ];
} ) :
window.scrollLeft !== undefined ?
( function(){
X_Node_updateTimerID && X_Node_startUpdate();
- return[ window.scrollLeft, window.scrollTop ];
+ return[ X_ViewPort_scrollX = window.scrollLeft, X_ViewPort_scrollY = window.scrollTop ];
} ) :
( function(){
X_Node_updateTimerID && X_Node_startUpdate();
// body は Safari2-
- return[ X_ViewPort_rootElement.scrollLeft || document.body.scrollLeft, X_ViewPort_rootElement.scrollTop || document.body.scrollTop ];
+ return[ X_ViewPort_scrollX = X_ViewPort_rootElement.scrollLeft || document.body.scrollLeft, X_ViewPort_scrollY = X_ViewPort_rootElement.scrollTop || document.body.scrollTop ];
} ),
'getScrollbarSize' : function(){
'isPrimary' : true,\r
'hwTimestamp' : time,\r
'timestamp' : time,\r
- 'button' : e.button,\r
- 'buttons' : e.buttons || e.button,\r
+ 'button' : /*e.button ||*/ ( force ? 0 : -1 ),\r
+ 'buttons' : /*e.buttons || e.button ||*/ ( force ? 1 : 0 ),\r
'altKey' : altKey,\r
'ctrlKey' : ctrlKey,\r
'metaKey' : metaKey,\r
'shiftKey' : shiftKey,\r
- 'pointerId' : touch.identifier + 2,\r
+ 'pointerId' : touch.identifier + 2, // iOS4 は 変換が必要!\r
//screenX : touch.screenX,\r
//screenY : touch.screenY,\r
- 'clientX' : touch.clientX,\r
- 'clientY' : touch.clientY,\r
+ 'clientX' : touch.clientX || ( touch.pageX - X_ViewPort_scrollX ), // iOS4以下は clientX が undefined, コードでは入れ子のスクロールに対応できない\r
+ 'clientY' : touch.clientY || ( touch.pageY - X_ViewPort_scrollY ),\r
'pageX' : touch.pageX,\r
'pageY' : touch.pageY,\r
'offsetX' : touch.offsetX, // 要素上の座標を取得 \r
'width' : touch.width || 0,\r
'height' : touch.height || 0\r
};\r
+ console.log( 'e.pointerId = ' + touch.identifier );\r
};\r
return events.length === 1 ? events[ 0 ] : events;\r
} else {\r
X_HTMLParser_block = {'ADDRESS':1,'APPLET':1,'BLOCKQUOTE':1,'BUTTON':1,'CENTER':1,'DD':1,'DEL':1,'DIR':1,'DIV':1,'DL':1,'DT':1,'FIELDSET':1,'FORM':1,'FRAMESET':1,'HR':1,'IFRAME':1,'INS':1,\r
'ISINDEX':1,'LI':1,'MAP':1,'MENU':1,'NOFRAMES':1,'NOSCRIPT':1,'OBJECT':1,'OL':1,'P':1,'PRE':1,'SCRIPT':1,'TABLE':1,'TBODY':1,'TD':1,'TFOOT':1,'TH':1,'THEAD':1,'TR':1,'UL':1 },\r
// Inline Elements - HTML 4.01\r
- X_HTMLParser_inline = {'A':1,'ABBR':1,'ACRONYM':1,'APPLET':1,'B':1,'BASEFONT':1,'BDO':1,'BIG':1,'BR':1,'BUTTON':1,'CITE':1,'CODE':1,'DEL':1,'DFN':1,'EM':1,'FONT':1,'I':1,'IFRAME':1,'IMG':1,\r
+ X_HTMLParser_inline = {/*'A':1,*/'ABBR':1,'ACRONYM':1,'APPLET':1,'B':1,'BASEFONT':1,'BDO':1,'BIG':1,'BR':1,'BUTTON':1,'CITE':1,'CODE':1,'DEL':1,'DFN':1,'EM':1,'FONT':1,'I':1,'IFRAME':1,'IMG':1,\r
'INPUT':1,'INS':1,'KBD':1,'LABEL':1,'MAP':1,'OBJECT':1,'Q':1,'S':1,'SAMP':1,'SCRIPT':1,'SELECT':1,'SMALL':1,'SPAN':1,'STRIKE':1,'STRONG':1,'SUB':1,'SUP':1,'TEXTAREA':1,'TT':1,'U':1,'VAR':1},\r
// Elements that you can,' intentionally,' leave open\r
// (and which close themselves)\r
X_Node_Anime_transitionProps = X_Node_Anime_hasTransform ? X_Node_CSS_VENDER_PREFIX[ 'transform' ] : 'left,top',\r
// transitionEnd イベント中に要素の更新( X_Node_startUpdate() )ができるか?\r
// iOS3+4 では可能、iOS6.1.5 で不可。TODO iOS5 及び他の環境で調査。ダメな場合、anime.html が正しく描画されない。\r
- X_Node_updateOnTransitionEnd = X_UA[ 'iOS' ] < 6;\r
+ X_Node_updateOnTransitionEnd = false; //X_UA[ 'iOS' ] < 6;\r
\r
// gpu化だけ transformX , willChange\r
// 終了位置の変更\r
* TODO : skew\r
* TODO : filter\r
* TODO 前回位置からの継続\r
+ * TODO scrollLeft, scrollTop\r
*/\r
Node.prototype[ 'animate' ] = function( start, dest, duration, easing, wait ){\r
var isNew = !this[ '_anime' ],\r
obj.phase = obj.gpuParent ? 10 : 4;\r
// このタイミングで animation 関連の css を削除したところ(X_Node_Anime_clearTransition)、iOS3、4 で再描画忘れが度々起きるように、、、\r
if( !obj.gpuParent ) X_Node_Anime_clearTransition( xnode );\r
- xnode[ 'dispatch' ]( { type : X_EVENT_ANIME_END, 'gpu' : obj.gpuParent } );\r
+ //xnode[ 'dispatch' ]( { type : X_EVENT_ANIME_END, 'gpu' : obj.gpuParent } );\r
break;\r
\r
case 4 :\r
X_Node_Anime_clearTransition( xnode );\r
X_Node_Anime_updatePosition( xnode, obj.destX, obj.destY, obj.destA, phase === 14 );\r
obj.phase = phase === 14 ? 10 : 4;\r
- xnode[ 'dispatch' ]( { type : X_EVENT_ANIME_END, 'gpu' : obj.gpuParent } );\r
+ xnode[ 'asyncDispatch' ]( time, { type : X_EVENT_ANIME_END, 'gpu' : obj.gpuParent } );\r
} else {\r
current = X_Node_Anime_getComputedPosition( xnode );\r
obj.startX = current.x;\r
// console.log( 'GPU有効で停止(待機)している xnode のGPU解除' );\r
X_Node_Anime_clearTransition( xnode );\r
X_Node_Anime_updatePosition( xnode, obj.destX, obj.destY, obj.destA, false );\r
- obj.gpuTimerID && X_Timer_remove( obj.gpuTimerID );\r
+ //obj.gpuTimerID && X_Timer_remove( obj.gpuTimerID );\r
+ //delete obj.gpuTimerID;\r
X_ViewPort[ 'listenOnce' ]( X_EVENT_AFTER_UPDATE, xnode, X_Node_Anime_gpuReleased );\r
return true;\r
\r
};\r
\r
function X_Node_Anime_onTransitionEnd( e ){\r
- // console.log( 'アニメ終了[onTransitionEnd] ' + ( this[ '_anime' ] && this[ '_anime' ].phase ) );\r
+ console.log( '[TransitionEnd] ' + ( this[ '_anime' ] && this[ '_anime' ].phase ) );\r
\r
if( !this[ '_anime' ] || this[ '_anime' ].phase !== 2 ){\r
// ここで return してしまうと、view の更新イベント待ちの場合、アニメが止まる\r
this[ 'dispatch' ]( { type : X_EVENT_ANIME_END, 'gpu' : this[ '_anime' ].gpuParent } );\r
X_Node_Anime_onTransition = false;\r
\r
+ X_Node_Anime_clearTransition( this ); // iOS 大丈夫??\r
+ \r
X_Node_Anime_needsDetection = true;\r
// iOS は transitionend 内の 更新でアニメーション可能 iOS3, iOS4 で確認 \r
// win+Gecko は不可\r
};\r
\r
function X_Node_Anime_updatePosition( xnode, x, y, opacity, useGPU ){\r
- // console.log( 'updatePosition y:' + y + ' gpu:' + !!useGPU );\r
+ console.log( 'updatePosition x:' + x + ' gpu:' + !!useGPU );\r
if( X_Node_Anime_hasTransform ){\r
xnode[ 'css' ]({\r
transform : 'translate(' + ( x | 0 ) + 'px,' + ( y | 0 ) + 'px)' + ( useGPU ? X_Node_Anime_translateZ : '' ),\r
};
-if( X_Pulgin_GEARS_ENABLED ) alert( 'X_Pulgin_GEARS_ENABLED' );
+//if( X_Pulgin_GEARS_ENABLED ) alert( 'X_Pulgin_GEARS_ENABLED' );
return new X_NET_Queue( X_NET_TYPE_IMAGE, { url : url, needSize : needSize } );\r
},\r
\r
+ 'gadget' : function( obj ){\r
+ return new X_NET_Queue( 5, obj );\r
+ },\r
// <script>, <link>\r
\r
'amountQueue' : function(){\r
X_NET_JSONPWrapper,\r
X_NET_FormWrapper,\r
X_NET_ImageWrapper,\r
+ X_NET_GIMRWrapper,\r
\r
X_NET_currentWrapper,\r
X_NET_currentQueue;\r
X_NET_currentWrapper = X_NET_XHRWrapper;\r
break;\r
case X_NET_TYPE_JSONP :\r
- X_NET_currentWrapper = X_NET_JSONPWrapper;\r
+ X_NET_currentWrapper = X_NET_JSONPWrapper; // X_NET_JSONPWrapper || createJSONPWrapper\r
break;\r
case X_NET_TYPE_FORM :\r
X_NET_currentWrapper = X_NET_FormWrapper;\r
case X_NET_TYPE_IMAGE :\r
X_NET_currentWrapper = X_NET_ImageWrapper;\r
break;\r
+ case 5 :\r
+ X_NET_currentWrapper = X_NET_GIMRWrapper;\r
+ break;\r
};\r
\r
X_NET_currentWrapper[ 'listen' ]( [ X_EVENT_PROGRESS, X_EVENT_SUCCESS, X_EVENT_ERROR, X_EVENT_TIMEOUT, X_EVENT_CANCELED ], X_NET_currentQueue = queue, X_NET_proxyDispatch );\r
\r
'UL_PROGRESS' : X_Net_XHR_upload,\r
\r
+ // or gadget proxy\r
'CORS' : X_Net_XHR_X_DOMAIN || ( X_Net_XHR_W3C && X_Net_XHR_W3C.withCredentials !== undefined )\r
};\r
\r
\r
var X_Audio_HTMLAudio_playTrigger =\r
6 <= X_UA[ 'iOS' ] ? 'loadeddata' :\r
- X_UA[ 'iOS' ] ? 'suspend' :\r
+ X_UA[ 'iOS' ] < 5 ? 'stalled' :\r
+ X_UA[ 'iOS' ] ? 'suspend' :\r
X_UA[ 'AndroidBrowser2' ] ? 'stalled' : // Android 2.3.5(SBM101SH) では stalled は発生しない,,,\r
X_UA[ 'AndroidBrowser4' ] ? 'loadeddata' : \r
X_UA[ 'OperaMobile' ] || X_UA[ 'OperaTablet' ] ? 'loadeddata' : 'canplay',\r
X_Audio_HTMLAudioWrapper_ieMobile9Fix = ( X_UA[ 'WinPhone' ] && X_UA[ 'IE9' ] ),\r
X_Audio_HTMLAudioWrapper_durationFix = ( !X_Audio_HTMLAudioWrapper_currentTimeFix && 12 <= X_UA[ 'Opera' ] ),\r
\r
- X_Audio_HTMLAudioWrapper_shortPlayFix = !!X_UA[ 'AndroidBrowser4' ],\r
+ X_Audio_HTMLAudioWrapper_shortPlayFix = X_UA[ 'AndroidBrowser2' ],\r
\r
X_Audio_codecs;\r
\r
if( video || ( i === 1 && X_Audio_Sprite_useVideoForMulti ) ){\r
option[ 'useVideo' ] = true;\r
};\r
- tracks.push( X.Audio( urls, X_Object_clone( option ) ) );\r
+ tracks.push( X[ 'Audio' ]( urls, X_Object_clone( option ) ) );\r
};\r
\r
tracks[ n - 1 ][ 'listenOnce' ]( [ X_EVENT_BACKEND_READY, X_EVENT_BACKEND_NONE ], this, X_Audio_Sprite_handleEvent );\r
if( enable_detect ){\r
// update pointerevent\r
if( Hammer.HAS_POINTEREVENTS ){ //eventType !== Hammer.EVENT_END ){\r
+ console.log( 'e.pointerId = ' + e.pointerId );\r
POINTERS[ e.identifier = e.pointerId ] = type & END ? null : e;\r
touches = [];\r
+ numTouches = -1;\r
// we can use forEach since pointerEvents only is in IE10\r
for( i = 0, l = POINTERS.length; i < l; ++i ){\r
- POINTERS[ i ] && ( touches[ touches.length ] = POINTERS[ i ] );\r
+ POINTERS[ i ] && ( touches[ ++numTouches ] = POINTERS[ i ] );\r
};\r
numTouches = touches.length;\r
\r
this.pointX = e.pageX;\r
this.pointY = e.pageY;\r
\r
+ console.log( 'scrollstart ' + e.pageY );\r
+ \r
this[ 'listen' ]( XUI_Event._POINTER_MOVE, this, X_UI_ScrollBox_onMove );\r
this[ 'listen' ]( [ XUI_Event._POINTER_UP, XUI_Event._POINTER_CANCEL ], this, X_UI_ScrollBox_onEnd );\r
\r
newX, newY,\r
absDistX, absDistY;\r
// 規定以上の move でスクロール開始\r
- \r
+\r
+console.log( 'scrollmove ' + e.buttons + ' ' + e.button );\r
+\r
if( !this.scrollEnabled || e.pointerType !== this.initiated ){\r
return ret;\r
};\r
// we scrolled less than 10 pixels\r
if( !this.moved ){\r
// this[ 'dispatch' ]( X_EVENT_CANCELED );\r
- console.log( 'we scrolled less than 10 pixels' );\r
+ console.log( 'we scrolled less than 10 pixels ' + e.pageY );\r
return ret;\r
};\r
\r
function X_UI_eventRellay( e ){
var font = X_ViewPort_baseFontSize,
- x = e.clientX / font,
- y = e.clientY / font,
+ x = e.pageX / font, // clientX iOS4- で通らない?
+ y = e.pageY / font,
type = XUI_Event.NameToID[ e.type ],
i = 0,
data = X_UI_rootData,