Skip to content

Commit 8a6a669

Browse files
committed
Fix an issue causing documents to be saved multiple times
1 parent 1e3dcb8 commit 8a6a669

File tree

1 file changed

+18
-1
lines changed
  • src/xwiki/RTFrontend/WebHome/attachments

1 file changed

+18
-1
lines changed

src/xwiki/RTFrontend/WebHome/attachments/saver.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)