@@ -35,6 +35,8 @@ define([
3535 isavedSignature : ''
3636 } ;
3737
38+ var isSaving = false ;
39+
3840 var configure = Saver . configure = function ( config ) {
3941 mainConfig . ajaxMergeUrl = config . ajaxMergeUrl + '?xpage=plain&outputSyntax=plain' ;
4042 mainConfig . ajaxVersionUrl = config . ajaxVersionUrl ;
@@ -138,6 +140,7 @@ define([
138140 error : function ( err ) {
139141 ErrorBox . show ( 'velocity' ) ;
140142 warn ( err ) ;
143+ isSaving = false ;
141144 //cb(err,null);
142145 } ,
143146 } ) ;
@@ -228,6 +231,7 @@ define([
228231 andThen ( ) ;
229232 } ,
230233 error : function ( jqxhr , err , cause ) {
234+ isSaving = false ;
231235 ErrorBox . show ( 'save' ) ;
232236 warn ( err ) ;
233237 // Don't callback, this way in case of error we will keep trying.
@@ -302,6 +306,7 @@ define([
302306 warn ( "The ajax merge API did not return an object. " +
303307 "Something went wrong" ) ;
304308 warn ( err ) ;
309+ isSaving = false ;
305310 return ;
306311 } else if ( err === merge . error ) { // there was a merge error
307312 // continue and handle elsewhere
@@ -310,12 +315,14 @@ define([
310315 // it was some other kind of error... parsing?
311316 // complain and return. this means the script failed
312317 warn ( err ) ;
318+ isSaving = false ;
313319 return ;
314320 }
315321 }
316322
317323 if ( isaveInterrupt ( ) ) {
318324 andThen ( "ISAVED interrupt" , null ) ;
325+ isSaving = false ;
319326 return ;
320327 }
321328
@@ -328,6 +335,7 @@ define([
328335 } else { */
329336 // don't dead end, but indicate that you shouldn't save.
330337 andThen ( "Merging didn't result in a change." , false ) ;
338+ isSaving = false ;
331339 return ;
332340 // }
333341 }
@@ -389,10 +397,10 @@ define([
389397 } , null ) ;
390398 continuation ( andThen ) ;
391399 } ) ;
392-
393400 } ,
394401 error : function ( err ) {
395402 mainConfig . safeCrash ( 'keepremote' ) ;
403+ isSaving = false ;
396404 warn ( "Encountered an error while fetching remote content" ) ;
397405 warn ( err ) ;
398406 }
@@ -411,6 +419,7 @@ define([
411419 andThen ( "The realtime content changed while we " +
412420 "were performing our asynchronous merge." ,
413421 false ) ;
422+ isSaving = false ;
414423 return ; // try again in one cycle
415424 } else {
416425 // walk the tree of hashes and if merge.previousVersionContent
@@ -581,6 +590,7 @@ define([
581590 var toSave = mainConfig . getTextValue ( ) ;
582591 if ( e ) {
583592 warn ( e ) ;
593+ isSaving = false ;
584594 return ;
585595 } else if ( shouldSave ) {
586596
@@ -601,6 +611,7 @@ define([
601611 }
602612 lastSaved . mergeMessage ( 'saved' , [ out . version ] ) ;
603613 } , null ) ;
614+ isSaving = false ;
604615 } ) ;
605616 return ;
606617 } else {
@@ -609,6 +620,7 @@ define([
609620 lastSaved . content = toSave ;
610621 // didn't save, don't need a callback
611622 bumpVersion ( ) ;
623+ isSaving = false ;
612624 return ;
613625 }
614626 } ;
@@ -624,6 +636,9 @@ define([
624636 return ;
625637 }
626638
639+ isSaving = true ;
640+ if ( isSaving ) { return ; }
641+
627642 if ( mainConfig . mergeContent ) {
628643 mergeRoutine ( andThen ) ;
629644 }
@@ -719,6 +734,7 @@ define([
719734 lastSaved . mergeMessage ( "saved" , [ out . version ] ) ;
720735 } , out ) ;
721736 }
737+ isSaving = false ;
722738 } ) ;
723739 return true ;
724740 } ;
@@ -727,6 +743,7 @@ define([
727743 var onSaveFailedHandler = mainConfig . onSaveFailed = function ( ev ) {
728744 ErrorBox . show ( 'save' ) ;
729745 warn ( "save failed!!!" ) ;
746+ isSaving = false ;
730747 } ;
731748 document . observe ( "xwiki:document:saveFailed" , onSaveFailedHandler ) ;
732749
0 commit comments