Skip to content

Commit d849f22

Browse files
committed
Move jury submission source edit details to modal
Previously, we always rendered the submission details (problem, language, entry point) form below the code editor. This prevents us from scaling the editor window to use all available height. We move this forum to a modal, triggered by a submit button on the top right of the IDE. This uses the same design as the proposed changes for the diff editor.
1 parent 26aeefa commit d849f22

File tree

3 files changed

+57
-21
lines changed

3 files changed

+57
-21
lines changed

webapp/src/Controller/Jury/SubmissionController.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -979,8 +979,7 @@ public function editSourceAction(Request $request, Submission $submission, #[Map
979979
->add('entry_point', TextType::class, [
980980
'label' => 'Optional entry point',
981981
'required' => false,
982-
])
983-
->add('submit', SubmitType::class);
982+
]);
984983

985984
foreach ($files as $file) {
986985
$formBuilder->add('source' . $file->getRank(), TextareaType::class);
@@ -1039,12 +1038,17 @@ public function editSourceAction(Request $request, Submission $submission, #[Map
10391038
return $this->redirectToRoute('jury_submission', ['submitId' => $submittedSubmission->getSubmitid()]);
10401039
}
10411040

1042-
return $this->render('jury/submission_edit_source.html.twig', [
1041+
$twigData = [
10431042
'submission' => $submission,
10441043
'files' => $files,
10451044
'form' => $form,
10461045
'selected' => $rank,
1047-
]);
1046+
];
1047+
if ($request->isXmlHttpRequest()) {
1048+
return $this->render('jury/submission_edit_source_modal.html.twig', $twigData);
1049+
} else {
1050+
return $this->render('jury/submission_edit_source.html.twig', $twigData);
1051+
}
10481052
}
10491053

10501054
/**

webapp/templates/jury/submission_edit_source.html.twig

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@
1111
source files
1212
</h1>
1313

14-
{{ form_start(form) }}
15-
16-
<ul class="nav nav-tabs source-tab-nav">
14+
<ul class="nav nav-tabs source-tab-nav align-items-end">
1715
{%- for file in files %}
1816

1917
<li class="nav-item">
@@ -22,28 +20,38 @@
2220
</li>
2321
{%- endfor %}
2422

23+
<li class="nav-item flex-grow-1 text-end mb-1">
24+
<a class="btn btn-success btn-sm" data-ajax-modal data-ajax-modal-after="transferSourceToModal" href="{{ path('jury_submission_edit_source', {submission: submission.submitid}) }}">
25+
<i class="fas fa-cloud-upload-alt"></i> Submit
26+
</a>
27+
</li>
2528
</ul>
29+
30+
<script>
31+
function transferSourceToModal(elem) {
32+
const editors = monaco.editor.getEditors();
33+
const idx = {{ files | keys | json_encode }}
34+
for (let i = 0; i < editors.length; ++i) {
35+
const tab = editors[i].getDomNode().parentElement.parentElement;
36+
const rank = tab.dataset.rank;
37+
if (rank !== undefined && tab.id === `source-${rank}`) {
38+
const input = $(`#form_source${rank}`);
39+
input.val(editors[i].getValue());
40+
// Hide the source in the modal
41+
input.closest('div.mb-3').hide();
42+
}
43+
}
44+
}
45+
</script>
2646
<div class="tab-content source-tab">
2747
{%- for idx, file in files %}
2848

2949
<div class="tab-pane fade {% if (selected is null and loop.first) or selected == file.rank %}show active{% endif %}"
30-
id="source-{{ file.rank }}" role="tabpanel">
31-
{{ file.sourcecode | codeEditor(idx, submission.language.editorLanguage, true, 'form_source' ~ file.rank) }}
32-
<script>
33-
$(function () {
34-
$('#form_source{{ file.rank }}').closest('div.mb-3').hide();
35-
});
36-
</script>
50+
id="source-{{ file.rank }}" data-rank="{{ file.rank }}" role="tabpanel">
51+
{{ file.sourcecode | codeEditor(idx, submission.language.editorLanguage, true) }}
3752
</div>
3853
{%- endfor %}
3954

4055
</div>
4156

42-
<div class="row">
43-
<div class="col-lg-4">
44-
{{ form_widget(form) }}
45-
</div>
46-
</div>
47-
{{ form_end(form) }}
48-
4957
{% endblock %}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<div class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
2+
<div class="modal-dialog modal-lg" role="document">
3+
<div class="modal-content">
4+
<div class="modal-header">
5+
<h5 class="modal-title">
6+
Submission details
7+
</h5>
8+
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
9+
</div>
10+
{{ form_start(form) }}
11+
<div class="modal-body">
12+
{{ form_widget(form) }}
13+
</div>
14+
<div class="modal-footer">
15+
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
16+
{# {{ form_row(form.submit, { 'label': 'Submit me' }) }} #}
17+
<button type="submit" class="btn-success btn">
18+
<i class="fas fa-cloud-upload-alt"></i> Submit
19+
</button>
20+
</div>
21+
{{ form_end(form) }}
22+
</div>
23+
</div>
24+
</div>

0 commit comments

Comments
 (0)