1 |
|
2 | 'use strict';
|
3 |
|
4 | (function () {
|
5 |
|
6 | function createStorage() {
|
7 | var s = {},
|
8 | noopCallback = function noopCallback() {},
|
9 | _itemInsertionCallback = noopCallback;
|
10 |
|
11 | Object.defineProperty(s, 'setItem', {
|
12 | get: function get() {
|
13 | return function (k, v) {
|
14 | k = k + '';
|
15 | if (!s.hasOwnProperty(k)) {
|
16 | _itemInsertionCallback(s.length);
|
17 | }
|
18 | s[k] = v + '';
|
19 | };
|
20 | }
|
21 | });
|
22 | Object.defineProperty(s, 'getItem', {
|
23 | get: function get() {
|
24 | return function (k) {
|
25 | k = k + '';
|
26 | if (s.hasOwnProperty(k)) {
|
27 | return s[k];
|
28 | } else {
|
29 | return null;
|
30 | }
|
31 | };
|
32 | }
|
33 | });
|
34 | Object.defineProperty(s, 'removeItem', {
|
35 | get: function get() {
|
36 | return function (k) {
|
37 | k = k + '';
|
38 | if (s.hasOwnProperty(k)) {
|
39 | delete s[k];
|
40 | }
|
41 | };
|
42 | }
|
43 | });
|
44 | Object.defineProperty(s, 'clear', {
|
45 | get: function get() {
|
46 | return function () {
|
47 | for (var k in s) {
|
48 | if (s.hasOwnProperty(k)) {
|
49 | delete s[k];
|
50 | }
|
51 | }
|
52 | };
|
53 | }
|
54 | });
|
55 | Object.defineProperty(s, 'length', {
|
56 | get: function get() {
|
57 | return Object.keys(s).length;
|
58 | }
|
59 | });
|
60 | Object.defineProperty(s, "key", {
|
61 | value: function value(k) {
|
62 | var key = Object.keys(s)[k];
|
63 | return !key ? null : key;
|
64 | }
|
65 | });
|
66 | Object.defineProperty(s, 'itemInsertionCallback', {
|
67 | get: function get() {
|
68 | return _itemInsertionCallback;
|
69 | },
|
70 | set: function set(v) {
|
71 | if (!v || typeof v != 'function') {
|
72 | v = noopCallback;
|
73 | }
|
74 | _itemInsertionCallback = v;
|
75 | }
|
76 | });
|
77 | return s;
|
78 | }
|
79 |
|
80 | global.localStorage = createStorage();
|
81 | global.sessionStorage = createStorage();
|
82 |
|
83 | if (typeof window === 'undefined') {
|
84 | global.window = {};
|
85 | }
|
86 |
|
87 | window.localStorage = global.localStorage;
|
88 | window.sessionStorage = global.sessionStorage;
|
89 | })(); |
\ | No newline at end of file |