57 lines
1.5 KiB
JavaScript
57 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);
|
||
|
|