mumuki-laboratory 7.10.5 → 7.12.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -7
  3. data/Rakefile +9 -2
  4. data/app/assets/javascripts/mumuki_laboratory/application/bridge.js +26 -5
  5. data/app/assets/javascripts/mumuki_laboratory/application/characters.js +3 -1
  6. data/app/assets/javascripts/mumuki_laboratory/application/gamification.js +163 -0
  7. data/app/assets/javascripts/mumuki_laboratory/application/kids.js +171 -333
  8. data/app/assets/javascripts/mumuki_laboratory/application/kindergarten.js +159 -0
  9. data/app/assets/javascripts/mumuki_laboratory/application/mu-modal-carrousel.js +63 -0
  10. data/app/assets/javascripts/mumuki_laboratory/application/number-counter.js +18 -0
  11. data/app/assets/javascripts/mumuki_laboratory/application/primary.js +258 -0
  12. data/app/assets/javascripts/mumuki_laboratory/application/profile.js +31 -16
  13. data/app/assets/javascripts/mumuki_laboratory/application/submission.js +1 -0
  14. data/app/assets/javascripts/mumuki_laboratory/application/submissions-store.js +19 -2
  15. data/app/assets/stylesheets/mumuki_laboratory/application/_errors.scss +1 -3
  16. data/app/assets/stylesheets/mumuki_laboratory/application/_modules.scss +3 -1
  17. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_avatar.scss +21 -0
  18. data/app/assets/stylesheets/mumuki_laboratory/application/modules/{_chapter_show.scss → _content_show.scss} +0 -0
  19. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_kids_results.scss +117 -0
  20. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_kindergarten.scss +335 -12
  21. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_medal.scss +48 -0
  22. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_terms.scss +44 -0
  23. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_user_profile.scss +40 -3
  24. data/app/controllers/application_controller.rb +15 -8
  25. data/app/controllers/book_discussions_controller.rb +4 -0
  26. data/app/controllers/users_controller.rb +8 -2
  27. data/app/helpers/avatar_helper.rb +11 -3
  28. data/app/helpers/contextualization_result_helper.rb +9 -1
  29. data/app/helpers/gamification_helper.rb +5 -0
  30. data/app/helpers/kindergarten_helper.rb +5 -0
  31. data/app/helpers/links_helper.rb +8 -0
  32. data/app/helpers/medal_helper.rb +36 -0
  33. data/app/helpers/open_graph_helper.rb +2 -2
  34. data/app/helpers/organization_list_helper.rb +1 -1
  35. data/app/helpers/overlapped_buttons_helper.rb +1 -1
  36. data/app/helpers/page_title_helper.rb +2 -2
  37. data/app/helpers/profile_helper.rb +9 -1
  38. data/app/views/book/_header.html.erb +17 -0
  39. data/app/views/book/show.html.erb +1 -18
  40. data/app/views/discussions/terms.html.erb +10 -0
  41. data/app/views/exercise_solutions/_contextualization_results_container.html.erb +9 -0
  42. data/app/views/exercise_solutions/_kids_level_up.html.erb +11 -0
  43. data/app/views/exercise_solutions/_kids_results.html.erb +1 -1
  44. data/app/views/exercise_solutions/_results_title.html.erb +5 -0
  45. data/app/views/exercises/show.html.erb +4 -0
  46. data/app/views/invitations/_invitation_form.html.erb +1 -0
  47. data/app/views/layouts/_discussions.html.erb +4 -0
  48. data/app/views/layouts/_error.html.erb +3 -6
  49. data/app/views/layouts/_guide.html.erb +10 -3
  50. data/app/views/layouts/_kindergarten.html.erb +38 -0
  51. data/app/views/layouts/_main.html.erb +3 -1
  52. data/app/views/layouts/_organization_chooser.html.erb +0 -7
  53. data/app/views/layouts/_terms_acceptance_disclaimer.html.erb +6 -0
  54. data/app/views/layouts/application.html.erb +10 -3
  55. data/app/views/layouts/exercise_inputs/layouts/_input_kindergarten.html.erb +27 -27
  56. data/app/views/layouts/modals/_guide_corollary.html.erb +10 -1
  57. data/app/views/layouts/modals/_kids_context.html.erb +1 -1
  58. data/app/views/layouts/modals/_kids_results.html.erb +16 -6
  59. data/app/views/layouts/modals/_kindergarten_context.html.erb +30 -0
  60. data/app/views/layouts/modals/_kindergarten_results.html.erb +36 -0
  61. data/app/views/layouts/modals/_kindergarten_results_aborted.html.erb +27 -0
  62. data/app/views/layouts/modals/_level_up.html.erb +27 -0
  63. data/app/views/users/_avatar_list.html.erb +6 -2
  64. data/app/views/users/_edit_user_form.html.erb +9 -4
  65. data/app/views/users/_term.html.erb +10 -0
  66. data/app/views/users/_user_form.html.erb +17 -3
  67. data/app/views/users/terms.html.erb +18 -0
  68. data/config/routes.rb +2 -0
  69. data/lib/mumuki/laboratory.rb +1 -1
  70. data/lib/mumuki/laboratory/controllers/current_organization.rb +1 -1
  71. data/lib/mumuki/laboratory/controllers/results_rendering.rb +4 -2
  72. data/lib/mumuki/laboratory/locales/en.yml +21 -5
  73. data/lib/mumuki/laboratory/locales/es-CL.yml +10 -4
  74. data/lib/mumuki/laboratory/locales/es.yml +22 -6
  75. data/lib/mumuki/laboratory/locales/pt.yml +21 -5
  76. data/lib/mumuki/laboratory/version.rb +1 -1
  77. data/spec/capybara_helper.rb +99 -0
  78. data/spec/controllers/exercise_solutions_controller_spec.rb +3 -4
  79. data/spec/dummy/db/schema.rb +37 -1
  80. data/spec/dummy/public/medal/outline.svg +1089 -0
  81. data/spec/features/choose_organization_spec.rb +12 -30
  82. data/spec/features/disable_user_flow_spec.rb +3 -5
  83. data/spec/features/disabled_organization_flow_spec.rb +9 -14
  84. data/spec/features/exercise_flow_spec.rb +2 -2
  85. data/spec/features/guide_reset_spec.rb +1 -1
  86. data/spec/features/guides_flow_spec.rb +1 -1
  87. data/spec/features/home_private_flow_spec.rb +1 -3
  88. data/spec/features/home_public_flow_spec.rb +6 -12
  89. data/spec/features/invitations_flow_spec.rb +2 -2
  90. data/spec/features/login_flow_spec.rb +2 -2
  91. data/spec/features/not_found_private_flow_spec.rb +4 -4
  92. data/spec/features/not_found_public_flow_spec.rb +1 -6
  93. data/spec/features/profile_flow_spec.rb +1 -1
  94. data/spec/helpers/page_title_helper_spec.rb +3 -3
  95. data/spec/javascripts/editors-spec.js +23 -0
  96. data/spec/javascripts/gamification-spec.js +58 -0
  97. data/spec/javascripts/submissions-store-spec.js +139 -6
  98. data/spec/spec_helper.rb +2 -0
  99. data/spec/teaspoon_env.rb +24 -6
  100. metadata +137 -98
@@ -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="fa 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,11 +1,15 @@
1
1
  <div class="row">
2
2
  <div class="mu-avatar-list">
3
- <% avatars_for(@user).sort_by(&:id).each do |avatar| %>
3
+ <% avatars_for(@user).each do |avatar| %>
4
4
  <%= show_avatar_item(avatar) %>
5
5
  <% end %>
6
6
 
7
+ <% locked_avatars_for(@user).sort_by(&:id).each do |avatar| %>
8
+ <%= show_locked_avatar_item(avatar) %>
9
+ <% end %>
10
+
7
11
  <% if @user.image_url %>
8
- <%= avatar_image @user.image_url, class: 'mu-avatar-item', id: 'mu-user-image' %>
12
+ <%= avatar_image @user.image_url, class: 'mu-avatar-item', id: 'mu-user-image', tabindex: 0 %>
9
13
  <% end %>
10
14
  </div>
11
15
  </div>
@@ -1,20 +1,25 @@
1
1
  <%= form_for :user, url: update_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
- <div class="mu-profile-actions">
5
- <%= link_to t(:cancel), :back, class: 'btn btn-default' if @user.profile_completed? %>
6
- <%= f.submit t(:save), disabled: true, class: 'btn btn-success', id: 'mu-edit-profile-btn' %>
4
+ <div class="mu-profile-actions hidden-xs">
5
+ <%= cancel_edit_profile_button %>
6
+ <%= save_edit_profile_button f %>
7
7
  </div>
8
8
  </div>
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"></i>
12
+ <i class="fa fa-pencil 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} %>
16
+ <%= render partial: 'layouts/terms_acceptance_disclaimer', locals: {user: @user} %>
16
17
  </div>
17
18
  </div>
19
+ <div class="mu-profile-actions mobile visible-xs">
20
+ <%= cancel_edit_profile_button %>
21
+ <%= save_edit_profile_button f %>
22
+ </div>
18
23
  <% end %>
19
24
 
20
25
  <%= content_for :no_container do %>
@@ -0,0 +1,10 @@
1
+ <div class="terms-card">
2
+ <details <%= 'open' unless collapsed %>>
3
+ <summary class="terms-card-header">
4
+ <h4><%= term.header %></h4>
5
+ </summary>
6
+ <div class="terms-card-body">
7
+ <%= term.content_html %>
8
+ </div>
9
+ </details>
10
+ </div>
@@ -1,14 +1,24 @@
1
1
  <div class="mu-user-header">
2
2
  <h1><%= @user.name %></h1>
3
- <div class="mu-profile-actions">
3
+ <div class="mu-profile-actions hidden-xs">
4
4
  <%= edit_profile_button %>
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="fa 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>
@@ -21,4 +31,8 @@
21
31
  <span> <strong><%= t :programming_since %>:</strong> <%= t(:time_since, time: time_ago_in_words(@user.created_at)) %> </span>
22
32
  </div>
23
33
  </div>
34
+
35
+ <div class="mu-profile-actions mobile visible-xs">
36
+ <%= edit_profile_button %>
37
+ </div>
24
38
  </div>
@@ -0,0 +1,18 @@
1
+ <%= content_for :breadcrumbs do %>
2
+ <% if current_user? %>
3
+ <%= breadcrumbs @user %>
4
+ <% else %>
5
+ <%= header_breadcrumbs %>
6
+ <% end %>
7
+ <% end %>
8
+
9
+ <div class="mu-user-header">
10
+ <h1><%= t(:terms_and_conditions) %></h1>
11
+ </div>
12
+
13
+ <div>
14
+ <% @profile_terms.each do |term| %>
15
+ <%= render partial: 'term', locals: {term: term, collapsed: current_user&.has_accepted?(term)} %>
16
+ <% end %>
17
+ </div>
18
+
@@ -12,6 +12,7 @@ Rails.application.routes.draw do
12
12
  end
13
13
  end
14
14
 
15
+ get '/discussions/terms' => 'book_discussions#terms'
15
16
  concerns :debatable, controller: 'book_discussions', only: :index
16
17
 
17
18
  resources :discussions, only: [] do
@@ -53,6 +54,7 @@ Rails.application.routes.draw do
53
54
 
54
55
  # All users
55
56
  resource :user, only: [:show, :edit]
57
+ get '/user/terms' => 'users#terms'
56
58
 
57
59
  # Current user
58
60
  resources :messages, only: [:index, :create]
@@ -34,7 +34,7 @@ module Mumukit::Platform::OrganizationMapping::Path
34
34
  patch :organization_name do |request, domain, hyper|
35
35
  name = hyper.(request, domain)
36
36
  if %w(auth login logout).include? name
37
- 'central'
37
+ 'base'
38
38
  else
39
39
  name
40
40
  end
@@ -2,7 +2,7 @@ module Mumuki::Laboratory::Controllers::CurrentOrganization
2
2
  def set_current_organization!
3
3
  Organization.find_by!(name: organization_name).switch!
4
4
  rescue => e
5
- Organization.central.switch!
5
+ Organization.base.switch!
6
6
  raise e
7
7
  end
8
8
 
@@ -19,7 +19,8 @@ module Mumuki::Laboratory::Controllers::ResultsRendering
19
19
  .merge(progress_json)
20
20
  .merge(
21
21
  html: render_results(layout, assignment),
22
- remaining_attempts_html: remaining_attempts_text(assignment))
22
+ remaining_attempts_html: remaining_attempts_text(assignment),
23
+ current_exp: UserStats.exp_for(assignment.submitter))
23
24
  end
24
25
 
25
26
  def merge_kids_specific_renders(assignment, results)
@@ -28,7 +29,8 @@ module Mumuki::Laboratory::Controllers::ResultsRendering
28
29
  title_html: render_results_title(assignment),
29
30
  expectations: assignment.affable_expectation_results,
30
31
  tips: assignment.affable_tips,
31
- test_results: assignment.affable_test_results)
32
+ level_up_html: render_results('exercise_solutions/kids_level_up', assignment),
33
+ test_results: assignment.sanitized_affable_test_results) # these results could include escaped characters so they should be rendered as HTML to display properly
32
34
  end
33
35
 
34
36
  def progress_json
@@ -3,7 +3,9 @@ en:
3
3
  aborted: Oops, we couldn't evaluate your solution
4
4
  abort_explanation_html: <li>Check that your program does not have recursion or an infinite loop</li> <li>Check that you have an internet connection</li> <li>Wait a while and try again</li>
5
5
  about: About
6
- accept_terms: I accept the terms and conditions
6
+ accept: Accept
7
+ accept_terms: I have read and accept the terms and conditions
8
+ accept_terms_to_continue: Accept terms to continue
7
9
  actions: Actions
8
10
  activity: Activity
9
11
  actual_state: Obtained board
@@ -93,6 +95,7 @@ en:
93
95
  exercise_number: Exercise %{number}
94
96
  exercise_success_rate: Exercises success rate
95
97
  exit: Exit
98
+ exp_points: experience points.
96
99
  expectations: Expectations
97
100
  expected_state: Expected board
98
101
  explain_redirect: You have registered in another organization
@@ -103,6 +106,8 @@ en:
103
106
  first_name: First Name
104
107
  forbidden_explanation: Please verify you have logged in with the right account
105
108
  format: Format
109
+ forum_terms: Forum rules
110
+ forum_terms_link: If you have any questions, please check %{terms_link}
106
111
  fullscreen: "Fullscreen"
107
112
  gender: Gender
108
113
  get_messages: "View messages"
@@ -125,6 +130,12 @@ en:
125
130
  joining_html: '¡Welcome to course <strong>%{course}</strong>!'
126
131
  keep_learning: Keep learning!
127
132
  kids_default_success: You did it great!
133
+ kindergarten_passed: "Your program worked great!"
134
+ kindergarten_passed_with_warnings: "Your program worked great!"
135
+ kindergarten_pending: "There's an error in your program. Try again!"
136
+ kindergarten_failed: "There's an error in your program. Try again!"
137
+ kindergarten_errored: "There's an error in your program. Try again!"
138
+ kindergarten_aborted: "Ups! Something went wrong"
128
139
  language: Language
129
140
  last_name: Last Name
130
141
  last_seen: "Seen by %{name}"
@@ -135,11 +146,14 @@ en:
135
146
  lessons: Lessons
136
147
  lesson_number: Lesson %{number}
137
148
  let_us_know: please let us know!
149
+ level: Level
150
+ level_up: Level up!
138
151
  loading: Loading
139
152
  load_solution_into_console: Load your solution into the console
140
153
  locked_content: 'This content will be unlocked when you finish previous chapters'
141
154
  male: Male
142
155
  manual_evaluation_pending: Thanks for submitting your solution! It will be revised by the course teachers soon
156
+ medal: Medal
143
157
  message_count:
144
158
  one: 1 message
145
159
  other: '%{count} messages'
@@ -148,8 +162,6 @@ en:
148
162
  messages_error: Previous messages are unavailable. Please try again later.
149
163
  more_messages: More
150
164
  moderator: Mentor
151
- mumuki_catchphrase: Improve your programming skills
152
- mumuki_short_description: Mumuki is a simple, open and collaborative platform for sharing and solving programming exercises. It is aimed to help people with learning and teaching programing languages and paradigms
153
165
  my_doubts: My doubts
154
166
  my_submissions: My Submissions
155
167
  name: Name
@@ -191,7 +203,6 @@ en:
191
203
  permissions: Permissions
192
204
  please_fill_profile_data: Please complete your profile data to continue!
193
205
  please_validate: 'Please validate your data before continue:'
194
- powered_by_mumuki_html: "powered by <span class=\"da da-mumuki-circle\"></span> mumuki"
195
206
  previous_exercise: Previous
196
207
  problem_with_exercise: '[Mumuki] Problem with exercise: %{title}'
197
208
  processing_your_solution: We are processing you solution
@@ -225,6 +236,7 @@ en:
225
236
  solved: Solved
226
237
  solved_count: '%{count} solved'
227
238
  solve_doubts: Solve other's doubts
239
+ solve_more_exercises_to_level_up: Solve <span>number</span> more exercises to advance to the next level.
228
240
  solve_your_doubts: Solve your doubts
229
241
  solve_your_doubts_teaser: Do you have any doubts?
230
242
  something_went_wrong: Something went wrong!
@@ -234,7 +246,6 @@ en:
234
246
  start_practicing: Start Practicing!
235
247
  start_using_mumuki: Start using Mumuki!
236
248
  status: Status
237
- stay_here: I want to stay here
238
249
  stop_emails?: Want to stop getting emails?
239
250
  submission: submission
240
251
  submission_date: Submission date
@@ -247,7 +258,10 @@ en:
247
258
  teacher_info: Information for teachers
248
259
  tell_us_how: Please tell us how this happened!
249
260
  tell_us_if_our_error: If you think this is our fault, %{issues}
261
+ terms_accepted: The terms and conditions were accepted
250
262
  terms_and_conditions: Terms and conditions
263
+ terms_and_conditions_continue_disclaimer: By continuing you agree to %{terms_link}
264
+ terms_and_conditions_must_be_accepted: You must accept the terms and conditions
251
265
  test_results: Test results
252
266
  time_ago: "%{time} ago"
253
267
  time_left: You have
@@ -258,6 +272,7 @@ en:
258
272
  to_solved: Mark as solved
259
273
  unauthorized_explanation: You have no permissions for this content. Maybe you logged in with another account.
260
274
  undo_upvote: Undo upvote
275
+ unlocked_medal_as_avatar: You earned this medal! You can now choose it as an avatar.
261
276
  unspecified: I'd rather not say
262
277
  unmeet_expectations: "Goals that weren't met"
263
278
  unprepared_organization_explanation: This path hasn't started yet.
@@ -278,6 +293,7 @@ en:
278
293
  working: "Working"
279
294
  wrong_answer: The answer is wrong
280
295
  years: years old
296
+ you_earned: You earned
281
297
  you_must_sign_in_before_submitting: You must sign in before submitting your solutions
282
298
  you_never_submitted_solutions: It seems that you've never submitted solutions since you created your account.
283
299
  your_new_organization: your new organization
@@ -93,6 +93,7 @@ es-CL:
93
93
  exercise_success_rate: Tasa de éxito en ejercicios
94
94
  exercises: Ejercicios
95
95
  exit: Salir
96
+ exp_points: puntos de experiencia.
96
97
  expectations: Objetivos
97
98
  expected_state: Tablero esperado
98
99
  explain_redirect: Notamos que te registraste en otra organización.
@@ -103,6 +104,7 @@ es-CL:
103
104
  first_name: Nombre
104
105
  forbidden_explanation: ¿Puede que hayas ingresado con una cuenta incorrecta?
105
106
  format: Dar formato
107
+ forum_terms_link: Si tienes alguna duda, consulta las %{terms_link}
106
108
  fullscreen: "Pantalla completa"
107
109
  gender: Género
108
110
  get_messages: "Ver mensajes"
@@ -138,11 +140,14 @@ es-CL:
138
140
  lessons: Lecciones
139
141
  lesson_number: Lección %{number}
140
142
  let_us_know: ¡Por favor avísanos!
143
+ level: Nivel
144
+ level_up: ¡Subiste de nivel!
141
145
  loading: Cargando
142
146
  load_solution_into_console: Cargar la solución en la consola
143
147
  locked_content: 'Éste contenido se desbloqueará cuando termines los capítulos anteriores'
144
148
  male: Hombre
145
149
  manual_evaluation_pending: ¡Gracias por enviar tu solución! Tus docentes la corregirán pronto
150
+ medal: Medalla
146
151
  message_count:
147
152
  one: 1 mensaje
148
153
  other: '%{count} mensajes'
@@ -153,8 +158,6 @@ es-CL:
153
158
  minutes: minutos
154
159
  more_messages: Ver mensajes anteriores
155
160
  moderator: Moderador
156
- mumuki_catchphrase: Aprende a programar
157
- mumuki_short_description: Mumuki es la plataforma libre y gratuita para aprender a programar, de la práctica a la teoría y en tu idioma
158
161
  my_doubts: Mis consultas
159
162
  name: Nombre
160
163
  navigation_continue: 'Siguiente %{kind}: %{sibling}'
@@ -201,7 +204,6 @@ es-CL:
201
204
  permissions: Permisos
202
205
  please_fill_profile_data: ¡Completa tus datos personales para continuar!
203
206
  please_validate: 'Estás a punto de ingresar al curso. Para poder ofrecerte una mejor experiencia, por favor valida que tus datos a continuación sean reales y correctos.'
204
- powered_by_mumuki_html: "por <span class=\"da da-mumuki-circle\"></span> mumuki"
205
207
  previous_exercise: Anterior
206
208
  problem_with_exercise: '[Mumuki] Error con el ejercicio: %{title}'
207
209
  processing_your_solution: Estamos procesando tu solución
@@ -236,6 +238,7 @@ es-CL:
236
238
  other: '%{count} resueltas'
237
239
  solved_exercises: Ejercicios Resueltos
238
240
  solve_doubts: Resuelve consultas
241
+ solve_more_exercises_to_level_up: Resuelve <span>number</span> ejercicios más para pasar al siguiente nivel.
239
242
  solve_your_doubts: Consulta tus dudas
240
243
  solve_your_doubts_teaser: ¿Tienes alguna consulta?
241
244
  something_went_wrong: ¡Ups!, algo no anduvo bien...
@@ -245,7 +248,6 @@ es-CL:
245
248
  start_practicing: ¡Empieza ahora!
246
249
  start_using_mumuki: ¡Empieza a usar Mumuki!
247
250
  status: Estado
248
- stay_here: No, quiero quedarme acá
249
251
  stop_emails?: ¿Quieres dejar de recibir estos mails?
250
252
  subscribe: Recibir notificaciones
251
253
  submission: solución
@@ -260,6 +262,8 @@ es-CL:
260
262
  tell_us_how: ¡Cuéntanos cómo te pasó esto!
261
263
  tell_us_if_our_error: Si piensas que es un error nuestro, %{issues}
262
264
  terms_and_conditions: Términos y condiciones
265
+ terms_and_conditions_continue_disclaimer: Al continuar aceptas los %{terms_link}
266
+ terms_and_conditions_must_be_accepted: Tienes que aceptar los términos y condiciones
263
267
  test_results: Resultados de las pruebas
264
268
  time_since: "hace %{time}"
265
269
  time_left: Te quedan
@@ -271,6 +275,7 @@ es-CL:
271
275
  unauthorized_explanation: ¡Ups! Esto es lo que se conoce como %{error}, es decir que no iniciaste sesión.
272
276
  uncategorized: No categorizado
273
277
  undo_upvote: No es útil
278
+ unlocked_medal_as_avatar: ¡Obtuviste esta medalla! Ya puedes elegirla como avatar.
274
279
  unspecified: Prefiero no decirlo
275
280
  unmeet_expectations: Objetivos que no se cumplieron
276
281
  unprepared_organization_explanation: ¡Este recorrido aún no ha comenzado!
@@ -293,5 +298,6 @@ es-CL:
293
298
  page_gap: "&hellip;"
294
299
  working: "Procesando"
295
300
  wrong_answer: La respuesta no es correcta
301
+ you_earned: Ganaste
296
302
  you_must_sign_in_before_submitting: Tienes que iniciar sesión antes de empezar a enviar tus soluciones
297
303
  you_never_submitted_solutions: Parece que nunca enviaste soluciones desde que creaste tu cuenta.
@@ -3,7 +3,9 @@ es:
3
3
  aborted: Ups, no pudimos evaluar tu solución
4
4
  abort_explanation_html: <li>Revisá que tu programa no tenga recursión o algún bucle infinito</li><li>Revisá que tengas conexión a internet</li><li>Esperá un rato e intentalo nuevamente</li>
5
5
  about: Detalles
6
- accept_terms: Acepto los términos y condiciones
6
+ accept: Aceptar
7
+ accept_terms: He leido y acepto los términos y condiciones
8
+ accept_terms_to_continue: Para continuar es necesario aceptar los términos y condiciones
7
9
  actions: Acciones
8
10
  activity: Actividad
9
11
  actual_state: Tablero obtenido
@@ -99,6 +101,7 @@ es:
99
101
  exercise_success_rate: Tasa de éxito en ejercicios
100
102
  exercises: Ejercicios
101
103
  exit: Salir
104
+ exp_points: puntos de experiencia.
102
105
  expectations: Objetivos
103
106
  expected_state: Tablero esperado
104
107
  explain_redirect: Notamos que te registraste en otra organización.
@@ -109,6 +112,8 @@ es:
109
112
  first_name: Nombre
110
113
  forbidden_explanation: ¿Puede que hayas ingresado con una cuenta incorrecta?
111
114
  format: Dar formato
115
+ forum_terms: Reglas del foro
116
+ forum_terms_link: Si tenés alguna duda, consultá las %{terms_link}
112
117
  fullscreen: "Pantalla completa"
113
118
  gender: Género
114
119
  get_messages: "Ver mensajes"
@@ -133,7 +138,13 @@ es:
133
138
  its_been_a_while: Hace un tiempo que no usás Mumuki.
134
139
  joining_html: '¡Te damos la bienvenida al curso <strong>%{course}</strong>!'
135
140
  keep_learning: ¡Seguí aprendiendo!
136
- kids_default_success: ¡Lo hiciste muy bien!
141
+ kids_default_success: "¡Lo hiciste muy bien!"
142
+ kindergarten_passed: "¡Tu programa está muy bien!"
143
+ kindergarten_passed_with_warnings: "¡Tu programa está muy bien!"
144
+ kindergarten_pending: "Hay un error en tu programa. ¡Intentá de nuevo!"
145
+ kindergarten_failed: "Hay un error en tu programa. ¡Intentá de nuevo!"
146
+ kindergarten_errored: "Hay un error en tu programa. ¡Intentá de nuevo!"
147
+ kindergarten_aborted: "¡Ups! Hubo un problema técnico"
137
148
  language: Lenguaje
138
149
  languages: Lenguajes
139
150
  last_name: Apellido
@@ -145,11 +156,14 @@ es:
145
156
  lessons: Lecciones
146
157
  lesson_number: Lección %{number}
147
158
  let_us_know: ¡Por favor avisanos!
159
+ level: Nivel
160
+ level_up: ¡Subiste de nivel!
148
161
  loading: Cargando
149
162
  load_solution_into_console: Cargar la solución en la consola
150
163
  locked_content: 'Este contenido se desbloqueará cuando termines los capítulos anteriores'
151
164
  male: Hombre
152
165
  manual_evaluation_pending: ¡Gracias por enviar tu solución! Tus docentes la corregirán pronto
166
+ medal: Medalla
153
167
  message_count:
154
168
  one: 1 mensaje
155
169
  other: '%{count} mensajes'
@@ -160,8 +174,6 @@ es:
160
174
  minutes: minutos
161
175
  more_messages: Ver mensajes anteriores
162
176
  moderator: Mentor
163
- mumuki_catchphrase: Aprendé a programar
164
- mumuki_short_description: Mumuki es la plataforma libre y gratuita para aprender a programar, de la práctica a la teoría y en tu idioma
165
177
  my_doubts: Mis consultas
166
178
  name: Nombre
167
179
  navigation_continue: 'Siguiente %{kind}: %{sibling}'
@@ -208,7 +220,6 @@ es:
208
220
  permissions: Permisos
209
221
  please_fill_profile_data: ¡Completá tus datos personales para continuar!
210
222
  please_validate: 'Estás a punto de ingresar al curso. Para poder ofrecerte una mejor experiencia, por favor validá que tus datos a continuación sean reales y correctos.'
211
- powered_by_mumuki_html: "por <span class=\"da da-mumuki-circle\"></span> mumuki"
212
223
  previous_exercise: Anterior
213
224
  problem_with_exercise: '[Mumuki] Error con el ejercicio: %{title}'
214
225
  processing_your_solution: Estamos procesando tu solución
@@ -247,6 +258,7 @@ es:
247
258
  other: '%{count} resueltas'
248
259
  solved_exercises: Ejercicios Resueltos
249
260
  solve_doubts: Resolvé consultas
261
+ solve_more_exercises_to_level_up: Resolvé <span>number</span> ejercicios más para pasar al siguiente nivel.
250
262
  solve_your_doubts: Consultá tus dudas
251
263
  solve_your_doubts_teaser: ¿Tenés alguna consulta?
252
264
  something_went_wrong: ¡Ups!, algo no anduvo bien...
@@ -256,7 +268,6 @@ es:
256
268
  start_practicing: ¡Empezá ahora!
257
269
  start_using_mumuki: ¡Empezá a usar Mumuki!
258
270
  status: Estado
259
- stay_here: No, quiero quedarme acá
260
271
  stop_emails?: ¿Querés dejar de recibir estos mails?
261
272
  subscribe: Recibir notificaciones
262
273
  submission: solución
@@ -270,7 +281,10 @@ es:
270
281
  teacher_info: Información para docentes
271
282
  tell_us_how: ¡Contanos cómo te pasó esto!
272
283
  tell_us_if_our_error: Si pensás que es un error nuestro, %{issues}
284
+ terms_accepted: Los términos y condiciones fueron aceptados
273
285
  terms_and_conditions: Términos y condiciones
286
+ terms_and_conditions_continue_disclaimer: Al continuar estás aceptando los %{terms_link}
287
+ terms_and_conditions_must_be_accepted: Tenés que aceptar los términos y condiciones
274
288
  test_results: Resultados de las pruebas
275
289
  time_since: "hace %{time}"
276
290
  time_left: Te quedan
@@ -282,6 +296,7 @@ es:
282
296
  unauthorized_explanation: ¡Ups! Esto es lo que se conoce como %{error}, es decir que no iniciaste sesión.
283
297
  uncategorized: No categorizado
284
298
  undo_upvote: No es útil
299
+ unlocked_medal_as_avatar: ¡Obtuviste esta medalla! Ya podés elegirla como avatar.
285
300
  unspecified: Prefiero no decirlo
286
301
  unmeet_expectations: Objetivos que no se cumplieron
287
302
  unprepared_organization_explanation: Este recorrido aún no ha comenzado
@@ -306,6 +321,7 @@ es:
306
321
  working: "Procesando"
307
322
  wrong_answer: La respuesta no es correcta
308
323
  years: años
324
+ you_earned: Ganaste
309
325
  you_must_sign_in_before_submitting: Tenés que iniciar sesión antes de empezar a enviar tus soluciones
310
326
  you_never_submitted_solutions: Parece que nunca enviaste soluciones desde que creaste tu cuenta.
311
327
  your_new_organization: tu nueva organización