Files
codeocean/app/assets/javascripts/community_solution.js
Sebastian Serth 86c67f3c9a Refactor code execution to use async functions
This refactoring is required for Sentry tracing. It ensures that the respective functions only return as soon as a code execution finished. With this approach, we can then instrument the duration of the functions, so that Sentry spans are created as desired.

Co-authored-by: Jan Graichen <jgraichen@altimos.de>
2024-05-24 14:52:14 +02:00

41 lines
1.4 KiB
JavaScript

$(document).on('turbolinks:load', function() {
if ($.isController('community_solutions') && $('#community-solution-editor').isPresent()) {
CodeOceanEditor.sendEvents = false;
CodeOceanEditor.editors = [];
CodeOceanEditor.initializeDescriptionToggle();
CodeOceanEditor.initializeEditors();
CodeOceanEditor.initializeEditors(true);
CodeOceanEditor.initializeFileTree();
CodeOceanEditor.initializeFileTree(true);
CodeOceanEditor.showFirstFile();
CodeOceanEditor.showFirstFile(true);
CodeOceanEditor.resizeAceEditors();
CodeOceanEditor.resizeAceEditors(true);
$.extend(
CodeOceanEditor,
CodeOceanEditorAJAX,
CodeOceanEditorSubmissions
)
$(document).on('theme:change:ace', CodeOceanEditor.handleAceThemeChangeEvent.bind(CodeOceanEditor));
$('#submit').one('click', submitCode.bind(CodeOceanEditor));
$('#accept').one('click', submitCode.bind(CodeOceanEditor));
}
});
function submitCode(event) {
const button = $(event.target) || $('#submit');
this.startSentryTransaction(button);
const submission = await this.createSubmission(button, null).catch(this.ajaxError.bind(this));
if (!submission) return;
if (!submission.redirect) return;
this.autosaveIfChanged();
this.stopCode(event);
this.editors = [];
Turbolinks.clearCache();
Turbolinks.visit(submission.redirect);
}