Dear All,
In accordance with the OpenSocial Tutorials I've implemented User
Preferences saving/restoring state i.e. those that belong to the range of
pre-defined types: (ENUM, STRING. LIST, BOOL). However, I'm not currently
able to also maintain the state of the gadget's HIDDEN user preferences,
received from metadata.
The code below renders gadget using its preferences.
CommonContainer.renderGadget = function (gadget, contentHolder,
userPreference) {
var gadgetURL = gadget.Url;
// going to hardcode these values for width.
var el = $(contentHolder).get(0);
var params;
if (userPreference == null) {
params = { userPrefs: cacheDefaultUserPreference[gadgetURL] };
} else {
params = { userPrefs: userPreference };
}
params["view"] = "home";
if (gadget.viewType == GadgetViewTypes.Canvas) {
params["view"] = "canvas";
}
params[osapi.container.RenderParam.WIDTH] = '100%';
var gadgetSite = CommonContainer.newGadgetSite(el);
CommonContainer.navigateGadget(gadgetSite, gadgetURL, {}, params);
defaultUserPreference = {};
return gadgetSite;
};
Maintaining the user preferences which are not HIDDEN type works well okay
and settings are retained by the gadget. However, if I try to do a similar
action regarding HIDDEN preferences then it appears to have the effect of
replacing the default gadget's settings and saving just my values that I
maintained by catching 'set_prefs' event. My callback function looks like
this...
function setPrefs(t, name, value) {
var info = $('#' + this.f).parent().parent();
var hfGdgets = $('input[id*=hfGadgetInfo]', info).val();
var gadgetInfo = eval("(" + hfGdgets + ")");
var cookieUserGadget = new CookieUserGadget();
cookieUserGadget.ID = gadgetInfo.CategoryGadgetID;
cookieUserGadget.GadgetID = gadgetInfo.GadgetID;
// set Pref in pref dialog
$("#" + name, info).val(value);
if (gadgetInfo.UserPreference.Value == null) {
gadgetInfo.UserPreference.Value = new Object();
gadgetInfo.UserPreference.Value[name] = value;
} else {
if (typeof gadgetInfo.UserPreference.Value !== 'object') {
gadgetInfo.UserPreference.Value = eval("(" +
gadgetInfo.UserPreference.Value + ")");
}
gadgetInfo.UserPreference.Value[name] = value;
}
cookieUserGadget.UserPreference = { "Value":
JSON.stringify(gadgetInfo.UserPreference.Value) };
$('input[id*=hfGadgetInfo]', info).val(JSON.stringify(gadgetInfo));
var data = {
"cookieUserGadgetPreference": JSON.stringify(cookieUserGadget)
};
$.ajax({
url: '/Channel.aspx/SaveUserGadgetPreference',
dataType: 'json',
type: "post",
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
async: false,
success: function (data) {
}
});
}
Examples of gadgets with internal HIDDEN preferences include:-
Google News (http://www.google.com/ig/modules/tabnews/tabnews.xml)
Date & Time (http://gadgets.blueg.com/standard/date-time/date-time.xml)
Examples of gadgets with user preferences include:-
Dictionary (http://www.gstatic.com/ig/modules/dictionary/dictionary_v2.xml)
Gismeteo
(http://sterno-gadgets.googlecode.com/svn/trunk/gismeteo/gismeteo.xml)
My question is this - how to correctly retain the internal gadget's state
between the requests and not to erase the rest of its user preference
settings?
Any help much appreciated.
Kind regards,
Darren