mumuki-laboratory 8.0.0 → 8.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/mumuki_laboratory/application/bridge.js +1 -1
  3. data/app/assets/javascripts/mumuki_laboratory/application/button.js +4 -4
  4. data/app/assets/javascripts/mumuki_laboratory/application/codemirror-builder.js +3 -3
  5. data/app/assets/javascripts/mumuki_laboratory/application/codemirror.js +6 -6
  6. data/app/assets/javascripts/mumuki_laboratory/application/console.js +2 -2
  7. data/app/assets/javascripts/mumuki_laboratory/application/discussions.js +7 -7
  8. data/app/assets/javascripts/mumuki_laboratory/application/editors.js +1 -1
  9. data/app/assets/javascripts/mumuki_laboratory/application/elipsis.js +1 -1
  10. data/app/assets/javascripts/mumuki_laboratory/application/events.js +2 -2
  11. data/app/assets/javascripts/mumuki_laboratory/application/exercise.js +2 -2
  12. data/app/assets/javascripts/mumuki_laboratory/application/gamification.js +99 -11
  13. data/app/assets/javascripts/mumuki_laboratory/application/inputs.js +1 -1
  14. data/app/assets/javascripts/mumuki_laboratory/application/kids.js +20 -8
  15. data/app/assets/javascripts/mumuki_laboratory/application/kindergarten.js +16 -57
  16. data/app/assets/javascripts/mumuki_laboratory/application/messages.js +6 -6
  17. data/app/assets/javascripts/mumuki_laboratory/application/mu-modal-carrousel.js +63 -0
  18. data/app/assets/javascripts/mumuki_laboratory/application/multiple-choice.js +1 -1
  19. data/app/assets/javascripts/mumuki_laboratory/application/multiple-files.js +3 -3
  20. data/app/assets/javascripts/mumuki_laboratory/application/multiple-scenarios.js +1 -1
  21. data/app/assets/javascripts/mumuki_laboratory/application/number-counter.js +18 -0
  22. data/app/assets/javascripts/mumuki_laboratory/application/pin.js +1 -1
  23. data/app/assets/javascripts/mumuki_laboratory/application/primary.js +3 -2
  24. data/app/assets/javascripts/mumuki_laboratory/application/progress.js +1 -1
  25. data/app/assets/javascripts/mumuki_laboratory/application/results-renderer.js +1 -1
  26. data/app/assets/javascripts/mumuki_laboratory/application/speech-bubble-renderer.js +4 -4
  27. data/app/assets/javascripts/mumuki_laboratory/application/submission.js +3 -3
  28. data/app/assets/javascripts/mumuki_laboratory/application/submissions-store.js +3 -3
  29. data/app/assets/javascripts/mumuki_laboratory/application/sync-mode.js +2 -2
  30. data/app/assets/javascripts/mumuki_laboratory/application/timer.js +1 -1
  31. data/app/assets/stylesheets/mumuki_laboratory/application/_layout.scss +7 -7
  32. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_kids.scss +5 -0
  33. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_kids_results.scss +117 -0
  34. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_kindergarten.scss +45 -131
  35. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_overlap.scss +0 -4
  36. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_terms.scss +9 -12
  37. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_user_profile.scss +31 -3
  38. data/app/controllers/application_controller.rb +41 -8
  39. data/app/controllers/assets_controller.rb +1 -0
  40. data/app/controllers/book_discussions_controller.rb +1 -1
  41. data/app/controllers/chapters_controller.rb +1 -0
  42. data/app/controllers/concerns/with_user_discussion_validation.rb +6 -0
  43. data/app/controllers/discussions_controller.rb +4 -6
  44. data/app/controllers/exercises_controller.rb +1 -0
  45. data/app/controllers/guides_controller.rb +2 -0
  46. data/app/controllers/invitations_controller.rb +1 -0
  47. data/app/controllers/lessons_controller.rb +1 -0
  48. data/app/controllers/login_controller.rb +1 -0
  49. data/app/controllers/users_controller.rb +9 -1
  50. data/app/helpers/assignment_result_helper.rb +1 -1
  51. data/app/helpers/assistance_box_helper.rb +7 -5
  52. data/app/helpers/discussions_helper.rb +4 -4
  53. data/app/helpers/editor_tabs_helper.rb +1 -1
  54. data/app/helpers/gamification_helper.rb +5 -0
  55. data/app/helpers/icons_helper.rb +1 -1
  56. data/app/helpers/links_helper.rb +3 -3
  57. data/app/helpers/menu_bar_helper.rb +5 -1
  58. data/app/helpers/overlapped_buttons_helper.rb +6 -2
  59. data/app/views/book/show.html.erb +2 -2
  60. data/app/views/discussions/_message.html.erb +2 -2
  61. data/app/views/exercise_solutions/_assistant_rules_box.html.erb +13 -0
  62. data/app/views/exercise_solutions/_contextualization_results_container.html.erb +9 -0
  63. data/app/views/exercise_solutions/_kids_level_up.html.erb +11 -0
  64. data/app/views/exercise_solutions/_results.html.erb +19 -19
  65. data/app/views/exercise_solutions/_results_title.html.erb +5 -0
  66. data/app/views/exercises/_exercise_assignment.html.erb +1 -1
  67. data/app/views/exercises/_read_only.html.erb +1 -1
  68. data/app/views/exercises/show.html.erb +5 -2
  69. data/app/views/layouts/_copyright.html.erb +1 -1
  70. data/app/views/layouts/_guide.html.erb +8 -6
  71. data/app/views/layouts/_kids.html.erb +4 -4
  72. data/app/views/layouts/_kindergarten.html.erb +6 -6
  73. data/app/views/layouts/_organizations_listing.html.erb +8 -12
  74. data/app/views/layouts/_social_media.html.erb +4 -4
  75. data/app/views/layouts/_timer.html.erb +1 -1
  76. data/app/views/layouts/application.html.erb +31 -23
  77. data/app/views/layouts/embedded.html.erb +14 -11
  78. data/app/views/layouts/exercise_inputs/editors/_code.html.erb +1 -6
  79. data/app/views/layouts/exercise_inputs/editors/_multiple_files.html.erb +4 -9
  80. data/app/views/layouts/exercise_inputs/forms/_problem_form.html.erb +1 -1
  81. data/app/views/layouts/modals/_guide_corollary.html.erb +13 -3
  82. data/app/views/layouts/modals/_kids_context.html.erb +1 -1
  83. data/app/views/layouts/modals/_kids_results.html.erb +16 -6
  84. data/app/views/layouts/modals/_kindergarten_context.html.erb +15 -15
  85. data/app/views/layouts/modals/_kindergarten_results.html.erb +20 -7
  86. data/app/views/layouts/modals/_kindergarten_results_aborted.html.erb +5 -5
  87. data/app/views/layouts/modals/_level_up.html.erb +27 -0
  88. data/app/views/users/_edit_user_form.html.erb +2 -2
  89. data/app/views/users/_user_form.html.erb +12 -2
  90. data/app/views/users/terms.html.erb +12 -0
  91. data/config/routes.rb +8 -8
  92. data/lib/mumuki/laboratory.rb +18 -5
  93. data/lib/mumuki/laboratory/controllers.rb +2 -0
  94. data/lib/mumuki/laboratory/controllers/action_redirector.rb +21 -0
  95. data/lib/mumuki/laboratory/controllers/immersive_navigation.rb +7 -0
  96. data/lib/mumuki/laboratory/controllers/results_rendering.rb +1 -0
  97. data/lib/mumuki/laboratory/engine.rb +1 -1
  98. data/lib/mumuki/laboratory/events/events.rb +0 -9
  99. data/lib/mumuki/laboratory/locales/en.yml +8 -1
  100. data/lib/mumuki/laboratory/locales/es-CL.yml +9 -2
  101. data/lib/mumuki/laboratory/locales/es.yml +11 -3
  102. data/lib/mumuki/laboratory/locales/pt.yml +9 -2
  103. data/lib/mumuki/laboratory/version.rb +1 -1
  104. data/spec/capybara_helper.rb +5 -1
  105. data/spec/controllers/discussions_controller_spec.rb +19 -0
  106. data/spec/controllers/exercise_solutions_controller_spec.rb +1 -1
  107. data/spec/dummy/db/schema.rb +2 -1
  108. data/spec/features/immersive_redirection_spec.rb +181 -0
  109. data/spec/features/profile_flow_spec.rb +35 -3
  110. data/spec/features/terms_flow_spec.rb +157 -0
  111. data/spec/helpers/icons_helper_spec.rb +3 -3
  112. data/spec/helpers/test_results_rendering_spec.rb +8 -8
  113. data/spec/helpers/with_navigation_spec.rb +14 -14
  114. data/spec/javascripts/gamification-spec.js +2 -2
  115. metadata +112 -98
  116. data/app/helpers/organization_list_helper.rb +0 -5
  117. data/spec/dummy/config/database.travis.yml +0 -4
  118. data/spec/features/choose_organization_spec.rb +0 -74
@@ -1,9 +1,9 @@
1
- <div class="modal fade mu-kids-results-aborted mu-kindergarten-context" id="kids-results-aborted" tabindex="-1" role="dialog" aria-hidden="true">
1
+ <div class="modal fade mu-kids-results-aborted mu-kids-modal-border" id="kids-results-aborted" tabindex="-1" role="dialog" aria-hidden="true">
2
2
  <div class="modal-dialog">
3
- <div class="modal-content broken">
4
- <button type="button" class="mu-kindergarten-modal-button mu-close" data-dismiss="modal" aria-label="Close" data-waiting="">
3
+ <div class="modal-content broken kindergarten">
4
+ <button type="button" class="mu-kids-modal-button mu-close" data-dismiss="modal" aria-label="Close" data-waiting="">
5
5
  <span aria-hidden="true">
6
- <i class="fa fa-fw fa-times fa-3x"></i>
6
+ <i class="fas fa-fw fa-times fa-3x"></i>
7
7
  </span>
8
8
  </button>
9
9
  <div class="modal-header">
@@ -15,7 +15,7 @@
15
15
  <div class="container-fluid">
16
16
  <div class="row">
17
17
  <div class="col-md-12">
18
- <div class="mu-kids-character">
18
+ <div class="mu-kids-character kindergarten">
19
19
  <img class="mu-kids-character-result-aborted"/>
