69 lines
2.1 KiB
JavaScript
69 lines
2.1 KiB
JavaScript
/* global alertify, store */
|
|
var feature = {
|
|
addEventListener : !!window.addEventListener,
|
|
querySelectorAll : !!document.querySelectorAll
|
|
};
|
|
|
|
if (feature.addEventListener && feature.querySelectorAll) {
|
|
var keys = getKeys();
|
|
for (var i = 0; i < keys.length; i++) {
|
|
if (store.get(keys[i])) {
|
|
var formId = keys[i].split('~')[1];
|
|
document.getElementById(formId).value = store.get(keys[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
var timerId = window.setInterval(function() {
|
|
var saved = false;
|
|
var inputs = document.querySelectorAll('input[type=text], textarea');
|
|
for (var i = 0; i < inputs.length; i++) {
|
|
var key = getFormElement(inputs[i]).id + '~' + inputs[i].id;
|
|
if (store.get(key) !== inputs[i].value && inputs[i].value !== '') {
|
|
store.set(key, inputs[i].value);
|
|
saved = true;
|
|
}
|
|
}
|
|
if (saved === true) {
|
|
alertify.logPosition('top right');
|
|
alertify.success('Auto saved text');
|
|
}
|
|
}, 5000);
|
|
var forms = document.querySelectorAll('form');
|
|
for (var f = 0; f < forms.length; f++) {
|
|
var form = forms[f];
|
|
form.addEventListener('submit', function() {
|
|
window.clearInterval(timerId);
|
|
var formId = form.id;
|
|
var storedKeys = store.keys();
|
|
for (var i = 0; i < storedKeys.length; i++) {
|
|
if (storedKeys[i].indexOf(formId) > -1) {
|
|
store.remove(storedKeys[i]);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
function getKeys() {
|
|
var keys = [];
|
|
var formFields = document.querySelectorAll('input[type=text], textarea');
|
|
for (var f = 0; f < formFields.length; f++) {
|
|
var parent = getFormElement(formFields[f]);
|
|
if (parent !== false) {
|
|
var key = parent.id + '~' + formFields[f].id;
|
|
keys.push(key);
|
|
}
|
|
}
|
|
return keys;
|
|
}
|
|
function getFormElement(elem) {
|
|
if (elem.nodeName.toLowerCase() !== 'body') {
|
|
var parent = elem.parentNode;
|
|
if (parent.nodeName.toLowerCase() === 'form') {
|
|
return parent;
|
|
} else {
|
|
return getFormElement(parent);
|
|
}
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|