From 12f21d049a606c8ab07627e218fe38ea566a0e21 Mon Sep 17 00:00:00 2001 From: Armin Kirchner Date: Thu, 17 Jul 2025 17:59:22 +0200 Subject: [PATCH 1/3] refactor: Move Sprocket JS files to Webpack (Part 1) JavaScript for RfCs, Flashes and the color mode can be moved without modifications. Relates to #3021 --- app/assets/javascripts/application.js | 4 ---- app/javascript/application.js | 4 ++++ .../javascript/sprocket_asset_import}/color_mode_picker.js | 0 .../javascript/sprocket_asset_import}/flash.js | 0 app/javascript/sprocket_asset_import/index.js | 4 ++++ .../sprocket_asset_import}/request_for_comments.js | 0 6 files changed, 8 insertions(+), 4 deletions(-) rename {lib/assets/javascripts => app/javascript/sprocket_asset_import}/color_mode_picker.js (100%) rename {lib/assets/javascripts => app/javascript/sprocket_asset_import}/flash.js (100%) create mode 100644 app/javascript/sprocket_asset_import/index.js rename app/{assets/javascripts => javascript/sprocket_asset_import}/request_for_comments.js (100%) diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index d58279b98..6c6f0f301 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -13,10 +13,6 @@ //= require rails-timeago //= require locales/jquery.timeago.de.js // -// lib/assets -//= require flash -//= require color_mode_picker -// // app/assets // --> Include some assets first, as they are used by other assets. // --> Hence, the order specified here is important. diff --git a/app/javascript/application.js b/app/javascript/application.js index daaf6b697..7b2e9f1b6 100644 --- a/app/javascript/application.js +++ b/app/javascript/application.js @@ -88,3 +88,7 @@ window.ace = ace; // Publish ace in global namespace // Turbo import '@hotwired/turbo-rails'; import './turbo-migration'; + +// Import of Rails sprocket assets with minimal changes. After the initial migration these files should +// be moved to an appropriate place after some adjustments to fit modern Rails JS. +import 'sprocket_asset_import'; diff --git a/lib/assets/javascripts/color_mode_picker.js b/app/javascript/sprocket_asset_import/color_mode_picker.js similarity index 100% rename from lib/assets/javascripts/color_mode_picker.js rename to app/javascript/sprocket_asset_import/color_mode_picker.js diff --git a/lib/assets/javascripts/flash.js b/app/javascript/sprocket_asset_import/flash.js similarity index 100% rename from lib/assets/javascripts/flash.js rename to app/javascript/sprocket_asset_import/flash.js diff --git a/app/javascript/sprocket_asset_import/index.js b/app/javascript/sprocket_asset_import/index.js new file mode 100644 index 000000000..c5c240fee --- /dev/null +++ b/app/javascript/sprocket_asset_import/index.js @@ -0,0 +1,4 @@ +import './flash'; +import './color_mode_picker'; + +import './request_for_comments'; diff --git a/app/assets/javascripts/request_for_comments.js b/app/javascript/sprocket_asset_import/request_for_comments.js similarity index 100% rename from app/assets/javascripts/request_for_comments.js rename to app/javascript/sprocket_asset_import/request_for_comments.js From 82a05a6396c502f599675144353beb4646170466 Mon Sep 17 00:00:00 2001 From: Armin Kirchner Date: Tue, 22 Jul 2025 14:25:23 +0200 Subject: [PATCH 2/3] refactor: Move Sprocket JS files to Webpack (Part 2) Code editor modules are moved with minimal changes. Relates to #3021 --- app/assets/javascripts/application.js | 6 +----- .../sprocket_asset_import}/editor/ajax.js | 2 +- .../sprocket_asset_import}/editor/editor.js | 10 +++++----- .../sprocket_asset_import}/editor/evaluation.js | 2 +- .../sprocket_asset_import}/editor/execution.js | 2 +- app/javascript/sprocket_asset_import/editor/index.js | 10 ++++++++++ .../editor/participantsupport.js | 2 +- .../sprocket_asset_import}/editor/prompt.js | 4 ++-- .../sprocket_asset_import}/editor/submissions.js | 2 +- .../sprocket_asset_import}/editor/turtle.js | 4 +++- .../sprocket_asset_import}/editor/websocket.js | 2 +- app/javascript/sprocket_asset_import/index.js | 1 + .../sprocket_asset_import}/turtle.js | 2 ++ 13 files changed, 30 insertions(+), 19 deletions(-) rename app/{assets/javascripts => javascript/sprocket_asset_import}/editor/ajax.js (93%) rename app/{assets/javascripts => javascript/sprocket_asset_import}/editor/editor.js (99%) rename app/{assets/javascripts => javascript/sprocket_asset_import}/editor/evaluation.js (99%) rename app/{assets/javascripts => javascript/sprocket_asset_import}/editor/execution.js (99%) create mode 100644 app/javascript/sprocket_asset_import/editor/index.js rename app/{assets/javascripts => javascript/sprocket_asset_import}/editor/participantsupport.js (99%) rename app/{assets/javascripts => javascript/sprocket_asset_import}/editor/prompt.js (97%) rename app/{assets/javascripts => javascript/sprocket_asset_import}/editor/submissions.js (99%) rename app/{assets/javascripts => javascript/sprocket_asset_import}/editor/turtle.js (95%) rename app/{assets/javascripts => javascript/sprocket_asset_import}/editor/websocket.js (98%) rename app/{assets/javascripts => javascript/sprocket_asset_import}/turtle.js (99%) diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 6c6f0f301..39e55ff4f 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -21,12 +21,8 @@ //= require base // 2. Programming groups are required by "channels/synchronized_editor_channel.js" //= require programming_groups -// 3. The turtle library is required by "editor/turtle.js" -//= require turtle -// 4. Some channels are required by "editor/editor.js.erb" +// 3. Some channels are required by "editor/editor.js.erb" //= require_tree ./channels -// 5. Require the editor components, as needed by "./editor.js" and "./community_solution.js" -//= require_tree ./editor // // All remaining assets are loaded in alphabetical order //= require_tree . diff --git a/app/assets/javascripts/editor/ajax.js b/app/javascript/sprocket_asset_import/editor/ajax.js similarity index 93% rename from app/assets/javascripts/editor/ajax.js rename to app/javascript/sprocket_asset_import/editor/ajax.js index 127944f63..816018915 100644 --- a/app/assets/javascripts/editor/ajax.js +++ b/app/javascript/sprocket_asset_import/editor/ajax.js @@ -1,4 +1,4 @@ -CodeOceanEditorAJAX = { +window.CodeOceanEditorAJAX = { ajax: function(options) { return $.ajax(_.extend({ dataType: 'json', diff --git a/app/assets/javascripts/editor/editor.js b/app/javascript/sprocket_asset_import/editor/editor.js similarity index 99% rename from app/assets/javascripts/editor/editor.js rename to app/javascript/sprocket_asset_import/editor/editor.js index 5ee0937ec..2e7ee83b6 100644 --- a/app/assets/javascripts/editor/editor.js +++ b/app/javascript/sprocket_asset_import/editor/editor.js @@ -1,4 +1,4 @@ -var CodeOceanEditor = { +window.CodeOceanEditor = { THEME: window.getCurrentTheme() === 'dark' ? 'ace/theme/tomorrow_night' : 'ace/theme/tomorrow', //Color-Encoding for Percentages in Progress Bars (For submissions) @@ -28,8 +28,8 @@ var CodeOceanEditor = { lastCopyText: null, sendEvents: null, - eventURL: Routes.events_path(), - fileTypeURL: Routes.file_types_path(), + eventURL: () => Routes.events_path(), + fileTypeURL: () => Routes.file_types_path(), confirmDestroy: function (event) { event.preventDefault(); @@ -389,7 +389,7 @@ var CodeOceanEditor = { updateEditorModeToFileTypeID: function (editor, fileTypeID) { var newMode = 'ace/mode/text' - $.ajax(this.fileTypeURL + '/' + fileTypeID, { + $.ajax(this.fileTypeURL() + '/' + fileTypeID, { dataType: 'json' }).done(function (data) { if (data['editor_mode'] !== null) { @@ -668,7 +668,7 @@ var CodeOceanEditor = { publishCodeOceanEvent: function (payload) { if (this.sendEvents) { - $.ajax(this.eventURL, { + $.ajax(this.eventURL(), { type: 'POST', cache: false, dataType: 'JSON', diff --git a/app/assets/javascripts/editor/evaluation.js b/app/javascript/sprocket_asset_import/editor/evaluation.js similarity index 99% rename from app/assets/javascripts/editor/evaluation.js rename to app/javascript/sprocket_asset_import/editor/evaluation.js index a5ea6ef0e..e17f99e08 100644 --- a/app/assets/javascripts/editor/evaluation.js +++ b/app/javascript/sprocket_asset_import/editor/evaluation.js @@ -1,4 +1,4 @@ -CodeOceanEditorEvaluation = { +window.CodeOceanEditorEvaluation = { // A list of non-printable characters that are not allowed in the code output. // Taken from https://stackoverflow.com/a/69024306 nonPrintableRegEx: /[\u0000-\u0008\u000B\u000C\u000F-\u001F\u007F-\u009F\u2000-\u200F\u2028-\u202F\u205F-\u206F\u3000\uFEFF]/g, diff --git a/app/assets/javascripts/editor/execution.js b/app/javascript/sprocket_asset_import/editor/execution.js similarity index 99% rename from app/assets/javascripts/editor/execution.js rename to app/javascript/sprocket_asset_import/editor/execution.js index d727c63cb..c6ceae212 100644 --- a/app/assets/javascripts/editor/execution.js +++ b/app/javascript/sprocket_asset_import/editor/execution.js @@ -1,4 +1,4 @@ -CodeOceanEditorWebsocket = { +window.CodeOceanEditorWebsocket = { websocket: null, // Replace `http` with `ws` for the WebSocket connection. This also works with `https` and `wss`. webSocketProtocol: window.location.protocol.replace(/^http/, 'ws').split(':')[0], diff --git a/app/javascript/sprocket_asset_import/editor/index.js b/app/javascript/sprocket_asset_import/editor/index.js new file mode 100644 index 000000000..175f8eb2f --- /dev/null +++ b/app/javascript/sprocket_asset_import/editor/index.js @@ -0,0 +1,10 @@ +import './ajax'; +import './editor'; +import './evaluation'; +import './execution'; +import './participantsupport'; +import './prompt'; +import './submissions'; +import './turtle'; +import './websocket'; + diff --git a/app/assets/javascripts/editor/participantsupport.js b/app/javascript/sprocket_asset_import/editor/participantsupport.js similarity index 99% rename from app/assets/javascripts/editor/participantsupport.js rename to app/javascript/sprocket_asset_import/editor/participantsupport.js index bc78cc03e..55c2f5b27 100644 --- a/app/assets/javascripts/editor/participantsupport.js +++ b/app/javascript/sprocket_asset_import/editor/participantsupport.js @@ -1,4 +1,4 @@ -CodeOceanEditorFlowr = { +window.CodeOceanEditorFlowr = { flowrResultHtml: '
' + '