1 /** 2 * Store 3 * 4 * Wrapper for local / sessionstorage 5 */ 6 (function (){ 7 8 "use strict"; 9 10 //No support for localstorage? Bail out early 11 if(typeof localStorage === "undefined" || typeof JSON === "undefined") 12 { 13 return null; 14 } 15 16 //Shortcuts for wrapper 17 var l = localStorage, 18 s = sessionStorage; 19 20 /** 21 * Wrapper for localstorage / sessionstorage data serialization. 22 * Each method has a boolean parameter, that when set as true switches the method 23 * to use sessionStorage rather than the default localStorage. 24 * 25 * @name store 26 * @namespace 27 * @memberOf $_ 28 */ 29 var store = { 30 /** 31 * Retrieves and deserializes a value from localstorage, 32 * based on the specified key 33 * 34 * @param string key 35 * @param bool session 36 * @name get 37 * @memberOf $_.store 38 * @function 39 * @return object 40 * @type object 41 */ 42 get: function (key, sess) 43 { 44 var val = (sess) ? s.getItem(key) : l.getItem(key); 45 46 return JSON.parse(val); 47 }, 48 /** 49 * Puts a value into localstorage at the specified key, 50 * and JSON-encodes the value if not a string 51 * 52 * @param string key 53 * @param mixed value 54 * @param bool session 55 * @name set 56 * @memberOf $_.store 57 * @function 58 */ 59 set: function (key, value, sess) 60 { 61 // Localstorage generally only accepts strings 62 value = JSON.stringify(value); 63 64 (sess) ? s.setItem(key, value) : l.setItem(key, value); 65 }, 66 /** 67 * Removes the specified item from storage 68 * 69 * @param string key 70 * @param bool session 71 * @name remove 72 * @memberOf $_.store 73 * @function 74 */ 75 remove: function (key, sess) 76 { 77 (sess) ? s.removeItem(key) : l.removeItem(key); 78 }, 79 /** 80 * Returns an object of all the raw values in storage 81 * 82 * @param bool session 83 * @name getAll 84 * @memberOf $_.store 85 * @function 86 * @return object 87 * @type object 88 */ 89 getAll: function (sess) 90 { 91 var i, 92 len, 93 data = {}, 94 k, 95 o; 96 97 //Reference to session/localstorage 98 o = (sess) ? l : s; 99 100 len = o.length; 101 102 for (i = 0; i < len; i++) 103 { 104 k = o.key(i); 105 data[k] = o.getItem(k); 106 } 107 108 return data; 109 }, 110 /** 111 * Removes all values from the same domain storage 112 * 113 * @param bool session 114 * @name clear 115 * @memberOf $_.store 116 * @function 117 */ 118 clear: function(sess) 119 { 120 (sess) ? s.clear() : l.clear(); 121 } 122 }; 123 124 $_.ext('store', store); 125 }());