mumuki-laboratory 7.4.2 → 7.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +34 -18
- data/app/assets/javascripts/mumuki_laboratory/application/codemirror.js +19 -2
- data/app/assets/javascripts/mumuki_laboratory/application/elipsis.js +31 -0
- data/app/assets/javascripts/mumuki_laboratory/application/kids.js +5 -16
- data/app/assets/javascripts/mumuki_laboratory/application/speech-bubble-renderer.js +99 -0
- data/app/assets/stylesheets/mumuki_laboratory/application.scss +1 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/_layout.scss +0 -4
- data/app/assets/stylesheets/mumuki_laboratory/application/_locked.scss +29 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_editor.scss +0 -23
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_exercise_results.scss +11 -0
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_kids.scss +1 -1
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/_overlap.scss +21 -2
- data/app/assets/stylesheets/mumuki_laboratory/application/modules/popover.scss +1 -1
- data/app/controllers/application_controller.rb +25 -2
- data/app/controllers/concerns/users_controller_template.rb +6 -1
- data/app/controllers/invitations_controller.rb +1 -0
- data/app/controllers/login_controller.rb +1 -0
- data/app/helpers/application_helper.rb +1 -5
- data/app/helpers/contextualization_result_helper.rb +7 -7
- data/app/helpers/discussions_helper.rb +1 -1
- data/app/helpers/exercise_input_helper.rb +1 -1
- data/app/helpers/links_helper.rb +1 -1
- data/app/helpers/overlapped_buttons_helper.rb +17 -0
- data/app/views/book/show.html.erb +14 -6
- data/app/views/errors/gone.html.erb +4 -1
- data/app/views/exercise_solutions/_expectations.html.erb +2 -2
- data/app/views/exercise_solutions/_kids_results_button.html.erb +1 -1
- data/app/views/exercises/_read_only.html.erb +1 -1
- data/app/views/exercises/show.html.erb +19 -15
- data/app/views/layouts/_exercise_skipped.html.erb +28 -0
- data/app/views/layouts/_kids.html.erb +1 -1
- data/app/views/layouts/_test_results.html.erb +11 -8
- data/app/views/layouts/exercise_inputs/editors/_code.html.erb +8 -7
- data/app/views/layouts/exercise_inputs/editors/_multiple_files.html.erb +8 -9
- data/app/views/layouts/exercise_inputs/forms/_interactive_form.html.erb +2 -2
- data/app/views/layouts/exercise_inputs/forms/_playground_form.html.erb +1 -1
- data/app/views/layouts/exercise_inputs/forms/_problem_form.html.erb +1 -1
- data/app/views/layouts/modals/_kids_results.html.erb +1 -1
- data/app/views/user_mailer/1st_reminder.html.erb +1 -1
- data/app/views/user_mailer/1st_reminder.text.erb +1 -1
- data/app/views/user_mailer/2nd_reminder.html.erb +1 -1
- data/app/views/user_mailer/2nd_reminder.text.erb +1 -1
- data/app/views/user_mailer/3rd_reminder.html.erb +1 -1
- data/app/views/user_mailer/3rd_reminder.text.erb +1 -1
- data/app/views/user_mailer/no_submissions_reminder.html.erb +1 -1
- data/app/views/user_mailer/no_submissions_reminder.text.erb +1 -1
- data/app/views/users/_user_form.html.erb +1 -1
- data/config/initializers/session_store.rb +1 -1
- data/lib/mumuki/laboratory/controllers.rb +1 -0
- data/lib/mumuki/laboratory/controllers/authorization.rb +0 -4
- data/lib/mumuki/laboratory/controllers/disabling.rb +5 -0
- data/lib/mumuki/laboratory/controllers/dynamic_errors.rb +16 -1
- data/lib/mumuki/laboratory/controllers/results_rendering.rb +15 -17
- data/lib/mumuki/laboratory/locales/en.yml +12 -2
- data/lib/mumuki/laboratory/locales/es.yml +13 -2
- data/lib/mumuki/laboratory/locales/pt.yml +13 -2
- data/lib/mumuki/laboratory/version.rb +1 -1
- data/spec/controllers/exercise_solutions_controller_spec.rb +29 -14
- data/spec/controllers/users_api_controller_spec.rb +1 -0
- data/spec/controllers/users_controller_spec.rb +21 -0
- data/spec/dummy/db/schema.rb +10 -1
- data/spec/dummy/db/seeds.rb +8 -0
- data/spec/features/disable_user_flow_spec.rb +34 -0
- data/spec/features/disabled_organization_flow_spec.rb +69 -0
- data/spec/features/exercise_flow_spec.rb +20 -11
- data/spec/features/home_public_flow_spec.rb +34 -2
- data/spec/helpers/test_results_rendering_spec.rb +50 -28
- data/spec/login_helper.rb +1 -1
- data/spec/spec_helper.rb +2 -0
- metadata +32 -7
- data/app/helpers/reset_button_helper.rb +0 -10
@@ -7,20 +7,29 @@ class ApplicationController < ActionController::Base
|
|
7
7
|
include Mumukit::Login::AuthenticationHelpers
|
8
8
|
|
9
9
|
include Mumuki::Laboratory::Controllers::Authorization
|
10
|
+
include Mumuki::Laboratory::Controllers::Disabling
|
10
11
|
include Mumuki::Laboratory::Controllers::Notifications
|
11
12
|
include Mumuki::Laboratory::Controllers::DynamicErrors
|
12
13
|
include Mumuki::Laboratory::Controllers::EmbeddedMode
|
13
14
|
|
14
15
|
before_action :set_current_organization!
|
15
16
|
before_action :set_locale!
|
17
|
+
|
18
|
+
before_action :ensure_user_enabled!, if: :current_user?
|
19
|
+
before_action :validate_active_organization!
|
20
|
+
|
16
21
|
before_action :redirect_to_main_organization!, if: :should_redirect_to_main_organization?
|
22
|
+
|
17
23
|
before_action :authorize_if_private!
|
24
|
+
before_action :validate_active_organization!
|
18
25
|
before_action :validate_user_profile!, if: :current_user?
|
26
|
+
|
19
27
|
before_action :visit_organization!, if: :current_user?
|
20
28
|
|
21
29
|
after_action :leave_organization!
|
22
30
|
|
23
|
-
helper_method :
|
31
|
+
helper_method :current_workspace,
|
32
|
+
:login_button,
|
24
33
|
:notifications_count,
|
25
34
|
:user_notifications_path,
|
26
35
|
:has_notifications?,
|
@@ -49,8 +58,14 @@ class ApplicationController < ActionController::Base
|
|
49
58
|
accessible_subject.validate_accessible_for! current_user
|
50
59
|
end
|
51
60
|
|
61
|
+
def validate_active_organization!
|
62
|
+
return if current_user&.teacher_here?
|
63
|
+
Organization.current.validate_active!
|
64
|
+
end
|
65
|
+
|
66
|
+
|
52
67
|
# required by Mumukit::Login
|
53
|
-
def login_button(options={})
|
68
|
+
def login_button(options = {})
|
54
69
|
login_form.button_html I18n.t(:sign_in), options[:class]
|
55
70
|
end
|
56
71
|
|
@@ -60,8 +75,16 @@ class ApplicationController < ActionController::Base
|
|
60
75
|
raise Mumuki::Domain::NotFoundError unless content.usage_in_organization.try { |usage| redirect_to usage }
|
61
76
|
end
|
62
77
|
|
78
|
+
def current_workspace
|
79
|
+
Mumuki::Domain::Workspace.new(current_user, Organization.current)
|
80
|
+
end
|
81
|
+
|
63
82
|
private
|
64
83
|
|
84
|
+
def from_sessions?
|
85
|
+
params['controller'] == 'login'
|
86
|
+
end
|
87
|
+
|
65
88
|
def login_settings
|
66
89
|
Organization.current.login_settings
|
67
90
|
end
|
@@ -6,16 +6,21 @@ module UsersControllerTemplate
|
|
6
6
|
before_action :set_user!, only: [:show, :update]
|
7
7
|
before_action :set_new_user!, only: :create
|
8
8
|
before_action :protect_permissions_assignment!, only: [:create, :update]
|
9
|
+
after_action :verify_user_name!, only: :create
|
9
10
|
end
|
10
11
|
|
11
12
|
private
|
12
13
|
|
14
|
+
def verify_user_name!
|
15
|
+
@user.verify_name!
|
16
|
+
end
|
17
|
+
|
13
18
|
def protect_permissions_assignment!
|
14
19
|
current_user.protect_permissions_assignment! user_params[:permissions], @user.permissions_was
|
15
20
|
end
|
16
21
|
|
17
22
|
def permissible_params
|
18
|
-
super + [:email, :image_url, permissions: Mumukit::Auth::Roles::ROLES]
|
23
|
+
super + [:email, :image_url, :verified_first_name, :verified_last_name, permissions: Mumukit::Auth::Roles::ROLES]
|
19
24
|
end
|
20
25
|
|
21
26
|
def set_user!
|
@@ -7,6 +7,7 @@ class InvitationsController < ApplicationController
|
|
7
7
|
|
8
8
|
skip_before_action :validate_user_profile!
|
9
9
|
skip_before_action :authorize_if_private!
|
10
|
+
skip_before_action :validate_active_organization!
|
10
11
|
|
11
12
|
def show
|
12
13
|
redirect_to_organization! if current_user.student_of? @invitation.course
|
@@ -7,7 +7,7 @@ module ApplicationHelper
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def profile_picture
|
10
|
-
image_tag(current_user.
|
10
|
+
image_tag(current_user.profile_picture, height: 40, class: 'img-circle', onError: "this.onerror = null; this.src = '#{image_url('user_shape.png')}'")
|
11
11
|
end
|
12
12
|
|
13
13
|
def paginate(object, options={})
|
@@ -39,7 +39,3 @@ module ApplicationHelper
|
|
39
39
|
}.html_safe
|
40
40
|
end
|
41
41
|
end
|
42
|
-
|
43
|
-
def sanitized(html)
|
44
|
-
Mumukit::ContentType::Sanitizer.sanitize html
|
45
|
-
end
|
@@ -1,10 +1,6 @@
|
|
1
1
|
module ContextualizationResultHelper
|
2
|
-
def
|
3
|
-
%Q{
|
4
|
-
end
|
5
|
-
|
6
|
-
def humanized_expectation_explanation(expectation_result)
|
7
|
-
sanitized Mumukit::ContentType::Markdown.to_html(expectation_result[:explanation], one_liner: true)
|
2
|
+
def render_affable_expectation_result(affable_expectation_result)
|
3
|
+
%Q{#{status_icon(affable_expectation_result[:result])} #{affable_expectation_result[:explanation]}}.html_safe
|
8
4
|
end
|
9
5
|
|
10
6
|
def render_feedback?(contextualization)
|
@@ -19,12 +15,16 @@ module ContextualizationResultHelper
|
|
19
15
|
if contextualization.exercise.hidden?
|
20
16
|
:hidden_done
|
21
17
|
elsif contextualization.exercise.choice?
|
22
|
-
contextualization.
|
18
|
+
contextualization.solved? ? :correct_answer : :wrong_answer
|
23
19
|
else
|
24
20
|
contextualization.submission_status
|
25
21
|
end
|
26
22
|
end
|
27
23
|
|
24
|
+
def render_test_result_header(test_result)
|
25
|
+
[test_result[:title].presence, test_result[:summary]].compact.join(': ').html_safe
|
26
|
+
end
|
27
|
+
|
28
28
|
def render_test_results(contextualization)
|
29
29
|
if contextualization.test_results.present?
|
30
30
|
template = contextualization.result.present? ? 'layouts/mixed_results' : 'layouts/test_results'
|
@@ -48,7 +48,7 @@ module DiscussionsHelper
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def user_avatar(user, image_class='')
|
51
|
-
image_tag user.
|
51
|
+
image_tag user.profile_picture, height: 40, class: "img-circle #{image_class}"
|
52
52
|
end
|
53
53
|
|
54
54
|
def discussions_link_with_teaser(item)
|
@@ -44,7 +44,7 @@ module ExerciseInputHelper
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def should_render_need_help_dropdown?(assignment, organization = Organization.current)
|
47
|
-
!assignment.
|
47
|
+
!assignment.solved? && organization.ask_for_help_enabled?(assignment.submitter)
|
48
48
|
end
|
49
49
|
|
50
50
|
def render_submit_button(assignment)
|
data/app/helpers/links_helper.rb
CHANGED
@@ -14,7 +14,7 @@ module LinksHelper
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def link_to_status_codes(code)
|
17
|
-
"<a href='https://es.wikipedia.org/wiki/Anexo:C%C3%B3digos_de_estado_HTTP'> #{I18n.t("error_#{code}")} </a>"
|
17
|
+
"<a href='https://es.wikipedia.org/wiki/Anexo:C%C3%B3digos_de_estado_HTTP' target='_blank'> #{I18n.t("error_#{code}")} </a>"
|
18
18
|
end
|
19
19
|
|
20
20
|
def url_for_application(app_name)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module OverlappedButtonsHelper
|
2
|
+
def restart_icon
|
3
|
+
overlapped_button_icon :restart, :undo
|
4
|
+
end
|
5
|
+
|
6
|
+
def format_icon
|
7
|
+
overlapped_button_icon :format, :indent
|
8
|
+
end
|
9
|
+
|
10
|
+
def restart_guide_link(guide)
|
11
|
+
link_to restart_icon, guide_progress_path(guide), class: 'mu-content-toolbar-item', data: {confirm: t(:confirm_restart)}, method: :delete
|
12
|
+
end
|
13
|
+
|
14
|
+
def overlapped_button_icon(key, icon)
|
15
|
+
fa_icon(icon, title: t(key), class: 'fa-fw', role: 'button', 'aria-label': t(key))
|
16
|
+
end
|
17
|
+
end
|
@@ -32,13 +32,21 @@
|
|
32
32
|
|
33
33
|
<h2><%= t(:chapters) %></h2>
|
34
34
|
|
35
|
-
<% @book.
|
36
|
-
<div class="chapter">
|
37
|
-
<
|
38
|
-
|
39
|
-
|
40
|
-
|
35
|
+
<% @book.chapter_visibilities_in(current_workspace).each do |it, enabled| %>
|
36
|
+
<div class="chapter-container">
|
37
|
+
<div class="chapter <%= enabled ? '' : 'mu-locked' %>">
|
38
|
+
<h3><%= it.number %>. <%= link_to_path_element it, mode: :plain %></h3>
|
39
|
+
<div class="text-box" <%= 'aria-label=""' unless enabled %>%>
|
40
|
+
<%= it.description_teaser_html %>
|
41
|
+
</div>
|
41
42
|
</div>
|
43
|
+
|
44
|
+
<% unless enabled %>
|
45
|
+
<div class="text-center mu-lock">
|
46
|
+
<i class="fa fa-lock fa-5x"></i>
|
47
|
+
<p><%= t :locked_content %></p>
|
48
|
+
</div>
|
49
|
+
<% end %>
|
42
50
|
</div>
|
43
51
|
<% end %>
|
44
52
|
<% if current_user? && @exams.present? %>
|
@@ -4,7 +4,10 @@
|
|
4
4
|
</div>
|
5
5
|
<div class="body">
|
6
6
|
<p>
|
7
|
-
<%= t(:
|
7
|
+
<%= t(:error_description, error: link_to_status_codes(410)).html_safe %>
|
8
|
+
</p>
|
9
|
+
<p>
|
10
|
+
<%= Organization.current.explain_error(410, explanation).html_safe %>
|
8
11
|
</p>
|
9
12
|
<p>
|
10
13
|
<a class="btn btn-success" href="/"> <%= t(:back_to_mumuki) %> </a>
|
@@ -5,8 +5,8 @@
|
|
5
5
|
<% end %>
|
6
6
|
|
7
7
|
<ul class="results-list">
|
8
|
-
<% assignment.
|
9
|
-
|
8
|
+
<% assignment.affable_expectation_results.each do |it| %>
|
9
|
+
<li><%= render_affable_expectation_result it %></li>
|
10
10
|
<% end %>
|
11
11
|
</ul>
|
12
12
|
</div>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<div class="row">
|
2
2
|
<div class="col-md-12">
|
3
3
|
<div class="actions">
|
4
|
-
<% if assignment.
|
4
|
+
<% if assignment.solved? %>
|
5
5
|
<%= next_exercise_button(@exercise) || close_modal_button %>
|
6
6
|
<% else %>
|
7
7
|
<button class="btn btn-success btn-block submission-control" id="kids-btn-retry" data-dismiss="modal" aria-label="<%= t :retry_exercise %>"> <%= t :retry_exercise %> </button>
|
@@ -9,23 +9,23 @@
|
|
9
9
|
<% @stats = @exercise.guide.stats_for(current_user) if current_user && @exercise.guide %>
|
10
10
|
|
11
11
|
<% if @exercise.navigable_parent.timed? && !current_user.teacher? %>
|
12
|
-
|
12
|
+
<%= render partial: 'layouts/timer', locals: {end_time: @exercise.navigable_parent.real_end_time(current_user)} %>
|
13
13
|
<% end %>
|
14
14
|
|
15
15
|
<% unless @exercise.input_kids? %>
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
</div>
|
20
|
-
<div class="mu-inline-block-left">
|
21
|
-
<h1>
|
22
|
-
<span class="hidden-xs"><%= t(:exercise_number, number: @exercise.number) %>: </span>
|
23
|
-
<span><%= @exercise.name %></span>
|
24
|
-
<%= teacher_info_button @exercise %>
|
25
|
-
<%= link_to_bibliotheca_exercise @exercise %>
|
26
|
-
</h1>
|
27
|
-
</div>
|
16
|
+
<div class="row">
|
17
|
+
<div class="mu-inline-block-right hidden-xs">
|
18
|
+
<h1><%= language_icon @exercise.language %></h1>
|
28
19
|
</div>
|
20
|
+
<div class="mu-inline-block-left">
|
21
|
+
<h1>
|
22
|
+
<span class="hidden-xs"><%= t(:exercise_number, number: @exercise.number) %>: </span>
|
23
|
+
<span><%= @exercise.name %></span>
|
24
|
+
<%= teacher_info_button @exercise %>
|
25
|
+
<%= link_to_bibliotheca_exercise @exercise %>
|
26
|
+
</h1>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
29
|
<% end %>
|
30
30
|
|
31
31
|
<div>
|
@@ -54,6 +54,10 @@
|
|
54
54
|
</div>
|
55
55
|
|
56
56
|
<%= content_for :no_container do %>
|
57
|
-
|
58
|
-
<%= render partial: 'layouts/
|
57
|
+
<% if @assignment.skipped? %>
|
58
|
+
<%= render partial: 'layouts/exercise_skipped' %>
|
59
|
+
<% end %>
|
60
|
+
|
61
|
+
<%= render partial: 'layouts/modals/guide_corollary', locals: {guide: @guide} %>
|
62
|
+
<%= render partial: 'layouts/modals/new_message', locals: {exercise: @exercise} if should_render_message_input?(@exercise) %>
|
59
63
|
<% end if current_user? %>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<div class="modal fade mu-exercise-skipped" id="exercise-skipped" tabindex="-1" role="dialog" aria-hidden="true">
|
2
|
+
<div class="modal-dialog">
|
3
|
+
<div class="modal-content">
|
4
|
+
<div class="modal-header">
|
5
|
+
<p class="modal-title text-center title-font"><%= t :skipped_congratulations %></p>
|
6
|
+
</div>
|
7
|
+
<div class="modal-body">
|
8
|
+
<div class="container-fluid">
|
9
|
+
<%= t :skipped_description %>
|
10
|
+
<%= link_to (t :skipped_solve_anyway), "", "data-dismiss" => "modal" %>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
<div class="modal-footer">
|
14
|
+
<div class="row">
|
15
|
+
<div class="col-md-12">
|
16
|
+
<%= next_exercise_button(@exercise) %>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
<script>
|
24
|
+
$("#exercise-skipped").modal({
|
25
|
+
backdrop: 'static',
|
26
|
+
keyboard: false
|
27
|
+
});
|
28
|
+
</script>
|
@@ -17,7 +17,7 @@
|
|
17
17
|
<div class="description"><%= exercise.description_task %></div>
|
18
18
|
<div class="hint" style="display: none"><%= exercise.hint_html %></div>
|
19
19
|
</div>
|
20
|
-
<div class="mu-kids-character-speech-bubble-failed <%= @assignment
|
20
|
+
<div class="mu-kids-character-speech-bubble-failed <%= current_user? && @assignment.status %>" style="display: none"></div>
|
21
21
|
</div>
|
22
22
|
<div id="mu-kids-discussion-link-html" class="hidden">
|
23
23
|
<%= kids_read_discussions_link(exercise) %>
|
@@ -1,27 +1,30 @@
|
|
1
|
-
<% if contextualization.
|
2
|
-
|
1
|
+
<% if contextualization.single_visible_test_result? %>
|
2
|
+
<div class="mu-single-test-result">
|
3
|
+
<h5 class="text-danger mu-test-result-header"><%= render_test_result_header contextualization.affable_test_results.first %></h5>
|
4
|
+
<%= contextualization.first_test_result_html %>
|
5
|
+
</div>
|
3
6
|
<% else %>
|
4
7
|
<strong><%= t :test_results %>:</strong>
|
5
|
-
<ul class="results-list">
|
6
|
-
<% contextualization.
|
8
|
+
<ul class="results-list mu-multiple-test-results">
|
9
|
+
<% contextualization.affable_test_results.each_with_index do |test_result, index| %>
|
7
10
|
<li>
|
8
11
|
<% if test_result[:status].failed? %>
|
9
|
-
<span class="text-danger">
|
12
|
+
<span class="text-danger mu-test-result-header">
|
10
13
|
<%= status_icon(test_result[:status]) %>
|
11
|
-
|
14
|
+
<%= render_test_result_header test_result %>
|
12
15
|
<% unless contextualization.visible_success_output? %>
|
13
16
|
<a data-toggle="collapse" href="#example-result-<%= index %>" class="example-see-more"><%= t :view_details %></a>
|
14
17
|
<% end %>
|
15
18
|
</span>
|
16
19
|
<% else %>
|
17
|
-
<span class="text-success
|
20
|
+
<span class="text-success mu-test-result-header">
|
18
21
|
<%= status_icon(test_result[:status]) %>
|
19
22
|
<%= test_result[:title] %>
|
20
23
|
</span>
|
21
24
|
<% end %>
|
22
25
|
|
23
26
|
<div class="example-result collapse <%= 'in' if contextualization.visible_success_output? %>" id="example-result-<%= index %>">
|
24
|
-
<%= contextualization.
|
27
|
+
<%= contextualization.test_result_html test_result %>
|
25
28
|
</div>
|
26
29
|
</li>
|
27
30
|
<% end %>
|
@@ -4,13 +4,14 @@
|
|
4
4
|
class: 'form-control editor',
|
5
5
|
value: @current_content,
|
6
6
|
data: {lines: 17} %>
|
7
|
-
<a class="editor-resize" title="<%= t(:fullscreen) %> (F11)">
|
8
|
-
<span class="fa-stack fa-lg">
|
9
|
-
<i class="fa fa-square-o fa-stack-2x"></i>
|
10
|
-
<i class="fa fa-expand fa-stack-1x"></i>
|
11
|
-
</span>
|
12
|
-
</a>
|
13
7
|
<div class="mu-overlapped">
|
14
|
-
<a class="editor-
|
8
|
+
<a class="editor-resize" title="<%= t(:fullscreen) %> (F11)">
|
9
|
+
<span class="fa-stack fa-lg">
|
10
|
+
<i class="fa fa-square-o fa-stack-2x"></i>
|
11
|
+
<i class="fa fa-expand fa-stack-1x"></i>
|
12
|
+
</span>
|
13
|
+
</a>
|
14
|
+
<a class="editor-format"><%= format_icon %></a>
|
15
|
+
<a class="editor-reset submission-reset" data-confirm="<%= t(:confirm_reset) %>"><%= restart_icon %></a>
|
15
16
|
</div>
|
16
17
|
</div>
|
@@ -26,15 +26,14 @@
|
|
26
26
|
<% end %>
|
27
27
|
</div>
|
28
28
|
|
29
|
-
<
|
30
|
-
<
|
31
|
-
<
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
<a class="editor-reset submission-reset"><%= restart_icon %></a>
|
29
|
+
<div class="mu-overlapped multiple-files">
|
30
|
+
<a class="editor-resize" title="<%= t(:fullscreen) %> (F11)">
|
31
|
+
<span class="fa-stack fa-lg">
|
32
|
+
<i class="fa fa-square-o fa-stack-2x"></i>
|
33
|
+
<i class="fa fa-expand fa-stack-1x"></i>
|
34
|
+
</span>
|
35
|
+
</a>
|
36
|
+
<!--<a class="editor-reset submission-reset" data-confirm="<%= t(:confirm_reset) %>"><%= restart_icon %></a> -->
|
38
37
|
</div>
|
39
38
|
|
40
39
|
</div>
|