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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/mumuki_laboratory/application/upload.js +69 -14
- data/app/assets/stylesheets/mumuki_laboratory/application/_layout.scss +3 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/_modules.scss +1 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_content_show.scss +15 -2
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_discussion.scss +31 -8
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_medal.scss +1 -1
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_user_menu.scss +35 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_user_profile.scss +11 -0
- data/app/controllers/api/base_controller.rb +0 -1
- data/app/controllers/api/courses_controller.rb +1 -1
- data/app/controllers/api/organizations_controller.rb +5 -2
- data/app/controllers/api/roles_controller.rb +4 -0
- data/app/controllers/api/users_controller.rb +6 -1
- data/app/controllers/application_controller.rb +1 -1
- data/app/controllers/concerns/with_authorization.rb +1 -16
- data/app/controllers/concerns/with_user_params.rb +4 -0
- data/app/controllers/discussions_messages_controller.rb +0 -1
- data/app/controllers/exam_authorization_requests_controller.rb +26 -0
- data/app/controllers/exam_registrations_controller.rb +6 -0
- data/app/controllers/users_controller.rb +8 -5
- data/app/helpers/application_helper.rb +4 -0
- data/app/helpers/breadcrumbs_helper.rb +4 -0
- data/app/helpers/content_view_helper.rb +19 -0
- data/app/helpers/exercise_input_helper.rb +8 -17
- data/app/helpers/icons_helper.rb +3 -11
- data/app/helpers/links_helper.rb +3 -3
- data/app/helpers/menu_bar_helper.rb +3 -3
- data/app/helpers/progress_bar_helper.rb +2 -2
- data/app/helpers/user_menu_helper.rb +18 -0
- data/app/views/chapters/show.html.erb +17 -16
- data/app/views/complements/show.html.erb +1 -1
- data/app/views/discussions/_message.html.erb +7 -7
- data/app/views/exam_authorization_requests/show.html.erb +17 -0
- data/app/views/exam_registrations/show.html.erb +37 -0
- data/app/views/exams/show.html.erb +1 -1
- data/app/views/{layouts → exercises}/_exercise_skipped.html.erb +0 -0
- data/app/views/exercises/_exercise_title_icons.html.erb +4 -0
- data/app/views/exercises/show.html.erb +5 -8
- data/app/views/{layouts → guides}/_guide.html.erb +3 -3
- data/app/views/guides/_guide_container.html.erb +24 -0
- data/app/views/{layouts → guides}/_guide_title_icons.html.erb +1 -3
- data/app/views/layouts/_progress_bar.html.erb +9 -7
- data/app/views/layouts/_progress_listing.html.erb +5 -5
- data/app/views/layouts/_user_menu.html.erb +21 -0
- data/app/views/layouts/application.html.erb +1 -6
- data/app/views/layouts/exercise_inputs/editors/_upload.html.erb +11 -2
- data/app/views/lessons/show.html.erb +1 -1
- data/app/views/notifications/_discussion.html.erb +1 -0
- data/app/views/notifications/_dropdown.html.erb +13 -0
- data/app/views/notifications/_exam_authorization_request.html.erb +1 -0
- data/app/views/notifications/_exam_registration.html.erb +1 -0
- data/app/views/notifications/_message.html.erb +1 -0
- data/app/views/users/_user_form.html.erb +10 -8
- data/app/views/users/discussions.html.erb +28 -0
- data/app/views/users/edit.html.erb +1 -1
- data/app/views/users/messages.html.erb +27 -0
- data/app/views/users/show.html.erb +4 -51
- data/app/views/users/terms.html.erb +2 -2
- data/config/routes.rb +6 -0
- data/lib/mumuki/laboratory/controllers/notifications.rb +3 -22
- data/lib/mumuki/laboratory/locales/en.yml +34 -17
- data/lib/mumuki/laboratory/locales/es-CL.yml +25 -8
- data/lib/mumuki/laboratory/locales/es.yml +30 -14
- data/lib/mumuki/laboratory/locales/pt.yml +27 -10
- data/lib/mumuki/laboratory/version.rb +1 -1
- data/spec/controllers/exam_authorization_requests_controller_spec.rb +40 -0
- data/spec/controllers/exam_registrations_controller_spec.rb +19 -0
- data/spec/controllers/organizations_api_controller_spec.rb +16 -9
- data/spec/dummy/db/schema.rb +23 -0
- data/spec/features/exercise_flow_spec.rb +3 -3
- data/spec/features/login_flow_spec.rb +1 -1
- data/spec/features/menu_bar_spec.rb +24 -24
- data/spec/features/notifications_flow_spec.rb +46 -0
- data/spec/features/profile_flow_spec.rb +6 -9
- data/spec/features/terms_flow_spec.rb +30 -0
- data/spec/helpers/application_helper_spec.rb +10 -0
- data/spec/javascripts/bridge-spec.js +2 -2
- data/spec/javascripts/csrf-token-spec.js +2 -2
- data/spec/javascripts/editors-spec.js +7 -9
- data/spec/javascripts/elipsis-spec.js +4 -4
- data/spec/javascripts/events-spec.js +7 -7
- data/spec/javascripts/exercise-spec.js +7 -8
- data/spec/javascripts/global-spec.js +3 -3
- data/spec/javascripts/i18n-spec.js +23 -20
- data/spec/javascripts/kids-button-spec.js +6 -8
- data/spec/javascripts/results-renderers-spec.js +5 -5
- data/spec/javascripts/speech-bubble-renderer-spec.js +2 -3
- data/spec/javascripts/submissions-store-spec.js +14 -14
- data/spec/javascripts/sync-mode-spec.js +3 -3
- data/spec/javascripts/timeout-spec.js +2 -2
- data/spec/javascripts/timer-spec.js +2 -2
- data/spec/javascripts/upload-spec.js +80 -0
- metadata +132 -108
- 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="
|
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.
|
2
|
+
<% assignments = guide.assignments_for(current_user) %>
|
3
|
+
<% assignments.each do |assignment| %>
|
4
|
+
<% exercise = assignment.exercise %>
|
3
5
|
<a
|
4
|
-
<%= turbolinks_enable_for
|
5
|
-
href="<%= exercise_path(
|
6
|
-
aria-label="<%=
|
7
|
-
title="<%=
|
8
|
-
data-mu-exercise-id="<%=
|
9
|
-
class="<%= class_for_progress_list_item(
|
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
|
-
<%
|
3
|
-
<% cache [exercise,
|
4
|
-
<li <%= turbolinks_enable_for(exercise) %>>
|
5
|
-
<%=
|
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
|
-
|
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
|
-
|
3
|
-
|
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: "
|
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><%=
|
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="
|
8
|
-
<div class="
|
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="
|
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
|
-
|
36
|
-
|
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>
|
@@ -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
|
-
|
2
|
+
<%= breadcrumbs_for_my_account %>
|
3
3
|
<% end %>
|
4
4
|
|
5
|
-
|
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-
|
20
|
-
|
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>
|
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
|
-
|
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
|
30
|
-
current_user.try(:
|
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:
|
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:
|
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:
|
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:
|
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
|
-
|
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
|
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
|