var viewer; // 类型:opensocial.Person
var viewerFriends; // 类型:opensocial.Collection
var viewerBooks; // 类型:{'books': json}
var bookList = ['西游记', '三国演义', '水浒传', '红楼梦'];
/* 可点击的书名 */
function bookHTML(book) {
return "" +
"" + book + "";
};
/* 显示书架里的书名 */
function showAvailableBooks() {
var html = new Array();
var len = bookList.length;
for (var i = 0; i < len; ++i) {
html.push(bookHTML(bookList[i]));
}
document.getElementById('allBooks').innerHTML = html.join('');
};
/* 显示自己已读过的书 */
function showViewerBooks() {
/* 解析当前数据 */
var json = viewerBooks['books'];
var books;
try {
books = gadgets.json.parse(gadgets.util.unescapeString(json)) || [];
} catch(e) {
books = [];
}
/* 显示书名 */
var html = new Array();
var len = books.length;
for (var i = 0; i < len; ++i) {
html.push("" + books[i] + "");
}
document.getElementById('viewerBooks').innerHTML = html.join('');
};
/* 处理书名点击响应 */
function onReadBook(book) {
/* 解析当前数据 */
var json = viewerBooks['books'];
var books;
try {
books = gadgets.json.parse(gadgets.util.unescapeString(json)) || [];
} catch(e) {
books = [];
}
/* 检查是否已经读过 */
var len = books.length;
for (var i = 0; i < len; ++i) {
if (book == books[i]) {
alert("我已经读过" + book + "了");
return;
}
}
/* 串行化新的数据 */
books.push(book);
json = gadgets.json.stringify(books);
/* 发送更新数据请求 */
var req = opensocial.newDataRequest();
req.add(req.newUpdatePersonAppDataRequest('VIEWER', 'books', json));
req.send(function(dataResponse) {
alert("我读了" + book);
/* 更新后刷新所有数据 */
reloadAll();
});
};
/* 显示基本信息 */
function showBasic() {
/* 显示 VIEWER 名字 */
document.getElementById('me').innerHTML = viewer.getDisplayName();
/* 显示 VIEWER 的朋友名字 */
var html = new Array();
viewerFriends.each(function(friend) {
html.push(friend.getDisplayName() + ", ");
});
document.getElementById('friends').innerHTML = html.join('');
};
/* 发送 Opensocial API 请求 */
function reloadAll() {
var req = new opensocial.DataRequest();
req.add(req.newFetchPersonRequest('VIEWER'), 'v');
req.add(req.newFetchPeopleRequest('VIEWER_FRIENDS'), 'vf');
req.add(req.newFetchPersonAppDataRequest('VIEWER', 'books'), 'vd');
req.send(onReloadAll);
};
/* 处理 Opensocial API 响应 */
function onReloadAll(dataResponse) {
/* 获取数据 */
viewer = dataResponse.get('v').getData() || {};
viewerFriends = dataResponse.get('vf').getData() || {};
viewerBooks = dataResponse.get('vd').getData()[viewer.getId()] || {}; // {'books':[]}
/* 显示数据 */
showBasic();
showAvailableBooks();
showViewerBooks();
};
/* 处理清空按钮响应 */
function onClearBooks() {
var req = opensocial.newDataRequest();
req.add(req.newUpdatePersonAppDataRequest('VIEWER', 'books', null));
req.send(function(dataResponse) {
alert("清空了");
/* 更新后刷新所有数据 */
reloadAll();
});
}
/* Gadget 执行入口 */
function init() {
reloadAll();
};
gadgets.util.registerOnLoadHandler(init);
]]>