* \r
* TODO X.Class で作り、kill を強要する\r
*/\r
-\r
X[ 'XML' ] = XMLWrapper;\r
\r
/**\r
* @alias X.XML\r
* @class XML 探索用のラッパークラスです\r
* @constructor\r
- * @param {xml}\r
+ * @param {XMLElement}\r
*/\r
function XMLWrapper( xml ){\r
this._rawXML = xml;\r
};\r
\r
+/**\r
+ * ラップした xml の数 常に1または0, XMLList の場合2以上\r
+ * @alias X.XML.prototype.length\r
+ * @type {Number}\r
+ */\r
XMLWrapper.prototype.length = 1;\r
XMLWrapper.prototype[ 'parent' ] = XMLWrapper_parent;\r
XMLWrapper.prototype[ 'has' ] = XMLWrapper_has;\r
XMLWrapper.prototype[ 'val' ] = XMLWrapper_val;\r
XMLWrapper.prototype[ 'find' ] = XMLWrapper_find;\r
\r
+/**\r
+ * 親要素を返す、ルート要素の場合 null を返す\r
+ * @alias X.XML.prototype.parent\r
+ * @return {X.XML} 親要素\r
+ */\r
function XMLWrapper_parent(){\r
if( this.length === 1 ) return this._rawXML && this._rawXML.parentNode ? new XMLWrapper( this._rawXML.parentNode ) : null;\r
if( this.length === 0 ) return null;\r
return this[ 0 ].parentNode ? ( new XMLWrapper( this[ 0 ].parentNode ) ) : null;\r
};\r
\r
+/**\r
+ * セレクターにヒットした要素数を返す\r
+ * @alias X.XML.prototype.has\r
+ * @param {string} queryString XML セレクター文字列\r
+ * @return {number}\r
+ */\r
function XMLWrapper_has( queryString ){\r
return !!this.find( queryString ).length;\r
};\r
\r
+/**\r
+ * <p>X.XML では常に自信を返す\r
+ * <p>X.XMLList ではラップした xml 群から index のものを返す\r
+ * @alias X.XML.prototype.get\r
+ * @param {number} index\r
+ * @return {X.XML} X.XML では自身、X.XMLList では index の X.XML\r
+ */\r
function XMLWrapper_get( index ){\r
if( this.length === 1 ) return this;\r
if( this.length === 0 ) return null;\r
null;\r
};\r
\r
+/**\r
+ * セレクターにヒットした要素の内容を指定されたデータ型で返す。複数要素にヒットした場合、0番目の要素の内容を使用する。\r
+ * @alias X.XML.prototype.val\r
+ * @param {string} queryString XML セレクター文字列\r
+ * @param {string} type 'number','int','boolean','string'\r
+ * @return {boolean|number|string} 内容を型変換した値\r
+ */\r
function XMLWrapper_val( queryString, type ){\r
var //attr_textContent = X_UA[ 'IE' ] < 9 || X_UA[ 'Opera' ] ? 'innerText' : X_UA[ 'IE9' ] ? 'text' : 'textContent',\r
wrapper, xml, v;\r
return v || '';\r
};\r
\r
+/**\r
+ * セレクターにヒットした要素を返す。0~1個の要素がヒットした場合は X.XML を、それ以上の場合は X.XMLList を返す。\r
+ * @alias X.XML.prototype.find\r
+ * @param {string} queryString セレクター文字列\r
+ * @return {X.XML|X.XMLList} \r
+ */\r
function XMLWrapper_find( queryString ){\r
\r
var scope = this.constructor === XMLListWrapper ? this : [ this._rawXML ],\r
}\r
};\r
\r
+/**\r
+ * XML配列を扱う XML 探索用のラッパークラスです\r
+ * @alias X.XMLList\r
+ * @class XMLList XML配列を扱う XML 探索用のラッパークラスです\r
+ * @constructor\r
+ * @extends {X.XML}\r
+ */\r
function XMLListWrapper( xmlList ){\r
var i = 0, l = xmlList ? xmlList.length : 0;\r
for( ; i < l; ++i ){\r
/**
* 認可用 window をポップアップする。ポップアップブロックが働かないように必ず pointer event 内で呼ぶこと。
+ * <dl>
+ * <dt>1 : <dd>認可用 window がポップアップ中(自身)
+ * <dt>2 : <dd>コードを認可中
+ * <dt>3 : <dd>トークンのリフレッシュ中
+ * <dt>4 : <dd>接続
+ * <dt>5 : <dd>他のOAuth2サービスの認可用 window がポップアップ中
+ * </dl>
+ * @return {number}
*/
'requestAuth' : function(){
- var url, w, h;
+ var e = X_EventDispatcher_CURRENT_EVENTS[ X_EventDispatcher_CURRENT_EVENTS.length - 1 ],
+ w, h;
+
// TODO pointer event 内か?チェック
+ if( !e || !e[ 'pointerType' ] ){
+ alert( 'タッチイベント以外での popup! ' + ( e ? e.type : '' ) );
+ return;
+ };
+
// 二つ以上の popup を作らない
if( X_NET_OAUTH2_authorizationWindow ) return;
pair = X_Pair_get( this );
if( pair.net || pair.oauth2State ) return;
-
- url = pair[ 'authorizeEndpoint' ];
+
w = pair[ 'authorizeWindowWidth' ] || 500;
h = pair[ 'authorizeWindowHeight' ] || 500;
+ // TODO X.Util.Window
X_NET_OAUTH2_authorizationWindow = window.open(
- X_URL_create( url,
+ X_URL_create( pair[ 'authorizeEndpoint' ],
{
'response_type' : 'code',
'client_id' : pair[ 'clientID' ],
};
// http://d.hatena.ne.jp/ritou/20110402/1301679908
- if ( bearerParams && bearerParams.indexOf( ' error=' ) === -1 ) { // bearerParams.error == undefined
+ if( bearerParams && bearerParams.indexOf( ' error=' ) === -1 ){ // bearerParams.error == undefined
pair.oauth2State = 0;
oauth2[ 'asyncDispatch' ]( X_EVENT_NEED_AUTH );
} else
- if ((( bearerParams && bearerParams.indexOf( 'invalid_token' ) !== -1 ) || !headersExposed) && X_OAuth2_getRefreshToken( oauth2 ) ) {
+ if( ( ( bearerParams && bearerParams.indexOf( 'invalid_token' ) !== -1 ) || !headersExposed ) && X_OAuth2_getRefreshToken( oauth2 ) ){
X_OAuth2_removeAccessToken( oauth2 ); // It doesn't work any more.
pair.oauth2State = 3;
oauth2[ 'refreshToken' ]();