Simpelt klientside state objekt:
// Kræver jQuery
var $state = function() {
/// Klientside state-objekt
// Private objekter
var _dict = {};
var _serialize = function() {
var res = "";
for (var key in _dict) {
res += (res ? "|" : "") + key + "=" + _dict[key];
}
return res;
};
var _deserialize = function(data) {
var items = data.split(/[|#]/g);
for (var i = 0, l = items.length; i < l; i++) {
if (!items[i])
continue;
var kevValue = items[i].split('=');
if (kevValue.length < 2)
continue;
_dict[kevValue[0]] = kevValue[1];
}
};
var _save = function() {
location.hash = _serialize();
};
// Initialicering
_deserialize(location.hash);
$(document).ready(function() {
for (var key in _dict) {
$("#" + key).val(_dict[key]);
}
});
// Public / offentlige objekter
return {
set: function(key, value) {
_dict[key] = value;
_save();
},
get: function(key, defaultValue) {
/// Udleder værdien fra hash-staten
if (typeof (_dict[key]) == "undefined")
return defaultValue;
return _dict[key];
},
hookup: function(id) {
/// Opsætter changehandler til at afspejle værdi i state
///
$(id).change(function() {
var $caller = $(this);
$state.set($caller.attr("id"), $caller.val());
});
}
};
} ();