From b43441f85e4b55ff85d360fb6f684345d3a510a7 Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Wed, 6 Sep 2023 22:41:03 +0200 Subject: [PATCH] Set lastDeltaObject per file * This change will potentially resolve a race condition that could occur when the same change was simultaneously performed in two different files. --- app/assets/javascripts/editor/editor.js.erb | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/editor/editor.js.erb b/app/assets/javascripts/editor/editor.js.erb index 4e3bffed..2b8a331a 100644 --- a/app/assets/javascripts/editor/editor.js.erb +++ b/app/assets/javascripts/editor/editor.js.erb @@ -29,7 +29,7 @@ var CodeOceanEditor = { running: false, lastCopyText: null, - lastDeltaObject: null, + lastDeltaObject_for_file: new Map(), <% self.class.include Rails.application.routes.url_helpers %> <% @config ||= CodeOcean::Config.new(:code_ocean).read(erb: false) %> @@ -313,6 +313,7 @@ var CodeOceanEditor = { editor.commands.bindKey("ctrl+alt+0", null); this.editors.push(editor); this.editor_for_file.set($(element).parent().data('filename'), editor); + this.lastDeltaObject_for_file.set($(element).parent().data('filename'), null); var session = editor.getSession(); var mode = $(element).data('mode') session.setMode(mode); @@ -335,8 +336,8 @@ var CodeOceanEditor = { // listener for autosave session.on("change", function (deltaObject, session) { - if (this.compareDeltaObjects(deltaObject, CodeOceanEditor.lastDeltaObject)) { - CodeOceanEditor.lastDeltaObject = null; + if (this.compareDeltaObjects(deltaObject, this.lastDeltaObject_for_file.get(this.active_file.filename))) { + this.lastDeltaObject_for_file.set(this.active_file.filename, null); return; } App.synchronized_editor?.editor_change(deltaObject, this.active_file); @@ -1037,7 +1038,7 @@ var CodeOceanEditor = { }, applyChanges: function (delta, active_file) { - this.lastDeltaObject = delta; + this.lastDeltaObject_for_file.set(active_file.filename, delta); const editor = this.editor_for_file.get(active_file.filename) editor.session.doc.applyDeltas([delta]); },