2012-10-09 19:04:23 -04:00
|
|
|
(function() { var a, b = window.T, c = "http"; scheme = c + "://", host =
|
|
|
|
"open.t.qq.com", a = { name: "Tencent weibo SDK", version: "1.0",
|
|
|
|
appkey: { value: "{APPKEY}", version: "{APPKEY_VERSION}",
|
|
|
|
verified: !1 }, debug: !0, pingback: !0, _domain: {
|
|
|
|
api: scheme + host + "{API_URI}", auth: scheme
|
|
|
|
+ host + "{AUTH_URI}", query: scheme + host + "{QUERY_TOKEN_URI}",
|
|
|
|
exchange: scheme + host + "{EXCHANGE_TOKEN_URI}", flashproxy: scheme + host +
|
|
|
|
"{FLASHPROXY_URI}", serverproxy: scheme + host + "{SERVERPROXY_URI}",
|
|
|
|
clientproxy: "{CLIENTPROXY_URI}" }, _const: { AUTH_WINDOW_NAME:
|
|
|
|
"authClientProxy_ee5a0f93", AUTH_WINDOW_WIDTH: 575, AUTH_WINDOW_HEIGHT:
|
|
|
|
465 }, _cookie: { names: { accessToken: "QQWBToken", refreshToken:
|
|
|
|
"QQWBRefreshToken" }, path: "/", domain: "" }, noConflict:
|
|
|
|
function() { return b && (window.T = b), a }, copy: function(a, b, c,
|
|
|
|
d) { for (var e in b) if (c || typeof a[e] == "undefined") a[e]
|
|
|
|
= d ? d(b[e]) : b[e]; return a }, create: function(a,
|
|
|
|
b) { var c = this, d = a ? a.split(".") : [], e
|
|
|
|
= d.length; for (var f = 0; f < e; f++)
|
|
|
|
{ var g = d[f], h = c[g]; h || (h = b && f + 1 === e ? b : {}, c[g] = h), c = h
|
|
|
|
} return c }, extend: function(b, c, d) { return a.copy(typeof b == "string" ?
|
|
|
|
a.create.call(this, b) : b, c, d) }, _alias: function(b, c) { c = c ||
|
|
|
|
a; if (typeof b == "string") this[b] = c; else if
|
|
|
|
(Object.prototype.toString.call(b) === "[object
|
|
|
|
Array]") for (var d = 0, e = b.length; d < e; d++)
|
|
|
|
this[b[d]] = c }, alias: function(b, c) { a._alias(b,
|
|
|
|
a[c]) }, assign: function(a, b, c) {
|
|
|
|
var d = this, e = d, f = a ?
|
|
|
|
a.split(".") : [], g =
|
|
|
|
f.length; for (var h =
|
|
|
|
0; h <
|
|
|
|
g;
|
|
|
|
h++) {
|
|
|
|
var
|
|
|
|
i
|
|
|
|
=
|
|
|
|
f[h],
|
|
|
|
j
|
|
|
|
=
|
|
|
|
d[i];
|
|
|
|
if
|
|
|
|
(!j)
|
|
|
|
throw
|
|
|
|
new
|
|
|
|
Error("Tencent
|
|
|
|
weibo
|
|
|
|
SDK:
|
|
|
|
[ERROR]
|
|
|
|
no
|
|
|
|
such
|
|
|
|
name
|
|
|
|
"
|
|
|
|
+
|
|
|
|
i);
|
|
|
|
e
|
|
|
|
=
|
|
|
|
d,
|
|
|
|
d
|
|
|
|
=
|
|
|
|
j
|
|
|
|
} if
|
|
|
|
(typeof d == "string") e[i] =
|
|
|
|
d.replace(new
|
|
|
|
RegExp("\\{"
|
|
|
|
+
|
|
|
|
b
|
|
|
|
+
|
|
|
|
"\\}",
|
|
|
|
"ig"),
|
|
|
|
c);
|
|
|
|
else if (typeof d == "object")
|
|
|
|
for (var k in d)
|
|
|
|
d.hasOwnProperty(k)
|
|
|
|
&&
|
|
|
|
typeof
|
|
|
|
d[k]
|
|
|
|
==
|
|
|
|
"string"
|
|
|
|
&&
|
|
|
|
(d[k]
|
|
|
|
=
|
|
|
|
d[k].replace(new
|
|
|
|
RegExp("\\{"
|
|
|
|
+
|
|
|
|
b
|
|
|
|
+
|
|
|
|
"\\}",
|
|
|
|
"ig"),
|
|
|
|
c))
|
|
|
|
}, uid: function() { return
|
|
|
|
Math.random().toString(16).substr(2)
|
|
|
|
} }, a.alias("provide", "create"),
|
|
|
|
a._alias.call(window, ["QQWB", "T"],
|
|
|
|
a),
|
|
|
|
a.assign("_domain", "API_URI",
|
|
|
|
"/api"),
|
|
|
|
a.assign("_domain", "AUTH_URI",
|
|
|
|
"/oauth2_html/login.php"),
|
|
|
|
a.assign("_domain", "SERVERPROXY_URI",
|
|
|
|
"/open-js/proxy.html"),
|
|
|
|
a.assign("_domain", "FLASHPROXY_URI",
|
|
|
|
"/open-js/proxy_v15.swf"),
|
|
|
|
a.assign("_domain",
|
|
|
|
"EXCHANGE_TOKEN_URI",
|
|
|
|
"/cgi-bin/exchange_token"),
|
|
|
|
a.assign("_domain", "QUERY_TOKEN_URI",
|
|
|
|
"/cgi-bin/auto_token")
|
|
|
|
})(), QQWB.extend("String", {
|
|
|
|
_trimLeft: /^\s+/, _trimRight:
|
|
|
|
/\s+$/, isString: function(a)
|
|
|
|
{ return typeof a == "string" },
|
|
|
|
ltrim: function(a) { return a == null
|
|
|
|
? "" :
|
|
|
|
a.toString().replace(this._trimLeft,
|
|
|
|
"") }, rtrim:
|
|
|
|
function(a) { return a == null
|
|
|
|
? "" :
|
|
|
|
a.toString().replace(this._trimRight,
|
|
|
|
"") }, trim:
|
|
|
|
String.prototype.trim ?
|
|
|
|
function(a) { return a == null
|
|
|
|
? "" :
|
|
|
|
String.prototype.trim.call(a)
|
|
|
|
} : function(a) { return a ==
|
|
|
|
null ? "" :
|
|
|
|
a.toString().replace(this._trimLeft,
|
|
|
|
"").replace(this._trimRight,
|
|
|
|
"") },
|
|
|
|
startsWith:
|
|
|
|
String.prototype.startsWith
|
|
|
|
? function(a,
|
|
|
|
b)
|
|
|
|
{ return a ==
|
|
|
|
null ?
|
|
|
|
!1
|
|
|
|
:
|
|
|
|
String.prototype.startsWith.call(a,
|
|
|
|
b)
|
|
|
|
} :
|
|
|
|
function(a, b) { return a == null ? !1
|
|
|
|
: a.toString().indexOf(b) == 0
|
|
|
|
}, endsWith: String.prototype.endsWith
|
|
|
|
? function(a, b) { return a == null ?
|
|
|
|
!1 :
|
|
|
|
String.prototype.endsWith.call(a,
|
|
|
|
b) } :
|
|
|
|
function(a, b) {
|
|
|
|
return a ==
|
|
|
|
null ?
|
|
|
|
!1 :
|
|
|
|
a.toString().lastIndexOf(b)
|
|
|
|
>= 0
|
|
|
|
&&
|
|
|
|
a.toString().lastIndexOf(b)
|
|
|
|
+
|
|
|
|
b.length
|
|
|
|
==
|
|
|
|
a.length
|
|
|
|
} }),
|
|
|
|
QQWB.extend("_const",
|
|
|
|
{
|
|
|
|
HTTP_METHOD_GET:
|
|
|
|
"GET",
|
|
|
|
HTTP_METHOD_POST:
|
|
|
|
"POST",
|
|
|
|
HTTP_METHOD_GET_OR_POST:
|
|
|
|
"GET | POST",
|
|
|
|
API_CATEGORY_TIMELINE:
|
|
|
|
"时间线",
|
|
|
|
API_CATEGORY_WEIBO:
|
|
|
|
"微博相关",
|
|
|
|
API_CATEGORY_ACCOUNT:
|
|
|
|
"账户相关",
|
|
|
|
API_CATEGORY_RELATION:
|
|
|
|
"关系链相关",
|
|
|
|
API_CATEGORY_SIXIN:
|
|
|
|
"私信相关",
|
|
|
|
API_CATEGORY_SEARCH:
|
|
|
|
"搜索相关",
|
|
|
|
API_CATEGORY_TRENS:
|
|
|
|
"热度趋势",
|
|
|
|
API_CATEGORY_QUERY:
|
|
|
|
"查看数据",
|
|
|
|
API_CATEGORY_FAVORITE:
|
|
|
|
"数据收藏",
|
|
|
|
API_CATEGORY_TOPIC:
|
|
|
|
"话题相关",
|
|
|
|
API_CATEGORY_TAG:
|
|
|
|
"标签相关",
|
|
|
|
API_CATEGORY_OTHER:
|
|
|
|
"其他",
|
|
|
|
API_NO_DESCRIPTION:
|
|
|
|
"暂时没有关于此参数的说明",
|
|
|
|
API_NO_DEFAULT_VALUE:
|
|
|
|
"",
|
|
|
|
COMMON_NULL: null,
|
|
|
|
COMMON_EMPTY_STRING:
|
|
|
|
"" }),
|
|
|
|
QQWB.extend("_apiProvider",
|
|
|
|
{
|
|
|
|
_apiRetError:
|
|
|
|
{ 1:
|
|
|
|
"参数错误",
|
|
|
|
2: "频率受限",
|
|
|
|
3: "鉴权失败",
|
|
|
|
4: "内部错误"
|
|
|
|
},
|
|
|
|
_apiErrorCode:
|
|
|
|
{ 4:
|
|
|
|
"过多脏话",
|
|
|
|
5: "禁止访问",
|
|
|
|
6:
|
|
|
|
"记录不存在",
|
|
|
|
8: "内容过长",
|
|
|
|
9:
|
|
|
|
"内容包含垃圾信息",
|
|
|
|
10:
|
|
|
|
"发表太快,频率限制",
|
|
|
|
11:
|
|
|
|
"源消息不存在",
|
|
|
|
12:
|
|
|
|
"未知错误",
|
|
|
|
13: "重复发表"
|
|
|
|
},
|
|
|
|
_apiParseRetCode:
|
|
|
|
function(a)
|
|
|
|
{ var
|
|
|
|
b
|
|
|
|
=
|
|
|
|
a.match(/\"ret\":(\d+)\}/)
|
|
|
|
||
|
|
|
|
a.match(/<ret>(\d+)<\/ret>/);
|
|
|
|
return
|
|
|
|
b
|
|
|
|
?
|
|
|
|
parseInt(b[1],
|
|
|
|
10)
|
|
|
|
:
|
|
|
|
b
|
|
|
|
},
|
|
|
|
_apiParseErrorCode:
|
|
|
|
function(a)
|
|
|
|
{ var
|
|
|
|
b
|
|
|
|
=
|
|
|
|
a.match(/\"errcode\":(-?\d+)/)
|
|
|
|
||
|
|
|
|
a.match(/<errcode>(\d+)<\/errcode>/);
|
|
|
|
return
|
|
|
|
b
|
|
|
|
?
|
|
|
|
parseInt(b[1],
|
|
|
|
10)
|
|
|
|
:
|
|
|
|
b
|
|
|
|
},
|
|
|
|
_apiGetErrorMessage:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{ var
|
|
|
|
c
|
|
|
|
=
|
|
|
|
[],
|
|
|
|
a
|
|
|
|
=
|
|
|
|
a
|
|
|
|
+
|
|
|
|
"",
|
|
|
|
b
|
|
|
|
=
|
|
|
|
b
|
|
|
|
+
|
|
|
|
"",
|
|
|
|
d
|
|
|
|
=
|
|
|
|
QQWB._apiProvider._apiRetError[a],
|
|
|
|
e
|
|
|
|
=
|
|
|
|
QQWB._apiProvider._apiErrorCode[b];
|
|
|
|
return
|
|
|
|
d
|
|
|
|
&&
|
|
|
|
c.push(d),
|
|
|
|
e
|
|
|
|
&&
|
|
|
|
c.push(e),
|
|
|
|
c.length
|
|
|
|
>
|
|
|
|
0
|
|
|
|
?
|
|
|
|
c.join(",")
|
|
|
|
:
|
|
|
|
"未知错误"
|
|
|
|
},
|
|
|
|
apis: {
|
|
|
|
"/statuses/home_timeline":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TIMELINE,
|
|
|
|
description:
|
|
|
|
"主页时间线",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagetime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/statuses/home_timeline_vip":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TIMELINE,
|
|
|
|
description:
|
|
|
|
"vip用户时间线",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"2",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagetime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
lastid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/statuses/public_timeline":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TIMELINE,
|
|
|
|
description:
|
|
|
|
"广播大厅时间线",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pos:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/statuses/user_timeline":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TIMELINE,
|
|
|
|
description:
|
|
|
|
"其他用户发表时间线",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagetime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
lastid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
name:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/statuses/mentions_timeline":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TIMELINE,
|
|
|
|
description:
|
|
|
|
"@提到我的时间线",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagetime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
lastid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
type:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0x1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/statuses/ht_timeline":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TIMELINE,
|
|
|
|
description:
|
|
|
|
"话题时间线",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
httext:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"pBoard",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pageinfo:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/statuses/broadcast_timeline":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TIMELINE,
|
|
|
|
description:
|
|
|
|
"我发表时间线",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagetime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
lastid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/statuses/special_timeline":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TIMELINE,
|
|
|
|
description:
|
|
|
|
"特别收听的人发表时间线",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagetime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/statuses/broadcast_timeline_ids":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TIMELINE,
|
|
|
|
description:
|
|
|
|
"我发表时间线索引",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagetime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
lastid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
type:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
contenttype:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
accesslevel:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/statuses/home_timeline_ids":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TIMELINE,
|
|
|
|
description:
|
|
|
|
"首页时间线索引",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagetime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
lastid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
type:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
contenttype:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
accesslevel:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/statuses/mentions_timeline_ids":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TIMELINE,
|
|
|
|
description:
|
|
|
|
"提及我的时间线索引",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagetime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
lastid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
type:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
contenttype:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
accesslevel:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/statuses/user_timeline_ids":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TIMELINE,
|
|
|
|
description:
|
|
|
|
"用户发表时间线索引",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagetime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
lastid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
name:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
type:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
contenttype:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
accesslevel:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/statuses/users_timeline":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TIMELINE,
|
|
|
|
description:
|
|
|
|
"多用户发表时间线",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagetime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
lastid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
names:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t,api_weibo",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
type:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
contenttype:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
accesslevel:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/statuses/users_timeline_ids":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TIMELINE,
|
|
|
|
description:
|
|
|
|
"多用户发表时间线索引",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagetime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
lastid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
names:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t,api_weibo",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
type:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
contenttype:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
accesslevel:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/statuses/area_timeline":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TIMELINE,
|
|
|
|
description:
|
|
|
|
"同城发表时间线",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pos:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
country:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
province:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
11,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
city:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/statuses/ht_timeline_ext":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TIMELINE,
|
|
|
|
description:
|
|
|
|
"话题时间线(修复翻页问题)",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
10,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
flag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
accesslevel:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
type:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
contenttype:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
httext:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"iweibo",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
htid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/show":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"获取一条微博数据",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
id:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
51545056800467,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/add":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"发表一条微博",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
content:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"test",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
clientip:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"127.0.0.1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
jing:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
wei:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/del":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"删除一条微博",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
id:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
94035056272295,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/re_add":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"转播一条微博",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
content:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"test",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
clientip:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"127.0.0.1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
jing:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
wei:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
77048060858014,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/reply":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"回复一条微博",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
content:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"test",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
clientip:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"127.0.0.1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
jing:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
wei:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
77048060858014,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/add_pic":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"发表一条图片微博",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
content:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"test",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
clientip:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"127.0.0.1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
jing:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
wei:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pic:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/add_emotion":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"发表一条心情微博",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
content:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"test",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
clientip:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"127.0.0.1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
jing:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
wei:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
signtype:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/re_count":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"转播数或点评数",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
ids:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
0xb04fd23c98500000,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
flag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/re_list":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"获取单条微博的转发和点评列表",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
flag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
rootid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
92035070199751,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagetime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"2",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
twitterid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/comment":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"点评一条微博",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
content:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"test",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
clientip:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"127.0.0.1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
jing:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
wei:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
28135069067568,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/add_music":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"发表音频微博",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
content:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"test",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
clientip:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"127.0.0.1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
jing:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
wei:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
url:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"http://url.cn",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
title:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"歌名",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
author:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"演唱者",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
12345678,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/add_video":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"发表视频微博",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
content:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"test",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
clientip:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"127.0.0.1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
jing:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
wei:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
url:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"http://url.cn",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/add_video":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"发表视频微博",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
content:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"test",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
clientip:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"127.0.0.1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
jing:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
wei:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
url:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"http://url.cn",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/getvideoinfo":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"获取视频信息",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
url:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"http://v.youku.com/v_show/id_XMjExODczODM2.html",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/list":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"根据微博ID批量得到微博数据",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
ids:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"39110101242147,39578069128701",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/add_video_prev":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"预发表一条视频微博",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
content:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"test",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
clientip:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"127.0.0.1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
jing:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
wei:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
vid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
title:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/t/sub_re_count":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_WEIBO,
|
|
|
|
description:
|
|
|
|
"获取转播的再次转播数",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
ids:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"8171051658365,55054116813124",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/user/info":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_ACCOUNT,
|
|
|
|
description:
|
|
|
|
"获取自己的详细资料",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET
|
|
|
|
},
|
|
|
|
"/user/update":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_ACCOUNT,
|
|
|
|
description:
|
|
|
|
"更新个人资料",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
nick:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
sex:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
year:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
2e3,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
month:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
day:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
countrycode:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
provincecode:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
11,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
citycode:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
introduction:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"xxxx",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/user/update_edu":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_ACCOUNT,
|
|
|
|
description:
|
|
|
|
"更新个人教育信息",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
year:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
1995,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
level:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
schoolid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
field:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
departmentid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/user/update_head":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_ACCOUNT,
|
|
|
|
description:
|
|
|
|
"更新个人资料头像",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pic:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/user/other_info":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_ACCOUNT,
|
|
|
|
description:
|
|
|
|
"获取其他人资料",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
name:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/user/infos":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_ACCOUNT,
|
|
|
|
description:
|
|
|
|
"多用户信息",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
names:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t,api_weibo",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/user/verify":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_ACCOUNT,
|
|
|
|
description:
|
|
|
|
"验证账户是否合法(是否注册微博)",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
name:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/user/emotion":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_ACCOUNT,
|
|
|
|
description:
|
|
|
|
"获取心情微博",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
name:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
id:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
timstamp:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
type:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
contenttype:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
accesslevel:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
emotiontype:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0xFFFFFFFF",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
10,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/fanslist":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"我的听众列表",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
startindex:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/idollist":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"我收听的人列表",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
startindex:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/blacklist":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"黑名单列表",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
startindex:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/speciallist":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"特别收听列表",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
startindex:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/add":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"收听某个用户",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
name:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/del":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"取消收听某个用户",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
name:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/addspecial":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"特别收听某个用户",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
name:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/delspecial":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"取消特别收听某个用户",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
name:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/addblacklist":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"添加某个用户到黑名单",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
name:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/delblacklist":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"从黑名单中删除某个用户",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
name:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/check":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"检查是否我的听众或收听的人",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
names:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
flag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"2",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/user_fanslist":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"其他账户听众列表",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
30,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
startindex:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
name:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/user_idollist":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"其他账户收听的人列表",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
30,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
startindex:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
name:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/user_speciallist":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"其他账户特别收听的人列表",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
30,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
startindex:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
name:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/fanslist_s":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"多听众列表",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
100,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
startindex:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/idollist_s":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"多收听人列表",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
100,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
startindex:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/friends/mutual_list":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_RELATION,
|
|
|
|
description:
|
|
|
|
"互听关系链列表",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
name:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"t",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
startindex:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
30,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/private/add":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_SIXIN,
|
|
|
|
description:
|
|
|
|
"发私信",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
content:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"test",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
clientip:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"127.0.0.1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
jing:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
wei:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
name:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"mmplayer",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/private/del":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_SIXIN,
|
|
|
|
description:
|
|
|
|
"删除一条私信",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
id:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
26154115313103,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/private/recv":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_SIXIN,
|
|
|
|
description:
|
|
|
|
"收件箱",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagetime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
lastid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/private/send":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_SIXIN,
|
|
|
|
description:
|
|
|
|
"发件箱",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagetime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
lastid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/search/user":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_SEARCH,
|
|
|
|
description:
|
|
|
|
"搜索用户",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
keyword:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"test",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagesize:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
10,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
page:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/search/t":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_SEARCH,
|
|
|
|
description:
|
|
|
|
"搜索微博",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
keyword:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"test",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagesize:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
10,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
page:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/search/userbytag":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_SEARCH,
|
|
|
|
description:
|
|
|
|
"通过标签搜索用户",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
keyword:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"test",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagesize:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
10,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
page:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/trends/ht":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TRENS,
|
|
|
|
description:
|
|
|
|
"话题热榜",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
type:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"3",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pos:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/trends/t":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TRENS,
|
|
|
|
description:
|
|
|
|
"热门转播",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pos:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/info/update":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_QUERY,
|
|
|
|
description:
|
|
|
|
"更新条数",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
op:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
type:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"9",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/fav/addt":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_FAVORITE,
|
|
|
|
description:
|
|
|
|
"收藏一条微博",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
id:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
123456789,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/fav/delt":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_FAVORITE,
|
|
|
|
description:
|
|
|
|
"取消收藏一条微博",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
id:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
123456789,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/fav/list_t":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_FAVORITE,
|
|
|
|
description:
|
|
|
|
"收藏的微博列表",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
nexttime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
prevtime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
lastid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/fav/addht":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_FAVORITE,
|
|
|
|
description:
|
|
|
|
"订阅话题",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
id:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
123456789,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/fav/delht":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_FAVORITE,
|
|
|
|
description:
|
|
|
|
"取消收藏话题",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
id:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
123456789,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/fav/list_ht":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_FAVORITE,
|
|
|
|
description:
|
|
|
|
"获取已订阅话题列表",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
reqnum:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
20,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pageflag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
pagetime:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
lastid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/ht/ids":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TOPIC,
|
|
|
|
description:
|
|
|
|
"根据话题名称查询话题ID",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
httexts:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"abc,efg",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/ht/info":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TOPIC,
|
|
|
|
description:
|
|
|
|
"根据话题ID获取话题相关微博",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
ids:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
0xb04fd23c98500000,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/tag/add":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TAG,
|
|
|
|
description:
|
|
|
|
"添加标签",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
tag:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"snow",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/tag/del":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_TAG,
|
|
|
|
description:
|
|
|
|
"删除标签",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_POST,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
tagid:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
0x4735d427dffb9400,
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/other/kownperson":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_OTHER,
|
|
|
|
description:
|
|
|
|
"我可能认识的人",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
ip:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"127.0.0.1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
country_code:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
province_code:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
},
|
|
|
|
city_code:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/other/kownperson":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_OTHER,
|
|
|
|
description:
|
|
|
|
"可能认识的人",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET
|
|
|
|
},
|
|
|
|
"/other/shorturl":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_OTHER,
|
|
|
|
description:
|
|
|
|
"短URL转长URL",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
url:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"3M6GSa",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/other/get_emotions":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_OTHER,
|
|
|
|
description:
|
|
|
|
"获取表情接口",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
type:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"0",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/other/kownperson":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_OTHER,
|
|
|
|
description:
|
|
|
|
"我可能认识的人",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET,
|
|
|
|
supportParams:
|
|
|
|
{
|
|
|
|
ip:
|
|
|
|
{
|
|
|
|
defaultValue:
|
|
|
|
"127.0.0.1",
|
|
|
|
description:
|
|
|
|
QQWB._const.API_NO_DESCRIPTION
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"/other/videokey":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_OTHER,
|
|
|
|
description:
|
|
|
|
"获取视频上传的key",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET
|
|
|
|
},
|
|
|
|
"/other/gettopreadd":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_OTHER,
|
|
|
|
description:
|
|
|
|
"一键转播热门排行",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET
|
|
|
|
},
|
|
|
|
"/other/url_converge":
|
|
|
|
{
|
|
|
|
category:
|
|
|
|
QQWB._const.API_CATEGORY_OTHER,
|
|
|
|
description:
|
|
|
|
"短url聚合",
|
|
|
|
supportMethod:
|
|
|
|
QQWB._const.HTTP_METHOD_GET
|
|
|
|
} },
|
|
|
|
getDescriptor:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
this.apis[a]
|
|
|
|
},
|
|
|
|
isProvide:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
!!this.getDescriptor(a)
|
|
|
|
},
|
|
|
|
describe:
|
|
|
|
function(a)
|
|
|
|
{ var
|
|
|
|
b
|
|
|
|
=
|
|
|
|
this.getDescriptor(a);
|
|
|
|
return
|
|
|
|
b
|
|
|
|
?
|
|
|
|
b.category
|
|
|
|
+
|
|
|
|
">"
|
|
|
|
+
|
|
|
|
b.description
|
|
|
|
:
|
|
|
|
""
|
|
|
|
},
|
|
|
|
compat:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
!QQWB.String.startsWith(a,
|
|
|
|
"/")
|
|
|
|
&&
|
|
|
|
(a
|
|
|
|
=
|
|
|
|
"/"
|
|
|
|
+
|
|
|
|
a),
|
|
|
|
a.toLowerCase()
|
|
|
|
} });
|
|
|
|
var JSON; JSON || (JSON = {}), function() { function f(a) { return a < 10 ? "0"
|
|
|
|
+ a : a }
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function quote(a) { return escapable.lastIndex = 0, escapable.test(a) ? '"'
|
|
|
|
+ a.replace(escapable, function(a) { var b = meta[a]; return typeof
|
|
|
|
b == "string" ? b : "\\u" + ("0000" +
|
|
|
|
a.charCodeAt(0).toString(16)).slice(-4) }) + '"' :
|
|
|
|
'"' + a + '"' }
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function str(a, b) { var c, d, e, f, g = gap, h, i = b[a]; i && typeof i ==
|
|
|
|
"object" && typeof i.toJSON == "function" && (i = i.toJSON(a)),
|
|
|
|
typeof rep == "function" && (i = rep.call(b, a, i)); switch (typeof
|
|
|
|
i) { case "string": return quote(i); case "number":
|
|
|
|
return isFinite(i) ? String(i) : "null";
|
|
|
|
case "boolean": case "null": return
|
|
|
|
String(i);
|
|
|
|
case "object": if (!i) return "null"; gap
|
|
|
|
+= indent, h = [];
|
|
|
|
if
|
|
|
|
(Object.prototype.toString.apply(i)
|
|
|
|
=== "[object
|
|
|
|
Array]") { f =
|
|
|
|
i.length;
|
|
|
|
for (c = 0; c < f; c += 1)
|
|
|
|
h[c] = str(c, i) ||
|
|
|
|
"null";
|
|
|
|
return e = h.length === 0 ?
|
|
|
|
"[]" : gap ? "[\n" +
|
|
|
|
gap + h.join(",\n" +
|
|
|
|
gap)
|
|
|
|
+ "\n" + g + "]" :
|
|
|
|
"[" + h.join(",") +
|
|
|
|
"]", gap = g, e } if
|
|
|
|
(rep && typeof rep
|
|
|
|
== "object") { f =
|
|
|
|
rep.length;
|
|
|
|
for (c = 0;
|
|
|
|
c
|
|
|
|
<
|
|
|
|
f;
|
|
|
|
c
|
|
|
|
+=
|
|
|
|
1)
|
|
|
|
typeof
|
|
|
|
rep[c]
|
|
|
|
==
|
|
|
|
"string"
|
|
|
|
&&
|
|
|
|
(d
|
|
|
|
=
|
|
|
|
rep[c],
|
|
|
|
e
|
|
|
|
=
|
|
|
|
str(d,
|
|
|
|
i),
|
|
|
|
e
|
|
|
|
&&
|
|
|
|
h.push(quote(d)
|
|
|
|
+
|
|
|
|
(gap
|
|
|
|
?
|
|
|
|
":
|
|
|
|
"
|
|
|
|
:
|
|
|
|
":")
|
|
|
|
+
|
|
|
|
e))
|
|
|
|
} else for (d in i)
|
|
|
|
Object.prototype.hasOwnProperty.call(i,
|
|
|
|
d)
|
|
|
|
&&
|
|
|
|
(e
|
|
|
|
=
|
|
|
|
str(d,
|
|
|
|
i),
|
|
|
|
e
|
|
|
|
&&
|
|
|
|
h.push(quote(d)
|
|
|
|
+
|
|
|
|
(gap
|
|
|
|
?
|
|
|
|
":
|
|
|
|
"
|
|
|
|
:
|
|
|
|
":")
|
|
|
|
+
|
|
|
|
e));
|
|
|
|
return e = h.length
|
|
|
|
=== 0 ?
|
|
|
|
"{}" : gap
|
|
|
|
? "{\n" +
|
|
|
|
gap +
|
|
|
|
h.join(",\n"
|
|
|
|
+
|
|
|
|
gap)
|
|
|
|
+ "\n" + g
|
|
|
|
+ "}" : "{"
|
|
|
|
+
|
|
|
|
h.join(",")
|
|
|
|
+ "}", gap
|
|
|
|
= g, e } }
|
|
|
|
"use strict", typeof Date.prototype.toJSON != "function" &&
|
|
|
|
(Date.prototype.toJSON = function(a) { return
|
|
|
|
isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" +
|
|
|
|
f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) +
|
|
|
|
"T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes())
|
|
|
|
+ ":" + f(this.getUTCSeconds()) + "Z" : null },
|
|
|
|
String.prototype.toJSON = Number.prototype.toJSON =
|
|
|
|
Boolean.prototype.toJSON = function(a) { return
|
|
|
|
this.valueOf() }); var cx =
|
|
|
|
/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
|
|
|
|
escapable =
|
|
|
|
/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
|
|
|
|
gap, indent, meta = { "\b": "\\b", "\t": "\\t", "\n": "\\n", "\f":
|
|
|
|
"\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\" }, rep; typeof
|
|
|
|
JSON.stringify != "function" && (JSON.stringify =
|
|
|
|
function(a, b, c) { var d; gap = "", indent
|
|
|
|
= ""; if (typeof c == "number") for
|
|
|
|
(d = 0; d < c; d += 1) indent += " "; else typeof c
|
|
|
|
== "string" && (indent = c); rep = b; if (!b ||
|
|
|
|
typeof b == "function" || typeof b ==
|
|
|
|
"object" && typeof b.length == "number")
|
|
|
|
return str("", { "": a }); throw new
|
|
|
|
Error("JSON.stringify") }), typeof JSON.parse !=
|
|
|
|
"function" && (JSON.parse = function(text, reviver) {
|
|
|
|
function walk(a, b) { var c, d, e = a[b]; if (e &&
|
|
|
|
typeof e == "object") for (c in e)
|
|
|
|
Object.prototype.hasOwnProperty.call(e, c)
|
|
|
|
&& (d = walk(e, c), d !== undefined ? e[c] = d :
|
|
|
|
delete e[c]); return reviver.call(a, b, e)
|
|
|
|
} var j; text = String(text), cx.lastIndex = 0,
|
|
|
|
cx.test(text) && (text = text.replace(cx, function(a) {
|
|
|
|
return "\\u" + ("0000" +
|
|
|
|
a.charCodeAt(0).toString(16)).slice(-4)
|
|
|
|
})); if
|
|
|
|
(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
|
|
|
|
"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
|
|
|
|
"]").replace(/(?:^|:|,)(?:\s*\[)+/g,
|
|
|
|
"")))
|
|
|
|
return j = eval("(" + text + ")"), typeof reviver
|
|
|
|
== "function" ? walk({ "": j }, "") : j; throw new
|
|
|
|
SyntaxError("JSON.parse") }) }(),
|
|
|
|
QQWB.extend("JSON", { fromString: function(a) { if (!a ||
|
|
|
|
!QQWB.String.isString(a)) return
|
|
|
|
{}; a = a.replace(/^\s+/, "").replace(/\s+$/, ""); if
|
|
|
|
(window.JSON && window.JSON.parse) a =
|
|
|
|
window.JSON.parse(a); else if
|
|
|
|
(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
|
|
|
|
"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
|
|
|
|
"]").replace(/(?:^|:|,)(?:\s*\[)+/g,
|
|
|
|
"")))
|
|
|
|
a = (new Function("return " + data))(); else throw
|
|
|
|
new SyntaxError("Invalid JSON: " + a); return a },
|
|
|
|
stringify: function(a) { return a == null ? "" :
|
|
|
|
window.JSON.stringify(a) }, toString: function(a) {
|
|
|
|
return QQWB.JSON.stringify(a) }, parse:
|
|
|
|
function(a) { return a == null ? {} :
|
|
|
|
window.JSON.parse(a) } }, !0),
|
|
|
|
QQWB.provide("man", function(a) { return a =
|
|
|
|
this._apiProvider.compat(a),
|
|
|
|
this._apiProvider.getDescriptor(a) ?
|
|
|
|
QQWB.JSON.stringify(this._apiProvider.getDescriptor(a))
|
|
|
|
: "no such api" }), QQWB.extend("Array", { isArray:
|
|
|
|
function(a) { return
|
|
|
|
Object.prototype.toString.call(a)
|
|
|
|
=== "[object Array]" }, inArray:
|
|
|
|
function(a, b) { for (var c = 0, d =
|
|
|
|
a.length; c < d; c++) if (b ===
|
|
|
|
a[c]) return !0; return !1
|
|
|
|
}, fromString: function(a, b, c) { return
|
|
|
|
QQWB.String.isString(a) ? (b = b ||
|
|
|
|
"", c ? a.split(b, c) :
|
|
|
|
a.split(b)) : [] },
|
|
|
|
fromArguments: function(a,
|
|
|
|
b) { return typeof
|
|
|
|
a !=
|
|
|
|
"object" ? [] : b ?
|
|
|
|
Array.prototype.slice.call(a, b) :
|
|
|
|
Array.prototype.slice.call(a) }, toArray:
|
|
|
|
function(a) { return typeof a == "string" ?
|
|
|
|
a.split("") : typeof a == "object"
|
|
|
|
? Array.prototype.slice.call(a, 0) :
|
|
|
|
this.toArray(a.toString()) }, each:
|
|
|
|
function(a, b) { for (var c = 0, d =
|
|
|
|
a.length; c < d; c++) if
|
|
|
|
(!1 === b(c, a[c])) break }, get:
|
|
|
|
function(a, b) { var c = a.length;
|
|
|
|
if (Math.abs(b) < c) return
|
|
|
|
b >= 0 ? a[b] : a[c
|
|
|
|
+ b] } }),
|
|
|
|
QQWB.extend("dom",
|
|
|
|
{
|
|
|
|
create:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
c =
|
|
|
|
document.createElement(a
|
|
|
|
+
|
|
|
|
"");
|
|
|
|
if (b && c)
|
|
|
|
for
|
|
|
|
(attr
|
|
|
|
in
|
|
|
|
b)
|
|
|
|
b.hasOwnProperty(attr)
|
|
|
|
&&
|
|
|
|
(QQWB.String.startsWith(attr,
|
|
|
|
"data-")
|
|
|
|
?
|
|
|
|
c.setAttribute(attr,
|
|
|
|
b[attr])
|
|
|
|
:
|
|
|
|
c[attr]
|
|
|
|
=
|
|
|
|
b[attr]);
|
|
|
|
return c },
|
|
|
|
createHidden:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c)
|
|
|
|
{ a
|
|
|
|
=
|
|
|
|
a
|
|
|
|
||
|
|
|
|
"div";
|
|
|
|
var
|
|
|
|
d
|
|
|
|
=
|
|
|
|
this.create(a,
|
|
|
|
b);
|
|
|
|
return
|
|
|
|
c
|
|
|
|
?
|
|
|
|
(d.width
|
|
|
|
=
|
|
|
|
d.height
|
|
|
|
=
|
|
|
|
0,
|
|
|
|
d.style.width
|
|
|
|
=
|
|
|
|
d.style.height
|
|
|
|
=
|
|
|
|
0,
|
|
|
|
d.style.position
|
|
|
|
=
|
|
|
|
"absolute",
|
|
|
|
d.style.top
|
|
|
|
=
|
|
|
|
"-9999px")
|
|
|
|
:
|
|
|
|
d.style.display
|
|
|
|
=
|
|
|
|
"none",
|
|
|
|
d
|
|
|
|
},
|
|
|
|
append:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
b
|
|
|
|
=
|
|
|
|
b
|
|
|
|
||
|
|
|
|
document.body,
|
|
|
|
a
|
|
|
|
&&
|
|
|
|
a.nodeType
|
|
|
|
&&
|
|
|
|
b.appendChild(a),
|
|
|
|
this
|
|
|
|
},
|
|
|
|
html:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a
|
|
|
|
&&
|
|
|
|
a.nodeType
|
|
|
|
&&
|
|
|
|
b
|
|
|
|
&&
|
|
|
|
(a.innerHTML
|
|
|
|
=
|
|
|
|
b),
|
|
|
|
this
|
|
|
|
},
|
|
|
|
appendHidden:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
d
|
|
|
|
=
|
|
|
|
this.createHidden(null,
|
|
|
|
b,
|
|
|
|
c);
|
|
|
|
return
|
|
|
|
this.html(d,
|
|
|
|
a),
|
|
|
|
this.append(d)
|
|
|
|
},
|
|
|
|
remove:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a
|
|
|
|
&&
|
|
|
|
a.nodeType
|
|
|
|
&&
|
|
|
|
a.parentNode
|
|
|
|
&&
|
|
|
|
a.parentNode.removeChild(a),
|
|
|
|
this
|
|
|
|
},
|
|
|
|
hasClass:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
("
|
|
|
|
"
|
|
|
|
+
|
|
|
|
a.className
|
|
|
|
+
|
|
|
|
"
|
|
|
|
").indexOf("
|
|
|
|
"
|
|
|
|
+
|
|
|
|
b
|
|
|
|
+
|
|
|
|
"
|
|
|
|
")
|
|
|
|
>=
|
|
|
|
0
|
|
|
|
},
|
|
|
|
addClass:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
b
|
|
|
|
=
|
|
|
|
QQWB.String.trim(b),
|
|
|
|
QQWB.Array.isArray(a)
|
|
|
|
?
|
|
|
|
(QQWB.Array.each(a,
|
|
|
|
function(a,
|
|
|
|
c)
|
|
|
|
{
|
|
|
|
QQWB.dom.addClass(c,
|
|
|
|
b)
|
|
|
|
}),
|
|
|
|
this)
|
|
|
|
:
|
|
|
|
(QQWB.dom.hasClass(a,
|
|
|
|
b)
|
|
|
|
||
|
|
|
|
(a.className
|
|
|
|
=
|
|
|
|
a.className
|
|
|
|
+
|
|
|
|
"
|
|
|
|
"
|
|
|
|
+
|
|
|
|
b),
|
|
|
|
this)
|
|
|
|
},
|
|
|
|
removeClass:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
b
|
|
|
|
=
|
|
|
|
QQWB.String.trim(b),
|
|
|
|
QQWB.Array.isArray(a)
|
|
|
|
?
|
|
|
|
(QQWB.Array.each(a,
|
|
|
|
function(a,
|
|
|
|
c)
|
|
|
|
{
|
|
|
|
QQWB.dom.removeClass(c,
|
|
|
|
b)
|
|
|
|
}),
|
|
|
|
this)
|
|
|
|
:
|
|
|
|
(QQWB.dom.hasClass(a,
|
|
|
|
b)
|
|
|
|
&&
|
|
|
|
(a.className
|
|
|
|
=
|
|
|
|
a.className.replace(b,
|
|
|
|
""),
|
|
|
|
QQWB.dom.removeClass(a,
|
|
|
|
b)),
|
|
|
|
this)
|
|
|
|
}
|
|
|
|
}),
|
|
|
|
QQWB.extend("queryString",
|
|
|
|
{
|
|
|
|
encode:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c,
|
|
|
|
d)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
e
|
|
|
|
=
|
|
|
|
/%20/g,
|
|
|
|
f
|
|
|
|
=
|
|
|
|
b
|
|
|
|
||
|
|
|
|
"&",
|
|
|
|
g
|
|
|
|
=
|
|
|
|
c
|
|
|
|
||
|
|
|
|
encodeURIComponent,
|
|
|
|
h
|
|
|
|
=
|
|
|
|
[],
|
|
|
|
i
|
|
|
|
=
|
|
|
|
[],
|
|
|
|
j,
|
|
|
|
k;
|
|
|
|
for
|
|
|
|
(j
|
|
|
|
in
|
|
|
|
a)
|
|
|
|
if
|
|
|
|
(a.hasOwnProperty(j))
|
|
|
|
{
|
|
|
|
k
|
|
|
|
=
|
|
|
|
a[j];
|
|
|
|
if
|
|
|
|
(k
|
|
|
|
!==
|
|
|
|
null
|
|
|
|
&&
|
|
|
|
typeof
|
|
|
|
k
|
|
|
|
!=
|
|
|
|
"undefined")
|
|
|
|
{
|
|
|
|
j
|
|
|
|
=
|
|
|
|
g(j).replace(e,
|
|
|
|
"+"),
|
|
|
|
k
|
|
|
|
=
|
|
|
|
g(k).replace(e,
|
|
|
|
"+");
|
|
|
|
if
|
|
|
|
(!d)
|
|
|
|
h.push(j
|
|
|
|
+
|
|
|
|
"="
|
|
|
|
+
|
|
|
|
k);
|
|
|
|
else
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
l
|
|
|
|
=
|
|
|
|
0,
|
|
|
|
m
|
|
|
|
=
|
|
|
|
d.length;
|
|
|
|
l
|
|
|
|
<
|
|
|
|
m;
|
|
|
|
l++)
|
|
|
|
d[l]
|
|
|
|
===
|
|
|
|
j
|
|
|
|
&&
|
|
|
|
(h[l]
|
|
|
|
=
|
|
|
|
j
|
|
|
|
+
|
|
|
|
"="
|
|
|
|
+
|
|
|
|
k)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
n
|
|
|
|
=
|
|
|
|
0,
|
|
|
|
o
|
|
|
|
=
|
|
|
|
h.length;
|
|
|
|
n
|
|
|
|
<
|
|
|
|
o;
|
|
|
|
n++)
|
|
|
|
typeof
|
|
|
|
h[n]
|
|
|
|
!=
|
|
|
|
"undefined"
|
|
|
|
&&
|
|
|
|
i.push(h[n]);
|
|
|
|
return
|
|
|
|
h
|
|
|
|
=
|
|
|
|
i,
|
|
|
|
i
|
|
|
|
=
|
|
|
|
null,
|
|
|
|
h.join(f)
|
|
|
|
},
|
|
|
|
decode:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
d
|
|
|
|
=
|
|
|
|
c
|
|
|
|
||
|
|
|
|
decodeURIComponent,
|
|
|
|
e
|
|
|
|
=
|
|
|
|
b
|
|
|
|
||
|
|
|
|
"&",
|
|
|
|
f
|
|
|
|
=
|
|
|
|
a.split(e),
|
|
|
|
g
|
|
|
|
=
|
|
|
|
{},
|
|
|
|
h;
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
i
|
|
|
|
=
|
|
|
|
0,
|
|
|
|
j
|
|
|
|
=
|
|
|
|
f.length;
|
|
|
|
i
|
|
|
|
<
|
|
|
|
j;
|
|
|
|
i++)
|
|
|
|
h
|
|
|
|
=
|
|
|
|
f[i].split("=",
|
|
|
|
2),
|
|
|
|
h
|
|
|
|
&&
|
|
|
|
h[0]
|
|
|
|
&&
|
|
|
|
(g[d(h[0])]
|
|
|
|
=
|
|
|
|
d(h[1]));
|
|
|
|
return
|
|
|
|
g
|
|
|
|
}
|
|
|
|
}),
|
|
|
|
function()
|
|
|
|
{ function q(a, b, c, d, e, f) { for (var g = 0, h = d.length; g < h; g++) {
|
|
|
|
var i = d[g]; if (i) { var j = !1; i = i[a]; while (i) { if (i.sizcache
|
|
|
|
=== c) { j = d[i.sizset]; break } i.nodeType === 1 &&
|
|
|
|
!f && (i.sizcache = c, i.sizset = g); if
|
|
|
|
(i.nodeName.toLowerCase() === b) { j = i; break } i = i[a] }
|
|
|
|
d[g] = j } } }
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function r(a, b, c, d, e, f) { for (var g = 0, i = d.length; g < i; g++) {
|
|
|
|
var j = d[g]; if (j) { var k = !1; j = j[a]; while (j) { if
|
|
|
|
(j.sizcache === c) { k = d[j.sizset]; break } if
|
|
|
|
(j.nodeType === 1) { f || (j.sizcache = c, j.sizset
|
|
|
|
= g); if (typeof b != "string") {
|
|
|
|
if (j === b) { k = !0;
|
|
|
|
break } } else if
|
|
|
|
(h.filter(b,
|
|
|
|
[j]).length
|
|
|
|
> 0) { k =
|
|
|
|
j;
|
|
|
|
break
|
|
|
|
} } j =
|
|
|
|
j[a] } d[g] = k } } } var a =
|
|
|
|
/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^
|
|
|
|
>+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
|
|
|
|
b = 0, c =
|
|
|
|
Object.prototype.toString, d = !1,
|
|
|
|
e = !0, f = /\\/g, g = /\W/; [0,
|
|
|
|
0].sort(function() { return e = !1,
|
|
|
|
0 }); var h = function(b,
|
|
|
|
d, e, f) { e = e ||
|
|
|
|
[], d = d
|
|
|
|
|| document; var g = d; if (d.nodeType !==
|
|
|
|
1 && d.nodeType !== 9) return [];
|
|
|
|
if (!b || typeof b != "string") return e; var k, l,
|
|
|
|
n, o, p, q, r, t, u = !0, v = h.isXML(d), w = [], x
|
|
|
|
= b; do { a.exec(""), k = a.exec(x); if (k)
|
|
|
|
{ x = k[3], w.push(k[1]); if (k[2])
|
|
|
|
{ o = k[3]; break } } }
|
|
|
|
while (k); if (w.length > 1 && j.exec(b)) if
|
|
|
|
(w.length === 2 && i.relative[w[0]]) l =
|
|
|
|
s(w[0] + w[1], d); else { l =
|
|
|
|
i.relative[w[0]] ? [d] :
|
|
|
|
h(w.shift(), d); while (w.length) b =
|
|
|
|
w.shift(), i.relative[b] && (b +=
|
|
|
|
w.shift()), l = s(b, l) }
|
|
|
|
else { !f && w.length > 1 && d.nodeType === 9 && !v
|
|
|
|
&& i.match.ID.test(w[0]) &&
|
|
|
|
!i.match.ID.test(w[w.length - 1])
|
|
|
|
&& (p = h.find(w.shift(), d, v), d
|
|
|
|
= p.expr ?
|
|
|
|
h.filter(p.expr,
|
|
|
|
p.set)[0] :
|
|
|
|
p.set[0]); if (d) {
|
|
|
|
p = f ? {
|
|
|
|
expr:
|
|
|
|
w.pop(),
|
|
|
|
set:
|
|
|
|
m(f)
|
|
|
|
} :
|
|
|
|
h.find(w.pop(),
|
|
|
|
w.length
|
|
|
|
===
|
|
|
|
1
|
|
|
|
&&
|
|
|
|
(w[0]
|
|
|
|
===
|
|
|
|
"~"
|
|
|
|
||
|
|
|
|
w[0]
|
|
|
|
===
|
|
|
|
"+")
|
|
|
|
&&
|
|
|
|
d.parentNode
|
|
|
|
?
|
|
|
|
d.parentNode
|
|
|
|
:
|
|
|
|
d,
|
|
|
|
v),
|
|
|
|
l =
|
|
|
|
p.expr
|
|
|
|
?
|
|
|
|
h.filter(p.expr,
|
|
|
|
p.set)
|
|
|
|
:
|
|
|
|
p.set,
|
|
|
|
w.length
|
|
|
|
>
|
|
|
|
0
|
|
|
|
?
|
|
|
|
n
|
|
|
|
=
|
|
|
|
m(l)
|
|
|
|
:
|
|
|
|
u
|
|
|
|
=
|
|
|
|
!1;
|
|
|
|
while
|
|
|
|
(w.length)
|
|
|
|
q
|
|
|
|
=
|
|
|
|
w.pop(),
|
|
|
|
r
|
|
|
|
=
|
|
|
|
q,
|
|
|
|
i.relative[q]
|
|
|
|
?
|
|
|
|
r
|
|
|
|
=
|
|
|
|
w.pop()
|
|
|
|
:
|
|
|
|
q
|
|
|
|
=
|
|
|
|
"",
|
|
|
|
r
|
|
|
|
==
|
|
|
|
null
|
|
|
|
&&
|
|
|
|
(r
|
|
|
|
=
|
|
|
|
d),
|
|
|
|
i.relative[q](n,
|
|
|
|
r,
|
|
|
|
v)
|
|
|
|
} else n = w = [] }
|
|
|
|
n || (n = l), n || h.error(q || b); if (c.call(n)
|
|
|
|
=== "[object Array]") if (!u)
|
|
|
|
e.push.apply(e, n); else if (d &&
|
|
|
|
d.nodeType === 1) for (t =
|
|
|
|
0; n[t] != null;
|
|
|
|
t++) n[t] && (n[t]
|
|
|
|
=== !0 ||
|
|
|
|
n[t].nodeType
|
|
|
|
=== 1 &&
|
|
|
|
h.contains(d,
|
|
|
|
n[t]))
|
|
|
|
&&
|
|
|
|
e.push(l[t]);
|
|
|
|
else for (t = 0;
|
|
|
|
n[t]
|
|
|
|
!=
|
|
|
|
null;
|
|
|
|
t++)
|
|
|
|
n[t] &&
|
|
|
|
n[t].nodeType
|
|
|
|
===
|
|
|
|
1
|
|
|
|
&&
|
|
|
|
e.push(l[t]);
|
|
|
|
else m(n, e);
|
|
|
|
return o && (h(o,
|
|
|
|
g,
|
|
|
|
e,
|
|
|
|
f),
|
|
|
|
h.uniqueSort(e)),
|
|
|
|
e };
|
|
|
|
h.uniqueSort = function(a) { if (o) { d = e, a.sort(o); if
|
|
|
|
(d) for (var b = 1; b < a.length; b++) a[b] === a[b
|
|
|
|
- 1] && a.splice(b--, 1) } return a },
|
|
|
|
h.matches = function(a, b) { return h(a, null,
|
|
|
|
null, b) }, h.matchesSelector =
|
|
|
|
function(a, b) { return h(b, null, null,
|
|
|
|
[a]).length > 0 }, h.find =
|
|
|
|
function(a, b, c) { var d; if (!a) return
|
|
|
|
[]; for (var e = 0, g =
|
|
|
|
i.order.length; e <
|
|
|
|
g; e++) { var h, j
|
|
|
|
=
|
|
|
|
i.order[e];
|
|
|
|
if (h =
|
|
|
|
i.leftMatch[j].exec(a))
|
|
|
|
{ var k =
|
|
|
|
h[1];
|
|
|
|
h.splice(1,
|
|
|
|
1);
|
|
|
|
if
|
|
|
|
(k.substr(k.length
|
|
|
|
-
|
|
|
|
1)
|
|
|
|
!==
|
|
|
|
"\\")
|
|
|
|
{
|
|
|
|
h[1]
|
|
|
|
=
|
|
|
|
(h[1]
|
|
|
|
||
|
|
|
|
"").replace(f,
|
|
|
|
""),
|
|
|
|
d
|
|
|
|
=
|
|
|
|
i.find[j](h,
|
|
|
|
b,
|
|
|
|
c);
|
|
|
|
if
|
|
|
|
(d
|
|
|
|
!=
|
|
|
|
null)
|
|
|
|
{
|
|
|
|
a
|
|
|
|
=
|
|
|
|
a.replace(i.match[j],
|
|
|
|
"");
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} } return
|
|
|
|
d || (d = typeof
|
|
|
|
b.getElementsByTagName
|
|
|
|
!= "undefined" ?
|
|
|
|
b.getElementsByTagName("*")
|
|
|
|
: []), { set: d,
|
|
|
|
expr: a }
|
|
|
|
}, h.filter = function(a, b, c, d) { var e,
|
|
|
|
f, g = a, j = [], k = b, l = b &&
|
|
|
|
b[0] && h.isXML(b[0]);
|
|
|
|
while (a && b.length) { for (var m
|
|
|
|
in i.filter) if ((e
|
|
|
|
=
|
|
|
|
i.leftMatch[m].exec(a))
|
|
|
|
!= null &&
|
|
|
|
e[2]) { var
|
|
|
|
n,
|
|
|
|
o,
|
|
|
|
p =
|
|
|
|
i.filter[m],
|
|
|
|
q =
|
|
|
|
e[1];
|
|
|
|
f =
|
|
|
|
!1,
|
|
|
|
e.splice(1,
|
|
|
|
1);
|
|
|
|
if
|
|
|
|
(q.substr(q.length
|
|
|
|
-
|
|
|
|
1)
|
|
|
|
===
|
|
|
|
"\\")
|
|
|
|
continue;
|
|
|
|
k
|
|
|
|
===
|
|
|
|
j
|
|
|
|
&&
|
|
|
|
(j
|
|
|
|
=
|
|
|
|
[]);
|
|
|
|
if
|
|
|
|
(i.preFilter[m])
|
|
|
|
{
|
|
|
|
e
|
|
|
|
=
|
|
|
|
i.preFilter[m](e,
|
|
|
|
k,
|
|
|
|
c,
|
|
|
|
j,
|
|
|
|
d,
|
|
|
|
l);
|
|
|
|
if
|
|
|
|
(!e)
|
|
|
|
f
|
|
|
|
=
|
|
|
|
n
|
|
|
|
=
|
|
|
|
!0;
|
|
|
|
else
|
|
|
|
if
|
|
|
|
(e
|
|
|
|
===
|
|
|
|
!0)
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
if
|
|
|
|
(e)
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
r
|
|
|
|
=
|
|
|
|
0;
|
|
|
|
(o
|
|
|
|
=
|
|
|
|
k[r])
|
|
|
|
!=
|
|
|
|
null;
|
|
|
|
r++)
|
|
|
|
if
|
|
|
|
(o)
|
|
|
|
{
|
|
|
|
n
|
|
|
|
=
|
|
|
|
p(o,
|
|
|
|
e,
|
|
|
|
r,
|
|
|
|
k);
|
|
|
|
var
|
|
|
|
s
|
|
|
|
=
|
|
|
|
d
|
|
|
|
^
|
|
|
|
!!
|
|
|
|
n;
|
|
|
|
c
|
|
|
|
&&
|
|
|
|
n
|
|
|
|
!=
|
|
|
|
null
|
|
|
|
?
|
|
|
|
s
|
|
|
|
?
|
|
|
|
f
|
|
|
|
=
|
|
|
|
!0
|
|
|
|
:
|
|
|
|
k[r]
|
|
|
|
=
|
|
|
|
!1
|
|
|
|
:
|
|
|
|
s
|
|
|
|
&&
|
|
|
|
(j.push(o),
|
|
|
|
f
|
|
|
|
=
|
|
|
|
!0)
|
|
|
|
}
|
|
|
|
if
|
|
|
|
(n
|
|
|
|
!==
|
|
|
|
undefined)
|
|
|
|
{
|
|
|
|
c
|
|
|
|
||
|
|
|
|
(k
|
|
|
|
=
|
|
|
|
j),
|
|
|
|
a
|
|
|
|
=
|
|
|
|
a.replace(i.match[m],
|
|
|
|
"");
|
|
|
|
if
|
|
|
|
(!f)
|
|
|
|
return
|
|
|
|
[];
|
|
|
|
break
|
|
|
|
}
|
|
|
|
} if (a ===
|
|
|
|
g)
|
|
|
|
if
|
|
|
|
(f
|
|
|
|
==
|
|
|
|
null)
|
|
|
|
h.error(a);
|
|
|
|
else
|
|
|
|
break;
|
|
|
|
g = a }
|
|
|
|
return k }, h.error = function(a) {
|
|
|
|
throw "Syntax error,
|
|
|
|
unrecognized
|
|
|
|
expression: "
|
|
|
|
+ a }; var i
|
|
|
|
= h.selectors
|
|
|
|
= { order:
|
|
|
|
["ID",
|
|
|
|
"NAME",
|
|
|
|
"TAG"],
|
|
|
|
match:
|
|
|
|
{ ID:
|
|
|
|
/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
|
|
|
|
CLASS:
|
|
|
|
/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
|
|
|
|
NAME:
|
|
|
|
/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
|
|
|
|
ATTR:
|
|
|
|
/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
|
|
|
|
TAG:
|
|
|
|
/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
|
|
|
|
CHILD:
|
|
|
|
/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
|
|
|
|
POS:
|
|
|
|
/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
|
|
|
|
PSEUDO:
|
|
|
|
/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
|
|
|
|
},
|
|
|
|
leftMatch:
|
|
|
|
{},
|
|
|
|
attrMap:
|
|
|
|
{
|
|
|
|
"class":
|
|
|
|
"className",
|
|
|
|
"for":
|
|
|
|
"htmlFor"
|
|
|
|
},
|
|
|
|
attrHandle:
|
|
|
|
{
|
|
|
|
href:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a.getAttribute("href")
|
|
|
|
},
|
|
|
|
type:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a.getAttribute("type")
|
|
|
|
}
|
|
|
|
},
|
|
|
|
relative:
|
|
|
|
{
|
|
|
|
"+":
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
c
|
|
|
|
=
|
|
|
|
typeof
|
|
|
|
b
|
|
|
|
==
|
|
|
|
"string",
|
|
|
|
d
|
|
|
|
=
|
|
|
|
c
|
|
|
|
&&
|
|
|
|
!g.test(b),
|
|
|
|
e
|
|
|
|
=
|
|
|
|
c
|
|
|
|
&&
|
|
|
|
!d;
|
|
|
|
d
|
|
|
|
&&
|
|
|
|
(b
|
|
|
|
=
|
|
|
|
b.toLowerCase());
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
f
|
|
|
|
=
|
|
|
|
0,
|
|
|
|
i
|
|
|
|
=
|
|
|
|
a.length,
|
|
|
|
j;
|
|
|
|
f
|
|
|
|
<
|
|
|
|
i;
|
|
|
|
f++)
|
|
|
|
if
|
|
|
|
(j
|
|
|
|
=
|
|
|
|
a[f])
|
|
|
|
{
|
|
|
|
while
|
|
|
|
((j
|
|
|
|
=
|
|
|
|
j.previousSibling)
|
|
|
|
&&
|
|
|
|
j.nodeType
|
|
|
|
!==
|
|
|
|
1);
|
|
|
|
a[f]
|
|
|
|
=
|
|
|
|
e
|
|
|
|
||
|
|
|
|
j
|
|
|
|
&&
|
|
|
|
j.nodeName.toLowerCase()
|
|
|
|
===
|
|
|
|
b
|
|
|
|
?
|
|
|
|
j
|
|
|
|
||
|
|
|
|
!1
|
|
|
|
:
|
|
|
|
j
|
|
|
|
===
|
|
|
|
b
|
|
|
|
}
|
|
|
|
e
|
|
|
|
&&
|
|
|
|
h.filter(b,
|
|
|
|
a,
|
|
|
|
!0)
|
|
|
|
},
|
|
|
|
">":
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
c,
|
|
|
|
d
|
|
|
|
=
|
|
|
|
typeof
|
|
|
|
b
|
|
|
|
==
|
|
|
|
"string",
|
|
|
|
e
|
|
|
|
=
|
|
|
|
0,
|
|
|
|
f
|
|
|
|
=
|
|
|
|
a.length;
|
|
|
|
if
|
|
|
|
(d
|
|
|
|
&&
|
|
|
|
!g.test(b))
|
|
|
|
{
|
|
|
|
b
|
|
|
|
=
|
|
|
|
b.toLowerCase();
|
|
|
|
for
|
|
|
|
(;
|
|
|
|
e
|
|
|
|
<
|
|
|
|
f;
|
|
|
|
e++)
|
|
|
|
{
|
|
|
|
c
|
|
|
|
=
|
|
|
|
a[e];
|
|
|
|
if
|
|
|
|
(c)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
i
|
|
|
|
=
|
|
|
|
c.parentNode;
|
|
|
|
a[e]
|
|
|
|
=
|
|
|
|
i.nodeName.toLowerCase()
|
|
|
|
===
|
|
|
|
b
|
|
|
|
?
|
|
|
|
i
|
|
|
|
:
|
|
|
|
!1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
for
|
|
|
|
(;
|
|
|
|
e
|
|
|
|
<
|
|
|
|
f;
|
|
|
|
e++)
|
|
|
|
c
|
|
|
|
=
|
|
|
|
a[e],
|
|
|
|
c
|
|
|
|
&&
|
|
|
|
(a[e]
|
|
|
|
=
|
|
|
|
d
|
|
|
|
?
|
|
|
|
c.parentNode
|
|
|
|
:
|
|
|
|
c.parentNode
|
|
|
|
===
|
|
|
|
b);
|
|
|
|
d
|
|
|
|
&&
|
|
|
|
h.filter(b,
|
|
|
|
a,
|
|
|
|
!0)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"":
|
|
|
|
function(a,
|
|
|
|
c,
|
|
|
|
d)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
e,
|
|
|
|
f
|
|
|
|
=
|
|
|
|
b++,
|
|
|
|
h
|
|
|
|
=
|
|
|
|
r;
|
|
|
|
typeof
|
|
|
|
c
|
|
|
|
==
|
|
|
|
"string"
|
|
|
|
&&
|
|
|
|
!g.test(c)
|
|
|
|
&&
|
|
|
|
(c
|
|
|
|
=
|
|
|
|
c.toLowerCase(),
|
|
|
|
e
|
|
|
|
=
|
|
|
|
c,
|
|
|
|
h
|
|
|
|
=
|
|
|
|
q),
|
|
|
|
h("parentNode",
|
|
|
|
c,
|
|
|
|
f,
|
|
|
|
a,
|
|
|
|
e,
|
|
|
|
d)
|
|
|
|
},
|
|
|
|
"~":
|
|
|
|
function(a,
|
|
|
|
c,
|
|
|
|
d)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
e,
|
|
|
|
f
|
|
|
|
=
|
|
|
|
b++,
|
|
|
|
h
|
|
|
|
=
|
|
|
|
r;
|
|
|
|
typeof
|
|
|
|
c
|
|
|
|
==
|
|
|
|
"string"
|
|
|
|
&&
|
|
|
|
!g.test(c)
|
|
|
|
&&
|
|
|
|
(c
|
|
|
|
=
|
|
|
|
c.toLowerCase(),
|
|
|
|
e
|
|
|
|
=
|
|
|
|
c,
|
|
|
|
h
|
|
|
|
=
|
|
|
|
q),
|
|
|
|
h("previousSibling",
|
|
|
|
c,
|
|
|
|
f,
|
|
|
|
a,
|
|
|
|
e,
|
|
|
|
d)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
find:
|
|
|
|
{ ID:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c)
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(typeof
|
|
|
|
b.getElementById
|
|
|
|
!=
|
|
|
|
"undefined"
|
|
|
|
&&
|
|
|
|
!c)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
d
|
|
|
|
=
|
|
|
|
b.getElementById(a[1]);
|
|
|
|
return
|
|
|
|
d
|
|
|
|
&&
|
|
|
|
d.parentNode
|
|
|
|
?
|
|
|
|
[d]
|
|
|
|
:
|
|
|
|
[]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
NAME:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(typeof
|
|
|
|
b.getElementsByName
|
|
|
|
!=
|
|
|
|
"undefined")
|
|
|
|
{
|
|
|
|
var
|
|
|
|
c
|
|
|
|
=
|
|
|
|
[],
|
|
|
|
d
|
|
|
|
=
|
|
|
|
b.getElementsByName(a[1]);
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
e
|
|
|
|
=
|
|
|
|
0,
|
|
|
|
f
|
|
|
|
=
|
|
|
|
d.length;
|
|
|
|
e
|
|
|
|
<
|
|
|
|
f;
|
|
|
|
e++)
|
|
|
|
d[e].getAttribute("name")
|
|
|
|
===
|
|
|
|
a[1]
|
|
|
|
&&
|
|
|
|
c.push(d[e]);
|
|
|
|
return
|
|
|
|
c.length
|
|
|
|
===
|
|
|
|
0
|
|
|
|
?
|
|
|
|
null
|
|
|
|
:
|
|
|
|
c
|
|
|
|
}
|
|
|
|
},
|
|
|
|
TAG:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(typeof
|
|
|
|
b.getElementsByTagName
|
|
|
|
!=
|
|
|
|
"undefined")
|
|
|
|
return
|
|
|
|
b.getElementsByTagName(a[1])
|
|
|
|
}
|
|
|
|
},
|
|
|
|
preFilter:
|
|
|
|
{
|
|
|
|
CLASS:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c,
|
|
|
|
d,
|
|
|
|
e,
|
|
|
|
g)
|
|
|
|
{
|
|
|
|
a
|
|
|
|
=
|
|
|
|
"
|
|
|
|
"
|
|
|
|
+
|
|
|
|
a[1].replace(f,
|
|
|
|
"")
|
|
|
|
+
|
|
|
|
"
|
|
|
|
";
|
|
|
|
if
|
|
|
|
(g)
|
|
|
|
return
|
|
|
|
a;
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
h
|
|
|
|
=
|
|
|
|
0,
|
|
|
|
i;
|
|
|
|
(i
|
|
|
|
=
|
|
|
|
b[h])
|
|
|
|
!=
|
|
|
|
null;
|
|
|
|
h++)
|
|
|
|
i
|
|
|
|
&&
|
|
|
|
(e
|
|
|
|
^
|
|
|
|
(i.className
|
|
|
|
&&
|
|
|
|
("
|
|
|
|
"
|
|
|
|
+
|
|
|
|
i.className
|
|
|
|
+
|
|
|
|
"
|
|
|
|
").replace(/[\t\n\r]/g,
|
|
|
|
"
|
|
|
|
").indexOf(a)
|
|
|
|
>=
|
|
|
|
0)
|
|
|
|
?
|
|
|
|
c
|
|
|
|
||
|
|
|
|
d.push(i)
|
|
|
|
:
|
|
|
|
c
|
|
|
|
&&
|
|
|
|
(b[h]
|
|
|
|
=
|
|
|
|
!1));
|
|
|
|
return
|
|
|
|
!1
|
|
|
|
},
|
|
|
|
ID:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a[1].replace(f,
|
|
|
|
"")
|
|
|
|
},
|
|
|
|
TAG:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a[1].replace(f,
|
|
|
|
"").toLowerCase()
|
|
|
|
},
|
|
|
|
CHILD:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(a[1]
|
|
|
|
===
|
|
|
|
"nth")
|
|
|
|
{
|
|
|
|
a[2]
|
|
|
|
||
|
|
|
|
h.error(a[0]),
|
|
|
|
a[2]
|
|
|
|
=
|
|
|
|
a[2].replace(/^\+|\s*/g,
|
|
|
|
"");
|
|
|
|
var
|
|
|
|
c
|
|
|
|
=
|
|
|
|
/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]
|
|
|
|
===
|
|
|
|
"even"
|
|
|
|
&&
|
|
|
|
"2n"
|
|
|
|
||
|
|
|
|
a[2]
|
|
|
|
===
|
|
|
|
"odd"
|
|
|
|
&&
|
|
|
|
"2n+1"
|
|
|
|
||
|
|
|
|
!/\D/.test(a[2])
|
|
|
|
&&
|
|
|
|
"0n+"
|
|
|
|
+
|
|
|
|
a[2]
|
|
|
|
||
|
|
|
|
a[2]);
|
|
|
|
a[2]
|
|
|
|
=
|
|
|
|
c[1]
|
|
|
|
+
|
|
|
|
(c[2]
|
|
|
|
||
|
|
|
|
1)
|
|
|
|
-
|
|
|
|
0,
|
|
|
|
a[3]
|
|
|
|
=
|
|
|
|
c[3]
|
|
|
|
-
|
|
|
|
0
|
|
|
|
}
|
|
|
|
else
|
|
|
|
a[2]
|
|
|
|
&&
|
|
|
|
h.error(a[0]);
|
|
|
|
return
|
|
|
|
a[0]
|
|
|
|
=
|
|
|
|
b++,
|
|
|
|
a
|
|
|
|
},
|
|
|
|
ATTR:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c,
|
|
|
|
d,
|
|
|
|
e,
|
|
|
|
g)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
h
|
|
|
|
=
|
|
|
|
a[1]
|
|
|
|
=
|
|
|
|
a[1].replace(f,
|
|
|
|
"");
|
|
|
|
return
|
|
|
|
!g
|
|
|
|
&&
|
|
|
|
i.attrMap[h]
|
|
|
|
&&
|
|
|
|
(a[1]
|
|
|
|
=
|
|
|
|
i.attrMap[h]),
|
|
|
|
a[4]
|
|
|
|
=
|
|
|
|
(a[4]
|
|
|
|
||
|
|
|
|
a[5]
|
|
|
|
||
|
|
|
|
"").replace(f,
|
|
|
|
""),
|
|
|
|
a[2]
|
|
|
|
===
|
|
|
|
"~="
|
|
|
|
&&
|
|
|
|
(a[4]
|
|
|
|
=
|
|
|
|
"
|
|
|
|
"
|
|
|
|
+
|
|
|
|
a[4]
|
|
|
|
+
|
|
|
|
"
|
|
|
|
"),
|
|
|
|
a
|
|
|
|
},
|
|
|
|
PSEUDO:
|
|
|
|
function(b,
|
|
|
|
c,
|
|
|
|
d,
|
|
|
|
e,
|
|
|
|
f)
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(b[1]
|
|
|
|
===
|
|
|
|
"not")
|
|
|
|
if
|
|
|
|
((a.exec(b[3])
|
|
|
|
||
|
|
|
|
"").length
|
|
|
|
>
|
|
|
|
1
|
|
|
|
||
|
|
|
|
/^\w/.test(b[3]))
|
|
|
|
b[3]
|
|
|
|
=
|
|
|
|
h(b[3],
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
c);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
var
|
|
|
|
g
|
|
|
|
=
|
|
|
|
h.filter(b[3],
|
|
|
|
c,
|
|
|
|
d,
|
|
|
|
!0
|
|
|
|
^
|
|
|
|
f);
|
|
|
|
return
|
|
|
|
d
|
|
|
|
||
|
|
|
|
e.push.apply(e,
|
|
|
|
g),
|
|
|
|
!1
|
|
|
|
}
|
|
|
|
else
|
|
|
|
if
|
|
|
|
(i.match.POS.test(b[0])
|
|
|
|
||
|
|
|
|
i.match.CHILD.test(b[0]))
|
|
|
|
return
|
|
|
|
!0;
|
|
|
|
return
|
|
|
|
b
|
|
|
|
},
|
|
|
|
POS:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a.unshift(!0),
|
|
|
|
a
|
|
|
|
}
|
|
|
|
},
|
|
|
|
filters:
|
|
|
|
{
|
|
|
|
enabled:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a.disabled
|
|
|
|
===
|
|
|
|
!1
|
|
|
|
&&
|
|
|
|
a.type
|
|
|
|
!==
|
|
|
|
"hidden"
|
|
|
|
},
|
|
|
|
disabled:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a.disabled
|
|
|
|
===
|
|
|
|
!0
|
|
|
|
},
|
|
|
|
checked:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a.checked
|
|
|
|
===
|
|
|
|
!0
|
|
|
|
},
|
|
|
|
selected:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a.parentNode
|
|
|
|
&&
|
|
|
|
a.parentNode.selectedIndex,
|
|
|
|
a.selected
|
|
|
|
===
|
|
|
|
!0
|
|
|
|
},
|
|
|
|
parent:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
!!a.firstChild
|
|
|
|
},
|
|
|
|
empty:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
!a.firstChild
|
|
|
|
},
|
|
|
|
has:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
!!h(c[3],
|
|
|
|
a).length
|
|
|
|
},
|
|
|
|
header:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
/h\d/i.test(a.nodeName)
|
|
|
|
},
|
|
|
|
text:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
b
|
|
|
|
=
|
|
|
|
a.getAttribute("type"),
|
|
|
|
c
|
|
|
|
=
|
|
|
|
a.type;
|
|
|
|
return
|
|
|
|
a.nodeName.toLowerCase()
|
|
|
|
===
|
|
|
|
"input"
|
|
|
|
&&
|
|
|
|
"text"
|
|
|
|
===
|
|
|
|
c
|
|
|
|
&&
|
|
|
|
(b
|
|
|
|
===
|
|
|
|
c
|
|
|
|
||
|
|
|
|
b
|
|
|
|
===
|
|
|
|
null)
|
|
|
|
},
|
|
|
|
radio:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a.nodeName.toLowerCase()
|
|
|
|
===
|
|
|
|
"input"
|
|
|
|
&&
|
|
|
|
"radio"
|
|
|
|
===
|
|
|
|
a.type
|
|
|
|
},
|
|
|
|
checkbox:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a.nodeName.toLowerCase()
|
|
|
|
===
|
|
|
|
"input"
|
|
|
|
&&
|
|
|
|
"checkbox"
|
|
|
|
===
|
|
|
|
a.type
|
|
|
|
},
|
|
|
|
file:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a.nodeName.toLowerCase()
|
|
|
|
===
|
|
|
|
"input"
|
|
|
|
&&
|
|
|
|
"file"
|
|
|
|
===
|
|
|
|
a.type
|
|
|
|
},
|
|
|
|
password:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a.nodeName.toLowerCase()
|
|
|
|
===
|
|
|
|
"input"
|
|
|
|
&&
|
|
|
|
"password"
|
|
|
|
===
|
|
|
|
a.type
|
|
|
|
},
|
|
|
|
submit:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
b
|
|
|
|
=
|
|
|
|
a.nodeName.toLowerCase();
|
|
|
|
return
|
|
|
|
(b
|
|
|
|
===
|
|
|
|
"input"
|
|
|
|
||
|
|
|
|
b
|
|
|
|
===
|
|
|
|
"button")
|
|
|
|
&&
|
|
|
|
"submit"
|
|
|
|
===
|
|
|
|
a.type
|
|
|
|
},
|
|
|
|
image:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a.nodeName.toLowerCase()
|
|
|
|
===
|
|
|
|
"input"
|
|
|
|
&&
|
|
|
|
"image"
|
|
|
|
===
|
|
|
|
a.type
|
|
|
|
},
|
|
|
|
reset:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
b
|
|
|
|
=
|
|
|
|
a.nodeName.toLowerCase();
|
|
|
|
return
|
|
|
|
(b
|
|
|
|
===
|
|
|
|
"input"
|
|
|
|
||
|
|
|
|
b
|
|
|
|
===
|
|
|
|
"button")
|
|
|
|
&&
|
|
|
|
"reset"
|
|
|
|
===
|
|
|
|
a.type
|
|
|
|
},
|
|
|
|
button:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
b
|
|
|
|
=
|
|
|
|
a.nodeName.toLowerCase();
|
|
|
|
return
|
|
|
|
b
|
|
|
|
===
|
|
|
|
"input"
|
|
|
|
&&
|
|
|
|
"button"
|
|
|
|
===
|
|
|
|
a.type
|
|
|
|
||
|
|
|
|
b
|
|
|
|
===
|
|
|
|
"button"
|
|
|
|
},
|
|
|
|
input:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
/input|select|textarea|button/i.test(a.nodeName)
|
|
|
|
},
|
|
|
|
focus:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a
|
|
|
|
===
|
|
|
|
a.ownerDocument.activeElement
|
|
|
|
}
|
|
|
|
},
|
|
|
|
setFilters:
|
|
|
|
{
|
|
|
|
first:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
b
|
|
|
|
===
|
|
|
|
0
|
|
|
|
},
|
|
|
|
last:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c,
|
|
|
|
d)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
b
|
|
|
|
===
|
|
|
|
d.length
|
|
|
|
-
|
|
|
|
1
|
|
|
|
},
|
|
|
|
even:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
b
|
|
|
|
%
|
|
|
|
2
|
|
|
|
===
|
|
|
|
0
|
|
|
|
},
|
|
|
|
odd:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
b
|
|
|
|
%
|
|
|
|
2
|
|
|
|
===
|
|
|
|
1
|
|
|
|
},
|
|
|
|
lt:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
b
|
|
|
|
<
|
|
|
|
c[3]
|
|
|
|
-
|
|
|
|
0
|
|
|
|
},
|
|
|
|
gt:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
b
|
|
|
|
>
|
|
|
|
c[3]
|
|
|
|
-
|
|
|
|
0
|
|
|
|
},
|
|
|
|
nth:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
c[3]
|
|
|
|
-
|
|
|
|
0
|
|
|
|
===
|
|
|
|
b
|
|
|
|
},
|
|
|
|
eq:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
c[3]
|
|
|
|
-
|
|
|
|
0
|
|
|
|
===
|
|
|
|
b
|
|
|
|
}
|
|
|
|
},
|
|
|
|
filter:
|
|
|
|
{
|
|
|
|
PSEUDO:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c,
|
|
|
|
d)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
e
|
|
|
|
=
|
|
|
|
b[1],
|
|
|
|
f
|
|
|
|
=
|
|
|
|
i.filters[e];
|
|
|
|
if
|
|
|
|
(f)
|
|
|
|
return
|
|
|
|
f(a,
|
|
|
|
c,
|
|
|
|
b,
|
|
|
|
d);
|
|
|
|
if
|
|
|
|
(e
|
|
|
|
===
|
|
|
|
"contains")
|
|
|
|
return
|
|
|
|
(a.textContent
|
|
|
|
||
|
|
|
|
a.innerText
|
|
|
|
||
|
|
|
|
h.getText([a])
|
|
|
|
||
|
|
|
|
"").indexOf(b[3])
|
|
|
|
>=
|
|
|
|
0;
|
|
|
|
if
|
|
|
|
(e
|
|
|
|
===
|
|
|
|
"not")
|
|
|
|
{
|
|
|
|
var
|
|
|
|
g
|
|
|
|
=
|
|
|
|
b[3];
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
j
|
|
|
|
=
|
|
|
|
0,
|
|
|
|
k
|
|
|
|
=
|
|
|
|
g.length;
|
|
|
|
j
|
|
|
|
<
|
|
|
|
k;
|
|
|
|
j++)
|
|
|
|
if
|
|
|
|
(g[j]
|
|
|
|
===
|
|
|
|
a)
|
|
|
|
return
|
|
|
|
!1;
|
|
|
|
return
|
|
|
|
!0
|
|
|
|
}
|
|
|
|
h.error(e)
|
|
|
|
},
|
|
|
|
CHILD:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
c
|
|
|
|
=
|
|
|
|
b[1],
|
|
|
|
d
|
|
|
|
=
|
|
|
|
a;
|
|
|
|
switch
|
|
|
|
(c)
|
|
|
|
{
|
|
|
|
case
|
|
|
|
"only":
|
|
|
|
case
|
|
|
|
"first":
|
|
|
|
while
|
|
|
|
(d
|
|
|
|
=
|
|
|
|
d.previousSibling)
|
|
|
|
if
|
|
|
|
(d.nodeType
|
|
|
|
===
|
|
|
|
1)
|
|
|
|
return
|
|
|
|
!1;
|
|
|
|
if
|
|
|
|
(c
|
|
|
|
===
|
|
|
|
"first")
|
|
|
|
return
|
|
|
|
!0;
|
|
|
|
d
|
|
|
|
=
|
|
|
|
a;
|
|
|
|
case
|
|
|
|
"last":
|
|
|
|
while
|
|
|
|
(d
|
|
|
|
=
|
|
|
|
d.nextSibling)
|
|
|
|
if
|
|
|
|
(d.nodeType
|
|
|
|
===
|
|
|
|
1)
|
|
|
|
return
|
|
|
|
!1;
|
|
|
|
return
|
|
|
|
!0;
|
|
|
|
case
|
|
|
|
"nth":
|
|
|
|
var
|
|
|
|
e
|
|
|
|
=
|
|
|
|
b[2],
|
|
|
|
f
|
|
|
|
=
|
|
|
|
b[3];
|
|
|
|
if
|
|
|
|
(e
|
|
|
|
===
|
|
|
|
1
|
|
|
|
&&
|
|
|
|
f
|
|
|
|
===
|
|
|
|
0)
|
|
|
|
return
|
|
|
|
!0;
|
|
|
|
var
|
|
|
|
g
|
|
|
|
=
|
|
|
|
b[0],
|
|
|
|
h
|
|
|
|
=
|
|
|
|
a.parentNode;
|
|
|
|
if
|
|
|
|
(h
|
|
|
|
&&
|
|
|
|
(h.sizcache
|
|
|
|
!==
|
|
|
|
g
|
|
|
|
||
|
|
|
|
!a.nodeIndex))
|
|
|
|
{
|
|
|
|
var
|
|
|
|
i
|
|
|
|
=
|
|
|
|
0;
|
|
|
|
for
|
|
|
|
(d
|
|
|
|
=
|
|
|
|
h.firstChild;
|
|
|
|
d;
|
|
|
|
d
|
|
|
|
=
|
|
|
|
d.nextSibling)
|
|
|
|
d.nodeType
|
|
|
|
===
|
|
|
|
1
|
|
|
|
&&
|
|
|
|
(d.nodeIndex
|
|
|
|
=
|
|
|
|
++i);
|
|
|
|
h.sizcache
|
|
|
|
=
|
|
|
|
g
|
|
|
|
}
|
|
|
|
var
|
|
|
|
j
|
|
|
|
=
|
|
|
|
a.nodeIndex
|
|
|
|
-
|
|
|
|
f;
|
|
|
|
return
|
|
|
|
e
|
|
|
|
===
|
|
|
|
0
|
|
|
|
?
|
|
|
|
j
|
|
|
|
===
|
|
|
|
0
|
|
|
|
:
|
|
|
|
j
|
|
|
|
%
|
|
|
|
e
|
|
|
|
===
|
|
|
|
0
|
|
|
|
&&
|
|
|
|
j
|
|
|
|
/
|
|
|
|
e
|
|
|
|
>=
|
|
|
|
0
|
|
|
|
}
|
|
|
|
},
|
|
|
|
ID:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a.nodeType
|
|
|
|
===
|
|
|
|
1
|
|
|
|
&&
|
|
|
|
a.getAttribute("id")
|
|
|
|
===
|
|
|
|
b
|
|
|
|
},
|
|
|
|
TAG:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
b
|
|
|
|
===
|
|
|
|
"*"
|
|
|
|
&&
|
|
|
|
a.nodeType
|
|
|
|
===
|
|
|
|
1
|
|
|
|
||
|
|
|
|
a.nodeName.toLowerCase()
|
|
|
|
===
|
|
|
|
b
|
|
|
|
},
|
|
|
|
CLASS:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
("
|
|
|
|
"
|
|
|
|
+
|
|
|
|
(a.className
|
|
|
|
||
|
|
|
|
a.getAttribute("class"))
|
|
|
|
+
|
|
|
|
"
|
|
|
|
").indexOf(b)
|
|
|
|
>
|
|
|
|
-1
|
|
|
|
},
|
|
|
|
ATTR:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
c
|
|
|
|
=
|
|
|
|
b[1],
|
|
|
|
d
|
|
|
|
=
|
|
|
|
i.attrHandle[c]
|
|
|
|
?
|
|
|
|
i.attrHandle[c](a)
|
|
|
|
:
|
|
|
|
a[c]
|
|
|
|
!=
|
|
|
|
null
|
|
|
|
?
|
|
|
|
a[c]
|
|
|
|
:
|
|
|
|
a.getAttribute(c),
|
|
|
|
e
|
|
|
|
=
|
|
|
|
d
|
|
|
|
+
|
|
|
|
"",
|
|
|
|
f
|
|
|
|
=
|
|
|
|
b[2],
|
|
|
|
g
|
|
|
|
=
|
|
|
|
b[4];
|
|
|
|
return
|
|
|
|
d
|
|
|
|
==
|
|
|
|
null
|
|
|
|
?
|
|
|
|
f
|
|
|
|
===
|
|
|
|
"!="
|
|
|
|
:
|
|
|
|
f
|
|
|
|
===
|
|
|
|
"="
|
|
|
|
?
|
|
|
|
e
|
|
|
|
===
|
|
|
|
g
|
|
|
|
:
|
|
|
|
f
|
|
|
|
===
|
|
|
|
"*="
|
|
|
|
?
|
|
|
|
e.indexOf(g)
|
|
|
|
>=
|
|
|
|
0
|
|
|
|
:
|
|
|
|
f
|
|
|
|
===
|
|
|
|
"~="
|
|
|
|
?
|
|
|
|
("
|
|
|
|
"
|
|
|
|
+
|
|
|
|
e
|
|
|
|
+
|
|
|
|
"
|
|
|
|
").indexOf(g)
|
|
|
|
>=
|
|
|
|
0
|
|
|
|
:
|
|
|
|
g
|
|
|
|
?
|
|
|
|
f
|
|
|
|
===
|
|
|
|
"!="
|
|
|
|
?
|
|
|
|
e
|
|
|
|
!==
|
|
|
|
g
|
|
|
|
:
|
|
|
|
f
|
|
|
|
===
|
|
|
|
"^="
|
|
|
|
?
|
|
|
|
e.indexOf(g)
|
|
|
|
===
|
|
|
|
0
|
|
|
|
:
|
|
|
|
f
|
|
|
|
===
|
|
|
|
"$="
|
|
|
|
?
|
|
|
|
e.substr(e.length
|
|
|
|
-
|
|
|
|
g.length)
|
|
|
|
===
|
|
|
|
g
|
|
|
|
:
|
|
|
|
f
|
|
|
|
===
|
|
|
|
"|="
|
|
|
|
?
|
|
|
|
e
|
|
|
|
===
|
|
|
|
g
|
|
|
|
||
|
|
|
|
e.substr(0,
|
|
|
|
g.length
|
|
|
|
+
|
|
|
|
1)
|
|
|
|
===
|
|
|
|
g
|
|
|
|
+
|
|
|
|
"-"
|
|
|
|
:
|
|
|
|
!1
|
|
|
|
:
|
|
|
|
e
|
|
|
|
&&
|
|
|
|
d
|
|
|
|
!==
|
|
|
|
!1
|
|
|
|
},
|
|
|
|
POS:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c,
|
|
|
|
d)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
e
|
|
|
|
=
|
|
|
|
b[2],
|
|
|
|
f
|
|
|
|
=
|
|
|
|
i.setFilters[e];
|
|
|
|
if
|
|
|
|
(f)
|
|
|
|
return
|
|
|
|
f(a,
|
|
|
|
c,
|
|
|
|
b,
|
|
|
|
d)
|
|
|
|
}
|
|
|
|
} },
|
|
|
|
j = i.match.POS, k =
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{ return "\\"
|
|
|
|
+ (b
|
|
|
|
-
|
|
|
|
0
|
|
|
|
+
|
|
|
|
1)
|
|
|
|
}; for (var l
|
|
|
|
in
|
|
|
|
i.match)
|
|
|
|
i.match[l] =
|
|
|
|
new
|
|
|
|
RegExp(i.match[l].source
|
|
|
|
+
|
|
|
|
/(?![^\[]*\])(?![^\(]*\))/.source),
|
|
|
|
i.leftMatch[l]
|
|
|
|
=
|
|
|
|
new
|
|
|
|
RegExp(/(^(?:.|\r|\n)*?)/.source
|
|
|
|
+
|
|
|
|
i.match[l].source.replace(/\\(\d+)/g,
|
|
|
|
k));
|
|
|
|
var m
|
|
|
|
=
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a
|
|
|
|
=
|
|
|
|
Array.prototype.slice.call(a,
|
|
|
|
0),
|
|
|
|
b
|
|
|
|
?
|
|
|
|
(b.push.apply(b,
|
|
|
|
a),
|
|
|
|
b)
|
|
|
|
:
|
|
|
|
a
|
|
|
|
};
|
|
|
|
try {
|
|
|
|
Array.prototype.slice.call(document.documentElement.childNodes,
|
|
|
|
0)[0].nodeType
|
|
|
|
}
|
|
|
|
catch
|
|
|
|
(n)
|
|
|
|
{
|
|
|
|
m
|
|
|
|
=
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
d
|
|
|
|
=
|
|
|
|
0,
|
|
|
|
e
|
|
|
|
=
|
|
|
|
b
|
|
|
|
||
|
|
|
|
[];
|
|
|
|
if
|
|
|
|
(c.call(a)
|
|
|
|
===
|
|
|
|
"[object
|
|
|
|
Array]")
|
|
|
|
Array.prototype.push.apply(e,
|
|
|
|
a);
|
|
|
|
else
|
|
|
|
if
|
|
|
|
(typeof
|
|
|
|
a.length
|
|
|
|
==
|
|
|
|
"number")
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
f
|
|
|
|
=
|
|
|
|
a.length;
|
|
|
|
d
|
|
|
|
<
|
|
|
|
f;
|
|
|
|
d++)
|
|
|
|
e.push(a[d]);
|
|
|
|
else
|
|
|
|
for
|
|
|
|
(;
|
|
|
|
a[d];
|
|
|
|
d++)
|
|
|
|
e.push(a[d]);
|
|
|
|
return
|
|
|
|
e
|
|
|
|
}
|
|
|
|
}
|
|
|
|
var
|
|
|
|
o,
|
|
|
|
p;
|
|
|
|
document.documentElement.compareDocumentPosition
|
|
|
|
?
|
|
|
|
o
|
|
|
|
=
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a
|
|
|
|
===
|
|
|
|
b
|
|
|
|
?
|
|
|
|
(d
|
|
|
|
=
|
|
|
|
!0,
|
|
|
|
0)
|
|
|
|
:
|
|
|
|
!a.compareDocumentPosition
|
|
|
|
||
|
|
|
|
!b.compareDocumentPosition
|
|
|
|
?
|
|
|
|
a.compareDocumentPosition
|
|
|
|
?
|
|
|
|
-1
|
|
|
|
:
|
|
|
|
1
|
|
|
|
:
|
|
|
|
a.compareDocumentPosition(b)
|
|
|
|
&
|
|
|
|
4
|
|
|
|
?
|
|
|
|
-1
|
|
|
|
:
|
|
|
|
1
|
|
|
|
}
|
|
|
|
: (o
|
|
|
|
=
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(a
|
|
|
|
===
|
|
|
|
b)
|
|
|
|
return
|
|
|
|
d
|
|
|
|
=
|
|
|
|
!0,
|
|
|
|
0; if
|
|
|
|
(a.sourceIndex
|
|
|
|
&&
|
|
|
|
b.sourceIndex)
|
|
|
|
return
|
|
|
|
a.sourceIndex
|
|
|
|
-
|
|
|
|
b.sourceIndex;
|
|
|
|
var
|
|
|
|
c,
|
|
|
|
e,
|
|
|
|
f
|
|
|
|
=
|
|
|
|
[],
|
|
|
|
g
|
|
|
|
=
|
|
|
|
[],
|
|
|
|
h
|
|
|
|
=
|
|
|
|
a.parentNode,
|
|
|
|
i
|
|
|
|
=
|
|
|
|
b.parentNode,
|
|
|
|
j
|
|
|
|
=
|
|
|
|
h;
|
|
|
|
if (h
|
|
|
|
===
|
|
|
|
i)
|
|
|
|
return
|
|
|
|
p(a,
|
|
|
|
b);
|
|
|
|
if
|
|
|
|
(!h)
|
|
|
|
return
|
|
|
|
-1;
|
|
|
|
if
|
|
|
|
(!i)
|
|
|
|
return
|
|
|
|
1;
|
|
|
|
while
|
|
|
|
(j)
|
|
|
|
f.unshift(j),
|
|
|
|
j
|
|
|
|
=
|
|
|
|
j.parentNode;
|
|
|
|
j =
|
|
|
|
i;
|
|
|
|
while
|
|
|
|
(j)
|
|
|
|
g.unshift(j),
|
|
|
|
j
|
|
|
|
=
|
|
|
|
j.parentNode;
|
|
|
|
c =
|
|
|
|
f.length,
|
|
|
|
e
|
|
|
|
=
|
|
|
|
g.length;
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
k
|
|
|
|
=
|
|
|
|
0;
|
|
|
|
k
|
|
|
|
<
|
|
|
|
c
|
|
|
|
&&
|
|
|
|
k
|
|
|
|
<
|
|
|
|
e;
|
|
|
|
k++)
|
|
|
|
if
|
|
|
|
(f[k]
|
|
|
|
!==
|
|
|
|
g[k])
|
|
|
|
return
|
|
|
|
p(f[k],
|
|
|
|
g[k]);
|
|
|
|
return
|
|
|
|
k
|
|
|
|
===
|
|
|
|
c
|
|
|
|
?
|
|
|
|
p(a,
|
|
|
|
g[k],
|
|
|
|
-1)
|
|
|
|
:
|
|
|
|
p(f[k],
|
|
|
|
b,
|
|
|
|
1)
|
|
|
|
},
|
|
|
|
p
|
|
|
|
=
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c)
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(a
|
|
|
|
===
|
|
|
|
b)
|
|
|
|
return
|
|
|
|
c;
|
|
|
|
var
|
|
|
|
d
|
|
|
|
=
|
|
|
|
a.nextSibling;
|
|
|
|
while
|
|
|
|
(d)
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(d
|
|
|
|
===
|
|
|
|
b)
|
|
|
|
return
|
|
|
|
-1;
|
|
|
|
d
|
|
|
|
=
|
|
|
|
d.nextSibling
|
|
|
|
}
|
|
|
|
return
|
|
|
|
1
|
|
|
|
}),
|
|
|
|
h.getText
|
|
|
|
=
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
b
|
|
|
|
=
|
|
|
|
"",
|
|
|
|
c;
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
d
|
|
|
|
=
|
|
|
|
0;
|
|
|
|
a[d];
|
|
|
|
d++)
|
|
|
|
c
|
|
|
|
=
|
|
|
|
a[d],
|
|
|
|
c.nodeType
|
|
|
|
===
|
|
|
|
3
|
|
|
|
||
|
|
|
|
c.nodeType
|
|
|
|
===
|
|
|
|
4
|
|
|
|
?
|
|
|
|
b
|
|
|
|
+=
|
|
|
|
c.nodeValue
|
|
|
|
:
|
|
|
|
c.nodeType
|
|
|
|
!==
|
|
|
|
8
|
|
|
|
&&
|
|
|
|
(b
|
|
|
|
+=
|
|
|
|
h.getText(c.childNodes));
|
|
|
|
return
|
|
|
|
b
|
|
|
|
},
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
var
|
|
|
|
a
|
|
|
|
=
|
|
|
|
document.createElement("div"),
|
|
|
|
b
|
|
|
|
=
|
|
|
|
"script"
|
|
|
|
+
|
|
|
|
(new
|
|
|
|
Date).getTime(),
|
|
|
|
c
|
|
|
|
=
|
|
|
|
document.documentElement;
|
|
|
|
a.innerHTML
|
|
|
|
=
|
|
|
|
"<a
|
|
|
|
name='"
|
|
|
|
+
|
|
|
|
b
|
|
|
|
+
|
|
|
|
"'/>",
|
|
|
|
c.insertBefore(a,
|
|
|
|
c.firstChild),
|
|
|
|
document.getElementById(b)
|
|
|
|
&&
|
|
|
|
(i.find.ID
|
|
|
|
=
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c)
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(typeof
|
|
|
|
b.getElementById
|
|
|
|
!=
|
|
|
|
"undefined"
|
|
|
|
&&
|
|
|
|
!c)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
d
|
|
|
|
=
|
|
|
|
b.getElementById(a[1]);
|
|
|
|
return
|
|
|
|
d
|
|
|
|
?
|
|
|
|
d.id
|
|
|
|
===
|
|
|
|
a[1]
|
|
|
|
||
|
|
|
|
typeof
|
|
|
|
d.getAttributeNode
|
|
|
|
!=
|
|
|
|
"undefined"
|
|
|
|
&&
|
|
|
|
d.getAttributeNode("id").nodeValue
|
|
|
|
===
|
|
|
|
a[1]
|
|
|
|
?
|
|
|
|
[d]
|
|
|
|
:
|
|
|
|
undefined
|
|
|
|
:
|
|
|
|
[]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
i.filter.ID
|
|
|
|
=
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
c
|
|
|
|
=
|
|
|
|
typeof
|
|
|
|
a.getAttributeNode
|
|
|
|
!=
|
|
|
|
"undefined"
|
|
|
|
&&
|
|
|
|
a.getAttributeNode("id");
|
|
|
|
return
|
|
|
|
a.nodeType
|
|
|
|
===
|
|
|
|
1
|
|
|
|
&&
|
|
|
|
c
|
|
|
|
&&
|
|
|
|
c.nodeValue
|
|
|
|
===
|
|
|
|
b
|
|
|
|
}),
|
|
|
|
c.removeChild(a),
|
|
|
|
c
|
|
|
|
=
|
|
|
|
a
|
|
|
|
=
|
|
|
|
null
|
|
|
|
}(),
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
var
|
|
|
|
a
|
|
|
|
=
|
|
|
|
document.createElement("div");
|
|
|
|
a.appendChild(document.createComment("")),
|
|
|
|
a.getElementsByTagName("*").length
|
|
|
|
>
|
|
|
|
0
|
|
|
|
&&
|
|
|
|
(i.find.TAG
|
|
|
|
=
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
c
|
|
|
|
=
|
|
|
|
b.getElementsByTagName(a[1]);
|
|
|
|
if
|
|
|
|
(a[1]
|
|
|
|
===
|
|
|
|
"*")
|
|
|
|
{
|
|
|
|
var
|
|
|
|
d
|
|
|
|
=
|
|
|
|
[];
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
e
|
|
|
|
=
|
|
|
|
0;
|
|
|
|
c[e];
|
|
|
|
e++)
|
|
|
|
c[e].nodeType
|
|
|
|
===
|
|
|
|
1
|
|
|
|
&&
|
|
|
|
d.push(c[e]);
|
|
|
|
c
|
|
|
|
=
|
|
|
|
d
|
|
|
|
}
|
|
|
|
return
|
|
|
|
c
|
|
|
|
}),
|
|
|
|
a.innerHTML
|
|
|
|
=
|
|
|
|
"<a
|
|
|
|
href='#'></a>",
|
|
|
|
a.firstChild
|
|
|
|
&&
|
|
|
|
typeof
|
|
|
|
a.firstChild.getAttribute
|
|
|
|
!=
|
|
|
|
"undefined"
|
|
|
|
&&
|
|
|
|
a.firstChild.getAttribute("href")
|
|
|
|
!==
|
|
|
|
"#"
|
|
|
|
&&
|
|
|
|
(i.attrHandle.href
|
|
|
|
=
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a.getAttribute("href",
|
|
|
|
2)
|
|
|
|
}),
|
|
|
|
a
|
|
|
|
=
|
|
|
|
null
|
|
|
|
}(),
|
|
|
|
document.querySelectorAll
|
|
|
|
&&
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
var
|
|
|
|
a
|
|
|
|
=
|
|
|
|
h,
|
|
|
|
b
|
|
|
|
=
|
|
|
|
document.createElement("div"),
|
|
|
|
c
|
|
|
|
=
|
|
|
|
"__sizzle__";
|
|
|
|
b.innerHTML
|
|
|
|
=
|
|
|
|
"<p
|
|
|
|
class='TEST'></p>";
|
|
|
|
if
|
|
|
|
(b.querySelectorAll
|
|
|
|
&&
|
|
|
|
b.querySelectorAll(".TEST").length
|
|
|
|
===
|
|
|
|
0)
|
|
|
|
return;
|
|
|
|
h
|
|
|
|
=
|
|
|
|
function(b,
|
|
|
|
d,
|
|
|
|
e,
|
|
|
|
f)
|
|
|
|
{
|
|
|
|
d
|
|
|
|
=
|
|
|
|
d
|
|
|
|
||
|
|
|
|
document;
|
|
|
|
if
|
|
|
|
(!f
|
|
|
|
&&
|
|
|
|
!h.isXML(d))
|
|
|
|
{
|
|
|
|
var
|
|
|
|
g
|
|
|
|
=
|
|
|
|
/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);
|
|
|
|
if
|
|
|
|
(g
|
|
|
|
&&
|
|
|
|
(d.nodeType
|
|
|
|
===
|
|
|
|
1
|
|
|
|
||
|
|
|
|
d.nodeType
|
|
|
|
===
|
|
|
|
9))
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(g[1])
|
|
|
|
return
|
|
|
|
m(d.getElementsByTagName(b),
|
|
|
|
e);
|
|
|
|
if
|
|
|
|
(g[2]
|
|
|
|
&&
|
|
|
|
i.find.CLASS
|
|
|
|
&&
|
|
|
|
d.getElementsByClassName)
|
|
|
|
return
|
|
|
|
m(d.getElementsByClassName(g[2]),
|
|
|
|
e)
|
|
|
|
}
|
|
|
|
if
|
|
|
|
(d.nodeType
|
|
|
|
===
|
|
|
|
9)
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(b
|
|
|
|
===
|
|
|
|
"body"
|
|
|
|
&&
|
|
|
|
d.body)
|
|
|
|
return
|
|
|
|
m([d.body],
|
|
|
|
e);
|
|
|
|
if
|
|
|
|
(g
|
|
|
|
&&
|
|
|
|
g[3])
|
|
|
|
{
|
|
|
|
var
|
|
|
|
j
|
|
|
|
=
|
|
|
|
d.getElementById(g[3]);
|
|
|
|
if
|
|
|
|
(!j
|
|
|
|
||
|
|
|
|
!j.parentNode)
|
|
|
|
return
|
|
|
|
m([],
|
|
|
|
e);
|
|
|
|
if
|
|
|
|
(j.id
|
|
|
|
===
|
|
|
|
g[3])
|
|
|
|
return
|
|
|
|
m([j],
|
|
|
|
e)
|
|
|
|
}
|
|
|
|
try
|
|
|
|
{
|
|
|
|
return
|
|
|
|
m(d.querySelectorAll(b),
|
|
|
|
e)
|
|
|
|
}
|
|
|
|
catch
|
|
|
|
(k)
|
|
|
|
{}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
if
|
|
|
|
(d.nodeType
|
|
|
|
===
|
|
|
|
1
|
|
|
|
&&
|
|
|
|
d.nodeName.toLowerCase()
|
|
|
|
!==
|
|
|
|
"object")
|
|
|
|
{
|
|
|
|
var
|
|
|
|
l
|
|
|
|
=
|
|
|
|
d,
|
|
|
|
n
|
|
|
|
=
|
|
|
|
d.getAttribute("id"),
|
|
|
|
o
|
|
|
|
=
|
|
|
|
n
|
|
|
|
||
|
|
|
|
c,
|
|
|
|
p
|
|
|
|
=
|
|
|
|
d.parentNode,
|
|
|
|
q
|
|
|
|
=
|
|
|
|
/^\s*[+~]/.test(b);
|
|
|
|
n
|
|
|
|
?
|
|
|
|
o
|
|
|
|
=
|
|
|
|
o.replace(/'/g,
|
|
|
|
"\\$&")
|
|
|
|
:
|
|
|
|
d.setAttribute("id",
|
|
|
|
o),
|
|
|
|
q
|
|
|
|
&&
|
|
|
|
p
|
|
|
|
&&
|
|
|
|
(d
|
|
|
|
=
|
|
|
|
d.parentNode);
|
|
|
|
try
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(!q
|
|
|
|
||
|
|
|
|
p)
|
|
|
|
return
|
|
|
|
m(d.querySelectorAll("[id='"
|
|
|
|
+
|
|
|
|
o
|
|
|
|
+
|
|
|
|
"']
|
|
|
|
"
|
|
|
|
+
|
|
|
|
b),
|
|
|
|
e)
|
|
|
|
}
|
|
|
|
catch
|
|
|
|
(r)
|
|
|
|
{}
|
|
|
|
finally
|
|
|
|
{
|
|
|
|
n
|
|
|
|
||
|
|
|
|
l.removeAttribute("id")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return
|
|
|
|
a(b,
|
|
|
|
d,
|
|
|
|
e,
|
|
|
|
f)
|
|
|
|
};
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
d
|
|
|
|
in
|
|
|
|
a)
|
|
|
|
h[d]
|
|
|
|
=
|
|
|
|
a[d];
|
|
|
|
b
|
|
|
|
=
|
|
|
|
null
|
|
|
|
}(),
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
var
|
|
|
|
a
|
|
|
|
=
|
|
|
|
document.documentElement,
|
|
|
|
b
|
|
|
|
=
|
|
|
|
a.matchesSelector
|
|
|
|
||
|
|
|
|
a.mozMatchesSelector
|
|
|
|
||
|
|
|
|
a.webkitMatchesSelector
|
|
|
|
||
|
|
|
|
a.msMatchesSelector;
|
|
|
|
if
|
|
|
|
(b)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
c
|
|
|
|
=
|
|
|
|
!b.call(document.createElement("div"),
|
|
|
|
"div"),
|
|
|
|
d
|
|
|
|
=
|
|
|
|
!1;
|
|
|
|
try
|
|
|
|
{
|
|
|
|
b.call(document.documentElement,
|
|
|
|
"[test!='']:sizzle")
|
|
|
|
}
|
|
|
|
catch
|
|
|
|
(e)
|
|
|
|
{
|
|
|
|
d
|
|
|
|
=
|
|
|
|
!0
|
|
|
|
}
|
|
|
|
h.matchesSelector
|
|
|
|
=
|
|
|
|
function(a,
|
|
|
|
e)
|
|
|
|
{
|
|
|
|
e
|
|
|
|
=
|
|
|
|
e.replace(/\=\s*([^'"\]]*)\s*\]/g,
|
|
|
|
"='$1']");
|
|
|
|
if
|
|
|
|
(!h.isXML(a))
|
|
|
|
try
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(d
|
|
|
|
||
|
|
|
|
!i.match.PSEUDO.test(e)
|
|
|
|
&&
|
|
|
|
!/!=/.test(e))
|
|
|
|
{
|
|
|
|
var
|
|
|
|
f
|
|
|
|
=
|
|
|
|
b.call(a,
|
|
|
|
e);
|
|
|
|
if
|
|
|
|
(f
|
|
|
|
||
|
|
|
|
!c
|
|
|
|
||
|
|
|
|
a.document
|
|
|
|
&&
|
|
|
|
a.document.nodeType
|
|
|
|
!==
|
|
|
|
11)
|
|
|
|
return
|
|
|
|
f
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch
|
|
|
|
(g)
|
|
|
|
{}
|
|
|
|
return
|
|
|
|
h(e,
|
|
|
|
null,
|
|
|
|
null,
|
|
|
|
[a]).length
|
|
|
|
>
|
|
|
|
0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}(),
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
var
|
|
|
|
a
|
|
|
|
=
|
|
|
|
document.createElement("div");
|
|
|
|
a.innerHTML
|
|
|
|
=
|
|
|
|
"<div
|
|
|
|
class='test
|
|
|
|
e'></div><div
|
|
|
|
class='test'></div>";
|
|
|
|
if
|
|
|
|
(!a.getElementsByClassName
|
|
|
|
||
|
|
|
|
a.getElementsByClassName("e").length
|
|
|
|
===
|
|
|
|
0)
|
|
|
|
return;
|
|
|
|
a.lastChild.className
|
|
|
|
=
|
|
|
|
"e";
|
|
|
|
if
|
|
|
|
(a.getElementsByClassName("e").length
|
|
|
|
===
|
|
|
|
1)
|
|
|
|
return;
|
|
|
|
i.order.splice(1,
|
|
|
|
0,
|
|
|
|
"CLASS"),
|
|
|
|
i.find.CLASS
|
|
|
|
=
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c)
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(typeof
|
|
|
|
b.getElementsByClassName
|
|
|
|
!=
|
|
|
|
"undefined"
|
|
|
|
&&
|
|
|
|
!c)
|
|
|
|
return
|
|
|
|
b.getElementsByClassName(a[1])
|
|
|
|
},
|
|
|
|
a
|
|
|
|
=
|
|
|
|
null
|
|
|
|
}(),
|
|
|
|
document.documentElement.contains
|
|
|
|
?
|
|
|
|
h.contains
|
|
|
|
=
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a
|
|
|
|
!==
|
|
|
|
b
|
|
|
|
&&
|
|
|
|
(a.contains
|
|
|
|
?
|
|
|
|
a.contains(b)
|
|
|
|
:
|
|
|
|
!0)
|
|
|
|
}
|
|
|
|
:
|
|
|
|
document.documentElement.compareDocumentPosition
|
|
|
|
?
|
|
|
|
h.contains
|
|
|
|
=
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
!!(a.compareDocumentPosition(b)
|
|
|
|
&
|
|
|
|
16)
|
|
|
|
}
|
|
|
|
:
|
|
|
|
h.contains
|
|
|
|
=
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
return
|
|
|
|
!1
|
|
|
|
},
|
|
|
|
h.isXML
|
|
|
|
=
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
b
|
|
|
|
=
|
|
|
|
(a
|
|
|
|
?
|
|
|
|
a.ownerDocument
|
|
|
|
||
|
|
|
|
a
|
|
|
|
:
|
|
|
|
0).documentElement;
|
|
|
|
return
|
|
|
|
b
|
|
|
|
?
|
|
|
|
b.nodeName
|
|
|
|
!==
|
|
|
|
"HTML"
|
|
|
|
:
|
|
|
|
!1
|
|
|
|
};
|
|
|
|
var s
|
|
|
|
=
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
c,
|
|
|
|
d
|
|
|
|
=
|
|
|
|
[],
|
|
|
|
e
|
|
|
|
=
|
|
|
|
"",
|
|
|
|
f
|
|
|
|
=
|
|
|
|
b.nodeType
|
|
|
|
?
|
|
|
|
[b]
|
|
|
|
:
|
|
|
|
b;
|
|
|
|
while
|
|
|
|
(c
|
|
|
|
=
|
|
|
|
i.match.PSEUDO.exec(a))
|
|
|
|
e
|
|
|
|
+=
|
|
|
|
c[0],
|
|
|
|
a
|
|
|
|
=
|
|
|
|
a.replace(i.match.PSEUDO,
|
|
|
|
"");
|
|
|
|
a
|
|
|
|
=
|
|
|
|
i.relative[a]
|
|
|
|
?
|
|
|
|
a
|
|
|
|
+
|
|
|
|
"*"
|
|
|
|
:
|
|
|
|
a;
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
g
|
|
|
|
=
|
|
|
|
0,
|
|
|
|
j
|
|
|
|
=
|
|
|
|
f.length;
|
|
|
|
g
|
|
|
|
<
|
|
|
|
j;
|
|
|
|
g++)
|
|
|
|
h(a,
|
|
|
|
f[g],
|
|
|
|
d);
|
|
|
|
return
|
|
|
|
h.filter(e,
|
|
|
|
d)
|
|
|
|
},
|
|
|
|
t
|
|
|
|
=
|
|
|
|
window.Sizzle;
|
|
|
|
h.noConflict
|
|
|
|
=
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
window.Sizzle
|
|
|
|
=
|
|
|
|
t
|
|
|
|
},
|
|
|
|
window.Sizzle
|
|
|
|
=
|
|
|
|
h
|
|
|
|
}(), function() { function b(b) { var c; if (!QQWB.Array.isArray(this)) return
|
|
|
|
this; c = []; for (var d = 0, e = this.length; d < e; d++) c =
|
|
|
|
c.concat(a(b, this[d])); return c }
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function c(b) { return typeof b != "string" ? this : b.length <= 0 ? this :
|
|
|
|
a.matches(":contains(" + b + ")", this) }
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function d(b) { return a.matches(b, this) }
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function e(b) { return a.matches(":not(" + b + ")", this) }
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function f(a) { return QQWB.Array.get(this, a) }
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function g(a) { if (!QQWB.Array.isArray(this) || !a) return this; for (var
|
|
|
|
b = 0, c = this.length; b < c; b++) if (a(this[b]) === !1)
|
|
|
|
break; return this }
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function h(a) { return !a.find && (a.find = function(c) { return
|
|
|
|
h(b.call(a, c)) }), !a.contains && (a.contains = function(b) {
|
|
|
|
return h(c.call(a, b)) }), !a.keep && (a.keep = function(b)
|
|
|
|
{ return h(d.call(a, b)) }), !a.tear && (a.tear =
|
|
|
|
function(b) { return h(e.call(a, b)) }), !a.get && (a.get =
|
|
|
|
function(b) { return f.call(a, b) }), !a.each && (a.each =
|
|
|
|
function(b) { return g.call(a, b) }), a } var a =
|
|
|
|
window.Sizzle; a.noConflict(), QQWB.provide("dom.find",
|
|
|
|
function(b, c) { return h(a(b, c)) }),
|
|
|
|
QQWB._alias("find", QQWB.dom.find) }(), function() { var a =
|
|
|
|
function() { function b(a) { return
|
|
|
|
Object.prototype.toString.call(a).slice(8,
|
|
|
|
-1).toLowerCase() }
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function c(a, b) { for (var c = []; b > 0; c[--b] = a); return
|
|
|
|
c.join("") } var d = function() { return
|
|
|
|
d.cache.hasOwnProperty(arguments[0]) ||
|
|
|
|
(d.cache[arguments[0]] =
|
|
|
|
d.parse(arguments[0])),
|
|
|
|
d.format.call(null, d.cache[arguments[0]],
|
|
|
|
arguments) }; return d.format =
|
|
|
|
function(d, e) { var f = 1, g = d.length, h
|
|
|
|
= "", i, j = [], k, l, m, n, o, p;
|
|
|
|
for (k = 0; k < g; k++) { h =
|
|
|
|
b(d[k]); if (h ===
|
|
|
|
"string")
|
|
|
|
j.push(d[k]); else
|
|
|
|
if (h === "array")
|
|
|
|
{ m = d[k]; if
|
|
|
|
(m[2]) { i
|
|
|
|
=
|
|
|
|
e[f];
|
|
|
|
for
|
|
|
|
(l
|
|
|
|
=
|
|
|
|
0;
|
|
|
|
l
|
|
|
|
<
|
|
|
|
m[2].length;
|
|
|
|
l++)
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(!i.hasOwnProperty(m[2][l]))
|
|
|
|
throw
|
|
|
|
a('[sprintf]
|
|
|
|
property
|
|
|
|
"%s"
|
|
|
|
does
|
|
|
|
not
|
|
|
|
exist',
|
|
|
|
m[2][l]);
|
|
|
|
i
|
|
|
|
=
|
|
|
|
i[m[2][l]]
|
|
|
|
}
|
|
|
|
} else m[1]
|
|
|
|
? i
|
|
|
|
=
|
|
|
|
e[m[1]]
|
|
|
|
:
|
|
|
|
i
|
|
|
|
=
|
|
|
|
e[f++];
|
|
|
|
if
|
|
|
|
(/[^s]/.test(m[8])
|
|
|
|
&&
|
|
|
|
b(i)
|
|
|
|
!=
|
|
|
|
"number")
|
|
|
|
throw
|
|
|
|
a("[sprintf]
|
|
|
|
expecting
|
|
|
|
number
|
|
|
|
but
|
|
|
|
found
|
|
|
|
%s",
|
|
|
|
b(i));
|
|
|
|
switch
|
|
|
|
(m[8])
|
|
|
|
{
|
|
|
|
case
|
|
|
|
"b":
|
|
|
|
i
|
|
|
|
=
|
|
|
|
i.toString(2);
|
|
|
|
break;
|
|
|
|
case
|
|
|
|
"c":
|
|
|
|
i
|
|
|
|
=
|
|
|
|
String.fromCharCode(i);
|
|
|
|
break;
|
|
|
|
case
|
|
|
|
"d":
|
|
|
|
i
|
|
|
|
=
|
|
|
|
parseInt(i,
|
|
|
|
10);
|
|
|
|
break;
|
|
|
|
case
|
|
|
|
"e":
|
|
|
|
i
|
|
|
|
=
|
|
|
|
m[7]
|
|
|
|
?
|
|
|
|
i.toExponential(m[7])
|
|
|
|
:
|
|
|
|
i.toExponential();
|
|
|
|
break;
|
|
|
|
case
|
|
|
|
"f":
|
|
|
|
i
|
|
|
|
=
|
|
|
|
m[7]
|
|
|
|
?
|
|
|
|
parseFloat(i).toFixed(m[7])
|
|
|
|
:
|
|
|
|
parseFloat(i);
|
|
|
|
break;
|
|
|
|
case
|
|
|
|
"o":
|
|
|
|
i
|
|
|
|
=
|
|
|
|
i.toString(8);
|
|
|
|
break;
|
|
|
|
case
|
|
|
|
"s":
|
|
|
|
i
|
|
|
|
=
|
|
|
|
(i
|
|
|
|
=
|
|
|
|
i
|
|
|
|
?
|
|
|
|
String(i)
|
|
|
|
:
|
|
|
|
"")
|
|
|
|
&&
|
|
|
|
m[7]
|
|
|
|
?
|
|
|
|
i.substring(0,
|
|
|
|
m[7])
|
|
|
|
:
|
|
|
|
i;
|
|
|
|
break;
|
|
|
|
case
|
|
|
|
"u":
|
|
|
|
i
|
|
|
|
=
|
|
|
|
Math.abs(i);
|
|
|
|
break;
|
|
|
|
case
|
|
|
|
"x":
|
|
|
|
i
|
|
|
|
=
|
|
|
|
i.toString(16);
|
|
|
|
break;
|
|
|
|
case
|
|
|
|
"X":
|
|
|
|
i
|
|
|
|
=
|
|
|
|
i.toString(16).toUpperCase()
|
|
|
|
} i
|
|
|
|
=
|
|
|
|
/[def]/.test(m[8])
|
|
|
|
&&
|
|
|
|
m[3]
|
|
|
|
&&
|
|
|
|
i
|
|
|
|
>=
|
|
|
|
0 ?
|
|
|
|
"+"
|
|
|
|
+ i
|
|
|
|
:
|
|
|
|
i,
|
|
|
|
o =
|
|
|
|
m[4]
|
|
|
|
?
|
|
|
|
m[4]
|
|
|
|
==
|
|
|
|
"0"
|
|
|
|
?
|
|
|
|
"0"
|
|
|
|
:
|
|
|
|
m[4].charAt(1)
|
|
|
|
:
|
|
|
|
"
|
|
|
|
",
|
|
|
|
p =
|
|
|
|
m[6]
|
|
|
|
-
|
|
|
|
String(i).length,
|
|
|
|
n =
|
|
|
|
m[6]
|
|
|
|
?
|
|
|
|
c(o,
|
|
|
|
p)
|
|
|
|
:
|
|
|
|
"",
|
|
|
|
j.push(m[5]
|
|
|
|
?
|
|
|
|
i
|
|
|
|
+
|
|
|
|
n
|
|
|
|
:
|
|
|
|
n
|
|
|
|
+
|
|
|
|
i)
|
|
|
|
} } return
|
|
|
|
j.join("") }, d.cache = {}, d.parse
|
|
|
|
= function(a) { var b = a,
|
|
|
|
c = [], d = [], e =
|
|
|
|
0; while
|
|
|
|
(b) { if
|
|
|
|
((c
|
|
|
|
=
|
|
|
|
/^[^\x25]+/.exec(b))
|
|
|
|
!==
|
|
|
|
null)
|
|
|
|
d.push(c[0]);
|
|
|
|
else
|
|
|
|
if
|
|
|
|
((c
|
|
|
|
=
|
|
|
|
/^\x25{2}/.exec(b))
|
|
|
|
!==
|
|
|
|
null)
|
|
|
|
d.push("%");
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if
|
|
|
|
((c
|
|
|
|
=
|
|
|
|
/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(b))
|
|
|
|
===
|
|
|
|
null)
|
|
|
|
throw
|
|
|
|
"[sprintf]
|
|
|
|
huh?";
|
|
|
|
if
|
|
|
|
(c[2])
|
|
|
|
{
|
|
|
|
e
|
|
|
|
|=
|
|
|
|
1;
|
|
|
|
var
|
|
|
|
f
|
|
|
|
=
|
|
|
|
[],
|
|
|
|
g
|
|
|
|
=
|
|
|
|
c[2],
|
|
|
|
h
|
|
|
|
=
|
|
|
|
[];
|
|
|
|
if
|
|
|
|
((h
|
|
|
|
=
|
|
|
|
/^([a-z_][a-z_\d]*)/i.exec(g))
|
|
|
|
===
|
|
|
|
null)
|
|
|
|
throw
|
|
|
|
"[sprintf]
|
|
|
|
huh?";
|
|
|
|
f.push(h[1]);
|
|
|
|
while
|
|
|
|
((g
|
|
|
|
=
|
|
|
|
g.substring(h[0].length))
|
|
|
|
!==
|
|
|
|
"")
|
|
|
|
if
|
|
|
|
((h
|
|
|
|
=
|
|
|
|
/^\.([a-z_][a-z_\d]*)/i.exec(g))
|
|
|
|
!==
|
|
|
|
null)
|
|
|
|
f.push(h[1]);
|
|
|
|
else
|
|
|
|
if
|
|
|
|
((h
|
|
|
|
=
|
|
|
|
/^\[(\d+)\]/.exec(g))
|
|
|
|
!==
|
|
|
|
null)
|
|
|
|
f.push(h[1]);
|
|
|
|
else
|
|
|
|
throw
|
|
|
|
"[sprintf]
|
|
|
|
huh?";
|
|
|
|
c[2]
|
|
|
|
=
|
|
|
|
f
|
|
|
|
}
|
|
|
|
else
|
|
|
|
e
|
|
|
|
|=
|
|
|
|
2;
|
|
|
|
if
|
|
|
|
(e
|
|
|
|
===
|
|
|
|
3)
|
|
|
|
throw
|
|
|
|
"[sprintf]
|
|
|
|
mixing
|
|
|
|
positional
|
|
|
|
and
|
|
|
|
named
|
|
|
|
placeholders
|
|
|
|
is
|
|
|
|
not
|
|
|
|
(yet)
|
|
|
|
supported";
|
|
|
|
d.push(c)
|
|
|
|
}
|
|
|
|
b =
|
|
|
|
b.substring(c[0].length)
|
|
|
|
} return d
|
|
|
|
}, d }(), b = function(b,
|
|
|
|
c) { return
|
|
|
|
c.unshift(b),
|
|
|
|
a.apply(null,
|
|
|
|
c)
|
|
|
|
};
|
|
|
|
QQWB.extend("String.format", { sprintf: a, vsprintf: b }),
|
|
|
|
QQWB._alias("format", QQWB.String.format) }(),
|
|
|
|
QQWB.extend("time", { now: function() { return
|
|
|
|
+this.dateNow() }, secondsNow: function() {
|
|
|
|
return Math.round(this.now() / 1e3)
|
|
|
|
}, dateNow: function() { return new Date },
|
|
|
|
shortTime: function(a, b) { return a instanceof
|
|
|
|
Date || (b = a, a = this.dateNow()), b = b
|
|
|
|
|| "%(year)s/%(month)s/%(day)s
|
|
|
|
%(hour)02d:%(minute)02d:%(second)02d",
|
|
|
|
QQWB.format.sprintf(b, { year: a.getFullYear(),
|
|
|
|
month: a.getMonth(), day: a.getDate(),
|
|
|
|
hour: a.getHours(), minute: a.getMinutes(), second:
|
|
|
|
a.getSeconds() }) } }), QQWB.extend("log",
|
|
|
|
{ CRITICAL: 50, ERROR: 40, WARNING: 30, INFO: 20,
|
|
|
|
DEBUG: 10, NOTSET: 0, _level: 0, _format:
|
|
|
|
"%(source)s%(popup)s%(frame)s%(name)s:
|
|
|
|
[%(levelname)s] %(time)s
|
|
|
|
%(message)s", setLevel: function(a)
|
|
|
|
{ return this._level = a, this },
|
|
|
|
setFormat: function(a) { return
|
|
|
|
this._format = a, this }, debug:
|
|
|
|
function(a) { return this.DEBUG >=
|
|
|
|
this._level &&
|
|
|
|
this._out("DEBUG", a), this },
|
|
|
|
info: function(a) { return this.INFO >=
|
|
|
|
this._level && this._out("INFO",
|
|
|
|
a), this }, warning:
|
|
|
|
function(a) { return this.WARNING
|
|
|
|
>= this._level &&
|
|
|
|
this._out("WARNING", a), this },
|
|
|
|
error: function(a) { return this.ERROR >=
|
|
|
|
this._level && this._out("ERROR",
|
|
|
|
a), this }, critical:
|
|
|
|
function(a) { return this.CRITICAL
|
|
|
|
>= this._level &&
|
|
|
|
this._out("CRITICAL",
|
|
|
|
a),
|
|
|
|
this }, _out: function(a,
|
|
|
|
b) { var c
|
|
|
|
=
|
|
|
|
this._format;
|
|
|
|
c =
|
|
|
|
QQWB.format.sprintf(c,
|
|
|
|
{
|
|
|
|
name:
|
|
|
|
QQWB.name,
|
|
|
|
levelname:
|
|
|
|
a,
|
|
|
|
time:
|
|
|
|
QQWB.time.shortTime(),
|
|
|
|
message:
|
|
|
|
b,
|
|
|
|
frame:
|
|
|
|
window
|
|
|
|
!=
|
|
|
|
window.parent
|
|
|
|
?
|
|
|
|
"*"
|
|
|
|
:
|
|
|
|
"",
|
|
|
|
source:
|
|
|
|
window.name
|
|
|
|
?
|
|
|
|
window.name
|
|
|
|
:
|
|
|
|
"",
|
|
|
|
popup:
|
|
|
|
window.opener
|
|
|
|
||
|
|
|
|
window.name
|
|
|
|
===
|
|
|
|
QQWB._const.AUTH_WINDOW_NAME
|
|
|
|
?
|
|
|
|
"#"
|
|
|
|
:
|
|
|
|
""
|
|
|
|
}),
|
|
|
|
this._capture
|
|
|
|
&&
|
|
|
|
typeof
|
|
|
|
this._captureLevel
|
|
|
|
==
|
|
|
|
"number"
|
|
|
|
&&
|
|
|
|
this[a]
|
|
|
|
>
|
|
|
|
this._captureLevel
|
|
|
|
&&
|
|
|
|
this._capturedMessages
|
|
|
|
&&
|
|
|
|
(this._capturedMessages.length
|
|
|
|
>=
|
|
|
|
this._captureMaxSize
|
|
|
|
&&
|
|
|
|
this._capturedMessages.shift(),
|
|
|
|
this._capturedMessages.push(c)),
|
|
|
|
QQWB.debug
|
|
|
|
&&
|
|
|
|
window.console
|
|
|
|
&&
|
|
|
|
window.console.log(c)
|
|
|
|
},
|
|
|
|
startCapture:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
this._captureLevel
|
|
|
|
=
|
|
|
|
a
|
|
|
|
||
|
|
|
|
this.NOTSET,
|
|
|
|
this._captureMaxSize
|
|
|
|
=
|
|
|
|
b
|
|
|
|
||
|
|
|
|
50,
|
|
|
|
this._capturedMessages
|
|
|
|
=
|
|
|
|
[],
|
|
|
|
this._capture
|
|
|
|
=
|
|
|
|
!0,
|
|
|
|
this
|
|
|
|
},
|
|
|
|
stopCapture:
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
return
|
|
|
|
this._capture
|
|
|
|
&&
|
|
|
|
(this._capture
|
|
|
|
=
|
|
|
|
!1),
|
|
|
|
this
|
|
|
|
},
|
|
|
|
lastCaptured:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a
|
|
|
|
=
|
|
|
|
a
|
|
|
|
||
|
|
|
|
"\n",
|
|
|
|
this._capturedMessages
|
|
|
|
?
|
|
|
|
this._capturedMessages.join(a)
|
|
|
|
:
|
|
|
|
""
|
|
|
|
}
|
|
|
|
}), QQWB.extend("cookie", { set: function(a, b, c,
|
|
|
|
d, e, f) { f = f || escape; if
|
|
|
|
(typeof c == "undefined" ||
|
|
|
|
c === null) c = -1; var g
|
|
|
|
= e ? "domain=" + e
|
|
|
|
: "", h = d ? "path=" + d : "", i = "";
|
|
|
|
return c === 0 ? i = "expires=" + (new Date(1970,
|
|
|
|
1, 1)).toUTCString() : c > 0 && (i
|
|
|
|
= "expires=" + (new Date(+(new
|
|
|
|
Date) + c *
|
|
|
|
1e3)).toUTCString()),
|
|
|
|
document.cookie = [a + "=" + f(b),
|
|
|
|
i, h, g].join("; "), this }, get: function(a, b, c)
|
|
|
|
{ b = b || unescape; var d = a + "="; cookies =
|
|
|
|
(document.cookie || "").split(/\s*;\s*/);
|
|
|
|
for (var e = 0, f = cookies.length; e < f;
|
|
|
|
e++) { var g = cookies[e]; if
|
|
|
|
(g.indexOf(d) === 0) return
|
|
|
|
b(g.substr(d.length)) } return c }, del:
|
|
|
|
function(a, b, c) { return this.set(a, "",
|
|
|
|
0, b, c), document.cookie.indexOf(a
|
|
|
|
+ "=") >= 0 &&
|
|
|
|
QQWB.log.warning("Cookie
|
|
|
|
may not be
|
|
|
|
deleted as
|
|
|
|
you
|
|
|
|
expected"),
|
|
|
|
this } }), QQWB.extend("XML", {
|
|
|
|
isXML: function(a) {},
|
|
|
|
toString: function(a) { return
|
|
|
|
this.stringify(a) },
|
|
|
|
stringify: function(a) { var b;
|
|
|
|
return window.ActiveXObject
|
|
|
|
? b = a.xml : b = (new
|
|
|
|
XMLSerializer).serializeToString(a),
|
|
|
|
b }, fromString: function(a) { var
|
|
|
|
b; if
|
|
|
|
(window.ActiveXObject) b =
|
|
|
|
new
|
|
|
|
ActiveXObject("Microsoft.XMLDOM"),
|
|
|
|
b.async = "false", b.loadXML(a);
|
|
|
|
else { var c = new DOMParser; b =
|
|
|
|
c.parseFromString(a,
|
|
|
|
"text/xml") }
|
|
|
|
return b } }, !0),
|
|
|
|
QQWB.extend("Function", {
|
|
|
|
isFunction: function(a) {
|
|
|
|
return typeof a ==
|
|
|
|
"function" } }),
|
|
|
|
QQWB.extend("deferred", {
|
|
|
|
_promiseMethods: "done fail
|
|
|
|
isResolved isRejected
|
|
|
|
promise then always success
|
|
|
|
error complete
|
|
|
|
whatever".split(" "),
|
|
|
|
_deferred: function() { var a = [],
|
|
|
|
b, c, d, e = { done:
|
|
|
|
function() { if
|
|
|
|
(!d) { var
|
|
|
|
c =
|
|
|
|
arguments, f, g; b && (g =
|
|
|
|
b, b = 0); for (var
|
|
|
|
h = 0, i =
|
|
|
|
c.length; h
|
|
|
|
< i; h++) f
|
|
|
|
= c[h],
|
|
|
|
QQWB.Array.isArray(f) ?
|
|
|
|
e.done.apply(e, f) :
|
|
|
|
QQWB.Function.isFunction(f)
|
|
|
|
&& a.push(f); g &&
|
|
|
|
e.resolveWith(g[0], g[1]) }
|
|
|
|
return this
|
|
|
|
}, resolveWith:
|
|
|
|
function(e, f) { if
|
|
|
|
(!d && !b
|
|
|
|
&& !c) { f
|
|
|
|
=
|
|
|
|
f
|
|
|
|
||
|
|
|
|
[],
|
|
|
|
c
|
|
|
|
=
|
|
|
|
1;
|
|
|
|
try
|
|
|
|
{
|
|
|
|
while
|
|
|
|
(a[0])
|
|
|
|
a.shift().apply(e,
|
|
|
|
f)
|
|
|
|
}
|
|
|
|
finally
|
|
|
|
{
|
|
|
|
b
|
|
|
|
=
|
|
|
|
[e,
|
|
|
|
f],
|
|
|
|
c
|
|
|
|
=
|
|
|
|
0
|
|
|
|
}
|
|
|
|
} return
|
|
|
|
this },
|
|
|
|
resolve:
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
return
|
|
|
|
e.resolveWith(this,
|
|
|
|
arguments),
|
|
|
|
this
|
|
|
|
},
|
|
|
|
isResolved:
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
return
|
|
|
|
!!c
|
|
|
|
||
|
|
|
|
!!
|
|
|
|
b
|
|
|
|
},
|
|
|
|
cancel:
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
return
|
|
|
|
d
|
|
|
|
=
|
|
|
|
1,
|
|
|
|
a
|
|
|
|
=
|
|
|
|
[],
|
|
|
|
this
|
|
|
|
}
|
|
|
|
}; return e }, deferred:
|
|
|
|
function(a) { var b, c =
|
|
|
|
QQWB.deferred._deferred(),
|
|
|
|
d =
|
|
|
|
QQWB.deferred._deferred();
|
|
|
|
return QQWB.extend(c, {
|
|
|
|
fail: d.done, then:
|
|
|
|
function(a, b) {
|
|
|
|
return
|
|
|
|
c.done(a).fail(b),
|
|
|
|
this }, always:
|
|
|
|
function() { return
|
|
|
|
c.done.apply(c,
|
|
|
|
arguments).fail.apply(this,
|
|
|
|
arguments)
|
|
|
|
}, rejectWith:
|
|
|
|
d.resolveWith, reject:
|
|
|
|
d.resolve,
|
|
|
|
isRejected:
|
|
|
|
d.isResolved,
|
|
|
|
promise: function(a)
|
|
|
|
{ if (a == null) { if (b)
|
|
|
|
return
|
|
|
|
b; b = a = {} } var
|
|
|
|
d =
|
|
|
|
QQWB.deferred._promiseMethods.length;
|
|
|
|
while
|
|
|
|
(d--)
|
|
|
|
a[QQWB.deferred._promiseMethods[d]]
|
|
|
|
=
|
|
|
|
c[QQWB.deferred._promiseMethods[d]];
|
|
|
|
return
|
|
|
|
a
|
|
|
|
} }), c.success = c.done,
|
|
|
|
c.error = c.fail,
|
|
|
|
c.complete =
|
|
|
|
c.whatever =
|
|
|
|
c.always,
|
|
|
|
c.done(d.cancel).fail(c.cancel),
|
|
|
|
delete c.cancel, a
|
|
|
|
&& a.call(c,
|
|
|
|
c),
|
|
|
|
c }, when:
|
|
|
|
function(a)
|
|
|
|
{ function
|
|
|
|
f(a)
|
|
|
|
{
|
|
|
|
return
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function(c) { b[a] = arguments.length > 1 ?
|
|
|
|
QQWB.Array.fromArguments(arguments) : c, --d ||
|
|
|
|
e.resolveWith(e,
|
|
|
|
QQWB.Array.fromArguments(b))
|
|
|
|
} } var b = arguments, c = b.length, d = c, e = c <= 1 && a &&
|
|
|
|
QQWB.Function.isFunction(a.promise)
|
|
|
|
?
|
|
|
|
a
|
|
|
|
:
|
|
|
|
QQWB.deferred.deferred();
|
|
|
|
if
|
|
|
|
(c
|
|
|
|
>
|
|
|
|
1)
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
g
|
|
|
|
=
|
|
|
|
0;
|
|
|
|
g
|
|
|
|
<
|
|
|
|
c;
|
|
|
|
g++)
|
|
|
|
b[g]
|
|
|
|
&&
|
|
|
|
QQWB.Function.isFunction(b[g].promise)
|
|
|
|
?
|
|
|
|
b[g].promise().then(f(g),
|
|
|
|
e.reject)
|
|
|
|
:
|
|
|
|
--d,
|
|
|
|
d
|
|
|
|
||
|
|
|
|
e.resolveWith(e,
|
|
|
|
b);
|
|
|
|
else
|
|
|
|
e
|
|
|
|
!==
|
|
|
|
a
|
|
|
|
&&
|
|
|
|
e.resolveWith(e,
|
|
|
|
c
|
|
|
|
?
|
|
|
|
[a]
|
|
|
|
:
|
|
|
|
[]);
|
|
|
|
return
|
|
|
|
e.promise()
|
|
|
|
} }),
|
|
|
|
QQWB._alias(["task",
|
|
|
|
"when"],
|
|
|
|
QQWB.deferred.when),
|
|
|
|
QQWB.extend("io",
|
|
|
|
{
|
|
|
|
_globalIOTimeout:
|
|
|
|
3e4,
|
|
|
|
_IOScript:
|
|
|
|
function(a)
|
|
|
|
{ var b, c,
|
|
|
|
d =
|
|
|
|
document.head
|
|
|
|
||
|
|
|
|
document.getElementsByTagName("head")[0]
|
|
|
|
||
|
|
|
|
document.documentElement;
|
|
|
|
return {
|
|
|
|
send:
|
|
|
|
function(e)
|
|
|
|
{ var f =
|
|
|
|
QQWB.time.now();
|
|
|
|
b =
|
|
|
|
document.createElement("script"),
|
|
|
|
b.async =
|
|
|
|
"async",
|
|
|
|
a.charset &&
|
|
|
|
(b.charset
|
|
|
|
=
|
|
|
|
a.charset),
|
|
|
|
b.src =
|
|
|
|
a.url,
|
|
|
|
c =
|
|
|
|
setTimeout(function()
|
|
|
|
{
|
|
|
|
QQWB.log.warning("script
|
|
|
|
loading
|
|
|
|
timeout"),
|
|
|
|
e(599,
|
|
|
|
"network
|
|
|
|
connect
|
|
|
|
timeout",
|
|
|
|
QQWB.time.now()
|
|
|
|
-
|
|
|
|
f)
|
|
|
|
},
|
|
|
|
QQWB.io._globalIOTimeout),
|
|
|
|
b.onload =
|
|
|
|
b.onreadystatechange
|
|
|
|
=
|
|
|
|
function(a,
|
|
|
|
g)
|
|
|
|
{ if
|
|
|
|
(g
|
|
|
|
||
|
|
|
|
!b.readyState
|
|
|
|
||
|
|
|
|
/loaded|complete/.test(b.readyState))
|
|
|
|
clearTimeout(c),
|
|
|
|
b.onload
|
|
|
|
=
|
|
|
|
b.onreadystatechange
|
|
|
|
=
|
|
|
|
null,
|
|
|
|
d
|
|
|
|
&&
|
|
|
|
b.parentNode
|
|
|
|
&&
|
|
|
|
d.removeChild(b),
|
|
|
|
b
|
|
|
|
=
|
|
|
|
null,
|
|
|
|
!g
|
|
|
|
&&
|
|
|
|
e
|
|
|
|
&&
|
|
|
|
e.apply(QQWB,
|
|
|
|
[200,
|
|
|
|
"success",
|
|
|
|
QQWB.time.now()
|
|
|
|
-
|
|
|
|
f]),
|
|
|
|
g
|
|
|
|
&&
|
|
|
|
e
|
|
|
|
&&
|
|
|
|
e.apply(QQWB,
|
|
|
|
[-1,
|
|
|
|
"aborted",
|
|
|
|
QQWB.time.now()
|
|
|
|
-
|
|
|
|
f])
|
|
|
|
},
|
|
|
|
b.onerror =
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
clearTimeout(c),
|
|
|
|
e
|
|
|
|
&&
|
|
|
|
e.apply(QQWB,
|
|
|
|
[404,
|
|
|
|
a,
|
|
|
|
QQWB.time.now()
|
|
|
|
-
|
|
|
|
f])
|
|
|
|
},
|
|
|
|
d.insertBefore(b,
|
|
|
|
d.firstChild)
|
|
|
|
}, abort:
|
|
|
|
function() {
|
|
|
|
b &&
|
|
|
|
b.onload(0,
|
|
|
|
1)
|
|
|
|
} } },
|
|
|
|
_IOAjax:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
b,
|
|
|
|
c,
|
|
|
|
a
|
|
|
|
=
|
|
|
|
a
|
|
|
|
||
|
|
|
|
{},
|
|
|
|
d
|
|
|
|
=
|
|
|
|
window.XMLHttpRequest
|
|
|
|
?
|
|
|
|
new
|
|
|
|
window.XMLHttpRequest
|
|
|
|
:
|
|
|
|
new
|
|
|
|
window.ActiveXObject("Microsoft.XMLHTTP");
|
|
|
|
return
|
|
|
|
a.async
|
|
|
|
||
|
|
|
|
(a.async
|
|
|
|
=
|
|
|
|
"async"),
|
|
|
|
{
|
|
|
|
send:
|
|
|
|
function(e)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
f
|
|
|
|
=
|
|
|
|
QQWB.time.now();
|
|
|
|
a.username
|
|
|
|
?
|
|
|
|
d.open(a.type,
|
|
|
|
a.url,
|
|
|
|
a.async,
|
|
|
|
a.username,
|
|
|
|
a.password)
|
|
|
|
:
|
|
|
|
d.open(a.type,
|
|
|
|
a.url,
|
|
|
|
a.async);
|
|
|
|
try
|
|
|
|
{
|
|
|
|
a.type
|
|
|
|
==
|
|
|
|
"POST"
|
|
|
|
&&
|
|
|
|
d.setRequestHeader("Content-Type",
|
|
|
|
"application/x-www-form-urlencoded"),
|
|
|
|
d.setRequestHeader("X-Requested-With",
|
|
|
|
"XMLHttpRequest"),
|
|
|
|
d.setRequestHeader("X-Requested-From",
|
|
|
|
"openjs")
|
|
|
|
}
|
|
|
|
catch
|
|
|
|
(g)
|
|
|
|
{}
|
|
|
|
d.send(a.data
|
|
|
|
||
|
|
|
|
null),
|
|
|
|
c
|
|
|
|
=
|
|
|
|
setTimeout(function()
|
|
|
|
{
|
|
|
|
QQWB.log.warning("request
|
|
|
|
timeout"),
|
|
|
|
e(599,
|
|
|
|
"network
|
|
|
|
connect
|
|
|
|
timeout",
|
|
|
|
QQWB.time.now()
|
|
|
|
-
|
|
|
|
f)
|
|
|
|
},
|
|
|
|
QQWB.io._globalIOTimeout),
|
|
|
|
b
|
|
|
|
=
|
|
|
|
function(g,
|
|
|
|
h)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
i,
|
|
|
|
j,
|
|
|
|
k,
|
|
|
|
l,
|
|
|
|
m,
|
|
|
|
n;
|
|
|
|
try
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(b
|
|
|
|
&&
|
|
|
|
(h
|
|
|
|
||
|
|
|
|
d.readyState
|
|
|
|
===
|
|
|
|
4))
|
|
|
|
{
|
|
|
|
b
|
|
|
|
=
|
|
|
|
null;
|
|
|
|
if
|
|
|
|
(h)
|
|
|
|
d.readyState
|
|
|
|
!==
|
|
|
|
4
|
|
|
|
&&
|
|
|
|
d.abort();
|
|
|
|
else
|
|
|
|
{
|
|
|
|
i
|
|
|
|
=
|
|
|
|
d.status,
|
|
|
|
k
|
|
|
|
=
|
|
|
|
d.getAllResponseHeaders(),
|
|
|
|
l
|
|
|
|
=
|
|
|
|
{},
|
|
|
|
n
|
|
|
|
=
|
|
|
|
d.responseXML,
|
|
|
|
n
|
|
|
|
&&
|
|
|
|
n.documentElement
|
|
|
|
&&
|
|
|
|
(l.xml
|
|
|
|
=
|
|
|
|
n),
|
|
|
|
l.text
|
|
|
|
=
|
|
|
|
d.responseText;
|
|
|
|
try
|
|
|
|
{
|
|
|
|
j
|
|
|
|
=
|
|
|
|
d.statusText
|
|
|
|
}
|
|
|
|
catch
|
|
|
|
(o)
|
|
|
|
{
|
|
|
|
j
|
|
|
|
=
|
|
|
|
""
|
|
|
|
}
|
|
|
|
i
|
|
|
|
===
|
|
|
|
1223
|
|
|
|
&&
|
|
|
|
(i
|
|
|
|
=
|
|
|
|
204),
|
|
|
|
a.dataType.toLowerCase()
|
|
|
|
==
|
|
|
|
"json"
|
|
|
|
?
|
|
|
|
m
|
|
|
|
=
|
|
|
|
QQWB.JSON.fromString(l.text)
|
|
|
|
:
|
|
|
|
a.dataType.toLowerCase()
|
|
|
|
==
|
|
|
|
"xml"
|
|
|
|
?
|
|
|
|
m
|
|
|
|
=
|
|
|
|
l.xml
|
|
|
|
:
|
|
|
|
m
|
|
|
|
=
|
|
|
|
l.text
|
|
|
|
}
|
|
|
|
clearTimeout(c),
|
|
|
|
e(i,
|
|
|
|
j,
|
|
|
|
QQWB.time.now()
|
|
|
|
-
|
|
|
|
f,
|
|
|
|
m,
|
|
|
|
l.text,
|
|
|
|
k,
|
|
|
|
a.dataType)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch
|
|
|
|
(p)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
q
|
|
|
|
=
|
|
|
|
p;
|
|
|
|
i
|
|
|
|
=
|
|
|
|
-2,
|
|
|
|
j
|
|
|
|
=
|
|
|
|
"",
|
|
|
|
j
|
|
|
|
+=
|
|
|
|
"Exception
|
|
|
|
[Type:",
|
|
|
|
j
|
|
|
|
+=
|
|
|
|
q
|
|
|
|
&&
|
|
|
|
q.type
|
|
|
|
?
|
|
|
|
q.type
|
|
|
|
:
|
|
|
|
"unknown
|
|
|
|
exception
|
|
|
|
type",
|
|
|
|
j
|
|
|
|
+=
|
|
|
|
",
|
|
|
|
Message:",
|
|
|
|
j
|
|
|
|
+=
|
|
|
|
q
|
|
|
|
&&
|
|
|
|
q.message
|
|
|
|
?
|
|
|
|
q.message
|
|
|
|
:
|
|
|
|
q,
|
|
|
|
j
|
|
|
|
+=
|
|
|
|
"]",
|
|
|
|
QQWB.log.warning("caught
|
|
|
|
"
|
|
|
|
+
|
|
|
|
j
|
|
|
|
+
|
|
|
|
"
|
|
|
|
exception
|
|
|
|
QQWB.io._IOAjax"),
|
|
|
|
h
|
|
|
|
||
|
|
|
|
(clearTimeout(c),
|
|
|
|
e(i,
|
|
|
|
j,
|
|
|
|
QQWB.time.now()
|
|
|
|
-
|
|
|
|
f))
|
|
|
|
}
|
|
|
|
},
|
|
|
|
!a.async
|
|
|
|
||
|
|
|
|
d.readyState
|
|
|
|
===
|
|
|
|
4
|
|
|
|
?
|
|
|
|
b()
|
|
|
|
:
|
|
|
|
d.onreadystatechange
|
|
|
|
=
|
|
|
|
b
|
|
|
|
},
|
|
|
|
abort:
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
b
|
|
|
|
&&
|
|
|
|
b(0,
|
|
|
|
1)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
_IOFlash:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
b,
|
|
|
|
c,
|
|
|
|
d,
|
|
|
|
a
|
|
|
|
=
|
|
|
|
a
|
|
|
|
||
|
|
|
|
{};
|
|
|
|
return
|
|
|
|
{
|
|
|
|
send:
|
|
|
|
function(e)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
f
|
|
|
|
=
|
|
|
|
QQWB.time.now();
|
|
|
|
d
|
|
|
|
=
|
|
|
|
1,
|
|
|
|
c
|
|
|
|
=
|
|
|
|
setTimeout(function()
|
|
|
|
{
|
|
|
|
QQWB.log.warning("request
|
|
|
|
timeout"),
|
|
|
|
e(599,
|
|
|
|
"network
|
|
|
|
connect
|
|
|
|
timeout",
|
|
|
|
QQWB.time.now()
|
|
|
|
-
|
|
|
|
f)
|
|
|
|
},
|
|
|
|
QQWB.io._globalIOTimeout),
|
|
|
|
b
|
|
|
|
=
|
|
|
|
function(d,
|
|
|
|
g)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
h,
|
|
|
|
i,
|
|
|
|
j,
|
|
|
|
k,
|
|
|
|
l,
|
|
|
|
m,
|
|
|
|
n
|
|
|
|
=
|
|
|
|
4;
|
|
|
|
clearTimeout(c);
|
|
|
|
try
|
|
|
|
{
|
|
|
|
b
|
|
|
|
&&
|
|
|
|
(g
|
|
|
|
||
|
|
|
|
n
|
|
|
|
==
|
|
|
|
4)
|
|
|
|
&&
|
|
|
|
(b
|
|
|
|
=
|
|
|
|
null,
|
|
|
|
g
|
|
|
|
?
|
|
|
|
e(-1,
|
|
|
|
"request
|
|
|
|
has
|
|
|
|
aborted",
|
|
|
|
QQWB.time.now()
|
|
|
|
-
|
|
|
|
f)
|
|
|
|
:
|
|
|
|
(h
|
|
|
|
=
|
|
|
|
this.httpStatus,
|
|
|
|
i
|
|
|
|
=
|
|
|
|
this.httpStatus
|
|
|
|
==
|
|
|
|
200
|
|
|
|
?
|
|
|
|
"ok"
|
|
|
|
:
|
|
|
|
"",
|
|
|
|
j
|
|
|
|
=
|
|
|
|
"",
|
|
|
|
k
|
|
|
|
=
|
|
|
|
{},
|
|
|
|
k.text
|
|
|
|
=
|
|
|
|
this.httpResponseText,
|
|
|
|
a.dataType.toLowerCase()
|
|
|
|
==
|
|
|
|
"json"
|
|
|
|
?
|
|
|
|
l
|
|
|
|
=
|
|
|
|
QQWB.JSON.fromString(k.text)
|
|
|
|
:
|
|
|
|
a.dataType.toLowerCase()
|
|
|
|
==
|
|
|
|
"xml"
|
|
|
|
?
|
|
|
|
l
|
|
|
|
=
|
|
|
|
QQWB.XML.fromString(k.text)
|
|
|
|
:
|
|
|
|
l
|
|
|
|
=
|
|
|
|
k.text),
|
|
|
|
e(h,
|
|
|
|
i,
|
|
|
|
QQWB.time.now()
|
|
|
|
-
|
|
|
|
f,
|
|
|
|
l,
|
|
|
|
k.text,
|
|
|
|
j,
|
|
|
|
a.dataType))
|
|
|
|
}
|
|
|
|
catch
|
|
|
|
(o)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
p
|
|
|
|
=
|
|
|
|
o;
|
|
|
|
h
|
|
|
|
=
|
|
|
|
-2,
|
|
|
|
i
|
|
|
|
=
|
|
|
|
"",
|
|
|
|
i
|
|
|
|
+=
|
|
|
|
"Exception
|
|
|
|
[Type:",
|
|
|
|
i
|
|
|
|
+=
|
|
|
|
p
|
|
|
|
&&
|
|
|
|
p.type
|
|
|
|
?
|
|
|
|
p.type
|
|
|
|
:
|
|
|
|
"unknown
|
|
|
|
exception
|
|
|
|
type",
|
|
|
|
i
|
|
|
|
+=
|
|
|
|
",
|
|
|
|
Message:",
|
|
|
|
i
|
|
|
|
+=
|
|
|
|
p
|
|
|
|
&&
|
|
|
|
p.message
|
|
|
|
?
|
|
|
|
p.message
|
|
|
|
:
|
|
|
|
p,
|
|
|
|
i
|
|
|
|
+=
|
|
|
|
"]",
|
|
|
|
QQWB.log.warning("caught
|
|
|
|
"
|
|
|
|
+
|
|
|
|
i
|
|
|
|
+
|
|
|
|
"
|
|
|
|
exception
|
|
|
|
QQWB.io._IOFlash"),
|
|
|
|
g
|
|
|
|
||
|
|
|
|
e(h,
|
|
|
|
i,
|
|
|
|
QQWB.time.now()
|
|
|
|
-
|
|
|
|
f)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
window.onFlashRequestComplete_8df046
|
|
|
|
||
|
|
|
|
(window.onFlashRequestComplete_8df046
|
|
|
|
=
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
if
|
|
|
|
(!a.ticket)
|
|
|
|
{
|
|
|
|
QQWB.log.error("ticket
|
|
|
|
doesn't
|
|
|
|
exists
|
|
|
|
in
|
|
|
|
response,
|
|
|
|
"
|
|
|
|
+
|
|
|
|
QQWB.JSON.stringify(a));
|
|
|
|
return
|
|
|
|
}
|
|
|
|
var
|
|
|
|
b
|
|
|
|
=
|
|
|
|
window.onFlashRequestComplete_8df046.callbacks.getByTicket(a.ticket),
|
|
|
|
c
|
|
|
|
=
|
|
|
|
a.srcEvent;
|
|
|
|
b.readyState
|
|
|
|
||
|
|
|
|
(b.readyState
|
|
|
|
=
|
|
|
|
0),
|
|
|
|
/httpStatus/i.test(c.type)
|
|
|
|
?
|
|
|
|
(b.httpStatus
|
|
|
|
=
|
|
|
|
c.status,
|
|
|
|
b.readyState++)
|
|
|
|
:
|
|
|
|
/error/i.test(c.type)
|
|
|
|
?
|
|
|
|
(b.httpError
|
|
|
|
=
|
|
|
|
c.type,
|
|
|
|
b.readyState++)
|
|
|
|
:
|
|
|
|
/complete/i.test(c.type)
|
|
|
|
&&
|
|
|
|
(b.httpResponseText
|
|
|
|
=
|
|
|
|
c.target.data,
|
|
|
|
b.readyState++),
|
|
|
|
b.readyState
|
|
|
|
==
|
|
|
|
2
|
|
|
|
&&
|
|
|
|
(b.call(b),
|
|
|
|
window.onFlashRequestComplete_8df046.callbacks.unregister(a.ticket))
|
|
|
|
},
|
|
|
|
window.onFlashRequestComplete_8df046.callbacks
|
|
|
|
=
|
|
|
|
{
|
|
|
|
_callbackPool:
|
|
|
|
{},
|
|
|
|
_ticketPrefix:
|
|
|
|
"openjstkt",
|
|
|
|
_ticketStartIndex:
|
|
|
|
0,
|
|
|
|
register:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
b;
|
|
|
|
return
|
|
|
|
this._ticketStartIndex++,
|
|
|
|
b
|
|
|
|
=
|
|
|
|
this._ticketPrefix
|
|
|
|
+
|
|
|
|
this._ticketStartIndex,
|
|
|
|
this._callbackPool[b]
|
|
|
|
=
|
|
|
|
a,
|
|
|
|
b
|
|
|
|
},
|
|
|
|
getByTicket:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
this._callbackPool[a]
|
|
|
|
||
|
|
|
|
QQWB.log.error("get
|
|
|
|
callback
|
|
|
|
failed,
|
|
|
|
callback
|
|
|
|
doesn't
|
|
|
|
exist
|
|
|
|
at
|
|
|
|
ticket
|
|
|
|
"
|
|
|
|
+
|
|
|
|
a),
|
|
|
|
this._callbackPool[a]
|
|
|
|
},
|
|
|
|
unregister:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
this._callbackPool[a]
|
|
|
|
?
|
|
|
|
(delete
|
|
|
|
this._callbackPool[a],
|
|
|
|
!0)
|
|
|
|
:
|
|
|
|
(QQWB.log.error("unregister
|
|
|
|
callback
|
|
|
|
failed,
|
|
|
|
callback
|
|
|
|
doesn't
|
|
|
|
exist
|
|
|
|
at
|
|
|
|
ticket
|
|
|
|
"
|
|
|
|
+
|
|
|
|
a),
|
|
|
|
!1)
|
|
|
|
}
|
|
|
|
}),
|
|
|
|
QQWBFlashTransport
|
|
|
|
&&
|
|
|
|
QQWBFlashTransport.httpRequest
|
|
|
|
?
|
|
|
|
QQWBFlashTransport.httpRequest(a.url,
|
|
|
|
a.data,
|
|
|
|
a.type,
|
|
|
|
window.onFlashRequestComplete_8df046.callbacks.register(b))
|
|
|
|
:
|
|
|
|
QQWB.log.critical("flash
|
|
|
|
transportation
|
|
|
|
object
|
|
|
|
error"
|
|
|
|
+
|
|
|
|
QQWBFlashTransportName)
|
|
|
|
},
|
|
|
|
abort:
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
b
|
|
|
|
&&
|
|
|
|
b(0,
|
|
|
|
1)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
_apiAjax:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c,
|
|
|
|
d)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
e
|
|
|
|
=
|
|
|
|
{
|
|
|
|
type:
|
|
|
|
d.toUpperCase(),
|
|
|
|
url:
|
|
|
|
QQWB._domain.api
|
|
|
|
+
|
|
|
|
a,
|
|
|
|
data:
|
|
|
|
QQWB.queryString.encode(b),
|
|
|
|
dataType:
|
|
|
|
c
|
|
|
|
};
|
|
|
|
return
|
|
|
|
e.type
|
|
|
|
==
|
|
|
|
"GET"
|
|
|
|
&&
|
|
|
|
(e.url
|
|
|
|
+=
|
|
|
|
e.data
|
|
|
|
?
|
|
|
|
"?"
|
|
|
|
+
|
|
|
|
e.data
|
|
|
|
:
|
|
|
|
"",
|
|
|
|
delete
|
|
|
|
e.data),
|
|
|
|
QQWB.io.ajax(e)
|
|
|
|
},
|
|
|
|
_apiFlashAjax:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c,
|
|
|
|
d)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
e
|
|
|
|
=
|
|
|
|
{
|
|
|
|
type:
|
|
|
|
d.toUpperCase(),
|
|
|
|
url:
|
|
|
|
QQWB._domain.api
|
|
|
|
+
|
|
|
|
a,
|
|
|
|
data:
|
|
|
|
QQWB.queryString.encode(b),
|
|
|
|
dataType:
|
|
|
|
c
|
|
|
|
};
|
|
|
|
return
|
|
|
|
e.type
|
|
|
|
==
|
|
|
|
"GET"
|
|
|
|
&&
|
|
|
|
(e.url
|
|
|
|
+=
|
|
|
|
e.data
|
|
|
|
?
|
|
|
|
"?"
|
|
|
|
+
|
|
|
|
e.data
|
|
|
|
:
|
|
|
|
"",
|
|
|
|
delete
|
|
|
|
e.data),
|
|
|
|
QQWB.io.flashAjax(e)
|
|
|
|
},
|
|
|
|
_apiResponder:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function(b, c, d, e, f, g, h) { var i, j; b !== 200 ? (b = 2e6 +
|
|
|
|
Math.abs(b ? b : 0), a.reject(b, c, d, "")) : typeof(i
|
|
|
|
= QQWB._apiProvider._apiParseRetCode(f)) == "number" &&
|
|
|
|
0 !== i ? (j =
|
|
|
|
QQWB._apiProvider._apiParseErrorCode(f),
|
|
|
|
b = 1e6 + i * 1e3 + 500 + (j ?
|
|
|
|
j : 0), a.reject(b,
|
|
|
|
QQWB._apiProvider._apiGetErrorMessage(i,
|
|
|
|
j), d,
|
|
|
|
f)) :
|
|
|
|
a.resolve(b, c, d, e, g, h) } },
|
|
|
|
_ajaxResponder:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function(b, c, d, e, f, g, h) { b !== 200 ? a.reject(b, c, d, "") :
|
|
|
|
a.resolve(e, d, f) } }, flashAjax: function(a) { var b =
|
|
|
|
QQWB.deferred.deferred(), c = { type: "get", dataType:
|
|
|
|
"json" }; return QQWB.extend(c, a, !0),
|
|
|
|
QQWB.io._IOFlash(c).send(QQWB.io._apiResponder(b)),
|
|
|
|
b.promise() }, ajax: function(a) { var b =
|
|
|
|
QQWB.deferred.deferred(), c = { type: "get",
|
|
|
|
dataType: "json" }; return
|
|
|
|
QQWB.extend(c, a, !0),
|
|
|
|
QQWB.io._IOAjax(c).send(QQWB.io._apiResponder(b)),
|
|
|
|
b.promise() }, ajax2: function(a) { var
|
|
|
|
b = QQWB.deferred.deferred(), c
|
|
|
|
= { type: "get",
|
|
|
|
dataType:
|
|
|
|
"json"
|
|
|
|
}; return
|
|
|
|
QQWB.extend(c, a, !0),
|
|
|
|
QQWB.io._IOAjax(c).send(QQWB._ajaxResponder(b)),
|
|
|
|
b.promise() }, script:
|
|
|
|
function(a, b)
|
|
|
|
{ var b = b ||
|
|
|
|
"utf-8",
|
|
|
|
c =
|
|
|
|
QQWB.deferred.deferred();
|
|
|
|
return
|
|
|
|
QQWB.io._IOScript({
|
|
|
|
charset:
|
|
|
|
b,
|
|
|
|
url:
|
|
|
|
a
|
|
|
|
}).send(function(a,
|
|
|
|
b,
|
|
|
|
d)
|
|
|
|
{
|
|
|
|
a
|
|
|
|
!==
|
|
|
|
200
|
|
|
|
?
|
|
|
|
c.reject(a,
|
|
|
|
b,
|
|
|
|
d)
|
|
|
|
:
|
|
|
|
c.resolve(a,
|
|
|
|
b,
|
|
|
|
d)
|
|
|
|
}),
|
|
|
|
c.promise()
|
|
|
|
}, jsonp:
|
|
|
|
function(a) { var b =
|
|
|
|
QQWB.deferred.deferred(),
|
|
|
|
c = "callback", d =
|
|
|
|
"jsonp_", e = d
|
|
|
|
+ QQWB.uid(), f
|
|
|
|
=
|
|
|
|
window.callbackName,
|
|
|
|
g, h = { dataType:
|
|
|
|
"text",
|
|
|
|
charset:
|
|
|
|
"utf-8",
|
|
|
|
url: "" };
|
|
|
|
return QQWB.extend(h,
|
|
|
|
a, !0),
|
|
|
|
h.data && (h.url
|
|
|
|
+=
|
|
|
|
"?"
|
|
|
|
+
|
|
|
|
h.data
|
|
|
|
+
|
|
|
|
"&"
|
|
|
|
+
|
|
|
|
c
|
|
|
|
+
|
|
|
|
"="
|
|
|
|
+
|
|
|
|
e),
|
|
|
|
window[e] =
|
|
|
|
function(a)
|
|
|
|
{ var c
|
|
|
|
=
|
|
|
|
a;
|
|
|
|
h.dataType.toLowerCase()
|
|
|
|
===
|
|
|
|
"json"
|
|
|
|
?
|
|
|
|
c
|
|
|
|
=
|
|
|
|
QQWB.JSON.fromString(a)
|
|
|
|
:
|
|
|
|
h.dataType.toLowerCase()
|
|
|
|
===
|
|
|
|
"xml"
|
|
|
|
&&
|
|
|
|
(c
|
|
|
|
=
|
|
|
|
QQWB.XML.fromString(a)),
|
|
|
|
b.resolve(c,
|
|
|
|
g),
|
|
|
|
window[e]
|
|
|
|
=
|
|
|
|
f
|
|
|
|
},
|
|
|
|
QQWB.io._IOScript(h).send(function(a,
|
|
|
|
c,
|
|
|
|
d)
|
|
|
|
{
|
|
|
|
a
|
|
|
|
!== 200
|
|
|
|
&&
|
|
|
|
b.reject(a,
|
|
|
|
c,
|
|
|
|
d),
|
|
|
|
g = d }),
|
|
|
|
b.promise() }
|
|
|
|
}),
|
|
|
|
QQWB._alias("ajax",
|
|
|
|
QQWB.io.ajax2),
|
|
|
|
QQWB._alias("jsonp",
|
|
|
|
QQWB.io.jsonp),
|
|
|
|
QQWB._alias("script",
|
|
|
|
QQWB.io.script),
|
|
|
|
QQWB.extend("_token",
|
|
|
|
{
|
|
|
|
setAccessToken:
|
|
|
|
function(a,
|
|
|
|
b,
|
|
|
|
c,
|
|
|
|
d)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
e
|
|
|
|
=
|
|
|
|
this.getTokenUser(!0);
|
|
|
|
return
|
|
|
|
QQWB.cookie.set(QQWB._cookie.names.accessToken,
|
|
|
|
[a,
|
|
|
|
QQWB.time.now()
|
|
|
|
+
|
|
|
|
b
|
|
|
|
*
|
|
|
|
1e3,
|
|
|
|
c
|
|
|
|
||
|
|
|
|
e
|
|
|
|
&&
|
|
|
|
e.name
|
|
|
|
||
|
|
|
|
"",
|
|
|
|
d
|
|
|
|
||
|
|
|
|
e
|
|
|
|
&&
|
|
|
|
e.nick
|
|
|
|
||
|
|
|
|
""].join("|"),
|
|
|
|
31536e3,
|
|
|
|
QQWB._cookie.path,
|
|
|
|
QQWB._cookie.domain),
|
|
|
|
QQWB
|
|
|
|
},
|
|
|
|
getAccessToken:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
b
|
|
|
|
=
|
|
|
|
QQWB.cookie.get(QQWB._cookie.names.accessToken);
|
|
|
|
if
|
|
|
|
(b)
|
|
|
|
{
|
|
|
|
b
|
|
|
|
=
|
|
|
|
b.split("|",
|
|
|
|
2);
|
|
|
|
if
|
|
|
|
(a
|
|
|
|
||
|
|
|
|
parseInt(b[1],
|
|
|
|
10)
|
|
|
|
>
|
|
|
|
QQWB.time.now())
|
|
|
|
return
|
|
|
|
b[0]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
getTokenUser:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
b
|
|
|
|
=
|
|
|
|
QQWB.cookie.get(QQWB._cookie.names.accessToken);
|
|
|
|
if
|
|
|
|
(b)
|
|
|
|
{
|
|
|
|
b
|
|
|
|
=
|
|
|
|
b.split("|",
|
|
|
|
4);
|
|
|
|
if
|
|
|
|
(a
|
|
|
|
||
|
|
|
|
parseInt(b[1],
|
|
|
|
10)
|
|
|
|
>
|
|
|
|
QQWB.time.now())
|
|
|
|
return
|
|
|
|
{
|
|
|
|
name:
|
|
|
|
b[2],
|
|
|
|
nick:
|
|
|
|
b[3]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
clearAccessToken:
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
return
|
|
|
|
QQWB.cookie.del(QQWB._cookie.names.accessToken,
|
|
|
|
QQWB._cookie.path,
|
|
|
|
QQWB._cookie.domain),
|
|
|
|
QQWB
|
|
|
|
},
|
|
|
|
setRefreshToken:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
QQWB.cookie.set(QQWB._cookie.names.refreshToken,
|
|
|
|
a,
|
|
|
|
31536e3,
|
|
|
|
QQWB._cookie.path,
|
|
|
|
QQWB._cookie.domain),
|
|
|
|
QQWB
|
|
|
|
},
|
|
|
|
getRefreshToken:
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
return
|
|
|
|
QQWB.cookie.get(QQWB._cookie.names.refreshToken)
|
|
|
|
},
|
|
|
|
clearRefreshToken:
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
return
|
|
|
|
QQWB.cookie.del(QQWB._cookie.names.refreshToken,
|
|
|
|
QQWB._cookie.path,
|
|
|
|
QQWB._cookie.domain),
|
|
|
|
QQWB
|
|
|
|
},
|
|
|
|
exchangeForToken:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
QQWB.io.jsonp({
|
|
|
|
url:
|
|
|
|
QQWB._domain.exchange,
|
|
|
|
data:
|
|
|
|
QQWB.queryString.encode({
|
|
|
|
response_type:
|
|
|
|
"token",
|
|
|
|
client_id:
|
|
|
|
QQWB.appkey.value,
|
|
|
|
scope:
|
|
|
|
"all",
|
|
|
|
state:
|
|
|
|
"1",
|
|
|
|
refresh_token:
|
|
|
|
this.getRefreshToken(),
|
|
|
|
access_token:
|
|
|
|
this.getAccessToken(!0)
|
|
|
|
})
|
|
|
|
}).success(function(a)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
b
|
|
|
|
=
|
|
|
|
a;
|
|
|
|
QQWB.String.isString(a)
|
|
|
|
&&
|
|
|
|
(a
|
|
|
|
=
|
|
|
|
QQWB.queryString.decode(a)),
|
|
|
|
a.access_token
|
|
|
|
?
|
|
|
|
(!a.expires_in
|
|
|
|
&&
|
|
|
|
QQWB.log.error("token
|
|
|
|
expires_in
|
|
|
|
not
|
|
|
|
retrieved"),
|
|
|
|
!a.wb_name
|
|
|
|
&&
|
|
|
|
QQWB.log.warning("weibo
|
|
|
|
username
|
|
|
|
not
|
|
|
|
retrieved,
|
|
|
|
will
|
|
|
|
not
|
|
|
|
update
|
|
|
|
username"),
|
|
|
|
!a.wb_nick
|
|
|
|
&&
|
|
|
|
QQWB.log.warning("weibo
|
|
|
|
usernick
|
|
|
|
not
|
|
|
|
retrieved,
|
|
|
|
will
|
|
|
|
not
|
|
|
|
update
|
|
|
|
usernick"),
|
|
|
|
QQWB._token.setAccessToken(a.access_token,
|
|
|
|
parseInt(a.expires_in,
|
|
|
|
10),
|
|
|
|
a.wb_name,
|
|
|
|
a.wb_nick),
|
|
|
|
a.refresh_token
|
|
|
|
?
|
|
|
|
QQWB._token.setRefreshToken(a.refresh_token)
|
|
|
|
:
|
|
|
|
QQWB.log.error("refresh
|
|
|
|
token
|
|
|
|
not
|
|
|
|
retrieved"),
|
|
|
|
QQWB.log.info("exchange
|
|
|
|
token
|
|
|
|
succeed"))
|
|
|
|
:
|
|
|
|
a.error
|
|
|
|
?
|
|
|
|
QQWB.log.error("exchange
|
|
|
|
token
|
|
|
|
error
|
|
|
|
"
|
|
|
|
+
|
|
|
|
a.error)
|
|
|
|
:
|
|
|
|
QQWB.log.error("unexpected
|
|
|
|
result
|
|
|
|
returned
|
|
|
|
from
|
|
|
|
server
|
|
|
|
"
|
|
|
|
+
|
|
|
|
b
|
|
|
|
+
|
|
|
|
"
|
|
|
|
while
|
|
|
|
exchanging
|
|
|
|
for
|
|
|
|
new
|
|
|
|
access
|
|
|
|
token")
|
|
|
|
}).error(function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
a
|
|
|
|
===
|
|
|
|
404
|
|
|
|
?
|
|
|
|
QQWB.log.error("exchange
|
|
|
|
token
|
|
|
|
has
|
|
|
|
failed,
|
|
|
|
script
|
|
|
|
not
|
|
|
|
found")
|
|
|
|
:
|
|
|
|
QQWB.log.error("exchange
|
|
|
|
token
|
|
|
|
has
|
|
|
|
failed,
|
|
|
|
"
|
|
|
|
+
|
|
|
|
b)
|
|
|
|
}).complete(function(b,
|
|
|
|
c,
|
|
|
|
d)
|
|
|
|
{
|
|
|
|
a
|
|
|
|
&&
|
|
|
|
a.apply(QQWB,
|
|
|
|
[b,
|
|
|
|
c,
|
|
|
|
d])
|
|
|
|
}),
|
|
|
|
QQWB
|
|
|
|
},
|
|
|
|
getNewAccessToken:
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
QQWB.io.jsonp({
|
|
|
|
url:
|
|
|
|
QQWB._domain.query,
|
|
|
|
data:
|
|
|
|
QQWB.queryString.encode({
|
|
|
|
response_type:
|
|
|
|
"token",
|
|
|
|
client_id:
|
|
|
|
QQWB.appkey.value,
|
|
|
|
scope:
|
|
|
|
"all",
|
|
|
|
state:
|
|
|
|
"1"
|
|
|
|
})
|
|
|
|
}).success(function(a)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
b
|
|
|
|
=
|
|
|
|
a;
|
|
|
|
QQWB.String.isString(a)
|
|
|
|
&&
|
|
|
|
(a
|
|
|
|
=
|
|
|
|
QQWB.queryString.decode(a)),
|
|
|
|
a.access_token
|
|
|
|
?
|
|
|
|
(!a.expires_in
|
|
|
|
&&
|
|
|
|
QQWB.log.error("token
|
|
|
|
expires_in
|
|
|
|
not
|
|
|
|
retrieved"),
|
|
|
|
!a.wb_name
|
|
|
|
&&
|
|
|
|
QQWB.log.warning("weibo
|
|
|
|
username
|
|
|
|
not
|
|
|
|
retrieved"),
|
|
|
|
!a.wb_nick
|
|
|
|
&&
|
|
|
|
QQWB.log.warning("weibo
|
|
|
|
usernick
|
|
|
|
not
|
|
|
|
retrieved"),
|
|
|
|
QQWB._token.setAccessToken(a.access_token,
|
|
|
|
parseInt(a.expires_in,
|
|
|
|
10),
|
|
|
|
a.wb_name,
|
|
|
|
a.wb_nick),
|
|
|
|
a.refresh_token
|
|
|
|
?
|
|
|
|
QQWB._token.setRefreshToken(a.refresh_token)
|
|
|
|
:
|
|
|
|
QQWB.log.error("refresh
|
|
|
|
token
|
|
|
|
not
|
|
|
|
retrieved"),
|
|
|
|
QQWB.log.info("retrieve
|
|
|
|
new
|
|
|
|
access
|
|
|
|
token
|
|
|
|
succeed"))
|
|
|
|
:
|
|
|
|
a.error
|
|
|
|
?
|
|
|
|
QQWB.log.error("retrieve
|
|
|
|
new
|
|
|
|
access
|
|
|
|
token
|
|
|
|
error
|
|
|
|
"
|
|
|
|
+
|
|
|
|
a.error)
|
|
|
|
:
|
|
|
|
QQWB.log.error("unexpected
|
|
|
|
result
|
|
|
|
returned
|
|
|
|
from
|
|
|
|
server
|
|
|
|
"
|
|
|
|
+
|
|
|
|
b
|
|
|
|
+
|
|
|
|
"
|
|
|
|
while
|
|
|
|
retrieving
|
|
|
|
new
|
|
|
|
access
|
|
|
|
token")
|
|
|
|
}).error(function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
a
|
|
|
|
===
|
|
|
|
404
|
|
|
|
?
|
|
|
|
QQWB.log.error("get
|
|
|
|
token
|
|
|
|
has
|
|
|
|
failed,
|
|
|
|
script
|
|
|
|
not
|
|
|
|
found")
|
|
|
|
:
|
|
|
|
QQWB.log.error("get
|
|
|
|
token
|
|
|
|
failed,
|
|
|
|
"
|
|
|
|
+
|
|
|
|
b)
|
|
|
|
}).complete(function(b,
|
|
|
|
c,
|
|
|
|
d)
|
|
|
|
{
|
|
|
|
a
|
|
|
|
&&
|
|
|
|
a.apply(QQWB,
|
|
|
|
[b,
|
|
|
|
c,
|
|
|
|
d])
|
|
|
|
}),
|
|
|
|
QQWB
|
|
|
|
},
|
|
|
|
resolveResponse:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
c,
|
|
|
|
d
|
|
|
|
=
|
|
|
|
(b
|
|
|
|
||
|
|
|
|
window).QQWB,
|
|
|
|
e
|
|
|
|
=
|
|
|
|
QQWB.String.isString(a)
|
|
|
|
?
|
|
|
|
d.queryString.decode(a)
|
|
|
|
:
|
|
|
|
a;
|
|
|
|
e.access_token
|
|
|
|
?
|
|
|
|
(d._token.setAccessToken(e.access_token,
|
|
|
|
parseInt(e.expires_in,
|
|
|
|
10),
|
|
|
|
e.wb_name,
|
|
|
|
e.wb_nick),
|
|
|
|
e.refresh_token
|
|
|
|
?
|
|
|
|
d._token.setRefreshToken(e.refresh_token)
|
|
|
|
:
|
|
|
|
d.log.error("refresh
|
|
|
|
token
|
|
|
|
not
|
|
|
|
retrieved"),
|
|
|
|
c
|
|
|
|
=
|
|
|
|
d.loginStatus(),
|
|
|
|
d.log.info("user
|
|
|
|
"
|
|
|
|
+
|
|
|
|
c.name
|
|
|
|
+
|
|
|
|
"
|
|
|
|
logged
|
|
|
|
in"),
|
|
|
|
d.trigger(d.events.USER_LOGGEDIN_EVENT,
|
|
|
|
c))
|
|
|
|
:
|
|
|
|
e.error
|
|
|
|
?
|
|
|
|
(d.log.error("login
|
|
|
|
error
|
|
|
|
occurred
|
|
|
|
"
|
|
|
|
+
|
|
|
|
e.error),
|
|
|
|
e.message
|
|
|
|
=
|
|
|
|
e.error,
|
|
|
|
d.trigger(d.events.USER_LOGIN_FAILED_EVENT,
|
|
|
|
e))
|
|
|
|
:
|
|
|
|
(d.log.error("unexpected
|
|
|
|
result
|
|
|
|
returned
|
|
|
|
from
|
|
|
|
server
|
|
|
|
"
|
|
|
|
+
|
|
|
|
a),
|
|
|
|
e.message
|
|
|
|
=
|
|
|
|
e.error
|
|
|
|
=
|
|
|
|
"server
|
|
|
|
error",
|
|
|
|
d.trigger(d.events.USER_LOGIN_FAILED_EVENT,
|
|
|
|
e))
|
|
|
|
}
|
|
|
|
}),
|
|
|
|
QQWB.extend("_eventProvider",
|
|
|
|
{
|
|
|
|
_getEventsMap:
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
return
|
|
|
|
this._eventsMap
|
|
|
|
||
|
|
|
|
(this._eventsMap
|
|
|
|
=
|
|
|
|
{}),
|
|
|
|
this._eventsMap
|
|
|
|
},
|
|
|
|
bind:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
c
|
|
|
|
=
|
|
|
|
this._getEventsMap();
|
|
|
|
c[a]
|
|
|
|
?
|
|
|
|
QQWB.Array.inArray(c[a],
|
|
|
|
b)
|
|
|
|
||
|
|
|
|
c[a].push(b)
|
|
|
|
:
|
|
|
|
c[a]
|
|
|
|
=
|
|
|
|
[b]
|
|
|
|
},
|
|
|
|
unbind:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
c
|
|
|
|
=
|
|
|
|
this._getEventsMap()[a];
|
|
|
|
if
|
|
|
|
(c)
|
|
|
|
if
|
|
|
|
(b)
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
d
|
|
|
|
=
|
|
|
|
0,
|
|
|
|
e
|
|
|
|
=
|
|
|
|
c.length;
|
|
|
|
d
|
|
|
|
<
|
|
|
|
e;
|
|
|
|
d++)
|
|
|
|
b
|
|
|
|
===
|
|
|
|
c[d]
|
|
|
|
&&
|
|
|
|
(c[d]
|
|
|
|
=
|
|
|
|
null);
|
|
|
|
else
|
|
|
|
delete
|
|
|
|
this._getEventsMap()[a]
|
|
|
|
},
|
|
|
|
trigger:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
c
|
|
|
|
=
|
|
|
|
this._getEventsMap()[a];
|
|
|
|
if
|
|
|
|
(c)
|
|
|
|
for
|
|
|
|
(var
|
|
|
|
d
|
|
|
|
=
|
|
|
|
0,
|
|
|
|
e
|
|
|
|
=
|
|
|
|
c.length;
|
|
|
|
d
|
|
|
|
<
|
|
|
|
e;
|
|
|
|
d++)
|
|
|
|
{
|
|
|
|
var
|
|
|
|
f
|
|
|
|
=
|
|
|
|
c[d];
|
|
|
|
f
|
|
|
|
&&
|
|
|
|
f.call(QQWB,
|
|
|
|
b)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}),
|
|
|
|
QQWB.extend("",
|
|
|
|
{
|
|
|
|
bind:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a
|
|
|
|
=
|
|
|
|
a.toLowerCase(),
|
|
|
|
this._eventProvider.bind(a,
|
|
|
|
b),
|
|
|
|
this
|
|
|
|
},
|
|
|
|
once:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
a
|
|
|
|
=
|
|
|
|
a.toLowerCase();
|
|
|
|
var
|
|
|
|
c
|
|
|
|
=
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
var
|
|
|
|
d
|
|
|
|
=
|
|
|
|
QQWB.Array.fromArguments(arguments);
|
|
|
|
b.apply(QQWB,
|
|
|
|
d),
|
|
|
|
this._eventProvider.unbind(a,
|
|
|
|
c),
|
|
|
|
c
|
|
|
|
=
|
|
|
|
null
|
|
|
|
};
|
|
|
|
return
|
|
|
|
this._eventProvider.bind(a,
|
|
|
|
c),
|
|
|
|
this
|
|
|
|
},
|
|
|
|
unbind:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a
|
|
|
|
=
|
|
|
|
a.toLowerCase(),
|
|
|
|
this._eventProvider.unbind(a,
|
|
|
|
b),
|
|
|
|
this
|
|
|
|
},
|
|
|
|
trigger:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
a
|
|
|
|
=
|
|
|
|
a.toLowerCase(),
|
|
|
|
this._eventProvider.trigger(a,
|
|
|
|
b),
|
|
|
|
this
|
|
|
|
}
|
|
|
|
}),
|
|
|
|
QQWB.extend("events",
|
|
|
|
{
|
|
|
|
USER_LOGGEDIN_EVENT:
|
|
|
|
"UserLoggedIn",
|
|
|
|
USER_LOGIN_FAILED_EVENT:
|
|
|
|
"UserLoginFailed",
|
|
|
|
USER_LOGGEDOUT_EVENT:
|
|
|
|
"UserLoggedOut",
|
|
|
|
TOKEN_READY_EVENT:
|
|
|
|
"tokenReady",
|
|
|
|
DOCUMENT_READY_EVENT:
|
|
|
|
"documentReady",
|
|
|
|
EVERYTHING_READY_EVENT:
|
|
|
|
"everythingReady"
|
|
|
|
}),
|
|
|
|
function()
|
|
|
|
{ function j(a) { a = a.toLowerCase(); var b = e.exec(a) || d.exec(a) ||
|
|
|
|
c.exec(a) || a.indexOf("compatible") < 0 && f.exec(a) || []; return {
|
|
|
|
browser: b[1] || "unknown", version: b[2] || "0" } }
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function k() { for (var a in i) i.hasOwnProperty(a) && i[a]() && (g[a] =
|
|
|
|
!0) }
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function l() { var a = navigator.userAgent || navigator.vendor ||
|
|
|
|
window.opera; return
|
|
|
|
/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge
|
|
|
|
|maemo|midp|mmp|opera m(ob|in)i|palm(
|
|
|
|
os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows
|
|
|
|
(ce|phone)|xda|xiino/i.test(a) ||
|
|
|
|
/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a
|
|
|
|
wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r
|
|
|
|
|s)|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1
|
|
|
|
u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(
|
|
|
|
i|ip)|hs\-c|ht(c(\-|
|
|
|
|
|_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(
|
|
|
|
|\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(
|
|
|
|
|\/)|klon|kpt
|
|
|
|
|kwc\-|kyo(c|k)|le(no|xi)|lg(
|
|
|
|
g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-|
|
|
|
|
|o|v)|zz)|mt(50|p1|v)|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v)|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-|)|webc|whit|wi(g
|
|
|
|
|nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i.test(a.substr(0,
|
|
|
|
4))
|
|
|
|
? {
|
|
|
|
mobile:
|
|
|
|
!0
|
|
|
|
} :
|
|
|
|
{ pc: !0 } }
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function m() { var a = navigator.appVersion, b = {}, c = "unknown"; return
|
|
|
|
a.indexOf("Win") != -1 && (c = "windows"), a.indexOf("Mac") != -1
|
|
|
|
&& (c = "mac"), a.indexOf("X11") != -1 && (c = "unix"),
|
|
|
|
a.indexOf("Linux") != -1 && (c = "linux"), b[c] = !0, b } var a, b
|
|
|
|
= navigator.userAgent, c = /(msie) ([\w.]+)/, d =
|
|
|
|
/(opera)(?:.*version)?[ \/]([\w.]+)/, e = /(webkit)[
|
|
|
|
\/]([\w.]+)/, f = /(mozilla)(?:.*? rv:([\w.]+))?/, g = {},
|
|
|
|
h = ["Webkit", "Moz", "O", "ms", "khtml"], i = { cookie: function()
|
|
|
|
{ var a = navigator.cookieEnabled; if (a &&
|
|
|
|
QQWB.browser.webkit) { var b =
|
|
|
|
"COOKIE_TEST_" + QQWB.uid();
|
|
|
|
document.cookie = b + "=" + 1 + ";
|
|
|
|
domain=; path=;",
|
|
|
|
document.cookie.indexOf(b)
|
|
|
|
< 0 ? a = !1 :
|
|
|
|
document.cookie = b
|
|
|
|
+ "=" + ";
|
|
|
|
expires=" + (new Date(1970, 1,
|
|
|
|
1)).toUTCString() + ";
|
|
|
|
domain=; path=;" } return !a &&
|
|
|
|
QQWB.log.critical("Your
|
|
|
|
browser
|
|
|
|
doesn't
|
|
|
|
support
|
|
|
|
cookie or
|
|
|
|
cookie
|
|
|
|
isn't
|
|
|
|
enabled"),
|
|
|
|
a }, flash: function() { if
|
|
|
|
(typeof
|
|
|
|
navigator.plugins
|
|
|
|
!= "undefined" &&
|
|
|
|
typeof
|
|
|
|
navigator.plugins["Shockwave
|
|
|
|
Flash"] ==
|
|
|
|
"object") { var a
|
|
|
|
=
|
|
|
|
navigator.plugins["Shockwave
|
|
|
|
Flash"].description,
|
|
|
|
b = typeof
|
|
|
|
navigator.mimeTypes
|
|
|
|
!=
|
|
|
|
"undefined"
|
|
|
|
&&
|
|
|
|
navigator.mimeTypes["application/x-shockwave-flash"]
|
|
|
|
&&
|
|
|
|
navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin;
|
|
|
|
return a
|
|
|
|
&&
|
|
|
|
b
|
|
|
|
} if (typeof
|
|
|
|
window.ActiveXObject
|
|
|
|
!=
|
|
|
|
"undefined")
|
|
|
|
try { var c = new
|
|
|
|
ActiveXObject("ShockwaveFlash.ShockwaveFlash");
|
|
|
|
if (c)
|
|
|
|
return
|
|
|
|
c.getVariable("$version")
|
|
|
|
} catch (d) {} },
|
|
|
|
userdata: function() {
|
|
|
|
return
|
|
|
|
QQWB.browser.msie
|
|
|
|
}, postmessage: function()
|
|
|
|
{ return !!window.postMessage &&
|
|
|
|
(QQWB.browser.msie &&
|
|
|
|
parseInt(QQWB.browser.version,
|
|
|
|
10) < 8 ? !1 : !0)
|
|
|
|
}, canvas: function() { var a =
|
|
|
|
document.createElement("canvas");
|
|
|
|
return !!a.getContext && !!
|
|
|
|
a.getContext("2d")
|
|
|
|
}, webgl: function() { return
|
|
|
|
!!window.WebGLRenderingContext
|
|
|
|
}, geolocation: function() { return
|
|
|
|
!!navigator.geolocation },
|
|
|
|
websqldatabase: function()
|
|
|
|
{ return
|
|
|
|
!!window.openDatabase
|
|
|
|
}, indexeddb: function() {
|
|
|
|
for (var a = 0, b =
|
|
|
|
h.length;
|
|
|
|
a <
|
|
|
|
b;
|
|
|
|
a++)
|
|
|
|
if
|
|
|
|
(window[h[a].toLowerCase()
|
|
|
|
+
|
|
|
|
"IndexedDB"])
|
|
|
|
return
|
|
|
|
!0;
|
|
|
|
return
|
|
|
|
!!window.indexedDB
|
|
|
|
}, websocket: function() {
|
|
|
|
for (var a = 0, b =
|
|
|
|
h.length;
|
|
|
|
a <
|
|
|
|
b;
|
|
|
|
a++)
|
|
|
|
if
|
|
|
|
(window[h[a].toLowerCase()
|
|
|
|
+
|
|
|
|
"WebSocket"])
|
|
|
|
return
|
|
|
|
!0;
|
|
|
|
return
|
|
|
|
!!window.WebSocket
|
|
|
|
}, localstorage: function()
|
|
|
|
{ return
|
|
|
|
window.localStorage
|
|
|
|
&&
|
|
|
|
localStorage.getItem
|
|
|
|
}, sessionstorage:
|
|
|
|
function() { return
|
|
|
|
window.sessionStorage
|
|
|
|
&&
|
|
|
|
sessionStorage.getItem
|
|
|
|
}, webworker: function() {
|
|
|
|
return
|
|
|
|
!!window.Worker
|
|
|
|
}, applicationcache:
|
|
|
|
function() { return
|
|
|
|
!!window.applicationCache
|
|
|
|
} }; a = j(b),
|
|
|
|
QQWB.extend("browser", { version: a.version }),
|
|
|
|
QQWB.browser[a.browser] = !0, k(), QQWB.extend("browser.feature",
|
|
|
|
g), QQWB.extend("browser.platform", l()),
|
|
|
|
QQWB.extend("browser.os", m()) }(), QQWB.extend("flash", {
|
|
|
|
NO_CACHE: 1, load: function(a, b, c) { this.loadedSwfs ||
|
|
|
|
(this.loadedSwfs = []); if
|
|
|
|
(QQWB.Array.inArray(this.loadedSwfs, a)) {
|
|
|
|
QQWB.log.warning(a + "is already loaded"); return }
|
|
|
|
c === this.NO_CACHE && (a += "?" + QQWB.uid()); var d =
|
|
|
|
"movieContainer_" + QQWB.uid(), e = "movie_" + QQWB.uid(),
|
|
|
|
f = "onFlashReady_a1f5b4ce", g = window[f]; return window[f] =
|
|
|
|
function() { b && b(e), window[f] = g, g = null, b && (b =
|
|
|
|
null), e = null },
|
|
|
|
QQWB.dom.appendHidden(["<object",
|
|
|
|
'type="application/x-shockwave-flash"', 'id="' + e + '"',
|
|
|
|
QQWB.browser.msie ? 'name="' + e + '"' : "",
|
|
|
|
QQWB.browser.msie ? 'data="' + a + '"' : "",
|
|
|
|
QQWB.browser.msie ?
|
|
|
|
'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"' :
|
|
|
|
"", 'allowscriptaccess="always">', '<param name="movie"
|
|
|
|
value="' + a + '"></param>', '<param
|
|
|
|
name="allowscriptaccess" value="always"></param>',
|
|
|
|
"</object>"].join(" "), { id: d }, !0),
|
|
|
|
document.getElementById(d) }, getSWFObjectByName: function(a) {
|
|
|
|
return QQWB.browser.msie ? window[a] : document[a].length ?
|
|
|
|
document[a][1] : document[a] } }),
|
|
|
|
QQWB.extend("_solution", { HTML5_SOLUTION: "html5",
|
|
|
|
FLASH_SOLUTION: "flash",
|
|
|
|
SILVER_LIGHT_SOLUTION: "silverlight", initSolution:
|
|
|
|
function(a) { var b, c =
|
|
|
|
QQWB.deferred.deferred(); !this[a]
|
|
|
|
&& QQWB.Array.inArray([this.HTML5_SOLUTION,
|
|
|
|
this.FLASH_SOLUTION,
|
|
|
|
this.SILVER_LIGHT_SOLUTION], a) &&
|
|
|
|
(this[a] = {}, this[a].name = a,
|
|
|
|
this[a].readyState = 0, this[a].id =
|
|
|
|
"solution_" + QQWB.uid(), this[a].deferred
|
|
|
|
= QQWB.deferred.deferred(),
|
|
|
|
this[a].promise =
|
|
|
|
this[a].deferred.promise()); if (this[a]
|
|
|
|
&& this[a].readyState !== 0)
|
|
|
|
this[a].deferred.success(function() {
|
|
|
|
c.resolve(QQWB.Array.fromArguments(arguments))
|
|
|
|
}).fail(function() {
|
|
|
|
c.reject(QQWB.Array.fromArguments(arguments))
|
|
|
|
}); else switch (a) { case
|
|
|
|
this.HTML5_SOLUTION: if
|
|
|
|
(QQWB.browser.feature.postmessage)
|
|
|
|
{ b =
|
|
|
|
this[this.HTML5_SOLUTION];
|
|
|
|
var d =
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
QQWB._domain.serverproxy.indexOf(a.origin)
|
|
|
|
!==
|
|
|
|
0
|
|
|
|
?
|
|
|
|
QQWB.log.warning("unexpected
|
|
|
|
message
|
|
|
|
arrived
|
|
|
|
from
|
|
|
|
"
|
|
|
|
+
|
|
|
|
a.origin
|
|
|
|
+
|
|
|
|
"
|
|
|
|
with
|
|
|
|
data
|
|
|
|
"
|
|
|
|
+
|
|
|
|
a.data)
|
|
|
|
:
|
|
|
|
(a.data
|
|
|
|
===
|
|
|
|
"success"
|
|
|
|
?
|
|
|
|
(QQWB.log.info("html5
|
|
|
|
solution
|
|
|
|
was
|
|
|
|
successfully
|
|
|
|
initialized"),
|
|
|
|
b.readyState
|
|
|
|
=
|
|
|
|
1,
|
|
|
|
b.deferred.resolve())
|
|
|
|
:
|
|
|
|
QQWB.log.info("unexpected
|
|
|
|
solution
|
|
|
|
signal
|
|
|
|
"
|
|
|
|
+
|
|
|
|
a.data),
|
|
|
|
window.addEventListener
|
|
|
|
?
|
|
|
|
window.removeEventListener("message",
|
|
|
|
d,
|
|
|
|
!1)
|
|
|
|
:
|
|
|
|
window.attachEvent
|
|
|
|
&&
|
|
|
|
window.detachEvent("onmessage",
|
|
|
|
d),
|
|
|
|
d
|
|
|
|
=
|
|
|
|
null)
|
|
|
|
};
|
|
|
|
window.addEventListener
|
|
|
|
?
|
|
|
|
window.addEventListener("message",
|
|
|
|
d,
|
|
|
|
!1)
|
|
|
|
:
|
|
|
|
window.attachEvent
|
|
|
|
&&
|
|
|
|
window.attachEvent("onmessage",
|
|
|
|
d),
|
|
|
|
QQWB.everythingReady(function()
|
|
|
|
{
|
|
|
|
QQWB.log.info("init
|
|
|
|
html5
|
|
|
|
solution..."),
|
|
|
|
serverframe
|
|
|
|
=
|
|
|
|
QQWB.dom.createHidden("iframe",
|
|
|
|
{
|
|
|
|
id:
|
|
|
|
b.id,
|
|
|
|
src:
|
|
|
|
QQWB._domain.serverproxy
|
|
|
|
}),
|
|
|
|
QQWB.dom.append(serverframe),
|
|
|
|
serverframe.onload
|
|
|
|
=
|
|
|
|
function(a)
|
|
|
|
{
|
|
|
|
setTimeout(function()
|
|
|
|
{
|
|
|
|
b.readyState
|
|
|
|
!==
|
|
|
|
1
|
|
|
|
&&
|
|
|
|
(QQWB.log.error("html5
|
|
|
|
solution
|
|
|
|
initialition
|
|
|
|
has
|
|
|
|
failed,
|
|
|
|
server
|
|
|
|
proxy
|
|
|
|
frame
|
|
|
|
encountered
|
|
|
|
error"),
|
|
|
|
b.readyState
|
|
|
|
=
|
|
|
|
2,
|
|
|
|
b.deferred.reject(-1,
|
|
|
|
"server
|
|
|
|
proxy
|
|
|
|
frame
|
|
|
|
not
|
|
|
|
working"))
|
|
|
|
},
|
|
|
|
1e3) } })
|
|
|
|
} else
|
|
|
|
QQWB.log.error("can't
|
|
|
|
init
|
|
|
|
solution
|
|
|
|
\""
|
|
|
|
+
|
|
|
|
a)
|
|
|
|
+
|
|
|
|
"\",browser
|
|
|
|
doesn't
|
|
|
|
support
|
|
|
|
postmessage",
|
|
|
|
c.reject("browser
|
|
|
|
not
|
|
|
|
supported");
|
|
|
|
break; case
|
|
|
|
this.FLASH_SOLUTION:
|
|
|
|
QQWB.browser.feature.flash
|
|
|
|
? (b =
|
|
|
|
this[this.FLASH_SOLUTION],
|
|
|
|
QQWB.everythingReady(function()
|
|
|
|
{
|
|
|
|
QQWB.log.info("init
|
|
|
|
flash
|
|
|
|
solution...");
|
|
|
|
var
|
|
|
|
a,
|
|
|
|
c
|
|
|
|
=
|
|
|
|
1e4,
|
|
|
|
d
|
|
|
|
=
|
|
|
|
QQWB.flash.load(QQWB._domain.flashproxy,
|
|
|
|
function(c)
|
|
|
|
{
|
|
|
|
QQWB.log.info("flash
|
|
|
|
solution
|
|
|
|
initlized
|
|
|
|
successfully"),
|
|
|
|
b.readyState
|
|
|
|
=
|
|
|
|
1,
|
|
|
|
window.QQWBFlashTransport
|
|
|
|
=
|
|
|
|
QQWB.flash.getSWFObjectByName(c),
|
|
|
|
a
|
|
|
|
&&
|
|
|
|
clearTimeout(a),
|
|
|
|
b.deferred.resolve()
|
|
|
|
},
|
|
|
|
QQWB.flash.NO_CACHE);
|
|
|
|
a
|
|
|
|
=
|
|
|
|
setTimeout(function()
|
|
|
|
{
|
|
|
|
b.deferred.isResolved()
|
|
|
|
||
|
|
|
|
(b.readyState
|
|
|
|
=
|
|
|
|
2,
|
|
|
|
b.deferred.reject(-1,
|
|
|
|
"encounter
|
|
|
|
error
|
|
|
|
while
|
|
|
|
loading
|
|
|
|
proxy
|
|
|
|
swf,
|
|
|
|
need
|
|
|
|
newer
|
|
|
|
flash
|
|
|
|
player"),
|
|
|
|
QQWB.dom.remove(d))
|
|
|
|
},
|
|
|
|
c)
|
|
|
|
}))
|
|
|
|
: (QQWB.log.error("can't
|
|
|
|
init
|
|
|
|
solution
|
|
|
|
\""
|
|
|
|
+
|
|
|
|
a)
|
|
|
|
+
|
|
|
|
"\",browser
|
|
|
|
doesn't
|
|
|
|
support
|
|
|
|
flash or
|
|
|
|
flash is
|
|
|
|
disabled",
|
|
|
|
c.reject("browser
|
|
|
|
not
|
|
|
|
supported"));
|
|
|
|
break; case
|
|
|
|
this.SILVER_LIGHT_SOLUTION:
|
|
|
|
QQWB.browser.feature.silverlight
|
|
|
|
? (-2,
|
|
|
|
QQWB.log.error("sorry,
|
|
|
|
silverlight
|
|
|
|
solution
|
|
|
|
is
|
|
|
|
not
|
|
|
|
implemented"))
|
|
|
|
:
|
|
|
|
(QQWB.log.error("can't
|
|
|
|
init
|
|
|
|
solution
|
|
|
|
\""
|
|
|
|
+
|
|
|
|
a)
|
|
|
|
+ "\",browser
|
|
|
|
doesn't support
|
|
|
|
silverlight or
|
|
|
|
silverlight is
|
|
|
|
disabled",
|
|
|
|
c.reject("browser
|
|
|
|
not
|
|
|
|
supported"));
|
|
|
|
break; default:
|
|
|
|
QQWB.log.error("can't
|
|
|
|
init
|
|
|
|
solution
|
|
|
|
\""
|
|
|
|
+
|
|
|
|
a)
|
|
|
|
+ '",not
|
|
|
|
supported',
|
|
|
|
c.reject("solution
|
|
|
|
"
|
|
|
|
+
|
|
|
|
a
|
|
|
|
+
|
|
|
|
"
|
|
|
|
not
|
|
|
|
supported")
|
|
|
|
} return c.promise() } }),
|
|
|
|
QQWB.extend("ping", { _pingbackURL:
|
|
|
|
"http://btrace.qq.com/collect",
|
|
|
|
_stupidPingParamsOrder: ["ftime", "sIp",
|
|
|
|
"iQQ", "sBiz", "sOp", "iSta", "iTy",
|
|
|
|
"iFlow"], _paramSeprator: ";",
|
|
|
|
_getBasePingParams: function() { var a =
|
|
|
|
QQWB.cookie.get("uin", null,
|
|
|
|
"0").match(/\d+/)[0], b =
|
|
|
|
""; return { sIp: "", iQQ:
|
|
|
|
a, sBiz:
|
|
|
|
"open-js", sOp: "", iSta: "", iTy:
|
|
|
|
1183, iFlow: b, iFrom: "",
|
|
|
|
iPubFrom: "", sUrl: "", iUrlType: "",
|
|
|
|
iPos: "", sText: "", iBak1: "", iBak2: "",
|
|
|
|
sBak1: "", sBak2: QQWB.uid() } },
|
|
|
|
pingWith: function(a, b) { a =
|
|
|
|
QQWB.extend(QQWB.ping._getBasePingParams(),
|
|
|
|
a, !0),
|
|
|
|
QQWBPingTransport_18035d19 = new
|
|
|
|
Image(1, 1),
|
|
|
|
QQWBPingTransport_18035d19.src =
|
|
|
|
QQWB.ping._pingbackURL + "?" +
|
|
|
|
QQWB.queryString.encode(a, null,
|
|
|
|
null, b) },
|
|
|
|
pingInit: function() { function a() { var
|
|
|
|
a = 1e6; return feature = 0,
|
|
|
|
QQWB.browser.msie ? a += 100 :
|
|
|
|
QQWB.browser.opera ? a +=
|
|
|
|
200 : QQWB.browser.webkit
|
|
|
|
? a += 300 :
|
|
|
|
QQWB.browser.mozilla ? a
|
|
|
|
+= 400 : a += 500,
|
|
|
|
QQWB.browser.feature.postmessage
|
|
|
|
&& (feature += 1),
|
|
|
|
QQWB.browser.feature.flash &&
|
|
|
|
(feature += 2),
|
|
|
|
QQWB.browser.feature.cookie &&
|
|
|
|
(feature += 4), a +=
|
|
|
|
feature, a }
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function b() { var a = 1e6; return QQWB.browser.platform.mobile ? a +=
|
|
|
|
100 : a += 200, QQWB.browser.os.windows ? a += 10 :
|
|
|
|
QQWB.browser.os.windows ? a += 20 : QQWB.browser.os.mac
|
|
|
|
? a += 30 : QQWB.browser.os.unix ? a += 40 :
|
|
|
|
QQWB.browser.os.linux ? a += 50 : a += 60, a +=
|
|
|
|
parseInt(QQWB.appkey.version, 10), a } return
|
|
|
|
QQWB.ping.pingWith({ sOp: "init", iFrom:
|
|
|
|
QQWB.version.replace(/\./g, ""), iPubFrom: b(),
|
|
|
|
sUrl: [document.title,
|
|
|
|
document.location.href].join(QQWB.ping._paramSeprator),
|
|
|
|
sText: QQWB.appkey.value, iBak1: a() },
|
|
|
|
QQWB.ping._stupidPingParamsOrder.concat("iFrom",
|
|
|
|
"iPubFrom", "sUrl", "iUrlType", "iPos",
|
|
|
|
"sText", "iBak1", "iBak2", "sBak1", "sBak2"))
|
|
|
|
}, _pingAuthorize: function(a) { return
|
|
|
|
QQWB.ping.pingWith({ sOp: "login",
|
|
|
|
iSta: a ? 1 : 0, iFrom:
|
|
|
|
QQWB.version.replace(/\./g,
|
|
|
|
""), sUrl:
|
|
|
|
document.location.href,
|
|
|
|
sText: QQWB.appkey.value },
|
|
|
|
QQWB.ping._stupidPingParamsOrder.concat("iFrom",
|
|
|
|
"iPubFrom", "sUrl",
|
|
|
|
"iUrlType", "iPos",
|
|
|
|
"sText", "iBak1", "iBak2",
|
|
|
|
"sBak1", "sBak2")) },
|
|
|
|
pingLoggedIn: function() {
|
|
|
|
return
|
|
|
|
QQWB.ping._pingAuthorize(!0)
|
|
|
|
}, pingLoggedInFailed:
|
|
|
|
function() { return
|
|
|
|
QQWB.ping._pingAuthorize(!1)
|
|
|
|
}, pingAPI: function(a, b, c, d,
|
|
|
|
e, f, g, h) { var
|
|
|
|
i = 1e6; a
|
|
|
|
=
|
|
|
|
a
|
|
|
|
||
|
|
|
|
"",
|
|
|
|
b = b ||
|
|
|
|
"",
|
|
|
|
c = c ||
|
|
|
|
"",
|
|
|
|
d = d ||
|
|
|
|
"",
|
|
|
|
e = e ||
|
|
|
|
"-2",
|
|
|
|
f = f ||
|
|
|
|
"",
|
|
|
|
g = g ||
|
|
|
|
"-1",
|
|
|
|
h = h ||
|
|
|
|
"";
|
|
|
|
switch (h)
|
|
|
|
{ case
|
|
|
|
QQWB._solution.HTML5_SOLUTION:
|
|
|
|
case
|
|
|
|
"postmessage":
|
|
|
|
i
|
|
|
|
+=
|
|
|
|
100;
|
|
|
|
break;
|
|
|
|
case
|
|
|
|
QQWB._solution.FLASH_SOLUTION:
|
|
|
|
i
|
|
|
|
+=
|
|
|
|
200;
|
|
|
|
break;
|
|
|
|
case
|
|
|
|
QQWB._solution.SILVER_LIGHT_SOLUTION:
|
|
|
|
i
|
|
|
|
+=
|
|
|
|
400
|
|
|
|
} d =
|
|
|
|
d.toUpperCase();
|
|
|
|
switch (d)
|
|
|
|
{ case
|
|
|
|
"GET":
|
|
|
|
i
|
|
|
|
+=
|
|
|
|
10;
|
|
|
|
break;
|
|
|
|
case
|
|
|
|
"POST":
|
|
|
|
i
|
|
|
|
+=
|
|
|
|
20
|
|
|
|
} return
|
|
|
|
QQWB.ping.pingWith({
|
|
|
|
sOp:
|
|
|
|
"api",
|
|
|
|
iSta:
|
|
|
|
e,
|
|
|
|
iFrom:
|
|
|
|
QQWB.version.replace(/\./g,
|
|
|
|
""),
|
|
|
|
iPubFrom:
|
|
|
|
i,
|
|
|
|
sUrl:
|
|
|
|
document.location.href,
|
|
|
|
sText:
|
|
|
|
QQWB.appkey.value,
|
|
|
|
iBak1:
|
|
|
|
g,
|
|
|
|
sBak1:
|
|
|
|
[a,
|
|
|
|
b].join(QQWB.ping._paramSeprator)
|
|
|
|
},
|
|
|
|
QQWB.ping._stupidPingParamsOrder.concat("iFrom",
|
|
|
|
"iPubFrom",
|
|
|
|
"sUrl",
|
|
|
|
"iUrlType",
|
|
|
|
"iPos",
|
|
|
|
"sText",
|
|
|
|
"iBak1",
|
|
|
|
"iBak2",
|
|
|
|
"sBak1",
|
|
|
|
"sBak2"))
|
|
|
|
} }),
|
|
|
|
QQWB.extend("door",
|
|
|
|
{
|
|
|
|
doors:
|
|
|
|
0, door:
|
|
|
|
function(a,
|
|
|
|
b)
|
|
|
|
{ var c =
|
|
|
|
0;
|
|
|
|
return
|
|
|
|
this.doors++,
|
|
|
|
{ lock: function()
|
|
|
|
{ return
|
|
|
|
c++,
|
|
|
|
a && a.call(QQWB),
|
|
|
|
this }, unlock:
|
|
|
|
function()
|
|
|
|
{ return c--, c =
|
|
|
|
Math.max(0,
|
|
|
|
c),
|
|
|
|
b &&
|
|
|
|
b.call(QQWB),
|
|
|
|
this },
|
|
|
|
isOpen: function()
|
|
|
|
{ return c === 0 }
|
|
|
|
} }, count:
|
|
|
|
function() {
|
|
|
|
return
|
|
|
|
this.doors
|
|
|
|
} }),
|
|
|
|
QQWB.extend("", {
|
|
|
|
init:
|
|
|
|
function(a)
|
|
|
|
{ if (this._inited
|
|
|
|
=== !0)
|
|
|
|
return
|
|
|
|
this.log.warning("already
|
|
|
|
initialized"),
|
|
|
|
this;
|
|
|
|
this.log.info("init
|
|
|
|
signal has
|
|
|
|
arrived"),
|
|
|
|
a =
|
|
|
|
QQWB.extend({
|
|
|
|
callbackurl:
|
|
|
|
document.location.href.replace(location.search,
|
|
|
|
"").replace(location.hash,
|
|
|
|
""),
|
|
|
|
pingback:
|
|
|
|
!0,
|
|
|
|
synclogin:
|
|
|
|
!0
|
|
|
|
}, a, !0),
|
|
|
|
QQWB.pingback =
|
|
|
|
a.pingback;
|
|
|
|
var b =
|
|
|
|
this._token.getAccessToken(),
|
|
|
|
c =
|
|
|
|
this._token.getAccessToken(!0),
|
|
|
|
d =
|
|
|
|
this._token.getRefreshToken(),
|
|
|
|
e = d &&
|
|
|
|
!b
|
|
|
|
&&
|
|
|
|
c,
|
|
|
|
f = !d &&
|
|
|
|
!b
|
|
|
|
&&
|
|
|
|
a.synclogin;
|
|
|
|
return a.appkey &&
|
|
|
|
(this.log.info("client
|
|
|
|
id
|
|
|
|
is
|
|
|
|
"
|
|
|
|
+
|
|
|
|
a.appkey),
|
|
|
|
this.assign("appkey.value",
|
|
|
|
"APPKEY",
|
|
|
|
a.appkey)),
|
|
|
|
this.log.info("client
|
|
|
|
proxy
|
|
|
|
uri
|
|
|
|
is
|
|
|
|
"
|
|
|
|
+
|
|
|
|
a.callbackurl),
|
|
|
|
this.assign("_domain",
|
|
|
|
"CLIENTPROXY_URI",
|
|
|
|
a.callbackurl),
|
|
|
|
(e || f)
|
|
|
|
&&
|
|
|
|
QQWB._tokenReadyDoor.lock(),
|
|
|
|
e ?
|
|
|
|
(this.log.info("exchanging
|
|
|
|
refresh
|
|
|
|
token
|
|
|
|
to
|
|
|
|
access
|
|
|
|
token..."),
|
|
|
|
QQWB._token.exchangeForToken(function(b)
|
|
|
|
{
|
|
|
|
a.synclogin
|
|
|
|
&&
|
|
|
|
b.error
|
|
|
|
&&
|
|
|
|
(QQWB.log.warning("exchange
|
|
|
|
token
|
|
|
|
has
|
|
|
|
failed,
|
|
|
|
trying
|
|
|
|
to
|
|
|
|
retrieve
|
|
|
|
a
|
|
|
|
new
|
|
|
|
access_token..."),
|
|
|
|
this._tokenReadyDoor.lock(),
|
|
|
|
QQWB._token.getNewAccessToken(function()
|
|
|
|
{
|
|
|
|
this._tokenReadyDoor.unlock()
|
|
|
|
})),
|
|
|
|
this._tokenReadyDoor.unlock()
|
|
|
|
}))
|
|
|
|
: f &&
|
|
|
|
(this.log.info("retrieving
|
|
|
|
new
|
|
|
|
access
|
|
|
|
token..."),
|
|
|
|
QQWB._token.getNewAccessToken(function()
|
|
|
|
{
|
|
|
|
QQWB._tokenReadyDoor.unlock()
|
|
|
|
})),
|
|
|
|
/^[a-z\d][a-z\d]{30}[a-z\d]$/i.test(QQWB.appkey.value)
|
|
|
|
?
|
|
|
|
this.assign("appkey",
|
|
|
|
"APPKEY_VERSION",
|
|
|
|
1)
|
|
|
|
:
|
|
|
|
/^[1-9][0-9]{7}[0-9]$/.test(QQWB.appkey.value)
|
|
|
|
?
|
|
|
|
this.assign("appkey",
|
|
|
|
"APPKEY_VERSION",
|
|
|
|
2)
|
|
|
|
:
|
|
|
|
this.assign("appkey",
|
|
|
|
"APPKEY_VERSION",
|
|
|
|
3),
|
|
|
|
this._inited
|
|
|
|
=
|
|
|
|
!0,
|
|
|
|
QQWB._tokenReadyDoor.unlock(),
|
|
|
|
this.pingback
|
|
|
|
&&
|
|
|
|
this.ping
|
|
|
|
&&
|
|
|
|
this.ping.pingInit(),
|
|
|
|
this.pingback
|
|
|
|
&&
|
|
|
|
this.ping
|
|
|
|
&&
|
|
|
|
QQWB.bind(QQWB.events.USER_LOGGEDIN_EVENT,
|
|
|
|
this.ping.pingLoggedIn),
|
|
|
|
this.pingback
|
|
|
|
&&
|
|
|
|
this.ping
|
|
|
|
&&
|
|
|
|
QQWB.bind(QQWB.events.USER_LOGIN_FAILED_EVENT,
|
|
|
|
this.ping.pingLoggedInFailed),
|
|
|
|
this },
|
|
|
|
_tokenReadyDoor:
|
|
|
|
QQWB.door.door(function()
|
|
|
|
{
|
|
|
|
this.log.info("tokenReady
|
|
|
|
is
|
|
|
|
locked")
|
|
|
|
},
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
this.log.info("tokenReady
|
|
|
|
is
|
|
|
|
unlocked"),
|
|
|
|
this._tokenReadyDoor.isOpen()
|
|
|
|
&&
|
|
|
|
this.log.info("token
|
|
|
|
is
|
|
|
|
ready")
|
|
|
|
&&
|
|
|
|
this.trigger(this.events.TOKEN_READY_EVENT)
|
|
|
|
}),
|
|
|
|
tokenReady:
|
|
|
|
function(a)
|
|
|
|
{ return
|
|
|
|
this._tokenReadyDoor.isOpen()
|
|
|
|
?
|
|
|
|
a
|
|
|
|
&&
|
|
|
|
a()
|
|
|
|
:
|
|
|
|
this.bind(this.events.TOKEN_READY_EVENT,
|
|
|
|
a),
|
|
|
|
this
|
|
|
|
},
|
|
|
|
_isDocumentReady:
|
|
|
|
!1,
|
|
|
|
_tryToTriggerDocumentReadyEvents:
|
|
|
|
function()
|
|
|
|
{ if
|
|
|
|
(this._isDocumentReady)
|
|
|
|
return;
|
|
|
|
try
|
|
|
|
{
|
|
|
|
var
|
|
|
|
a
|
|
|
|
=
|
|
|
|
document.getElementsByTagName("body")[0].appendChild(document.createElement("span"));
|
|
|
|
a.parentNode.removeChild(a)
|
|
|
|
}
|
|
|
|
catch
|
|
|
|
(b)
|
|
|
|
{
|
|
|
|
return
|
|
|
|
}
|
|
|
|
this._isDocumentReady
|
|
|
|
=
|
|
|
|
!0,
|
|
|
|
this.log.info("document
|
|
|
|
is
|
|
|
|
ready"),
|
|
|
|
this._everythingReadyDoor.unlock(),
|
|
|
|
this.trigger(this.events.DOCUMENT_READY_EVENT)
|
|
|
|
},
|
|
|
|
documentReady:
|
|
|
|
function(a)
|
|
|
|
{ return
|
|
|
|
this._isDocumentReady
|
|
|
|
?
|
|
|
|
a
|
|
|
|
&&
|
|
|
|
a()
|
|
|
|
:
|
|
|
|
(this.bind(this.events.DOCUMENT_READY_EVENT,
|
|
|
|
a),
|
|
|
|
this._tryToTriggerDocumentReadyEvents()),
|
|
|
|
this
|
|
|
|
},
|
|
|
|
_everythingReadyDoor:
|
|
|
|
QQWB.door.door(function()
|
|
|
|
{
|
|
|
|
this.log.info("everythingReady
|
|
|
|
is
|
|
|
|
locked")
|
|
|
|
},
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
this.log.info("everythingReady
|
|
|
|
is
|
|
|
|
unlocked"),
|
|
|
|
this._everythingReadyDoor.isOpen()
|
|
|
|
&&
|
|
|
|
this.log.info("everything
|
|
|
|
is
|
|
|
|
ready")
|
|
|
|
&&
|
|
|
|
this.trigger(this.events.EVERYTHING_READY_EVENT)
|
|
|
|
}),
|
|
|
|
everythingReady:
|
|
|
|
function(a)
|
|
|
|
{ return
|
|
|
|
this._everythingReadyDoor.isOpen()
|
|
|
|
?
|
|
|
|
a
|
|
|
|
&&
|
|
|
|
a()
|
|
|
|
:
|
|
|
|
this.bind(this.events.EVERYTHING_READY_EVENT,
|
|
|
|
a),
|
|
|
|
this
|
|
|
|
} }),
|
|
|
|
T.alias("ready",
|
|
|
|
"everythingReady"),
|
|
|
|
function()
|
|
|
|
{ function c() { QQWB.browser.feature.postmessage ?
|
|
|
|
QQWB._solution.initSolution(QQWB._solution.HTML5_SOLUTION) :
|
|
|
|
QQWB.browser.feature.flash ?
|
|
|
|
QQWB._solution.initSolution(QQWB._solution.FLASH_SOLUTION)
|
|
|
|
: QQWB.log.error("init solution is called, but no
|
|
|
|
solution for the browser") } var a =
|
|
|
|
window != window.parent, b = QQWB._domain.serverproxy
|
|
|
|
=== window.location.href; QQWB._tokenReadyDoor.lock(),
|
|
|
|
QQWB._everythingReadyDoor.lock(),
|
|
|
|
QQWB._everythingReadyDoor.lock(),
|
|
|
|
QQWB.bind(QQWB.events.TOKEN_READY_EVENT, function() {
|
|
|
|
QQWB._everythingReadyDoor.unlock() }); if (a && b &&
|
|
|
|
QQWB.browser.feature.postmessage) {
|
|
|
|
QQWB.log.info("library booting at server proxy
|
|
|
|
mode"); var d = "*", e =
|
|
|
|
window.parent; e.postMessage("success",
|
|
|
|
d); var f = function(a)
|
|
|
|
{ var b = QQWB.JSON.fromString(a.data),
|
|
|
|
c = b.id, f = b.data, g = f[0];
|
|
|
|
f[2].toLowerCase() == "xml" &&
|
|
|
|
(f[2] = "xmltext"), g ?
|
|
|
|
QQWB.io._apiAjax.apply(this,
|
|
|
|
f).complete(function()
|
|
|
|
{
|
|
|
|
e.postMessage(QQWB.JSON.stringify({
|
|
|
|
id:
|
|
|
|
c,
|
|
|
|
data:
|
|
|
|
QQWB.Array.fromArguments(arguments)
|
|
|
|
}),
|
|
|
|
d)
|
|
|
|
})
|
|
|
|
:
|
|
|
|
(e.postMessage(QQWB.JSON.stringify({
|
|
|
|
id: c, data:
|
|
|
|
[-1, "interface
|
|
|
|
can not be
|
|
|
|
empty"] }), d),
|
|
|
|
QQWB.log.error("interface
|
|
|
|
is empty")) };
|
|
|
|
window.addEventListener ?
|
|
|
|
window.addEventListener("message",
|
|
|
|
f, !1)
|
|
|
|
: window.attachEvent &&
|
|
|
|
window.attachEvent("onmessage",
|
|
|
|
f);
|
|
|
|
return } QQWB.log.info("library
|
|
|
|
booting at
|
|
|
|
normal mode"),
|
|
|
|
c() }(),
|
|
|
|
QQWB._isDocumentReady ||
|
|
|
|
(window.addEventListener
|
|
|
|
&&
|
|
|
|
document.addEventListener("DOMContentLoaded",
|
|
|
|
function() {
|
|
|
|
QQWB._tryToTriggerDocumentReadyEvents()
|
|
|
|
}, !1),
|
|
|
|
window.attachEvent &&
|
|
|
|
(document.attachEvent("onreadystatechange",
|
|
|
|
function()
|
|
|
|
{
|
|
|
|
/complete/.test(document.readyState)
|
|
|
|
&&
|
|
|
|
(document.detachEvent("onreadystatechange",
|
|
|
|
arguments.callee),
|
|
|
|
QQWB._tryToTriggerDocumentReadyEvents())
|
|
|
|
}),
|
|
|
|
window === window.top
|
|
|
|
&& function() { if
|
|
|
|
(QQWB._isDocumentReady)
|
|
|
|
return; try {
|
|
|
|
document.documentElement.doScroll("left")
|
|
|
|
} catch (a) {
|
|
|
|
setTimeout(arguments.callee,
|
|
|
|
0);
|
|
|
|
return
|
|
|
|
}
|
|
|
|
QQWB._tryToTriggerDocumentReadyEvents()
|
|
|
|
}()),
|
|
|
|
QQWB.browser.webkit &&
|
|
|
|
function() { if
|
|
|
|
(QQWB._isDocumentReady)
|
|
|
|
return;
|
|
|
|
if
|
|
|
|
(!/load|complete/.test(document.readyState))
|
|
|
|
{
|
|
|
|
setTimeout(arguments.callee,
|
|
|
|
0);
|
|
|
|
return
|
|
|
|
}
|
|
|
|
QQWB._tryToTriggerDocumentReadyEvents()
|
|
|
|
}()), function() {
|
|
|
|
function b() {
|
|
|
|
var c =
|
|
|
|
!!
|
|
|
|
QQWB._token.getAccessToken(),
|
|
|
|
d; a &&
|
|
|
|
QQWB.log.info("cancel
|
|
|
|
the
|
|
|
|
**OLD**
|
|
|
|
maintain
|
|
|
|
token
|
|
|
|
schedule"),
|
|
|
|
a &&
|
|
|
|
clearTimeout(a),
|
|
|
|
c ? (d
|
|
|
|
=
|
|
|
|
parseInt(QQWB.cookie.get(QQWB._cookie.names.accessToken).split("|")[1],
|
|
|
|
10)
|
|
|
|
-
|
|
|
|
QQWB.time.now()
|
|
|
|
-
|
|
|
|
15e3,
|
|
|
|
QQWB.log.info("scheduled
|
|
|
|
to
|
|
|
|
exchange
|
|
|
|
token
|
|
|
|
after
|
|
|
|
"
|
|
|
|
+
|
|
|
|
d
|
|
|
|
+
|
|
|
|
"ms"),
|
|
|
|
a
|
|
|
|
=
|
|
|
|
setTimeout(function()
|
|
|
|
{
|
|
|
|
QQWB._token.exchangeForToken(function()
|
|
|
|
{
|
|
|
|
b()
|
|
|
|
})
|
|
|
|
},
|
|
|
|
d))
|
|
|
|
:
|
|
|
|
(a
|
|
|
|
&&
|
|
|
|
QQWB.log.info("cancel
|
|
|
|
the
|
|
|
|
exchange
|
|
|
|
token
|
|
|
|
schedule"),
|
|
|
|
a
|
|
|
|
&&
|
|
|
|
clearTimeout(a))
|
|
|
|
} var a;
|
|
|
|
QQWB.bind(QQWB.events.TOKEN_READY_EVENT,
|
|
|
|
b),
|
|
|
|
QQWB.bind(QQWB.events.USER_LOGGEDIN_EVENT,
|
|
|
|
b),
|
|
|
|
QQWB.bind(QQWB.events.USER_LOGIN_FAILED_EVENT,
|
|
|
|
b),
|
|
|
|
QQWB.bind(QQWB.events.USER_LOGGEDOUT_EVENT,
|
|
|
|
b)
|
|
|
|
}(); if
|
|
|
|
(QQWB.browser.feature.localstorage) QQWB.extend("localStorage", { set:
|
|
|
|
function(a, b, c) { a = "k" + a; var d = QQWB.time.secondsNow() + (c ||
|
|
|
|
7) * 24 * 3600, e = { value: b, expire: d }; return
|
|
|
|
localStorage[a] = JSON.stringify(e), localStorage[a] }, get:
|
|
|
|
function(a, b) { a = "k" + a; var c = localStorage[a]; return c && (c =
|
|
|
|
JSON.parse(c)) && c.value && QQWB.time.secondsNow() < c.expire
|
|
|
|
? c.value : b }, del: function(a) { return a = "k" + a,
|
|
|
|
localStorage.removeItem(a), !localStorage[a] } }); else
|
|
|
|
if (QQWB.browser.feature.userdata) { var userData, storeName =
|
|
|
|
"QQWBLocalStore"; QQWB.documentReady(function() { userData =
|
|
|
|
document.createElement("input"), userData.type = "hidden",
|
|
|
|
userData.style.display = "none",
|
|
|
|
userData.addBehavior("#default#userData"), userData.expires =
|
|
|
|
(new Date(QQWB.time.now() + 31536e7)).toUTCString(),
|
|
|
|
document.body.appendChild(userData) }),
|
|
|
|
QQWB.extend("localStorage", { set: function(a, b, c) { a = "k"
|
|
|
|
+ a; var d = QQWB.time.secondsNow() + (c || 7) * 24 *
|
|
|
|
3600, e = { value: b, expire: d }; return !userData &&
|
|
|
|
QQWB.log.error("store can't set value for key " + a +
|
|
|
|
", userData is unavaiable, please try later"),
|
|
|
|
userData && userData.load(storeName), userData &&
|
|
|
|
userData.setAttribute(a, JSON.stringify(e)), userData
|
|
|
|
&& userData.save(storeName), userData.getAttribute(a)
|
|
|
|
}, get: function(a, b) { a = "k" + a, !userData &&
|
|
|
|
QQWB.log.error("store can't get value for key " + a +
|
|
|
|
", userData is unavaiable, please try later"),
|
|
|
|
userData && userData.load(storeName); var c = userData
|
|
|
|
&& userData.getAttribute(a); return c && (c =
|
|
|
|
JSON.parse(c)) && c.value &&
|
|
|
|
QQWB.time.secondsNow() < c.expire ? c.value : b }, del:
|
|
|
|
function(a) { return a = "k" + a, !userData &&
|
|
|
|
QQWB.log.error("store can't delete value for
|
|
|
|
key " + a + ", userData is unavaiable,
|
|
|
|
please try later"), userData &&
|
|
|
|
userData.load(storeName), userData &&
|
|
|
|
userData.removeAttribute(a), userData &&
|
|
|
|
userData.save(storeName), !userData.getAttribute(a) }
|
|
|
|
}) } else QQWB.log.warning("T.localStorage object isn't
|
|
|
|
initialized, do check before use"); QQWB.localStorage
|
|
|
|
&& (QQWB._alias.call(QQWB.localStorage, "save",
|
|
|
|
QQWB.localStorage.set),
|
|
|
|
QQWB._alias.call(QQWB.localStorage, "remove",
|
|
|
|
QQWB.localStorage.del)),
|
|
|
|
QQWB.extend("auth.authWindow", { _width:
|
|
|
|
QQWB._const.AUTH_WINDOW_WIDTH, _height:
|
|
|
|
QQWB._const.AUTH_WINDOW_HEIGHT, _name:
|
|
|
|
QQWB._const.AUTH_WINDOW_NAME, _url: QQWB._domain.auth,
|
|
|
|
_attribs:
|
|
|
|
"toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=yes,status=no",
|
|
|
|
_authorizing: !1, _window: null, show: function() { var a, b,
|
|
|
|
c, d; return this._authorizing ? this.focus() : (a =
|
|
|
|
(window.screenX || window.screenLeft) +
|
|
|
|
((window.outerWidth ||
|
|
|
|
document.documentElement.clientWidth) -
|
|
|
|
this._width) / 2, b = (window.screenY ||
|
|
|
|
window.screenTop) +
|
|
|
|
((window.outerHeight ||
|
|
|
|
document.documentElement.clientHeight) -
|
|
|
|
this._height) / 2, c =
|
|
|
|
QQWB.queryString.encode({ response_type:
|
|
|
|
"token", client_id: QQWB.appkey.value,
|
|
|
|
redirect_uri: QQWB._domain.clientproxy, scope:
|
|
|
|
"all", status: 0 }), d = ["width=" +
|
|
|
|
this._width, "height=" + this._height, "left="
|
|
|
|
+ a, "top=" + b], this._window =
|
|
|
|
window.open(this._url + "?" + c, this._name, d
|
|
|
|
+ "," + this._attribs),
|
|
|
|
this._authorizing = !0, function() { var a =
|
|
|
|
QQWB.auth.authWindow, b; if
|
|
|
|
(a._window.closed) {
|
|
|
|
QQWB._token.resolveResponse("error=access_denied"),
|
|
|
|
a.close(); return } try { b =
|
|
|
|
a._window.location.hash } catch
|
|
|
|
(c) { b = null } if (b) { b =
|
|
|
|
QQWB.queryString.decode(b.split("#").pop()),
|
|
|
|
parseInt(b.status, 10)
|
|
|
|
== 200 &&
|
|
|
|
QQWB._token.resolveResponse(b),
|
|
|
|
a.close(); return }
|
|
|
|
setTimeout(arguments.callee, 0) }()), this }, close:
|
|
|
|
function() { return this._authorizing = !1,
|
|
|
|
this._window ? this._window.closed ?
|
|
|
|
this : (this._window.close(),
|
|
|
|
this) : this },
|
|
|
|
focus: function() { return this._window
|
|
|
|
&& this._window.focus(), this }
|
|
|
|
}), QQWB.extend("auth", { login: function(a, b) { QQWB._inited
|
|
|
|
|| QQWB.log.critical("Library not initialized, call
|
|
|
|
T.init() to initialize"); var c =
|
|
|
|
QQWB.loginStatus(), d; if (c && a) { a(c);
|
|
|
|
return } if (a || b) d = function(c) {
|
|
|
|
c.access_token && a ? a(c) :
|
|
|
|
c.error && b ? b(c) : QQWB.log.warning("confused result
|
|
|
|
of T.login"),
|
|
|
|
QQWB.unbind(QQWB.events.USER_LOGGEDIN_EVENT, d),
|
|
|
|
QQWB.unbind(QQWB.events.USER_LOGIN_FAILED_EVENT, d), d = null
|
|
|
|
},
|
|
|
|
QQWB.bind(QQWB.events.USER_LOGGEDIN_EVENT, d),
|
|
|
|
QQWB.bind(QQWB.events.USER_LOGIN_FAILED_EVENT, d); return
|
|
|
|
QQWB.auth.authWindow.show().focus(), QQWB }, logout:
|
|
|
|
function(a) { var b = QQWB.loginStatus(); return
|
|
|
|
QQWB.log.info("logging out user..."), b ?
|
|
|
|
(QQWB._token.clearAccessToken(),
|
|
|
|
QQWB._token.clearRefreshToken(), QQWB.log.info(b.name
|
|
|
|
+ " has logged out successfully")) :
|
|
|
|
QQWB.log.warning("oops, user not logged in"), a &&
|
|
|
|
a.call(QQWB),
|
|
|
|
QQWB.trigger(QQWB.events.USER_LOGGEDOUT_EVENT), QQWB },
|
|
|
|
loginStatus: function(a) { var b, c =
|
|
|
|
QQWB._token.getAccessToken(), d =
|
|
|
|
QQWB._token.getTokenUser(); return c && (b = {
|
|
|
|
access_token: c, name: d.name, nick:
|
|
|
|
d.nick }), a && a.call(QQWB, b), b }
|
|
|
|
}), QQWB._alias("login", QQWB.auth.login),
|
|
|
|
QQWB._alias("logout", QQWB.auth.logout),
|
|
|
|
QQWB._alias("loginStatus", QQWB.auth.loginStatus),
|
|
|
|
QQWB.provide("api", function(a, b, c, d, e) { a =
|
|
|
|
this._apiProvider.compat(a), b = b || {}, c = (c ||
|
|
|
|
"json").toLowerCase(), d = d || "GET"; var f,
|
|
|
|
g, h = c, i = { json: !0, xml: !0 }, j =
|
|
|
|
QQWB.deferred.deferred(); h in i || (h = "json"),
|
|
|
|
b.oauth_consumer_key = QQWB.appkey.value, b.oauth_token =
|
|
|
|
QQWB._token.getAccessToken(), b.oauth_version = "2.0",
|
|
|
|
b.format = h, f = j.promise(), e &&
|
|
|
|
QQWB.Array.inArray([QQWB._solution.HTML5_SOLUTION,
|
|
|
|
QQWB._solution.FLASH_SOLUTION,
|
|
|
|
QQWB._solution.SILVER_LIGHT_SOLUTION], e) ?
|
|
|
|
(QQWB.log.warning("forced to use solution " + e),
|
|
|
|
QQWB._solution[e] || (QQWB.log.warning("forced to use
|
|
|
|
solution " + e + ", this solution is
|
|
|
|
not inited, initialzing..."),
|
|
|
|
QQWB._solution.initSolution[e]), g =
|
|
|
|
QQWB._solution[e]) : g =
|
|
|
|
QQWB.browser.feature.postmessage &&
|
|
|
|
QQWB._solution[QQWB._solution.HTML5_SOLUTION] ||
|
|
|
|
QQWB.browser.feature.flash &&
|
|
|
|
QQWB._solution[QQWB._solution.FLASH_SOLUTION] ||
|
|
|
|
QQWB.browser.feature.silverlight &&
|
|
|
|
QQWB._solution[QQWB._solution.SILVER_LIGHT_SOLUTION];
|
|
|
|
if (!g || g.readyState === 2) return
|
|
|
|
QQWB.log.critical("solution error"), j.reject(-1,
|
|
|
|
"solution error", 0), f; if
|
|
|
|
(g.readyState === 0) return
|
|
|
|
QQWB.log.warning("solution is not ready, your
|
|
|
|
api call request has been
|
|
|
|
cached, will invoke immediately
|
|
|
|
when solution is ready"),
|
|
|
|
g.promise.done(function() {
|
|
|
|
QQWB.log.info('invoking cached api call
|
|
|
|
"QQWB.api( ' + [a, b, c,
|
|
|
|
d].join(",") + ')"...'), QQWB.api(a, b,
|
|
|
|
c, d).success(function() {
|
|
|
|
j.resolveWith(j,
|
|
|
|
QQWB.Array.fromArguments(arguments))
|
|
|
|
}).error(function() { j.rejectWith(j,
|
|
|
|
QQWB.Array.fromArguments(arguments))
|
|
|
|
}) }).fail(function() {
|
|
|
|
QQWB.log.error("can't invoking
|
|
|
|
cached api call
|
|
|
|
\"QQWB.api( " + [a, b,
|
|
|
|
c, d].join(",") + ')"'),
|
|
|
|
j.rejectWith(j,
|
|
|
|
QQWB.Array.fromArguments(arguments))
|
|
|
|
}), f; QQWB.api.id ||
|
|
|
|
QQWB.extend(QQWB.api, { id: 0, total: function() { return
|
|
|
|
QQWB.api.id } }), QQWB.api.id++, QQWB.log.info("[" +
|
|
|
|
QQWB.api.id + '] requesting data "' +
|
|
|
|
QQWB._apiProvider.describe(a) + '" from
|
|
|
|
server...'); if (g ===
|
|
|
|
QQWB._solution[QQWB._solution.HTML5_SOLUTION])
|
|
|
|
{ var k = document.getElementById(g.id); if
|
|
|
|
(!k) QQWB.log.critical("server proxy
|
|
|
|
not found"),
|
|
|
|
j.reject(-1, "server proxy not found",
|
|
|
|
0); else if (k.src !==
|
|
|
|
QQWB._domain.serverproxy)
|
|
|
|
QQWB.log.critical("server
|
|
|
|
proxy
|
|
|
|
is
|
|
|
|
not
|
|
|
|
valid,
|
|
|
|
src
|
|
|
|
attribute
|
|
|
|
has
|
|
|
|
unexpected
|
|
|
|
value"),
|
|
|
|
j.reject(-1, "server
|
|
|
|
proxy
|
|
|
|
not
|
|
|
|
valid",
|
|
|
|
0);
|
|
|
|
else { QQWB.api._deferredCollection ||
|
|
|
|
QQWB.extend(QQWB.api, {
|
|
|
|
_deferredCollection:
|
|
|
|
{}, deferredAt: function(a) {
|
|
|
|
if
|
|
|
|
(this._deferredCollection[a])
|
|
|
|
return
|
|
|
|
this._deferredCollection[a];
|
|
|
|
QQWB.log.warning("get deferred
|
|
|
|
object has failed, that
|
|
|
|
object does not exist
|
|
|
|
at index " + a) },
|
|
|
|
uncollect: function(a)
|
|
|
|
{ this._deferredCollection[a] ?
|
|
|
|
delete
|
|
|
|
this._deferredCollection[a]
|
|
|
|
:
|
|
|
|
QQWB.log.warning("uncollect
|
|
|
|
deferred object
|
|
|
|
has failed,
|
|
|
|
that object
|
|
|
|
does not exist
|
|
|
|
at index " + a)
|
|
|
|
}, collect: function(a) { if
|
|
|
|
(a.promise) return
|
|
|
|
this._deferredCollection[this.id]
|
|
|
|
= a, this.id;
|
|
|
|
QQWB.log.warning("collect
|
|
|
|
a
|
|
|
|
non-deferred
|
|
|
|
object
|
|
|
|
is
|
|
|
|
illegal")
|
|
|
|
} }), QQWB.api.messageHandler
|
|
|
|
||
|
|
|
|
(QQWB.provide("api.messageHandler",
|
|
|
|
function(a)
|
|
|
|
{ if
|
|
|
|
(QQWB._domain.serverproxy.indexOf(a.origin)
|
|
|
|
!==
|
|
|
|
0)
|
|
|
|
QQWB.log.warning("unexpected
|
|
|
|
message
|
|
|
|
arrived
|
|
|
|
from
|
|
|
|
"
|
|
|
|
+
|
|
|
|
a.origin
|
|
|
|
+
|
|
|
|
"
|
|
|
|
with
|
|
|
|
data
|
|
|
|
"
|
|
|
|
+
|
|
|
|
a.data);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
var
|
|
|
|
b
|
|
|
|
=
|
|
|
|
QQWB.JSON.fromString(a.data),
|
|
|
|
c
|
|
|
|
=
|
|
|
|
b.id,
|
|
|
|
d
|
|
|
|
=
|
|
|
|
QQWB.api.deferredAt(c),
|
|
|
|
e
|
|
|
|
=
|
|
|
|
b.data;
|
|
|
|
d
|
|
|
|
?
|
|
|
|
(e[0]
|
|
|
|
!==
|
|
|
|
200
|
|
|
|
?
|
|
|
|
d.reject.apply(d,
|
|
|
|
e)
|
|
|
|
:
|
|
|
|
(e[5]
|
|
|
|
==
|
|
|
|
"xmltext"
|
|
|
|
&&
|
|
|
|
(e[3]
|
|
|
|
=
|
|
|
|
QQWB.XML.fromString(e[3])),
|
|
|
|
d.resolve(e[3],
|
|
|
|
e[2],
|
|
|
|
e[4])),
|
|
|
|
QQWB.api.uncollect(c))
|
|
|
|
:
|
|
|
|
QQWB.log.warning("related
|
|
|
|
deferred
|
|
|
|
object
|
|
|
|
not
|
|
|
|
found,
|
|
|
|
it
|
|
|
|
shouldn't
|
|
|
|
happen")
|
|
|
|
}
|
|
|
|
}),
|
|
|
|
window.addEventListener
|
|
|
|
?
|
|
|
|
window.addEventListener("message",
|
|
|
|
QQWB.api.messageHandler,
|
|
|
|
!1)
|
|
|
|
:
|
|
|
|
window.attachEvent
|
|
|
|
&&
|
|
|
|
window.attachEvent("onmessage",
|
|
|
|
QQWB.api.messageHandler));
|
|
|
|
try { var l =
|
|
|
|
QQWB.api.collect(j);
|
|
|
|
setTimeout(function() {
|
|
|
|
k.contentWindow.postMessage(QQWB.JSON.stringify({
|
|
|
|
id: l,
|
|
|
|
data:
|
|
|
|
[a, b,
|
|
|
|
c, d]
|
|
|
|
}),
|
|
|
|
QQWB._domain.serverproxy)
|
|
|
|
}, 0) } catch (m) {
|
|
|
|
QQWB.log.critical("post
|
|
|
|
message
|
|
|
|
to
|
|
|
|
server
|
|
|
|
proxy
|
|
|
|
has
|
|
|
|
failed,
|
|
|
|
"
|
|
|
|
+
|
|
|
|
m),
|
|
|
|
j.reject(-1,
|
|
|
|
m,
|
|
|
|
0)
|
|
|
|
} } } else g ===
|
|
|
|
QQWB._solution[QQWB._solution.FLASH_SOLUTION] &&
|
|
|
|
QQWB.io._apiFlashAjax(a, b, c, d).complete(function() {
|
|
|
|
var a = QQWB.Array.fromArguments(arguments);
|
|
|
|
a[0] !== 200 ? j.reject.apply(j, a) :
|
|
|
|
j.resolve(a[3], a[2], a[4]) }); return
|
2012-09-30 16:11:36 -04:00
|
|
|
|
2012-10-09 19:04:23 -04:00
|
|
|
function() { var e = QQWB.api.id; f.complete(function() {
|
|
|
|
QQWB.log.info("*[" + e + "] done"), e = null }); if (QQWB.pingback
|
|
|
|
&& QQWB.ping) { function h(e, f, h) { QQWB.ping.pingAPI(a,
|
|
|
|
QQWB.queryString.encode(b), c, d, e, f, h, g.name) }
|
|
|
|
f.success(function(a, b) { h(200, "ok", b) }), f.fail(function(a,
|
|
|
|
b, c) { h(a, b, c) }) } }(), f })
|
2012-09-30 16:11:36 -04:00
|
|
|
/*
|
|
|
|
|xGv00|6d5d6ce9717937b567ca32a7f3d7c7d0 */
|
|
|
|
|