Skip to content

Commit 2514bc6

Browse files
committed
chore: add save interceptor
1 parent 55d58b4 commit 2514bc6

2 files changed

Lines changed: 44 additions & 6 deletions

File tree

src/document/DocumentCommandHandlers.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ define(function (require, exports, module) {
5959
NewFileContentManager = require("features/NewFileContentManager"),
6060
NodeConnector = require("NodeConnector"),
6161
NodeUtils = require("utils/NodeUtils"),
62+
ChangeHelper = require("editor/EditorHelper/ChangeHelper"),
6263
_ = require("thirdparty/lodash");
6364

6465
const KernalModeTrust = window.KernalModeTrust;
@@ -1243,11 +1244,13 @@ define(function (require, exports, module) {
12431244
* USER_CANCELED object).
12441245
*/
12451246
function handleFileSave(commandData) {
1246-
// todo save interceptor
1247-
var activeEditor = EditorManager.getActiveEditor(),
1247+
const activeEditor = EditorManager.getActiveEditor(),
12481248
activeDoc = activeEditor && activeEditor.document,
1249-
doc = (commandData && commandData.doc) || activeDoc,
1250-
settings;
1249+
doc = (commandData && commandData.doc) || activeDoc;
1250+
let settings;
1251+
if(ChangeHelper._onBeforeSave(doc)){
1252+
return $.Deferred().reject().promise();
1253+
}
12511254

12521255
if (doc && !doc.isSaving) {
12531256
if (doc.isUntitled()) {

src/editor/EditorHelper/ChangeHelper.js

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
*
2020
*/
2121

22+
/*global logger*/
23+
2224
/**
2325
* Editor instance helpers change handling. Only to be used from Editor.js.
2426
*/
@@ -316,19 +318,42 @@ define(function (require, exports, module) {
316318

317319
let _undoInterceptor = null;
318320
let _redoInterceptor = null;
321+
let _saveInterceptor = null;
322+
323+
function _onBeforeSave(docBeingSaved) {
324+
if(!_saveInterceptor){
325+
return false;
326+
}
327+
try{
328+
return _saveInterceptor(docBeingSaved);
329+
} catch (e) {
330+
logger.reportError(e, "Error in save interceptor");
331+
return false;
332+
}
333+
}
319334

320335
function _onBeforeUndo(editor, codeMirror, event) {
321336
if(!_undoInterceptor){
322337
return false;
323338
}
324-
return _undoInterceptor(editor, codeMirror, event);
339+
try {
340+
return _undoInterceptor(editor, codeMirror, event);
341+
} catch (e) {
342+
logger.reportError(e, "Error in undo interceptor");
343+
return false;
344+
}
325345
}
326346

327347
function _onBeforeRedo(editor, codeMirror, event) {
328348
if(!_redoInterceptor){
329349
return false;
330350
}
331-
return _redoInterceptor(editor, codeMirror, event);
351+
try {
352+
return _redoInterceptor(editor, codeMirror, event);
353+
} catch (e) {
354+
logger.reportError(e, "Error in redo interceptor");
355+
return false;
356+
}
332357
}
333358

334359
/**
@@ -379,9 +404,18 @@ define(function (require, exports, module) {
379404
_keyEventInterceptor = interceptor;
380405
}
381406

407+
/**
408+
* Sets the key down/up/press interceptor function in codemirror
409+
* @param {Function} interceptor - Function(editor, cm, event) that returns true to preventDefault
410+
*/
411+
function setSaveInterceptor(interceptor) {
412+
_saveInterceptor = interceptor;
413+
}
414+
382415
// private exports
383416
exports._onBeforeUndo =_onBeforeUndo;
384417
exports._onBeforeRedo = _onBeforeRedo;
418+
exports._onBeforeSave = _onBeforeSave;
385419

386420
// public exports
387421
exports.addHelpers = addHelpers;
@@ -391,4 +425,5 @@ define(function (require, exports, module) {
391425
exports.setCopyInterceptor = setCopyInterceptor;
392426
exports.setPasteInterceptor = setPasteInterceptor;
393427
exports.setKeyEventInterceptor = setKeyEventInterceptor;
428+
exports.setSaveInterceptor = setSaveInterceptor;
394429
});

0 commit comments

Comments
 (0)