From 23a95d315dbf14963d28d7635eb94f3b65c6b2f8 Mon Sep 17 00:00:00 2001 From: kiragrammel Date: Sun, 3 Sep 2023 22:47:20 +0200 Subject: [PATCH] Synchronized editor for multiple files --- .../javascripts/channels/synchronized_editor_channel.js | 6 +++--- app/assets/javascripts/editor/editor.js.erb | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/channels/synchronized_editor_channel.js b/app/assets/javascripts/channels/synchronized_editor_channel.js index 0aefc567..980b92dc 100644 --- a/app/assets/javascripts/channels/synchronized_editor_channel.js +++ b/app/assets/javascripts/channels/synchronized_editor_channel.js @@ -24,12 +24,12 @@ $(document).on('turbolinks:load', function () { received(data) { // Called when there's incoming data on the websocket for this channel if (current_user_id !== data['current_user_id']) { - CodeOceanEditor.applyChanges(data['delta']['data']); + CodeOceanEditor.applyChanges(data['delta']['data'], data['active_file']); } }, - send_changes(delta) { - const delta_with_user_id = {current_user_id: current_user_id, delta: delta} + send_changes(delta, active_file) { + const delta_with_user_id = {current_user_id: current_user_id, active_file: active_file, delta: delta} this.perform('send_changes', {delta_with_user_id: delta_with_user_id}); } }); diff --git a/app/assets/javascripts/editor/editor.js.erb b/app/assets/javascripts/editor/editor.js.erb index 852b1443..cdc405f8 100644 --- a/app/assets/javascripts/editor/editor.js.erb +++ b/app/assets/javascripts/editor/editor.js.erb @@ -339,7 +339,7 @@ var CodeOceanEditor = { CodeOceanEditor.lastDeltaObject = null; return; } - App.synchronized_editor?.send_changes(deltaObject); + App.synchronized_editor?.send_changes(deltaObject, this.active_file); // TODO: This is a workaround for a bug in Ace. Remove when upgrading Ace. this.handleUTF16Surrogates(deltaObject, session); @@ -1022,9 +1022,10 @@ var CodeOceanEditor = { } }, - applyChanges: function (delta) { + applyChanges: function (delta, active_file) { this.lastDeltaObject = delta; - this.editors[0].session.doc.applyDeltas([delta]); + const editor = this.editor_for_file.get(active_file.filename) + editor.session.doc.applyDeltas([delta]); }, compareDeltaObjects: function (delta, last_delta) {