mumuki-laboratory 8.4.0 → 9.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/mumuki_laboratory/application/upload.js +69 -14
  3. data/app/assets/stylesheets/mumuki_laboratory/application/_layout.scss +3 -0
  4. data/app/assets/stylesheets/mumuki_laboratory/application/_modules.scss +1 -0
  5. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_content_show.scss +15 -2
  6. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_discussion.scss +31 -8
  7. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_medal.scss +1 -1
  8. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_user_menu.scss +35 -0
  9. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_user_profile.scss +11 -0
  10. data/app/controllers/api/base_controller.rb +0 -1
  11. data/app/controllers/api/courses_controller.rb +1 -1
  12. data/app/controllers/api/organizations_controller.rb +5 -2
  13. data/app/controllers/api/roles_controller.rb +4 -0
  14. data/app/controllers/api/users_controller.rb +6 -1
  15. data/app/controllers/application_controller.rb +1 -1
  16. data/app/controllers/concerns/with_authorization.rb +1 -16
  17. data/app/controllers/concerns/with_user_params.rb +4 -0
  18. data/app/controllers/discussions_messages_controller.rb +0 -1
  19. data/app/controllers/exam_authorization_requests_controller.rb +26 -0
  20. data/app/controllers/exam_registrations_controller.rb +6 -0
  21. data/app/controllers/users_controller.rb +8 -5
  22. data/app/helpers/application_helper.rb +4 -0
  23. data/app/helpers/breadcrumbs_helper.rb +4 -0
  24. data/app/helpers/content_view_helper.rb +19 -0
  25. data/app/helpers/exercise_input_helper.rb +8 -17
  26. data/app/helpers/icons_helper.rb +3 -11
  27. data/app/helpers/links_helper.rb +3 -3
  28. data/app/helpers/menu_bar_helper.rb +3 -3
  29. data/app/helpers/progress_bar_helper.rb +2 -2
  30. data/app/helpers/user_menu_helper.rb +18 -0
  31. data/app/views/chapters/show.html.erb +17 -16
  32. data/app/views/complements/show.html.erb +1 -1
  33. data/app/views/discussions/_message.html.erb +7 -7
  34. data/app/views/exam_authorization_requests/show.html.erb +17 -0
  35. data/app/views/exam_registrations/show.html.erb +37 -0
  36. data/app/views/exams/show.html.erb +1 -1
  37. data/app/views/{layouts → exercises}/_exercise_skipped.html.erb +0 -0
  38. data/app/views/exercises/_exercise_title_icons.html.erb +4 -0
  39. data/app/views/exercises/show.html.erb +5 -8
  40. data/app/views/{layouts → guides}/_guide.html.erb +3 -3
  41. data/app/views/guides/_guide_container.html.erb +24 -0
  42. data/app/views/{layouts → guides}/_guide_title_icons.html.erb +1 -3
  43. data/app/views/layouts/_progress_bar.html.erb +9 -7
  44. data/app/views/layouts/_progress_listing.html.erb +5 -5
  45. data/app/views/layouts/_user_menu.html.erb +21 -0
  46. data/app/views/layouts/application.html.erb +1 -6
  47. data/app/views/layouts/exercise_inputs/editors/_upload.html.erb +11 -2
  48. data/app/views/lessons/show.html.erb +1 -1
  49. data/app/views/notifications/_discussion.html.erb +1 -0
  50. data/app/views/notifications/_dropdown.html.erb +13 -0
  51. data/app/views/notifications/_exam_authorization_request.html.erb +1 -0
  52. data/app/views/notifications/_exam_registration.html.erb +1 -0
  53. data/app/views/notifications/_message.html.erb +1 -0
  54. data/app/views/users/_user_form.html.erb +10 -8
  55. data/app/views/users/discussions.html.erb +28 -0
  56. data/app/views/users/edit.html.erb +1 -1
  57. data/app/views/users/messages.html.erb +27 -0
  58. data/app/views/users/show.html.erb +4 -51
  59. data/app/views/users/terms.html.erb +2 -2
  60. data/config/routes.rb +6 -0
  61. data/lib/mumuki/laboratory/controllers/notifications.rb +3 -22
  62. data/lib/mumuki/laboratory/locales/en.yml +34 -17
  63. data/lib/mumuki/laboratory/locales/es-CL.yml +25 -8
  64. data/lib/mumuki/laboratory/locales/es.yml +30 -14
  65. data/lib/mumuki/laboratory/locales/pt.yml +27 -10
  66. data/lib/mumuki/laboratory/version.rb +1 -1
  67. data/spec/controllers/exam_authorization_requests_controller_spec.rb +40 -0
  68. data/spec/controllers/exam_registrations_controller_spec.rb +19 -0
  69. data/spec/controllers/organizations_api_controller_spec.rb +16 -9
  70. data/spec/dummy/db/schema.rb +23 -0
  71. data/spec/features/exercise_flow_spec.rb +3 -3
  72. data/spec/features/login_flow_spec.rb +1 -1
  73. data/spec/features/menu_bar_spec.rb +24 -24
  74. data/spec/features/notifications_flow_spec.rb +46 -0
  75. data/spec/features/profile_flow_spec.rb +6 -9
  76. data/spec/features/terms_flow_spec.rb +30 -0
  77. data/spec/helpers/application_helper_spec.rb +10 -0
  78. data/spec/javascripts/bridge-spec.js +2 -2
  79. data/spec/javascripts/csrf-token-spec.js +2 -2
  80. data/spec/javascripts/editors-spec.js +7 -9
  81. data/spec/javascripts/elipsis-spec.js +4 -4
  82. data/spec/javascripts/events-spec.js +7 -7
  83. data/spec/javascripts/exercise-spec.js +7 -8
  84. data/spec/javascripts/global-spec.js +3 -3
  85. data/spec/javascripts/i18n-spec.js +23 -20
  86. data/spec/javascripts/kids-button-spec.js +6 -8
  87. data/spec/javascripts/results-renderers-spec.js +5 -5
  88. data/spec/javascripts/speech-bubble-renderer-spec.js +2 -3
  89. data/spec/javascripts/submissions-store-spec.js +14 -14
  90. data/spec/javascripts/sync-mode-spec.js +3 -3
  91. data/spec/javascripts/timeout-spec.js +2 -2
  92. data/spec/javascripts/timer-spec.js +2 -2
  93. data/spec/javascripts/upload-spec.js +80 -0
  94. metadata +132 -108
  95. data/app/views/layouts/_guide_container.html.erb +0 -28
@@ -0,0 +1,24 @@
1
+ <%= content_for :breadcrumbs do %>
2
+ <%= breadcrumbs subject %>
3
+ <% end %>
4
+
5
+ <%= render layout: 'guides/guide', locals: { subject: subject } do %>
6
+
7
+ <div class="row">
8
+ <div class="mu-inline-block-right hidden-xs">
9
+ <h1><%= language_icon @guide.language %></h1>
10
+ </div>
11
+ <div class="mu-inline-block-left">
12
+ <h1><%= short_title_for @guide %></h1>
13
+ <%= render partial: 'guides/guide_title_icons' %>
14
+ </div>
15
+ </div>
16
+ <div class="row">
17
+ <div class="col-md-12">
18
+ <div class="text-box">
19
+ <%= @guide.description_html %>
20
+ </div>
21
+ </div>
22
+ </div>
23
+
24
+ <% end %>
@@ -1,8 +1,6 @@
1
- <div class="guide-title-icons pull-left">
1
+ <div class="mu-content-title-icons">
2
2
  <% if current_user? && should_display_medal?(@guide, Organization.current) %>
3
- <div class="pull-left">
4
3
  <%= content_medal_for(@guide, current_user) %>
5
- </div>
6
4
  <% end %>
7
5
  <%= teacher_info_button @guide %>
8
6
  <%= link_to_bibliotheca_guide @guide %>
@@ -1,12 +1,14 @@
1
1
  <div class="progress-list-flex">
2
- <% guide.exercises.each do |e| %>
2
+ <% assignments = guide.assignments_for(current_user) %>
3
+ <% assignments.each do |assignment| %>
4
+ <% exercise = assignment.exercise %>
3
5
  <a
4
- <%= turbolinks_enable_for e %>
5
- href="<%= exercise_path(e)%>"
6
- aria-label="<%= e.navigable_name %>"
7
- title="<%= e.navigable_name %>"
8
- data-mu-exercise-id="<%= e.id %>"
9
- class="<%= class_for_progress_list_item(e, e == actual)%>">
6
+ <%= turbolinks_enable_for exercise %>
7
+ href="<%= exercise_path(exercise)%>"
8
+ aria-label="<%= exercise.navigable_name %>"
9
+ title="<%= exercise.navigable_name %>"
10
+ data-mu-exercise-id="<%= exercise.id %>"
11
+ class="<%= class_for_progress_list_item(assignment, exercise == actual)%>">
10
12
  </a>
11
13
  <% end %>
12
14
  </div>
@@ -1,9 +1,9 @@
1
1
  <ul class="progress-listing">
2
- <% exercises.each do |exercise| %>
3
- <% cache [exercise, exercise.status_for(current_user), Organization.current] do %>
4
- <li <%= turbolinks_enable_for(exercise) %>>
5
- <%= exercise_status_icon exercise %>
6
- <%= link_to_path_element(exercise) %>
2
+ <% guide.assignments_for(current_user).each do |assignment| %>
3
+ <% cache [assignment.exercise, assignment.status, Organization.current.name, current_user?] do %>
4
+ <li <%= turbolinks_enable_for(assignment.exercise) %>>
5
+ <%= assignment_status_icon assignment %>
6
+ <%= link_to_path_element(assignment.exercise) %>
7
7
  </li>
8
8
  <% end %>
9
9
  <% end %>
@@ -0,0 +1,21 @@
1
+ <div class="col-md-3 mu-tab-body mu-user-menu">
2
+ <div class="col-md-12">
3
+ <div class="mu-user-menu-header">
4
+ <%= t(:my_account) %>
5
+ </div>
6
+ <div class="mu-user-menu-item">
7
+ <%= profile_user_menu_link %>
8
+ </div>
9
+ <div class="mu-user-menu-divider horizontal"></div>
10
+ <div class="mu-user-menu-item">
11
+ <%= messages_user_menu_link %>
12
+ </div>
13
+ <% if current_user&.can_discuss_here? %>
14
+ <div class="mu-user-menu-item">
15
+ <%= discussions_user_menu_link %>
16
+ </div>
17
+ <% end %>
18
+ </div>
19
+ <div class="mu-user-menu-divider vertical hidden-sm hidden-xs"></div>
20
+ </div>
21
+ <div class="mu-user-menu-divider horizontal visible-sm visible-xs"></div>
@@ -25,12 +25,7 @@
25
25
  <span class="mu-level-number"></span>
26
26
  </div>
27
27
  <% end %>
28
- <div class="dropdown mu-navbar-element notifications-box <%= 'notifications-box-empty' unless has_notifications? %>">
29
- <a href=<%= "#{user_notifications_path}" %>>
30
- <i class="fas fa-bell fa-fw fa-2x mu-navbar-icon"></i>
31
- <span class="badge badge-notifications"><%= notifications_count %></span>
32
- </a>
33
- </div>
28
+ <%= render partial: 'notifications/dropdown' %>
34
29
  <div class="dropdown mu-navbar-element">
35
30
  <div id="profileDropdown" class="profile-dropdown" data-toggle="dropdown" aria-label="<%= t(:user) %>" role="menu" tabindex="0">
36
31
  <%= profile_picture_for current_user %>
@@ -1,4 +1,13 @@
1
1
  <div class="form-group">
2
- <textarea id="solution_content" type="text" name="solution[content]" style="display: none"></textarea>
3
- <input id="upload-input" type="file" class="upload submission-control" size="5120" accept=".<%= @exercise.language.extension %>" />
2
+ <% @max_file_size = 256000 %>
3
+
4
+ <textarea id="solution_content" type="text" name="solution[content]" class="hidden"></textarea>
5
+ <input id="mu-upload-input" type="file" class="upload submission-control hidden" mu-upload-file-limit=<%= @max_file_size %> accept=".<%= @exercise.language.extension %>" />
6
+ <div>
7
+ <label id="mu-upload-label" for="mu-upload-input" class="btn btn-success">
8
+ <%= fa_icon(:upload, text: t(:select_file), id: "mu-upload-icon") %>
9
+ </label>
10
+ <div id="mu-upload-file-limit-exceeded" class="hidden">
11
+ <%= fa_icon("exclamation-triangle", text: t(:file_exceeds_max_size, size_kb: (@max_file_size / 1000))) %></div>
12
+ </div>
4
13
  </div>
@@ -1 +1 @@
1
- <%= render partial: "layouts/guide_container", locals: { subject: @lesson }%>
1
+ <%= render partial: "guides/guide_container", locals: { subject: @lesson }%>
@@ -0,0 +1 @@
1
+ <%= menu_item :comments, :new_discussion_message, url_for([target.item, target]), { title: target.item.name.truncate_words(3) } %>
@@ -0,0 +1,13 @@
1
+ <div class="dropdown mu-navbar-element notifications-box <%= 'notifications-box-empty' unless has_notifications? %>">
2
+ <div id="notificationsDropdown" class="profile-dropdown" data-toggle="dropdown" aria-label="<%= t(:notifications) %>" role="menu" tabindex="0">
3
+ <i class="fas fa-bell fa-fw fa-2x mu-navbar-icon"></i>
4
+ <span class="badge badge-notifications"><%= notifications_count %></span>
5
+ </div>
6
+ <ul id="notificationsPanel" class="dropdown-menu dropdown-menu-right" aria-labelledby="notificationsDropdown">
7
+ <% notifications.each do |it| %>
8
+ <li>
9
+ <%= notification_preview_for it.target %>
10
+ </li>
11
+ <% end %>
12
+ </ul>
13
+ </div>
@@ -0,0 +1 @@
1
+ <%= menu_item :book_open, :exam_authorization_request_updated, url_for(target), { description: target.exam_registration.description } %>
@@ -0,0 +1 @@
1
+ <%= menu_item :book_open, :exam_registration_open, url_for(target), { description: target.description } %>
@@ -0,0 +1 @@
1
+ <%= menu_item :envelope, :new_message_received, url_for(target.exercise), { sender: target.sender } %>
@@ -1,11 +1,11 @@
1
1
  <div class="mu-user-header">
2
- <h1><%= @user.name %></h1>
2
+ <h1><%= t(:my_profile) %></h1>
3
3
  <div class="mu-profile-actions hidden-xs">
4
4
  <%= edit_profile_button %>
5
5
  </div>
6
6
  </div>
7
- <div class="row mu-tab-body">
8
- <div class="col-md-4 mu-profile-info-left">
7
+ <div class="mu-profile-info">
8
+ <div class="mu-profile-info-left">
9
9
  <%= profile_picture_for(@user, id: 'mu-user-avatar', class: 'mu-user-avatar') %>
10
10
  <% if in_gamified_context? %>
11
11
  <svg class="mu-level-progress" width="300" height="300" viewBox="0 0 100 100">
@@ -18,7 +18,10 @@
18
18
  </div>
19
19
  <% end %>
20
20
  </div>
21
- <div class="col-md-8 mu-profile-info-right">
21
+ <div class="mu-profile-info-right">
22
+ <div>
23
+ <span> <strong><%= t :name %>:</strong> <%= "#{@user.name}" %> </span>
24
+ </div>
22
25
  <% if @user.age.present? %>
23
26
  <div>
24
27
  <span> <strong><%= t :age %>:</strong> <%= "#{@user.age} #{t :years}" %> </span>
@@ -31,8 +34,7 @@
31
34
  <span> <strong><%= t :programming_since %>:</strong> <%= t(:time_since, time: time_ago_in_words(@user.created_at)) %> </span>
32
35
  </div>
33
36
  </div>
34
-
35
- <div class="mu-profile-actions mobile visible-xs">
36
- <%= edit_profile_button %>
37
- </div>
37
+ </div>
38
+ <div class="mu-profile-actions mobile visible-xs">
39
+ <%= edit_profile_button %>
38
40
  </div>
@@ -0,0 +1,28 @@
1
+ <%= content_for :breadcrumbs do %>
2
+ <%= breadcrumbs_for_my_account %>
3
+ <% end %>
4
+
5
+ <%= render partial: 'layouts/user_menu' %>
6
+
7
+ <div class="col-md-9 mu-tab-body">
8
+ <div class="mu-user-header">
9
+ <h1><%= t(:discussions) %></h1>
10
+ </div>
11
+ <% if @watched_discussions.empty? %>
12
+ <div class="mu-tab-body">
13
+ <%= t :discussions_will_be_here %>
14
+ </div>
15
+ <% else %>
16
+ <table class="table table-striped">
17
+ <% @watched_discussions.each do |discussion| %>
18
+ <tr>
19
+ <td>
20
+ <%= icon_for_read(discussion.read_by?(@user)) %>
21
+ </td>
22
+ <td><%= link_to discussion.item.name, item_discussion_path(discussion) %></td>
23
+ <td><%= time_ago_in_words discussion.last_message_date %></td>
24
+ </tr>
25
+ <% end %>
26
+ </table>
27
+ <% end %>
28
+ </div>
@@ -1,5 +1,5 @@
1
1
  <%= content_for :breadcrumbs do %>
2
- <%= breadcrumbs @user %>
2
+ <%= breadcrumbs_for_my_account %>
3
3
  <% end %>
4
4
 
5
5
  <%= render partial: 'edit_user_form' %>
@@ -0,0 +1,27 @@
1
+ <%= content_for :breadcrumbs do %>
2
+ <%= breadcrumbs_for_my_account %>
3
+ <% end %>
4
+
5
+ <%= render partial: 'layouts/user_menu' %>
6
+
7
+ <div class="col-md-9 mu-tab-body">
8
+ <div class="mu-user-header">
9
+ <h1><%= t(:messages) %></h1>
10
+ </div>
11
+ <% if @messages.empty? %>
12
+ <div class="mu-tab-body">
13
+ <%= t :no_messages %>
14
+ </div>
15
+ <% else %>
16
+ <table class="table table-striped">
17
+ <% @messages.each do |message| %>
18
+ <tr>
19
+ <td><%= icon_for_read(message.read?) %></td>
20
+ <td><%= link_to message.exercise.name, exercise_path(message.exercise.id) %></td>
21
+ <td><%= mail_to message.sender %></td>
22
+ <td><%= time_ago_in_words message.created_at %></td>
23
+ </tr>
24
+ <% end %>
25
+ </table>
26
+ <% end %>
27
+ </div>
@@ -1,56 +1,9 @@
1
1
  <%= content_for :breadcrumbs do %>
2
- <%= breadcrumbs @user %>
2
+ <%= breadcrumbs_for_my_account %>
3
3
  <% end %>
4
4
 
5
- <ul class="nav nav-tabs" role="tablist">
6
- <li role="presentation" class="active">
7
- <a data-target="#info" aria-controls="info" role="tab" data-toggle="tab"><%= t :profile %></a>
8
- </li>
9
- <li role="presentation">
10
- <a data-target="#messages" aria-controls="messages" role="tab" data-toggle="tab"><%= t :messages %></a>
11
- </li>
12
- <% if @watched_discussions.present? %>
13
- <li role="presentation">
14
- <a data-target="#discussions" aria-controls="discussions" role="tab" data-toggle="tab"><%= t :discussions %></a>
15
- </li>
16
- <% end %>
17
- </ul>
5
+ <%= render partial: 'layouts/user_menu' %>
18
6
 
19
- <div class="tab-content">
20
- <div role="tabpanel" class="tab-pane active" id="info">
21
- <%= render partial: 'user_form' %>
22
- </div>
23
- <div role="tabpanel" class="tab-pane" id="messages">
24
- <% if @messages.empty? %>
25
- <div class="row mu-tab-body col-md-12">
26
- <%= t :no_messages %>
27
- </div>
28
- <% else %>
29
- <table class="table table-striped">
30
- <% @messages.each do |message| %>
31
- <tr>
32
- <td><%= icon_for_read(message.read?) %></td>
33
- <td><%= link_to message.exercise.name, exercise_path(message.exercise.id) %></td>
34
- <td><%= mail_to message.sender %></td>
35
- <td><%= time_ago_in_words message.created_at %></td>
36
- </tr>
37
- <% end %>
38
- </table>
39
- <% end %>
40
- </div>
41
- <% if @watched_discussions.present? %>
42
- <div role="tabpanel" class="tab-pane" id="discussions">
43
- <table class="table table-striped">
44
- <% @watched_discussions.each do |discussion| %>
45
- <tr>
46
- <td>
47
- <%= icon_for_read(discussion.read_by?(@user)) %>
48
- </td>
49
- <td><%= link_to discussion.item.name, item_discussion_path(discussion) %></td>
50
- <td><%= time_ago_in_words discussion.last_message_date %></td>
51
- </tr>
52
- <% end %>
53
- </table>
54
- </div>
55
- <% end %>
7
+ <div class="col-md-9 mu-tab-body">
8
+ <%= render partial: 'user_form' %>
56
9
  </div>
@@ -1,6 +1,6 @@
1
1
  <%= content_for :breadcrumbs do %>
2
- <% if current_user? %>
3
- <%= breadcrumbs @user %>
2
+ <% if current_logged_user? %>
3
+ <%= breadcrumbs_for_my_account %>
4
4
  <% else %>
5
5
  <%= header_breadcrumbs %>
6
6
  <% end %>
data/config/routes.rb CHANGED
@@ -22,6 +22,9 @@ Rails.application.routes.draw do
22
22
  end
23
23
  end
24
24
 
25
+ resources :exam_registrations, only: [:show]
26
+ resources :exam_authorization_requests, only: [:show, :create, :update]
27
+
25
28
  resources :book, only: [:show]
26
29
  resources :chapters, only: [:show] do
27
30
  concerns :debatable, debatable_class: 'Chapter'
@@ -59,6 +62,9 @@ Rails.application.routes.draw do
59
62
 
60
63
  # Notification subscriptions
61
64
  get :unsubscribe
65
+
66
+ get :messages
67
+ get :discussions
62
68
  end
63
69
 
64
70
  resources :messages, only: [:index, :create]
@@ -1,32 +1,13 @@
1
1
  module Mumuki::Laboratory::Controllers::Notifications
2
-
3
- def user_notifications_path
4
- user_path(anchor: current_notifications_tab)
5
- end
6
-
7
2
  def has_notifications?
8
3
  notifications_count > 0
9
4
  end
10
5
 
11
6
  def notifications_count
12
- messages_count + discussions_count
13
- end
14
-
15
- private
16
-
17
- def current_notifications_tab
18
- has_messages? ? 'messages' : 'discussions'
19
- end
20
-
21
- def has_messages?
22
- messages_count > 0
23
- end
24
-
25
- def messages_count
26
- current_user.try(:unread_messages).try(:count) || 0
7
+ notifications.size
27
8
  end
28
9
 
29
- def discussions_count
30
- current_user.try(:unread_discussions).try(:count) || 0
10
+ def notifications
11
+ current_user.try(:unread_notifications) || []
31
12
  end
32
13
  end
@@ -11,20 +11,20 @@ en:
11
11
  actual_state: Obtained board
12
12
  age: Age
13
13
  all: All
14
- appendix: "Appendix"
14
+ appendix: Appendix
15
15
  appendix_teaser: Do you want to learn more? <a href="%{link}">Check this chapter's appendix</a>"
16
16
  approved_message: Validated by mentor
17
- are_you_sure: 'Are you sure you want to %{action}?'
17
+ are_you_sure: Are you sure you want to %{action}?
18
18
  ask_a_question: Ask a question!
19
19
  ask_community: Ask community for help
20
20
  ask_redirect: Do you want to go there?
21
21
  ask_the_first_question: Be the first one to ask!
22
22
  attempts_left:
23
- zero: "You've run out of attempts "
23
+ zero: "You've run out of attempts"
24
24
  one: "1 attempt remaining"
25
25
  other: '%{count} attempts remaining'
26
26
  author: Author
27
- authoring: "Authoring"
27
+ authoring: Authoring
28
28
  authoring_note_html: This guide's content was developed by %{authors} under the terms of <a href="https://creativecommons.org/licenses/by-sa/4.0/" target="_blank">Creative Commons License Share-Alike, 4.0</a>
29
29
  authoring_note_with_collaborators_html: This guide's content was developed by %{authors} and <a href="%{collaborators}" target="_blank">many others</a>, under the terms of <a href="https://creativecommons.org/licenses/by-sa/4.0/" target="_blank">Creative Commons License Share-Alike, 4.0</a>
30
30
  back_to_mumuki: Back to Mumuki!
@@ -51,7 +51,7 @@ en:
51
51
  console: Console
52
52
  contact_administrator: 'If you think this is not supposed to happen, please contact %{link}'
53
53
  content: Content
54
- continue_exercise: "Continue"
54
+ continue_exercise: Continue
55
55
  continue_lesson: Continue this lesson!
56
56
  continue_practicing: Continue practicing!
57
57
  corollary: To think about
@@ -60,32 +60,43 @@ en:
60
60
  created_at: Created at
61
61
  date: Date
62
62
  description: Description
63
- destroy_message: delete the message
64
63
  destroy: Destroy
64
+ destroy_message: delete the message
65
65
  disabled_explanation: You are trying to visit a permamently disabled or deleted resource
66
66
  disabled_organization_explanation: This path has already finished.
67
67
  discussion_description_placeholder: You can add more information regarding your doubt.
68
+ new_discussion_message: New message on %{title}
68
69
  discussion_updated: Discussion updated
69
70
  discussions: Discussions
71
+ discussions_will_be_here: Your posts in the forum will appear here.
70
72
  dont_leave_us: Don't leave us! Learning is fun. You just have to keep at it.
71
73
  download: Download your solution
72
74
  edit: Edit
73
75
  edit_profile: Edit profile
74
76
  editor_placeholder: "write your solution here..."
75
77
  email: Email
76
- error_description: This is known as a <span class="error-link">%{error}</span>.
77
- error_401: 401 error
78
- error_403: 403 error
79
- error_404: 404 error
80
- error_410: 410 error
81
- error_500: 500 error
82
- errored: Oops, your solution didn't work
83
78
  error:
84
79
  title:
85
80
  forbidden: You are not allowed to see this content
86
81
  gone: Oops! Content has expired
87
82
  internal_server_error: Oops! Something went wrong
88
83
  not_found: Oops! Page was not found
84
+ error_401: 401 error
85
+ error_403: 403 error
86
+ error_404: 404 error
87
+ error_410: 410 error
88
+ error_500: 500 error
89
+ error_description: This is known as a <span class="error-link">%{error}</span>.
90
+ errored: Oops, your solution didn't work
91
+ exam_authorization_request_approved_html: Your request was approved, don't forget to log in at <strong>%{date}</strong>. Good luck!
92
+ exam_authorization_request_created: Your registration to the exam has been saved!
93
+ exam_authorization_request_rejected: Your request was rejected.
94
+ exam_authorization_request_saved: Your registration to the exam has been updated!
95
+ exam_authorization_request_updated: Your registration to %{description} has been updated
96
+ exam_registration_choose_exam: Choose date and time to attend to the exam
97
+ exam_registration_explanation_html: You have until <strong>%{date}</strong> to register. After that date, your request will be processed and you will receive a confirmation. <br> Don't forget to check the notifications!
98
+ exam_registration_open: Registrations open for %{description}!
99
+ exam_registration_to: Registration to %{description}
89
100
  exams: Exams
90
101
  exercise: Exercise
91
102
  exercises: Exercises
@@ -101,6 +112,7 @@ en:
101
112
  failed: Oops, something went wrong
102
113
  feedback: Feedback
103
114
  female: Female
115
+ file_exceeds_max_size: "File size should not exceed %{size_kb}kb. Please select another file."
104
116
  finish: Finish
105
117
  first_name: First Name
106
118
  forbidden_explanation: Please verify you have logged in with the right account
@@ -121,6 +133,7 @@ en:
121
133
  hidden_done: 'Good!'
122
134
  history: History
123
135
  home: Home
136
+ important_info: Important information
124
137
  initial_state: Initial board
125
138
  insert_file_name: Insert a file name
126
139
  invitation: Invitation to course
@@ -155,9 +168,12 @@ en:
155
168
  message: Message
156
169
  messages: Messages
157
170
  messages_error: Previous messages are unavailable. Please try again later.
158
- more_messages: More
171
+ moderation: Mentoring
159
172
  moderator: Mentor
173
+ more_messages: More
174
+ my_account: My account
160
175
  my_doubts: My doubts
176
+ my_profile: My profile
161
177
  my_submissions: My Submissions
162
178
  name: Name
163
179
  navigation_continue: 'Next: %{sibling}'
@@ -168,6 +184,7 @@ en:
168
184
  never: never
169
185
  new: New
170
186
  new_message_placeholder: Write a message for your teacher...
187
+ new_message_received: You have a new message from %{sender}
171
188
  next_exercise: Next
172
189
  next_lesson: 'Next Guide: %{name}'
173
190
  no_discussions: No discussions matched your search.
@@ -180,6 +197,7 @@ en:
180
197
  no_useful_result: Didn't find what you were looking for?
181
198
  not_found_explanation: 'You may have mistyped the address or the page may have moved.'
182
199
  not_in_any_organizations: It seems you aren't in any organizations yet!
200
+ notifications: Notifications
183
201
  notify_problem_with_exercise: Report a bug
184
202
  office: Office
185
203
  only_landscape_support: Please, rotate your tablet or cellphone to continue practicing
@@ -202,7 +220,6 @@ en:
202
220
  previous_exercise: Previous
203
221
  problem_with_exercise: '[Mumuki] Problem with exercise: %{title}'
204
222
  processing_your_solution: We are processing you solution
205
- profile: Profile
206
223
  profile_of: Profile of %{username}
207
224
  programming_since: Started programming
208
225
  progress: Progresss
@@ -219,6 +236,7 @@ en:
219
236
  running: running
220
237
  save: Save
221
238
  see_context: Watch exercise introduction animation
239
+ select_file: Select file
222
240
  sending_solution: Sending solution
223
241
  show: Show
224
242
  sign_in: Sign in
@@ -275,13 +293,12 @@ en:
275
293
  unprepared_organization_explanation: This path hasn't started yet.
276
294
  unsubscribe: Unsubscribe
277
295
  unsubscribed_successfully: You have successfully unsubscribed from reminders.
278
- upload_solution: Upload Solution
279
296
  uploading_solution: "Uploading solution"
280
297
  upvote: Upvote
281
298
  upvotes_count_desc: Most voted
282
299
  upvotes_count_asc: Least voted
283
300
  user: User
284
- user_data_updated: Your data was updated successfuly
301
+ user_data_updated: Your data was updated successfully
285
302
  username: Username
286
303
  view_details: View details
287
304
  want_permissions: The next user requires permissions