Skip to content

Instantly share code, notes, and snippets.

@olivmonnier
Last active June 14, 2016 08:58
Show Gist options
  • Save olivmonnier/ad64ff886a36eafeb72c to your computer and use it in GitHub Desktop.
Save olivmonnier/ad64ff886a36eafeb72c to your computer and use it in GitHub Desktop.
Création d'un cookie sur les formulaires
<form id="form">
<input type="text" name="first_name"/>
<input type="text" name="last_name"/>
<input type="email" name="email"/>
<input type="submit" value="Send"/>
</form>
<script>
var cookieForm = new FormCookie('form', 365);
//Save or Update cookie 'form'
cookieForm.formDatas = $('#form').serializeArray();
cookieForm.exeptionFields = ['first_name'];
(cookieForm.exist()) ? cookieForm.update() : cookieForm.create();
//Put datas cookie in form
var cookieDatas = cookieForm.read();
if(cookieForm.exist()) {
for(var x = 0; x < cookieDatas.length; x++) {
$('[name="' + cookieDatas[x].name + '"]').val(cookieDatas[x].value).change();
}
}
</script>
(function() {
var FormCookie, root;
FormCookie = function(cookieName, day) {
this.cookieName = cookieName;
this.formDatas = [];
this.period = day;
this.exeptionFields = [];
};
FormCookie.prototype.create = function() {
if (this.period) {
var date = new Date();
date.setTime(date.getTime() + (this.period * 24 * 60 * 60 * 1000));
var expires = "; expires=" + date.toGMTString();
} else var expires = "";
for (var i = 0; i < this.formDatas.length; i++) {
for (var z = 0; z < this.exeptionFields.length; z++) {
if (this.formDatas[i].name == this.exeptionFields[z]) {
this.formDatas.splice(i, 1);
}
}
}
document.cookie = this.cookieName + "=" + JSON.stringify(this.formDatas) +
"; expires=" + date.toGMTString() + "; path=/";
};
FormCookie.prototype.read = function() {
var cookieArray = document.cookie.split(';'),
cookieSplit = [],
cookieName = '',
cookieNameLength = '';
for (var i = 0; i < cookieArray.length; i++) {
cookieSplit = cookieArray[i].split('=');
cookieName = cookieSplit[0].replace(/\s/g, '');
cookieNameLength = cookieSplit[0].length;
if (this.cookieName == cookieName) {
return JSON.parse(cookieArray[i].substring(cookieNameLength + 1));
}
}
};
FormCookie.prototype.exist = function() {
return (this.read());
}
FormCookie.prototype.get = function(name) {
var allKeys = this.read();
for (var i = 0; i < allKeys.length; i++) {
if (allKeys[i].name == name) {
return allKeys[i].value;
}
}
};
FormCookie.prototype.update = function() {
var cookieDatas = this.read();
for (var y = 0; y < cookieDatas.length; y++) {
for (var x = 0; x < this.formDatas.length; x++) {
if (cookieDatas[y].name == this.formDatas[x].name) {
cookieDatas[y].value = this.formDatas[x].value;
}
}
}
for (var x = 0; x < this.formDatas.length; x++) {
var exist = false;
for (var y = 0; y < cookieDatas.length; y++) {
if (this.formDatas[x].name == cookieDatas[y].name) {
cookieDatas[y].value = this.formDatas[x].value;
exist = true;
}
}
if (!exist) {
cookieDatas.push({
name: this.formDatas[x].name,
value: this.formDatas[x].value
});
}
}
this.formDatas = cookieDatas;
this.create();
};
root = typeof exports !== "undefined" && exports !== null ? exports :
window;
root.FormCookie = FormCookie;
}).call(this);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment