mumuki-laboratory 5.1.1 → 5.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/application/kids.js +39 -9
- data/app/assets/javascripts/application/load-error-svg.js +4 -2
- data/app/assets/javascripts/application/submission.js +13 -5
- data/app/assets/stylesheets/application/modules/_kids_results.scss +15 -0
- data/app/helpers/assignment_result_helper.rb +6 -0
- data/app/models/status_rendering_verbosity.rb +1 -1
- data/app/views/exercise_solutions/_kids_results.html.erb +18 -0
- data/app/views/exercise_solutions/_kids_results_button.html.erb +1 -1
- data/app/views/exercise_solutions/_results.html.erb +6 -6
- data/app/views/layouts/_submission_result_error.html.erb +1 -6
- data/app/views/layouts/_submission_result_error_body.html.erb +6 -0
- data/app/views/layouts/_test_results.html.erb +1 -1
- data/app/views/layouts/exercise_inputs/layouts/_input_kids.html.erb +1 -0
- data/app/views/layouts/modals/_kids_results.html.erb +1 -2
- data/app/views/layouts/modals/_kids_results_aborted.html.erb +25 -0
- data/lib/mumuki/laboratory/controllers/results_rendering.rb +5 -1
- data/lib/mumuki/laboratory/locales/en.yml +1 -0
- data/lib/mumuki/laboratory/locales/es.yml +1 -0
- data/lib/mumuki/laboratory/locales/pt.yml +3 -2
- data/lib/mumuki/laboratory/status/base.rb +4 -0
- data/lib/mumuki/laboratory/status/failed.rb +4 -0
- data/lib/mumuki/laboratory/version.rb +1 -1
- data/public/amarillo_exito_bailarin.svg +16 -0
- data/public/magnifying_glass_apparition.svg +2 -0
- data/public/magnifying_glass_loop.svg +3 -0
- metadata +10 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cddf5c55fdcb3d1e9376cff1d680af997586ffdba858722d2bb110e4dacea793
|
4
|
+
data.tar.gz: 374c52c8fe4548f9675e6964e7c0ec17d0acaa203f0fc986991f83ca39c62044
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 48090ede128d27abc3788226708cad2e0b0c6313134567ba21309b5eba01369b7f17cbd00a6c2bef6f7977b38b324cdd9380292469679b0b32cc4d5658efdb09
|
7
|
+
data.tar.gz: 42363fa111d1179d003f68aa9850f425bbffe3f9c93a6d00df426025757000572c1dec69002ff830a2642d91d88f472e9b904d63add769686c4fa85a0e76098d
|
@@ -97,6 +97,10 @@ mumuki.load(function () {
|
|
97
97
|
return $('#kids-results');
|
98
98
|
},
|
99
99
|
|
100
|
+
getResultsAbortedModal: function () {
|
101
|
+
return $('#kids-results-aborted');
|
102
|
+
},
|
103
|
+
|
100
104
|
getCharaterImage: function () {
|
101
105
|
return $('.mu-kids-character > img');
|
102
106
|
},
|
@@ -120,13 +124,13 @@ mumuki.load(function () {
|
|
120
124
|
},
|
121
125
|
|
122
126
|
restart: function () { // This function is called by the custom runner
|
123
|
-
mumuki.kids.
|
127
|
+
mumuki.kids._hideMessageOnCharacterBubble();
|
124
128
|
var $bubble = mumuki.kids.getCharacterBubble();
|
125
129
|
Object.keys(mumuki.kids.resultAction).forEach($bubble.removeClass.bind($bubble));
|
126
130
|
mumuki.kids.getCharaterImage().attr('src', '/anim_amarillo.svg');
|
127
131
|
},
|
128
132
|
|
129
|
-
|
133
|
+
_hideMessageOnCharacterBubble: function () {
|
130
134
|
var $bubble = mumuki.kids.getCharacterBubble();
|
131
135
|
$bubble.find('.mu-kids-character-speech-bubble-tabs').show();
|
132
136
|
$bubble.find('.mu-kids-character-speech-bubble-normal').show();
|
@@ -135,7 +139,7 @@ mumuki.load(function () {
|
|
135
139
|
mumuki.kids.getOverlay().hide();
|
136
140
|
},
|
137
141
|
|
138
|
-
|
142
|
+
_showMessageOnCharacterBubble: function (data) {
|
139
143
|
var $bubble = mumuki.kids.getCharacterBubble();
|
140
144
|
$bubble.find('.mu-kids-character-speech-bubble-tabs').hide();
|
141
145
|
$bubble.find('.mu-kids-character-speech-bubble-normal').hide();
|
@@ -144,10 +148,10 @@ mumuki.load(function () {
|
|
144
148
|
mumuki.kids.getOverlay().show();
|
145
149
|
},
|
146
150
|
|
147
|
-
|
151
|
+
_showOnSuccessPopup: function (data) {
|
148
152
|
mumuki.kids.getSubmissionResult().html(data.html);
|
149
153
|
mumuki.kids.getCharaterImage().attr('src', '/amarillo_exito.svg');
|
150
|
-
mumuki.kids.
|
154
|
+
mumuki.kids._showMessageOnCharacterBubble(data);
|
151
155
|
setTimeout(function () {
|
152
156
|
var results_kids_modal = mumuki.kids.getResultsModal();
|
153
157
|
if (results_kids_modal) {
|
@@ -157,19 +161,44 @@ mumuki.load(function () {
|
|
157
161
|
});
|
158
162
|
results_kids_modal.find('.modal-header').first().html(data.title_html);
|
159
163
|
results_kids_modal.find('.modal-footer').first().html(data.button_html);
|
164
|
+
mumuki.kids._showCorollaryCharacter();
|
160
165
|
}
|
161
166
|
}, 1000 * 4);
|
162
167
|
},
|
163
168
|
|
169
|
+
_showOnFailurePopup: function () {
|
170
|
+
mumuki.kids.submitButton.disable();
|
171
|
+
mumuki.kids.getResultsAbortedModal().modal();
|
172
|
+
mumuki.submission.animateTimeoutError(mumuki.kids.submitButton);
|
173
|
+
},
|
174
|
+
|
164
175
|
_showOnCharacterBubble: function (data) {
|
165
176
|
mumuki.kids.getCharaterImage().attr('src', '/amarillo_fracaso.svg');
|
166
|
-
mumuki.kids.
|
177
|
+
mumuki.kids._showMessageOnCharacterBubble(data);
|
178
|
+
},
|
179
|
+
|
180
|
+
_showCorollaryCharacter: function () {
|
181
|
+
var image = $('#mu-kids-corollary-animation')[0];
|
182
|
+
setTimeout(function () {
|
183
|
+
image.src = mumuki.characters.magnifying_glass_apparition.url;
|
184
|
+
setTimeout(function () {
|
185
|
+
image.src = mumuki.characters.magnifying_glass_loop.url;
|
186
|
+
}, mumuki.characters.magnifying_glass_apparition.duration);
|
187
|
+
}, 500);
|
167
188
|
},
|
168
189
|
|
169
190
|
resultAction: {}
|
170
191
|
|
171
192
|
};
|
172
193
|
|
194
|
+
_createSubmitButton = function () {
|
195
|
+
var submitButton = $('#kids-btn-retry');
|
196
|
+
var submissionControl = $('.submission_control');
|
197
|
+
return new mumuki.submission.SubmitButton(submitButton, submissionControl);
|
198
|
+
};
|
199
|
+
|
200
|
+
mumuki.kids.submitButton = _createSubmitButton();
|
201
|
+
|
173
202
|
mumuki.showKidsResult = function (data) {
|
174
203
|
mumuki.updateProgressBarAndShowModal(data);
|
175
204
|
if (data.guide_finished_by_solution) return;
|
@@ -183,9 +212,10 @@ mumuki.load(function () {
|
|
183
212
|
}
|
184
213
|
};
|
185
214
|
|
186
|
-
mumuki.kids.resultAction.passed = mumuki.kids.
|
187
|
-
mumuki.kids.resultAction.
|
188
|
-
|
215
|
+
mumuki.kids.resultAction.passed = mumuki.kids._showOnSuccessPopup;
|
216
|
+
mumuki.kids.resultAction.passed_with_warnings = mumuki.kids._showOnSuccessPopup;
|
217
|
+
|
218
|
+
mumuki.kids.resultAction.aborted = mumuki.kids._showOnFailurePopup;
|
189
219
|
|
190
220
|
mumuki.kids.resultAction.failed = mumuki.kids._showOnCharacterBubble;
|
191
221
|
mumuki.kids.resultAction.errored = mumuki.kids._showOnCharacterBubble;
|
@@ -1,14 +1,16 @@
|
|
1
1
|
mumuki.load(function () {
|
2
|
-
var
|
2
|
+
var error_svgs = ['403', '404', '500', 'timeout_1', 'timeout_2', 'timeout_3'];
|
3
3
|
|
4
4
|
mumuki.errors = mumuki.errors || {};
|
5
5
|
mumuki.characters = mumuki.characters || {};
|
6
6
|
|
7
|
-
|
7
|
+
error_svgs.forEach(function (svgErrorSuffix) {
|
8
8
|
addImage(mumuki.errors, 'error_' + svgErrorSuffix, '/');
|
9
9
|
});
|
10
10
|
|
11
11
|
addImage(mumuki.characters, 'yellow_context', '/character/kids/');
|
12
|
+
addImage(mumuki.characters, 'magnifying_glass_apparition', '/');
|
13
|
+
addImage(mumuki.characters, 'magnifying_glass_loop', '/');
|
12
14
|
|
13
15
|
function addImage(object, imageName, urlPrefix) {
|
14
16
|
var url = urlPrefix + imageName + '.svg';
|
@@ -27,9 +27,9 @@ var mumuki = mumuki || {};
|
|
27
27
|
}
|
28
28
|
};
|
29
29
|
|
30
|
-
function SubmitButton() {
|
31
|
-
this.submitButton =
|
32
|
-
this.submissionControls =
|
30
|
+
function SubmitButton(submitButton, submissionControls) {
|
31
|
+
this.submitButton = submitButton;
|
32
|
+
this.submissionControls = submissionControls;
|
33
33
|
}
|
34
34
|
|
35
35
|
SubmitButton.prototype = {
|
@@ -55,11 +55,14 @@ var mumuki = mumuki || {};
|
|
55
55
|
if (!submissionsResults) return;
|
56
56
|
|
57
57
|
var resultsBox = new ResultsBox(submissionsResults);
|
58
|
-
|
58
|
+
|
59
|
+
var btnSubmit = $('.btn-submit');
|
60
|
+
var submissionControl = $('.submission_control');
|
61
|
+
var submitButton = new SubmitButton(btnSubmit, submissionControl);
|
59
62
|
|
60
63
|
var bridge = new mumuki.bridge.Laboratory;
|
61
64
|
|
62
|
-
|
65
|
+
btnSubmit.on('click', function (e) {
|
63
66
|
e.preventDefault();
|
64
67
|
submitButton.disable();
|
65
68
|
resultsBox.waiting();
|
@@ -101,4 +104,9 @@ var mumuki = mumuki || {};
|
|
101
104
|
}, mumuki.errors.error_timeout_1.duration);
|
102
105
|
}
|
103
106
|
|
107
|
+
mumuki.submission = {
|
108
|
+
animateTimeoutError: animateTimeoutError,
|
109
|
+
SubmitButton: SubmitButton
|
110
|
+
};
|
111
|
+
|
104
112
|
})(mumuki);
|
@@ -29,6 +29,21 @@ $capital-animation-width: 135px;
|
|
29
29
|
.submission-results {
|
30
30
|
padding: 0;
|
31
31
|
}
|
32
|
+
.submission-result-error {
|
33
|
+
padding-bottom: 30px;
|
34
|
+
}
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
.mu-kids-default-success {
|
39
|
+
width: 100%;
|
40
|
+
display: flex;
|
41
|
+
flex-direction: column;
|
42
|
+
align-items: center;
|
43
|
+
text-align: center;
|
44
|
+
padding: 20px 0 0;
|
45
|
+
img {
|
46
|
+
padding-bottom: 10px;
|
32
47
|
}
|
33
48
|
}
|
34
49
|
|
@@ -49,6 +49,12 @@ module AssignmentResultHelper
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
+
def manual_evaluation_comment(assignment)
|
53
|
+
if assignment.manual_evaluation_comment?
|
54
|
+
Mumukit::ContentType::Markdown.to_html assignment.manual_evaluation_comment
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
52
58
|
private
|
53
59
|
|
54
60
|
def solution_octet_data(assignment)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<%
|
2
|
+
@guide = @exercise.guide
|
3
|
+
@stats = @guide.stats_for(current_user)
|
4
|
+
%>
|
5
|
+
|
6
|
+
<div class="<%= "mu-kids-callout-#{class_for_status assignment.status}" %>">
|
7
|
+
<%= manual_evaluation_comment assignment %>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<% if @exercise.corollary.present? %>
|
11
|
+
<img id="mu-kids-corollary-animation" class="capital-animation"/>
|
12
|
+
<%= corollary_box @exercise %>
|
13
|
+
<% else %>
|
14
|
+
<div class="mu-kids-default-success">
|
15
|
+
<img src="/amarillo_exito_bailarin.svg" class="capital-animation"/>
|
16
|
+
<p><%= t :kids_default_success %></p>
|
17
|
+
</div>
|
18
|
+
<% end %>
|
@@ -4,7 +4,7 @@
|
|
4
4
|
<% if assignment.passed? %>
|
5
5
|
<%= next_exercise_button(@exercise) %>
|
6
6
|
<% else %>
|
7
|
-
<button class="btn btn-success btn-block" data-dismiss="modal" aria-label="<%= t :retry_exercise %>"> <%= t :retry_exercise %> </button>
|
7
|
+
<button class="btn btn-success btn-block submission-control" id="kids-btn-retry" data-dismiss="modal" aria-label="<%= t :retry_exercise %>"> <%= t :retry_exercise %> </button>
|
8
8
|
<% end %>
|
9
9
|
</div>
|
10
10
|
</div>
|
@@ -3,13 +3,13 @@
|
|
3
3
|
@stats = @guide.stats_for(current_user)
|
4
4
|
%>
|
5
5
|
|
6
|
-
<div class="<%=
|
6
|
+
<div class="<%= "bs-callout bs-callout-#{class_for_status assignment.status}" %>">
|
7
7
|
|
8
|
-
<%= render partial: 'exercise_solutions/results_title', locals: {assignment: assignment}
|
8
|
+
<%= render partial: 'exercise_solutions/results_title', locals: {assignment: assignment} %>
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
<%
|
10
|
+
|
11
|
+
<%= manual_evaluation_comment assignment %>
|
12
|
+
<% unless assignment.manual_evaluation_comment? %>
|
13
13
|
<% if assignment.results_visible? %>
|
14
14
|
<div>
|
15
15
|
<% if assignment.expectation_results_visible? %>
|
@@ -65,4 +65,4 @@
|
|
65
65
|
|
66
66
|
<%= corollary_box @exercise unless assignment.should_retry? %>
|
67
67
|
|
68
|
-
<%= render partial: 'exercise_solutions/results_button', locals: {assignment: assignment}
|
68
|
+
<%= render partial: 'exercise_solutions/results_button', locals: {assignment: assignment} %>
|
@@ -2,10 +2,5 @@
|
|
2
2
|
<h4>
|
3
3
|
<strong><%= t :errored %></strong>
|
4
4
|
</h4>
|
5
|
-
|
6
|
-
<img id="submission-result-error-animation"/>
|
7
|
-
<ul class="submission-result-error-body-description">
|
8
|
-
<%= raw t :abort_explanation %>
|
9
|
-
</ul>
|
10
|
-
</div>
|
5
|
+
<%= render partial: 'layouts/submission_result_error_body' %>
|
11
6
|
</div>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<ul class="results-list">
|
6
6
|
<% assignment.test_results.each_with_index do |test_result, index| %>
|
7
7
|
<li>
|
8
|
-
<% if test_result[:status]
|
8
|
+
<% if test_result[:status].failed? %>
|
9
9
|
<span class="text-danger">
|
10
10
|
<%= status_icon(test_result[:status]) %>
|
11
11
|
<strong class="example-title"><%= test_result[:title] %></strong>
|
@@ -33,6 +33,7 @@
|
|
33
33
|
</div>
|
34
34
|
|
35
35
|
<%= render partial: 'layouts/modals/kids_results', locals: {exercise: @exercise, assignment: @assignment} %>
|
36
|
+
<%= render partial: 'layouts/modals/kids_results_aborted' %>
|
36
37
|
<%= render partial: 'layouts/modals/kids_context', locals: {exercise: @exercise, assignment: @assignment} %>
|
37
38
|
|
38
39
|
</div>
|
@@ -10,12 +10,11 @@
|
|
10
10
|
<div class="row">
|
11
11
|
<div class="col-md-12 submission-results">
|
12
12
|
<% if @assignment&.passed? %>
|
13
|
-
|
13
|
+
<%= render partial: 'exercise_solutions/kids_results',
|
14
14
|
locals: {assignment: @assignment, guide_finished_by_solution: false} %>
|
15
15
|
<% end %>
|
16
16
|
</div>
|
17
17
|
</div>
|
18
|
-
<%= render partial: 'layouts/submission_result_error' %>
|
19
18
|
</div>
|
20
19
|
</div>
|
21
20
|
</div>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<div class="modal fade kids-results" id="kids-results-aborted" tabindex="-1" role="dialog" aria-hidden="true">
|
2
|
+
<div class="modal-dialog">
|
3
|
+
<div class="modal-content">
|
4
|
+
<div class="modal-header">
|
5
|
+
<h4 class="modal-title text-broken">
|
6
|
+
<strong><%= t :errored %></strong>
|
7
|
+
</h4>
|
8
|
+
</div>
|
9
|
+
<div class="modal-body">
|
10
|
+
<div class="container-fluid">
|
11
|
+
<div class="row">
|
12
|
+
<div class="col-md-12">
|
13
|
+
<div class="submission-result-error">
|
14
|
+
<%= render partial: 'layouts/submission_result_error_body' %>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
<div class="modal-footer">
|
21
|
+
<button class="btn btn-success btn-block submission_control" data-dismiss="modal" aria-label="<%= t :retry_exercise %>"> <%= t :retry_exercise %> </button>
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
</div>
|
@@ -17,10 +17,14 @@ module Mumuki::Laboratory::Controllers::ResultsRendering
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def render_results_html(assignment)
|
20
|
-
render_to_string partial:
|
20
|
+
render_to_string partial: results_partial,
|
21
21
|
locals: {assignment: assignment}
|
22
22
|
end
|
23
23
|
|
24
|
+
def results_partial
|
25
|
+
@exercise&.input_kids? ? 'exercise_solutions/kids_results' : 'exercise_solutions/results'
|
26
|
+
end
|
27
|
+
|
24
28
|
def render_results_title_html(assignment)
|
25
29
|
render_to_string partial: 'exercise_solutions/results_title',
|
26
30
|
locals: {assignment: assignment}
|
@@ -82,6 +82,7 @@ en:
|
|
82
82
|
its_been_a_while: It's been a while since you last used Mumuki.
|
83
83
|
joining: You're about to join
|
84
84
|
keep_learning: Keep learning!
|
85
|
+
kids_default_success: You did it great!
|
85
86
|
language: Language
|
86
87
|
last_name: Last Name
|
87
88
|
last_submission_date: Last submission
|
@@ -90,6 +90,7 @@ es:
|
|
90
90
|
its_been_a_while: Hace un tiempo que no usás Mumuki.
|
91
91
|
joining: '¡Te damos la bienvenida al curso <strong>%{course}</strong>!'
|
92
92
|
keep_learning: ¡Seguí aprendiendo!
|
93
|
+
kids_default_success: ¡Lo hiciste muy bien!
|
93
94
|
language: Lenguaje
|
94
95
|
languages: Lenguajes
|
95
96
|
last_name: Apellido
|
@@ -30,7 +30,7 @@ pt:
|
|
30
30
|
content: Conteúdo
|
31
31
|
continue_exercise: Continuar
|
32
32
|
continue_lesson: Continue esta lição!
|
33
|
-
continue_practicing:
|
33
|
+
continue_practicing: Continue aprendendo!
|
34
34
|
contributors: Autores
|
35
35
|
correct_answer: A resposta está correta!
|
36
36
|
create_submission: Enviar
|
@@ -87,7 +87,8 @@ pt:
|
|
87
87
|
invitation: Convite para o curso
|
88
88
|
invitation_for: Participe %{curso}
|
89
89
|
item_not_accessible: Você não tem permissões para acessar este conteúdo
|
90
|
-
joining: Bem-vindo ao curso <strong> %{curso} </
|
90
|
+
joining: Bem-vindo ao curso <strong> %{curso} </strong>!
|
91
|
+
kids_default_success: Você fez muito bem!
|
91
92
|
language: Linguagem
|
92
93
|
languages: Idiomas
|
93
94
|
last_name: Sobrenome
|