20
20
  </div>
21
21
  </div>
@@ -0,0 +1,27 @@
1
+ <div class="modal fade mu-level-up" id="mu-level-up" tabindex="-1" role="dialog" aria-hidden="true">
2
+ <div class="modal-dialog">
3
+ <div class="modal-content">
4
+ <div class="modal-header">
5
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
6
+ <span aria-hidden="true">&times;</span></button>
7
+ <div class="guide-corollary-title">
8
+ <h3 class="text-left" id="gridSystemModalLabel"><%= t :level_up %></h3>
9
+ </div>
10
+ </div>
11
+ <div class="modal-body">
12
+ <div class="container-fluid">
13
+ <div class="row">
14
+ <div class="col-md-12">
15
+ <div class="text-center mu-level">
16
+ <i class="fas fa-star fa-fw fa-4x"></i>
17
+ <span class="mu-level-number"></span>
18
+ <p></p>
19
+ <p id="mu-solve-more-exercises"> <%= (t :solve_more_exercises_to_level_up).html_safe %></p>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ </div>
@@ -1,4 +1,4 @@
1
- <%= form_for :user, url: update_user_path, :html => { id: 'mu-user-form' }, method: :put do |f| %>
1
+ <%= form_for :user, url: user_path, :html => { id: 'mu-user-form' }, method: :put do |f| %>
2
2
  <div class="mu-user-header">
3
3
  <h1><%= t(:edit_profile) %></h1>
4
4
  <div class="mu-profile-actions hidden-xs">
@@ -9,7 +9,7 @@
9
9
  <div class="row mu-tab-body">
10
10
  <div class="col-md-4 text-center">
11
11
  <%= profile_picture_for(@user, id: 'mu-user-avatar', class: 'mu-user-avatar') %>
12
- <i class="fa fa-pencil fa-2x pointer mu-edit-avatar" id="mu-edit-avatar-icon" tabindex="0"></i>
12
+ <i class="fas fa-pencil-alt fa-2x pointer mu-edit-avatar" id="mu-edit-avatar-icon" tabindex="0"></i>
13
13
  </div>
14
14
  <div class="col-md-8">
15
15
  <%= render partial: 'profile_fields', locals: {form: f} %>
@@ -5,10 +5,20 @@
5
5
  </div>
6
6
  </div>
7
7
  <div class="row mu-tab-body">
8
- <div class="col-md-4 text-center">
8
+ <div class="col-md-4 mu-profile-info-left">
9
9
  <%= profile_picture_for(@user, id: 'mu-user-avatar', class: 'mu-user-avatar') %>
