diff --git a/services/web/public/js/ace-1.2.5/mode-latex.js b/services/web/public/js/ace-1.2.5/mode-latex.js index c87324efe4..f183d7c263 100644 --- a/services/web/public/js/ace-1.2.5/mode-latex.js +++ b/services/web/public/js/ace-1.2.5/mode-latex.js @@ -214,18 +214,21 @@ var createLatexWorker = function (session) { var suppressions = []; var hints = []; var changeHandler = null; + var docChangePending = false; + var firstPass = true; var worker = new WorkerClient(["ace"], "ace/mode/latex_worker", "LatexWorker"); worker.attachToDocument(doc); - - doc.on("change", function () { + var docChangeHandler = doc.on("change", function () { + docChangePending = true; if(changeHandler) { clearTimeout(changeHandler); changeHandler = null; } }); - selection.on("changeCursor", function () { + var cursorHandler = selection.on("changeCursor", function () { + if (docChangePending) { return; } ; changeHandler = setTimeout(function () { updateMarkers({cursorMoveOnly:true}); suppressions = []; @@ -307,11 +310,20 @@ var createLatexWorker = function (session) { } } if (!cursorMoveOnly || suppressedChanges) { - session.setAnnotations(annotations); + if (firstPass) { + if (annotations.length > 0) { + var originalAnnotations = session.getAnnotations(); + session.setAnnotations(originalAnnotations.concat(annotations)); + }; + firstPass = false; + } else { + session.setAnnotations(annotations); + } }; }; worker.on("lint", function(results) { + if(docChangePending) { docChangePending = false; }; hints = results.data; if (hints.length > 100) { hints = hints.slice(0, 100); // limit to 100 errors @@ -319,14 +331,22 @@ var createLatexWorker = function (session) { updateMarkers(); }); worker.on("terminate", function() { + if(changeHandler) { + clearTimeout(changeHandler); + changeHandler = null; + } + doc.off("change", docChangeHandler); + selection.off("changeCursor", cursorHandler); for (var key in savedRange) { var range = savedRange[key]; - range.start.detach(); - range.end.detach(); + if (range.start !== cursorAnchor) { range.start.detach(); } + if (range.end !== cursorAnchor) { range.end.detach(); } session.removeMarker(range.id); - delete savedRange[key]; } - + savedRange = {}; + hints = []; + suppressions = []; + session.clearAnnotations(); }); return worker; diff --git a/services/web/public/js/ace-1.2.5/worker-latex.js b/services/web/public/js/ace-1.2.5/worker-latex.js index c933f8db5f..20c377dc83 100644 --- a/services/web/public/js/ace-1.2.5/worker-latex.js +++ b/services/web/public/js/ace-1.2.5/worker-latex.js @@ -1755,7 +1755,7 @@ var InterpretTokens = function (TokeniseResult, ErrorReporter) { }; if (endToken) { - TokenErrorFromTo(token, endToken, "invalid environment command" + text.substring(token[2], endToken[3] || endToken[2])); + TokenErrorFromTo(token, endToken, "invalid environment command " + text.substring(token[2], endToken[3] || endToken[2])); } else { TokenError(token, "invalid environment command"); };