vim-autoformat/tests/js.expected.js

3903 lines
165 KiB
JavaScript
Raw Normal View History

2012-09-30 16:11:36 -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
}
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 + '"'
}
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
}
}
}
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
}
function c(b) {
return typeof b != "string" ? this : b.length <= 0 ? this : a.matches(":contains(" + b + ")", this)
}
function d(b) {
return a.matches(b, this)
}
function e(b) {
return a.matches(":not(" + b + ")", this)
}
function f(a) {
return QQWB.Array.get(this, a)
}
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
}
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()
}
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 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 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 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"
}
}
function k() {
for (var a in i) i.hasOwnProperty(a) && i[a]() && (g[a] = !0)
}
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
}
}
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
}
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 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
}) /* |xGv00|6d5d6ce9717937b567ca32a7f3d7c7d0 */