10
+ <% if in_gamified_context? %>
11
+ <svg class="mu-level-progress" width="300" height="300" viewBox="0 0 100 100">
12
+ <path id="mu-level-progress" stroke-linecap="round" stroke="#24b8aa" stroke-width="4" stroke-dasharray="0, 999" fill="none" d="M50 10 a 40 40 0 0 1 0 80 a 40 40 0 0 1 0 -80"></path>
13
+ </svg>
14
+ <div class="mu-level">
15
+ <i class="fas fa-star fa-fw fa-4x"></i>
16
+ <span class="mu-level-number"></span>
17
+ <p><%= t :level %></p>
18
+ </div>
19
+ <% end %>
10
20
  </div>
11
- <div class="col-md-8 mu-profile-info">
21
+ <div class="col-md-8 mu-profile-info-right">
12
22
  <% if @user.age.present? %>
13
23
  <div>
14
24
  <span> <strong><%= t :age %>:</strong> <%= "#{@user.age} #{t :years}" %> </span>
@@ -16,3 +16,15 @@
16
16
  <% end %>
17
17
  </div>
18
18
 
19
+ <% if @user&.has_role_terms_to_accept? %>
20
+ <div class="terms-acceptance">
21
+ <%= form_for :user, url: terms_user_path, method: :post do |f| %>
22
+ <span class="terms-acceptance-checkbox">
23
+ <%= f.check_box :terms_of_service, required: true, onInvalid: "this.setCustomValidity('#{t(:terms_and_conditions_must_be_accepted)}')", onChange: "this.setCustomValidity(validity.valueMissing ? '#{t(:terms_and_conditions_must_be_accepted)}' : '')" %>
24
+ <%= t(:accept_terms) %>
25
+ </span>
26
+ <%= f.submit t(:accept), class: 'btn btn-success terms-acceptance-btn' %>
27
+ <% end %>
28
+ </div>
29
+ <% end %>
30
+
@@ -52,11 +52,15 @@ Rails.application.routes.draw do
52
52
  resources :complements, only: :show
53
53
  resources :exams, only: :show
54
54
 
55
- # All users
56
- resource :user, only: [:show, :edit]
57
- get '/user/terms' => 'users#terms'
58
-
59
55
  # Current user
56
+ resource :user, only: [:show, :edit, :update] do
57
+ get :terms
58
+ post :terms, to: 'users#accept_profile_terms'
59
+
60
+ # Notification subscriptions
61
+ get :unsubscribe
62
+ end
63
+
60
64
  resources :messages, only: [:index, :create]
61
65
  get '/messages/errors' => 'messages#errors'
62
66
 
@@ -69,10 +73,6 @@ Rails.application.routes.draw do
69
73
  get '/join/:code' => 'invitations#show', as: :invitation
70
74
  post '/join/:code' => 'invitations#join'
71
75
 
72
- # Notification subscriptions
73
- get '/user/unsubscribe' => 'users#unsubscribe'
74
- put '/user' => 'users#update', as: :update_user
75
-
76
76
  # Route for reading messages
77
77
  post '/messages/read_messages/:exercise_id' => 'messages#read_messages', as: :read_messages
78
78
 
@@ -31,12 +31,25 @@ end
31
31
 
32
32
  module Mumukit::Platform::OrganizationMapping::Path
33
33
  class << self
34
- patch :organization_name do |request, domain, hyper|
35
- name = hyper.(request, domain)
36
- if %w(auth login logout).include? name
37
- 'base'
34
+ alias_method :__organization_name__, :organization_name
35
+ def in_actual_organization?(request, domain = nil)
36
+ actual_organization_name(request, domain).present?
37
+ end
38
+
39
+ def actual_organization_name(request, domain)
40
+ name = __organization_name__(request, domain)
41
+ name unless %w(auth login logout).include? name
42
+ end
43
+
44
+ def organization_name(request, domain)
45
+ actual_organization_name(request, domain) || 'base'
46
+ end
47
+
48
+ patch :inorganic_path_for do |request, hyper|
49
+ if in_actual_organization?(request)
50
+ hyper.call(request)
38
51
  else
39
- name
52
+ path_for(request)
40
53
  end
41
54
  end
42
55
  end
@@ -2,12 +2,14 @@ module Mumuki::Laboratory::Controllers
2
2
  end
3
3
 
4
4
  require_relative './controllers/authorization'
5
+ require_relative './controllers/action_redirector'
5
6
  require_relative './controllers/disabling'
6
7
  require_relative './controllers/current_organization'
7
8
  require_relative './controllers/dynamic_errors'
8
9
  require_relative './controllers/notifications'
9
10
  require_relative './controllers/embedded_mode'
10
11
  require_relative './controllers/incognito_mode'
12
+ require_relative './controllers/immersive_navigation'
11
13
  require_relative './controllers/nested_in_exercise'
12
14
  require_relative './controllers/results_rendering'
13
15
  require_relative './controllers/exercise_seed'
@@ -0,0 +1,21 @@
1
+ module Mumuki::Laboratory::Controllers::ActionRedirector
2
+ def save_location_before!(action)
3
+ session[redirection_variable_for(action)] = origin
4
+ end
5
+
6
+ def redirect_after!(action, fallback_location: root_path)
7
+ redirection_variable = redirection_variable_for(action)
8
+ destination = session.delete(redirection_variable).presence
9
+ redirect_to(destination || fallback_location)
10
+ end
11
+
12
+ private
13
+
14
+ def redirection_variable_for(action)
15
+ "redirect_after_#{action}"
16
+ end
17
+
18
+ def origin
19
+ Addressable::URI.heuristic_parse(request.path).to_s
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ module Mumuki::Laboratory::Controllers::ImmersiveNavigation
2
+ extend ActiveSupport::Concern
3
+
4
+ def immersive_subject
5
+ subject.navigable_content_in(current_immersive_context)
6
+ end
7
+ end
@@ -29,6 +29,7 @@ module Mumuki::Laboratory::Controllers::ResultsRendering
29
29
  title_html: render_results_title(assignment),
30
30
  expectations: assignment.affable_expectation_results,
31
31
  tips: assignment.affable_tips,
32
+ level_up_html: render_results('exercise_solutions/kids_level_up', assignment),
32
33
  test_results: assignment.sanitized_affable_test_results) # these results could include escaped characters so they should be rendered as HTML to display properly
33
34
  end
34
35
 
@@ -1,5 +1,5 @@
1
1
  require 'turbolinks'
2
- require 'font-awesome-rails'
2
+ require 'font_awesome5_rails'
3
3
  require 'momentjs-rails'
4
4
  require 'nprogress-rails'
5
5
  require 'rails-i18n'
@@ -1,15 +1,6 @@
1
1
  Mumukit::Nuntius::EventConsumer.handle do
2
-
3
2
  # Emitted by assigment manual evaluation in classroom
4
3
  event 'AssignmentManuallyEvaluated' do |payload|
5
4
  Assignment.evaluate_manually! payload.deep_symbolize_keys[:assignment]
6
5
  end
7
-
8
- [Book, Topic, Guide].each do |it|
9
- event "#{it.name}Changed" do |data|
10
- Mumukit::Sync::Syncer.new(
11
- Mumukit::Sync::Store::Bibliotheca.new(
12
- Mumukit::Platform.bibliotheca_bridge)).locate_and_import! it, data[:slug]
13
- end
14
- end
15
6
  end
@@ -86,7 +86,6 @@ en:
86
86
  gone: Oops! Content has expired
87
87
  internal_server_error: Oops! Something went wrong
88
88
  not_found: Oops! Page was not found
89
- exam_number: 'Exam %{number}:'
90
89
  exams: Exams
91
90
  exercise: Exercise
92
91
  exercises: Exercises
@@ -95,6 +94,7 @@ en:
95
94
  exercise_number: Exercise %{number}
96
95
  exercise_success_rate: Exercises success rate
97
96
  exit: Exit
97
+ exp_points: experience points.
98
98
  expectations: Expectations
99
99
  expected_state: Expected board
100
100
  explain_redirect: You have registered in another organization
@@ -145,6 +145,9 @@ en:
145
145
  lessons: Lessons
146
146
  lesson_number: Lesson %{number}
147
147
  let_us_know: please let us know!
148
+ level: Level
149
+ level_up: Level up!
150
+ listen_statement: Listen to the statement
148
151
  loading: Loading
149
152
  load_solution_into_console: Load your solution into the console
150
153
  locked_content: 'This content will be unlocked when you finish previous chapters'
@@ -176,6 +179,7 @@ en:
176
179
  no_exercises: Nobody created an exercise for this search yet
177
180
  no_guides: Nobody created a guide for this search yet
178
181
  no_messages: It seems you don't have any messages yet!
182
+ no_need_hint: This exercise has no hint
179
183
  no_questions: It seems there isn't any question yet.
180
184
  no_submissions: It seems like you haven't tried to solve this exercise
181
185
  no_useful_result: Didn't find what you were looking for?
@@ -219,6 +223,7 @@ en:
219
223
  retry_exercise: Retry
220
224
  running: running
221
225
  save: Save
226
+ see_context: Watch exercise introduction animation
222
227
  sending_solution: Sending solution
223
228
  show: Show
224
229
  sign_in: Sign in
@@ -233,6 +238,7 @@ en:
233
238
  solved: Solved
234
239
  solved_count: '%{count} solved'
235
240
  solve_doubts: Solve other's doubts
241
+ solve_more_exercises_to_level_up: Solve <span>number</span> more exercises to advance to the next level.
236
242
  solve_your_doubts: Solve your doubts
237
243
  solve_your_doubts_teaser: Do you have any doubts?
238
244
  something_went_wrong: Something went wrong!
@@ -289,6 +295,7 @@ en:
289
295
  working: "Working"
290
296
  wrong_answer: The answer is wrong
291
297
  years: years old
298
+ you_earned: You earned
292
299
  you_must_sign_in_before_submitting: You must sign in before submitting your solutions
293
300
  you_never_submitted_solutions: It seems that you've never submitted solutions since you created your account.
294
301
  your_new_organization: your new organization
@@ -85,7 +85,6 @@ es-CL:
85
85
  gone: ¡Ups! El contenido expiró
86
86
  internal_server_error: ¡Ups! Algo no anduvo bien
87
87
  not_found: ¡Ups! La página no existe
88
- exam_number: 'Examen %{number}:'
89
88
  exams: Exámenes
90
89
  exercise: Ejercicio
91
90
  exercise_count: ejercicios
@@ -93,6 +92,7 @@ es-CL:
93
92
  exercise_success_rate: Tasa de éxito en ejercicios
94
93
  exercises: Ejercicios
95
94
  exit: Salir
95
+ exp_points: puntos de experiencia.
96
96
  expectations: Objetivos
97
97
  expected_state: Tablero esperado
98
98
  explain_redirect: Notamos que te registraste en otra organización.
@@ -103,7 +103,7 @@ es-CL:
103
103
  first_name: Nombre
104
104
  forbidden_explanation: ¿Puede que hayas ingresado con una cuenta incorrecta?
105
105
  format: Dar formato
106
- forum_terms_link: Si tienes alguna duda, consulta las %{terms_link}
106
+ forum_terms_link: Si tienes alguna duda, accede a las %{terms_link}
107
107
  fullscreen: "Pantalla completa"
108
108
  gender: Género
109
109
  get_messages: "Ver mensajes"
@@ -139,6 +139,9 @@ es-CL:
139
139
  lessons: Lecciones
140
140
  lesson_number: Lección %{number}
141
141
  let_us_know: ¡Por favor avísanos!
142
+ level: Nivel
143
+ level_up: ¡Subiste de nivel!
144
+ listen_statement: Escucha la consigna
142
145
  loading: Cargando
143
146
  load_solution_into_console: Cargar la solución en la consola
144
147
  locked_content: 'Éste contenido se desbloqueará cuando termines los capítulos anteriores'
@@ -173,6 +176,7 @@ es-CL:
173
176
  no_exercises: No encontramos ejercicios que coincidan con tu búsqueda.
174
177
  no_guides: No encontramos lecciones que coincidan con tu búsqueda.
175
178
  no_messages: ¡Parece que no tienes ningún mensaje todavía!
179
+ no_need_hint: 'Este ejercicio no tiene pista'
176
180
  no_questions: Parece que aún no hay ninguna consulta.
177
181
  no_submissions: ¡Parece que aún no intentaste resolver este ejercicio!
178
182
  no_useful_result: ¿No encontraste lo que estabas buscando?
@@ -217,6 +221,7 @@ es-CL:
217
221
  retry_exercise: Reintentar
218
222
  running: procesando
219
223
  save: Guardar
224
+ see_context: Mira la animación del principio
220
225
  send: Enviar
221
226
  sending_solution: Enviando solución
222
227
  show: Mostrar
@@ -235,6 +240,7 @@ es-CL:
235
240
  other: '%{count} resueltas'
236
241
  solved_exercises: Ejercicios Resueltos
237
242
  solve_doubts: Resuelve consultas
243
+ solve_more_exercises_to_level_up: Resuelve <span>number</span> ejercicios más para pasar al siguiente nivel.
238
244
  solve_your_doubts: Consulta tus dudas
239
245
  solve_your_doubts_teaser: ¿Tienes alguna consulta?
240
246
  something_went_wrong: ¡Ups!, algo no anduvo bien...
@@ -294,5 +300,6 @@ es-CL:
294
300
  page_gap: "&hellip;"
295
301
  working: "Procesando"
296
302
  wrong_answer: La respuesta no es correcta
303
+ you_earned: Ganaste
297
304
  you_must_sign_in_before_submitting: Tienes que iniciar sesión antes de empezar a enviar tus soluciones
298
305
  you_never_submitted_solutions: Parece que nunca enviaste soluciones desde que creaste tu cuenta.
@@ -93,7 +93,6 @@ es:
93
93
  gone: ¡Ups! El contenido expiró
94
94
  internal_server_error: ¡Ups! Algo no anduvo bien
95
95
  not_found: ¡Ups! La página no existe
96
- exam_number: 'Examen %{number}:'
97
96
  exams: Exámenes
98
97
  exercise: Ejercicio
99
98
  exercise_count: ejercicios
@@ -101,6 +100,7 @@ es:
101
100
  exercise_success_rate: Tasa de éxito en ejercicios
102
101
  exercises: Ejercicios
103
102
  exit: Salir
103
+ exp_points: puntos de experiencia.
104
104
  expectations: Objetivos
105
105
  expected_state: Tablero esperado
106
106
  explain_redirect: Notamos que te registraste en otra organización.
@@ -111,8 +111,8 @@ es:
111
111
  first_name: Nombre
112
112
  forbidden_explanation: ¿Puede que hayas ingresado con una cuenta incorrecta?
113
113
  format: Dar formato
114
- forum_terms: Reglas del foro
115
- forum_terms_link: Si tenés alguna duda, consultá las %{terms_link}
114
+ forum_terms: Reglas del espacio de consultas
115
+ forum_terms_link: Si tenés alguna duda, accedé a las %{terms_link}
116
116
  fullscreen: "Pantalla completa"
117
117
  gender: Género
118
118
  get_messages: "Ver mensajes"
@@ -155,6 +155,9 @@ es:
155
155
  lessons: Lecciones
156
156
  lesson_number: Lección %{number}
157
157
  let_us_know: ¡Por favor avisanos!
158
+ level: Nivel
159
+ level_up: ¡Subiste de nivel!
160
+ listen_statement: Escuchá la consigna
158
161
  loading: Cargando
159
162
  load_solution_into_console: Cargar la solución en la consola
160
163
  locked_content: 'Este contenido se desbloqueará cuando termines los capítulos anteriores'
@@ -189,6 +192,7 @@ es:
189
192
  no_exercises: No encontramos ejercicios que coincidan con tu búsqueda.
190
193
  no_guides: No encontramos lecciones que coincidan con tu búsqueda.
191
194
  no_messages: ¡Parece que no tenés ningun mensaje todavía!
195
+ no_need_hint: Este ejercicio no tiene pista
192
196
  no_questions: Parece que aún no hay ninguna consulta.
193
197
  no_submissions: ¡Parece que aún no intentaste resolver este ejercicio aún!
194
198
  no_useful_result: ¿No encontraste lo que estabas buscando?
@@ -237,6 +241,7 @@ es:
237
241
  retry_exercise: Reintentar
238
242
  running: procesando
239
243
  save: Guardar
244
+ see_context: Mirá la animación del principio
240
245
  send: Enviar
241
246
  sending_solution: Enviando solución
242
247
  show: Mostrar
@@ -255,6 +260,7 @@ es:
255
260
  other: '%{count} resueltas'
256
261
  solved_exercises: Ejercicios Resueltos
257
262
  solve_doubts: Resolvé consultas
263
+ solve_more_exercises_to_level_up: Resolvé <span>number</span> ejercicios más para pasar al siguiente nivel.
258
264
  solve_your_doubts: Consultá tus dudas
259
265
  solve_your_doubts_teaser: ¿Tenés alguna consulta?
260
266
  something_went_wrong: ¡Ups!, algo no anduvo bien...
@@ -317,6 +323,8 @@ es:
317
323
  working: "Procesando"
318
324
  wrong_answer: La respuesta no es correcta
319
325
  years: años
326
+ you_earned: Ganaste
320
327
  you_must_sign_in_before_submitting: Tenés que iniciar sesión antes de empezar a enviar tus soluciones
321
328
  you_never_submitted_solutions: Parece que nunca enviaste soluciones desde que creaste tu cuenta.
322
329
  your_new_organization: tu nueva organización
330
+
@@ -89,7 +89,6 @@ pt:
89
89
  gone: Opa! O conteúdo expirou
90
90
  internal_server_error: Opa! Algo não estava certo
91
91
  not_found: Opa! A página que você pesquisou não existe
92
- exam_number: 'Revise %{number}:'
93
92
  exams: Examesca
94
93
  exercise: Exercício
95
94
  exercise_count: exercícios
@@ -97,6 +96,7 @@ pt:
97
96
  exercise_success_rate: Taxa de sucesso em exercícios
98
97
  exercises: Exercícios
99
98
  exit: Sair
99
+ exp_points: pontos de experiência.
100
100
  expectations: Objetivos
101
101
  expected_state: Tabuleiro esperado
102
102
  explain_redirect: Percebemos que você se registrou em outra organização.
@@ -107,7 +107,7 @@ pt:
107
107
  first_name: Nome
108
108
  forbidden_explanation: Você poderia ter entrado com uma conta incorreta?
109
109
  format: Formato
110
- forum_terms: Regras do fórum
110
+ forum_terms: Regras do espaço de consulta
111
111
  forum_terms_link: Se você tiver alguma dúvida, consulte as %{terms_link}
112
112
  fullscreen: Tela completa
113
113
  gender: Gênero
@@ -149,6 +149,9 @@ pt:
149
149
  lessons: Lições
150
150
  lesson_number: Lição %{number}
151
151
  let_us_know: Por favor, avise-nos!
152
+ level: Nível
153
+ level_up: Você sobe de nível!
154
+ listen_statement: Ouça a declaração
152
155
  loading: Carregando
153
156
  load_solution_into_console: Carregue a solução no console
154
157
  locked_content: 'Este conteúdo será desbloqueado quando você terminar os capítulos anteriores'
@@ -182,6 +185,7 @@ pt:
182
185
  no_exercises: Não encontramos exercícios que correspondam à sua pesquisa.
183
186
  no_guides: Não encontramos lições que correspondam à sua pesquisa.
184
187
  no_messages: Parece que você ainda não tem uma mensagem!
188
+ no_need_hint: Este exercício não tem dica
185
189
  no_questions: Parece que ainda não há dúvida.
186
190
  no_submissions: Parece que você ainda não tentou resolver este exercício!
187
191
  no_useful_result: Não encontrou o que estava buscando?
@@ -226,6 +230,7 @@ pt:
226
230
  retry_exercise: Tentar novamente
227
231
  running: processamento
228
232
  save: Salvar
233
+ see_context: Veja a animação desde o início
229
234
  send: Enviar
230
235
  sending_solution: Solução de envio
231
236
  show: Mostrar
@@ -242,6 +247,7 @@ pt:
242
247
  solved_count: '%{count} resolvido'
243
248
  solved_exercises: Exercícios resolvidos
244
249
  solve_doubts: Resolvi dúvidas
250
+ solve_more_exercises_to_level_up: Resolva mais <span>number</span> exercícios para avançar para o próximo nível.
245
251
  solve_your_doubts: Consulte suas dúvidas
246
252
  solve_your_doubts_teaser: Você tem alguma dúvida?
247
253
  something_went_wrong: Oops!, Algo não estava certo ...
@@ -292,5 +298,6 @@ pt:
292
298
  working: Processamento
293
299
  wrong_answer: A resposta não é correta
294
300
  years: anos
301
+ you_earned: Você ganhou
295
302
  you_must_sign_in_before_submitting: Você deve fazer o login antes de começar a enviar suas soluções
296
303
  your_new_organization: sua nova organização