|
5 | 5 | }; |
6 | 6 |
|
7 | 7 | // Version |
8 | | - Basil.version = '0.3.3'; |
| 8 | + Basil.version = '0.3.4'; |
9 | 9 |
|
10 | 10 | // Utils |
11 | 11 | Basil.utils = { |
|
18 | 18 | } |
19 | 19 | return destination; |
20 | 20 | }, |
| 21 | + isArray: function (obj) { |
| 22 | + return Object.prototype.toString.call(obj) === '[object Array]'; |
| 23 | + }, |
21 | 24 | registerPlugin: function (methods) { |
22 | 25 | Basil.plugins = this.extend(methods, Basil.plugins); |
23 | 26 | } |
|
42 | 45 | _toStoragesArray = function (storages) { |
43 | 46 | if (!storages) |
44 | 47 | return null; |
45 | | - return Object.prototype.toString.call(storages) === '[object Array]' ? storages : [storages]; |
| 48 | + return Basil.utils.isArray(storages) ? storages : [storages]; |
46 | 49 | }, |
47 | 50 | _toStoredKey = function (namespace, name) { |
48 | 51 | var key = ''; |
49 | 52 | if (typeof name === 'string') |
50 | 53 | key = namespace + ':' + name; |
51 | | - else if (name instanceof Array) { |
| 54 | + else if (Basil.utils.isArray(name)) { |
52 | 55 | key = namespace; |
53 | 56 | for (var i = 0; i < name.length; i++) |
54 | 57 | if (name[i]) |
|
57 | 60 | return key; |
58 | 61 | }, |
59 | 62 | _toKeyName = function (namespace, name) { |
60 | | - return name.replace(namespace + ':', ''); |
| 63 | + if (!namespace) |
| 64 | + return name; |
| 65 | + return name.replace(new RegExp('^' + namespace + ':'), ''); |
61 | 66 | }, |
62 | 67 | _toStoredValue = function (value) { |
63 | 68 | return JSON.stringify(value); |
|
67 | 72 | }; |
68 | 73 |
|
69 | 74 | // local storage |
70 | | - _storages['local'] = { |
| 75 | + _storages.local = { |
71 | 76 | engine: window.localStorage, |
72 | 77 | check: function () { |
73 | 78 | try { |
|
92 | 97 | reset: function (namespace) { |
93 | 98 | for (var i = 0, key; i < this.engine.length; i++) { |
94 | 99 | key = this.engine.key(i); |
95 | | - if (key.indexOf(namespace) === 0) { |
| 100 | + if (!namespace || key.indexOf(namespace) === 0) { |
96 | 101 | this.remove(key); |
97 | 102 | i--; |
98 | 103 | } |
|
102 | 107 | var keys = []; |
103 | 108 | for (var i = 0, key; i < this.engine.length; i++) { |
104 | 109 | key = this.engine.key(i); |
105 | | - if (key.indexOf(namespace) === 0) |
| 110 | + if (!namespace || key.indexOf(namespace) === 0) |
106 | 111 | keys.push(_toKeyName(namespace, key)); |
107 | 112 | } |
108 | 113 | return keys; |
109 | 114 | } |
110 | 115 | }; |
111 | 116 |
|
112 | 117 | // session storage |
113 | | - _storages['session'] = Basil.utils.extend({}, _storages['local'], { |
| 118 | + _storages.session = Basil.utils.extend({}, _storages.local, { |
114 | 119 | engine: window.sessionStorage |
115 | 120 | }); |
116 | 121 |
|
117 | 122 | // memory storage |
118 | | - _storages['memory'] = { |
| 123 | + _storages.memory = { |
119 | 124 | _hash: {}, |
120 | 125 | check: function () { |
121 | 126 | return true; |
|
133 | 138 | }, |
134 | 139 | reset: function (namespace) { |
135 | 140 | for (var key in this._hash) { |
136 | | - if (key.indexOf(namespace) === 0) |
| 141 | + if (!namespace || key.indexOf(namespace) === 0) |
137 | 142 | this.remove(key); |
138 | 143 | } |
139 | 144 | }, |
140 | 145 | keys: function (namespace) { |
141 | 146 | var keys = []; |
142 | 147 | for (var key in this._hash) |
143 | | - if (key.indexOf(namespace) === 0) |
| 148 | + if (!namespace || key.indexOf(namespace) === 0) |
144 | 149 | keys.push(_toKeyName(namespace, key)); |
145 | 150 | return keys; |
146 | 151 | } |
147 | 152 | }; |
148 | 153 |
|
149 | 154 | // cookie storage |
150 | | - _storages['cookie'] = { |
| 155 | + _storages.cookie = { |
151 | 156 | check: function () { |
152 | 157 | return navigator.cookieEnabled; |
153 | 158 | }, |
|
167 | 172 | }, |
168 | 173 | get: function (name) { |
169 | 174 | var cookies = document.cookie.split(';'); |
170 | | - for (var i = 0; i < cookies.length; i++) { |
171 | | - var cookie = cookies[i].replace(/^\s*/, ''); |
| 175 | + for (var i = 0, cookie; i < cookies.length; i++) { |
| 176 | + cookie = cookies[i].replace(/^\s*/, ''); |
172 | 177 | if (cookie.indexOf(name + '=') === 0) |
173 | 178 | return cookie.substring(name.length + 1, cookie.length); |
174 | 179 | } |
|
187 | 192 | }, |
188 | 193 | reset: function (namespace) { |
189 | 194 | var cookies = document.cookie.split(';'); |
190 | | - for (var i = 0; i < cookies.length; i++) { |
191 | | - var cookie = cookies[i].replace(/^\s*/, ''), |
192 | | - key = cookie.substr(0, cookie.indexOf('=')); |
193 | | - if (key.indexOf(namespace) === 0) |
| 195 | + for (var i = 0, cookie, key; i < cookies.length; i++) { |
| 196 | + cookie = cookies[i].replace(/^\s*/, ''); |
| 197 | + key = cookie.substr(0, cookie.indexOf('=')); |
| 198 | + if (!namespace || key.indexOf(namespace) === 0) |
194 | 199 | this.remove(key); |
195 | 200 | } |
196 | 201 | }, |
197 | 202 | keys: function (namespace) { |
198 | 203 | var keys = [], |
199 | 204 | cookies = document.cookie.split(';'); |
200 | | - for (var i = 0; i < cookies.length; i++) { |
201 | | - var cookie = cookies[i].replace(/^\s*/, ''), |
202 | | - key = cookie.substr(0, cookie.indexOf('=')); |
203 | | - if (key.indexOf(namespace) === 0) |
| 205 | + for (var i = 0, cookie, key; i < cookies.length; i++) { |
| 206 | + cookie = cookies[i].replace(/^\s*/, ''); |
| 207 | + key = cookie.substr(0, cookie.indexOf('=')); |
| 208 | + if (!namespace || key.indexOf(namespace) === 0) |
204 | 209 | keys.push(_toKeyName(namespace, key)); |
205 | 210 | } |
206 | 211 | return keys; |
|
303 | 308 | storageKeys = _storages[storage].keys(namespace); |
304 | 309 | for (var j = 0, key; j < storageKeys.length; j++) { |
305 | 310 | key = storageKeys[j]; |
306 | | - map[key] = map[key] || []; |
| 311 | + map[key] = map[key] instanceof Array ? map[key] : []; |
307 | 312 | map[key].push(storage); |
308 | 313 | } |
309 | 314 | } |
310 | 315 | return map; |
311 | 316 | }, |
312 | 317 | // Access to native storages, without namespace or basil value decoration |
| 318 | + memory: _storages.memory, |
313 | 319 | cookie: _storages.cookie, |
314 | 320 | localStorage: _storages.local, |
315 | 321 | sessionStorage: _storages.session |
|
0 commit comments