This repository has been archived by the owner on Apr 4, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
124 lines (100 loc) · 2.12 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/**
* dependencies
*/
var unserialize = require('unserialize')
, value = require('value');
/**
* Export `store`.
*/
Atkinson.store = window.localStorage || {};
/**
* Export `selector`.
*/
Atkinson.selector = 'input' + ([
':not([type="submit"])',
':not([type="image"])',
':not([type="password"])',
':not([type="hidden"])',
':not([disabled])',
', select, textarea'
]).join('');
/**
* Export `adapter`.
*/
Atkinson.adapter = value;
/**
* export `Atkinson`
*/
module.exports = Atkinson;
/**
* initialize new `Atkinson` with the given `el`.
*
* @param {String} prefix
* @param {HTMLFormElement} el
*/
function Atkinson(prefix, el){
this.selector = Atkinson.selector;
this.store = Atkinson.store;
if (!el) el = prefix, prefix = el.action;
this.value = Atkinson.adapter;
this.prefix = prefix;
this.el = el;
}
/**
* Remember all input values.
*
* @return {Atkinson}
* @api public
*/
Atkinson.prototype.save = function(){
var all = this.el.querySelectorAll(this.selector)
, len = all.length
, store = this.store
, key, val;
for (var i = 0; i < len; ++i) {
key = this.prefix + ':' + i + ':' + all[i].name;
val = JSON.stringify(this.value(all[i]));
store[key] = val;
}
return this;
};
/**
* Restore all stored data to the form.
*
* @return {Atkinson}
* @api public
*/
Atkinson.prototype.restore = function(){
var all = this.el.querySelectorAll(this.selector)
, len = all.length
, store = this.store
, key, val
, type;
for (var i = 0; i < len; ++i) {
key = this.prefix + ':' + i + ':' + all[i].name;
val = unserialize(store[key]);
if (null == val) continue;
this.value(all[i], val);
}
return this;
};
/**
* Clear all stored data.
*
* @return {Atkinson}
* @api public
*/
Atkinson.prototype.clear =
Atkinson.prototype.clean = function(){
var all = this.el.querySelectorAll(this.selector)
, len = all.length
, store = this.store
, key, val;
for (var i = 0; i < len; ++i) {
key = this.prefix + ':' + i + ':' + all[i].name;
val = store[key];
if (!val) continue;
delete store[key];
}
return this;
};