-
Notifications
You must be signed in to change notification settings - Fork 0
/
stayingalive.js
72 lines (64 loc) · 2.3 KB
/
stayingalive.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
/**
* stayAlive: Save input as it's typed to local storage, so if the page
* is reloaded, connection is lost, etc, the data is still there.
*
* Usage: Just just use as a jquery function e.g. $('#myobject').stayAlive();
*
* By default the saved version is discarded on form submit.
*
* @param {String} options.scope: A string identifying this page, and
* distinguishing it from other pages on the
* same origin that may have inputs with the same
* ID's (default: `window.location.pathname`).
* @param {Number} options.ttl: The expiration time for the saved values,
* in milliseconds
*/
(function($) {
$.fn.stayAlive = function(options) {
options = $.extend(
{},
{
scope: window.location.pathname,
ttl: undefined // milliseconds
},
options || {}
);
var form = this.closest("form");
if (this.is("form")) {
this.find("input, textarea").each(function() {
keepInputItem($(this).prop("id"), form);
});
} else {
keepInputItem(this.prop("id"), form);
}
/*
* Handle a specific input field
*/
function keepInputItem(id, form) {
if (!id) {
throw new Error(
"stayAlive: All preserved inputs must have an ID.");
}
var key = options.scope + ":" + id;
$(function() {//When the form is ready
//load the value from local storage
var prevValue = $.jStorage.get(key);
if (prevValue) {
$('#' + id).val(prevValue);
}
});
//Whenever there's a change to the field
$('#' + id).bind('input propertychange', function() {
var val = $('#' + id).val();
//save it
$.jStorage.set(key, val, {TTL: options.ttl});
});
//When the form is submitted
form.submit(function() {
//Remove the saved value for this field
$.jStorage.deleteKey(key);
});
}
return this;
};
})(jQuery);