メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2009年6月23日火曜日

[Apache Shindig][お勉強][OpenSocial] メモ27 DBBasedUserPrefStore

CookieBaseduserPrefStoreを参考にDBBasedUserPrefStoreを作ってみた。


gadgets.DBBasedUserPrefStore = function() {
gadgets.UserPrefStore.call(this);
};

gadgets.DBBasedUserPrefStore.inherits(gadgets.UserPrefStore);

gadgets.DBBasedUserPrefStore.prototype.USER_PREFS_PREFIX =
'gadgetUserPrefs-';

gadgets.DBBasedUserPrefStore.prototype.saveUserPrefUrl_ = "saveUserPref.json";
gadgets.DBBasedUserPrefStore.prototype.loadUserPrefUrl_ = "loadUserPref.json";
gadgets.DBBasedUserPrefStore.prototype.serverBase_ = "serverBase";

gadgets.DBBasedUserPrefStore.prototype.getPrefs = function(gadget) {
var userPrefs = {};
var keyName = this.USER_PREFS_PREFIX + gadget.id;
var data = this._loadUserPref(keyName);
if (data) {
for (var aa in data) {
userPrefs[decodeURIComponent(aa)] = decodeURIComponent(data[aa]).replace(/^'/,"").replace(/'$/,"");
}
}

return userPrefs;
};

gadgets.DBBasedUserPrefStore.prototype.savePrefs = function(gadget) {
var pairs = [];
for (var name in gadget.getUserPrefs()) {
var value = gadget.getUserPref(name);
var pair = encodeURIComponent(name) + '=\'' + encodeURIComponent(value) + '\'';
pairs.push(pair);
}

var name = this.USER_PREFS_PREFIX + gadget.id;
var pair = encodeURIComponent("__gadgetId__") + '=' + encodeURIComponent(name);
pairs.push(pair);
var value = pairs.join('&');

this._saveUserPref(value);
};

gadgets.DBBasedUserPrefStore.prototype._saveUserPref = function(data) {
var userPref = '';
$.ajax({
type: "POST",
url: this.serverBase_ + this.saveUserPrefUrl_ ,
data: data,
success: function(json) {
userPref = $(json).find('UserPref').text();
}
});
return userPref;
};

gadgets.DBBasedUserPrefStore.prototype._loadUserPref = function(name) {
var data = '';
$.ajax({
type: "GET",
cache: false,
async: false,
dataType: 'string',
url: this.serverBase_ + this.loadUserPrefUrl_ + "?__gadgetId__=" + name,
success: function(str) {
data = str;
}
});
return eval("(" + data + ")");
};

gadgets.DBBasedUserPrefStore.prototype.setServerBase = function(base) {
this.serverBase_ = base;
};

gadgets.Container.prototype.userPrefStore =
new gadgets.DBBasedUserPrefStore();
 

な感じに、cookiebaseduserprefstore.jsをまんま変更し、
setPrefsとgetPrefsでサーバ側へリクエストを投げると。

サーバ側は、送られてきたリクエストを適当に処理し、DBへ保存。

使うときは、

<script type="text/javascript" src="../../js/rpc.js?c=1&debug=1"></script>
<script type="text/javascript" src="cookies.js"></script>
<script type="text/javascript" src="util.js"></script>
<script type="text/javascript" src="gadgets.js"></script>
<script type="text/javascript" src="dbbaseduserprefstore.js"></script>
 

な感じに読み込んで、、

<script type="text/javascript">
//<![CDATA[
var gadget = gadgets.container.createGadget({id: "0",specUrl: "http://www.labpixies.com/campaigns/todo/todo.xml", secureToken: "${secureToken}"});
gadget.setServerBase("${contextPath}/gadgets/");
gadgets.container.userPrefStore.setServerBase("${contextPath}/");
gadgets.container.addGadget(gadget);
$("#remote_iframe_0").attr("src", gadget.getIframeUrl());
//]]>
</script>
 

な感じでiframeのurlをセット。
${contextPath}はローカルな事情からアプリケーションサーバのcontextPathをセットと。

とりあえずは、これで、labpixies.comのtodoガジェットはちゃんと動くっぽい。

さて、次はrequestNavigateToをなんとかする。



--
つーか、javascriptはこんな感じでよいのかしらん。
.

0 コメント: