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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e5419e636836c5d1e4d146042f4312109be2032daed211f10f136de57c356058
4
- data.tar.gz: 5bf7264f94c2e47071a06bd4aaf2a9fc06189e33c7ac0a3cafd2e44c5be8494c
3
+ metadata.gz: cddf5c55fdcb3d1e9376cff1d680af997586ffdba858722d2bb110e4dacea793
4
+ data.tar.gz: 374c52c8fe4548f9675e6964e7c0ec17d0acaa203f0fc986991f83ca39c62044
5
5
  SHA512:
6
- metadata.gz: 65414e65c7197323553ace22372ebed883e213215c906385ad73505c76fb73d831081bea67481ff44bcf4c926d887f14a04bd3361eaf264afc0aced6e0b108cb
7
- data.tar.gz: 8959efb85d1a1e4bb5c674cae6f70c2091c9e7f93a9c27f868c7429309e6e90e75e146c6360256b92c203f0080095339b44a27e7fd6ea6159bf1e959e4a46c8f
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._hideFailedMessage();
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
- _hideFailedMessage: function () {
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
- _showFailedMessage: function (data) {
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
- _showOnPopup: function (data) {
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._showFailedMessage(data);
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._showFailedMessage(data);
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._showOnPopup;
187
- mumuki.kids.resultAction.aborted = mumuki.kids._showOnPopup;
188
- mumuki.kids.resultAction.passed_with_warnings = mumuki.kids._showOnPopup;
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 svgs = ['403', '404', '500', 'timeout_1', 'timeout_2', 'timeout_3'];
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
- svgs.forEach(function (svgErrorSuffix) {
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 = $('.btn-submit');
32
- this.submissionControls = $('.submission_control');
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
- var submitButton = new SubmitButton();
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
- $('.btn-submit').on('click', function (e) {
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)
@@ -22,7 +22,7 @@ module StatusRenderingVerbosity
22
22
  if status_like.to_mumuki_status.errored?
23
23
  []
24
24
  else
25
- expectation_results.select { |it| it[:result] == :failed }
25
+ expectation_results.select { |it| it[:result].failed? }
26
26
  end
27
27
  end
28
28
 
@@ -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="<%= (@exercise.input_kids? ? 'mu-kids-callout-' : 'bs-callout bs-callout-') + (class_for_status assignment.status) %>">
6
+ <div class="<%= "bs-callout bs-callout-#{class_for_status assignment.status}" %>">
7
7
 
8
- <%= render partial: 'exercise_solutions/results_title', locals: {assignment: assignment} unless @exercise.input_kids? %>
8
+ <%= render partial: 'exercise_solutions/results_title', locals: {assignment: assignment} %>
9
9
 
10
- <% if assignment.manual_evaluation_comment? %>
11
- <%= Mumukit::ContentType::Markdown.to_html assignment.manual_evaluation_comment %>
12
- <% else %>
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} unless @exercise.input_kids? %>
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
- <div class="submission-result-error-body">
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>
@@ -0,0 +1,6 @@
1
+ <div class="submission-result-error-body">
2
+ <img id="submission-result-error-animation"/>
3
+ <ul class="submission-result-error-body-description">
4
+ <%= raw t :abort_explanation %>
5
+ </ul>
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] == :failed %>
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
- <%= render partial: 'exercise_solutions/results',
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: 'exercise_solutions/results',
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: Eu continuei aprendendo!
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} </ strong>!
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
@@ -19,6 +19,10 @@ module Mumuki::Laboratory::Status::Base
19
19
  false
20
20
  end
21
21
 
22
+ def failed?
23
+ false
24
+ end
25
+
22
26
  def errored?
23
27
  false
24
28
  end
@@ -1,6 +1,10 @@
1
1
  module Mumuki::Laboratory::Status::Failed
2
2
  extend Mumuki::Laboratory::Status::Base
3
3
 
4
+ def self.failed?
5
+ true
6
+ end
7
+
4
8
  def self.should_retry?
5
9
  true
6
10
  end
@@ -1,5 +1,5 @@
1
1
  module Mumuki
2
2
  module Laboratory
3
- VERSION = '5.1.1'
3
+ VERSION = '5.2.0'
4
4
  end
5
5
  end