56 lines
1.5 KiB
JavaScript
56 lines
1.5 KiB
JavaScript
/**
|
|
* autosave plugin
|
|
*
|
|
* Copyright (c) 2009-2016 Fil (fil@rezo.net)
|
|
* Dual licensed under the MIT and GPL licenses:
|
|
* http://www.opensource.org/licenses/mit-license.php
|
|
* http://www.gnu.org/licenses/gpl.html
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* Usage: $("form").autosave({options...});
|
|
* to use with SPIP's action/session.php
|
|
*/
|
|
|
|
(function($){
|
|
$.fn.autosave = function(opt) {
|
|
opt = $.extend({
|
|
url: window.location,
|
|
confirm: false,
|
|
confirmstring: 'Sauvegarder ?'
|
|
},opt);
|
|
var save_changed = function(){
|
|
$('form.autosavechanged')
|
|
.each(function(){
|
|
if (!opt.confirm || confirm(opt.confirmstring)) {
|
|
var contenu = $(this).serialize();
|
|
// ajoutons un timestamp
|
|
var d=new Date();
|
|
contenu = contenu + "&__timestamp=" + Math.round(d.getTime()/1000);
|
|
$.post(opt.url, {
|
|
'action': 'session',
|
|
'var': 'autosave_' + $('input[name=autosave]', this).val(),
|
|
'val': contenu
|
|
});
|
|
}
|
|
}).removeClass('autosavechanged');
|
|
}
|
|
$(window).on('unload', save_changed);
|
|
return this
|
|
.on('keyup', function() {
|
|
$(this).addClass('autosavechanged');
|
|
})
|
|
.on('change', function() {
|
|
$(this).addClass('autosavechanged');
|
|
save_changed();
|
|
})
|
|
.on('submit',function() {
|
|
save_changed();
|
|
/* trop agressif : exemple du submit previsu forum, ou des submit suivant/precedent d'un cvt multipage
|
|
on sauvegarde toujours, et le serveur videra quand il faudra */
|
|
/*$(this).removeClass('autosavechanged')*/;
|
|
});
|
|
}
|
|
})(jQuery);
|
|
|