File:SavedData.js
/**
* @module cloudkid
*/
(function(){
"use strict";
/**
* The SavedData functions use localStorage and sessionStorage, with a cookie fallback.
*
* @class SavedData
*/
var SavedData = {},
/** A constant to determine if we can use localStorage and sessionStorage */
WEB_STORAGE_SUPPORT = typeof(window.Storage) !== "undefined",
/** A constant for cookie fallback for SavedData.clear() */
ERASE_COOKIE = -1;
//in iOS, if the user is in Private Browsing, writing to localStorage throws an error.
if(WEB_STORAGE_SUPPORT)
{
try
{
localStorage.setItem("LS_TEST", "test");
localStorage.removeItem("LS_TEST");
}
catch(e)
{
WEB_STORAGE_SUPPORT = false;
}
}
/**
* Remove a saved variable by name.
* @method remove
* @static
* @param {String} name The name of the value to remove
*/
SavedData.remove = function(name)
{
if(WEB_STORAGE_SUPPORT)
{
localStorage.removeItem(name);
sessionStorage.removeItem(name);
}
else
SavedData.write(name,"",ERASE_COOKIE);
};
/**
* Save a variable.
* @method write
* @static
* @param {String} name The name of the value to save
* @param {mixed} value The value to save. This will be run through JSON.stringify().
* @param {Boolean} [tempOnly=false] If the value should be saved only in the current browser session.
*/
SavedData.write = function(name, value, tempOnly)
{
if(WEB_STORAGE_SUPPORT)
{
if(tempOnly)
sessionStorage.setItem(name, JSON.stringify(value));
else
localStorage.setItem(name, JSON.stringify(value));
}
else
{
var expires;
if (tempOnly)
{
if(tempOnly !== ERASE_COOKIE)
expires = "";//remove when browser is closed
else
expires = "; expires=Thu, 01 Jan 1970 00:00:00 GMT";//save cookie in the past for immediate removal
}
else
expires = "; expires="+new Date(2147483646000).toGMTString();//THE END OF (32bit UNIX) TIME!
document.cookie = name+"="+escape(JSON.stringify(value))+expires+"; path=/";
}
};
/**
* Read the value of a saved variable
* @method read
* @static
* @param {String} name The name of the variable
* @return {mixed} The value (run through `JSON.parse()`) or null if it doesn't exist
*/
SavedData.read = function(name)
{
if(WEB_STORAGE_SUPPORT)
{
var value = localStorage.getItem(name) || sessionStorage.getItem(name);
if(value)
return JSON.parse(value);
else
return null;
}
else
{
var nameEQ = name + "=",
ca = document.cookie.split(';'),
i = 0, c;
for(i=0;i < ca.length;i++)
{
c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) === 0) return JSON.parse(unescape(c.substring(nameEQ.length,c.length)));
}
return null;
}
};
// Assign to the global space
namespace('cloudkid').SavedData = SavedData;
}());