diff --git a/app/views/exercises/_file_form.html.slim b/app/views/exercises/_file_form.html.slim
index f009896a..c737f068 100644
--- a/app/views/exercises/_file_form.html.slim
+++ b/app/views/exercises/_file_form.html.slim
@@ -1,33 +1,39 @@
+- id = f.object.id
li.panel.panel-default
- .panel-body
- .clearfix = link_to(t('shared.destroy'), '#', class:'btn btn-warning btn-sm discard-file pull-right')
- .form-group
- = f.label(:name, t('activerecord.attributes.file.name'))
- = f.text_field(:name, class: 'form-control')
- .form-group
- = f.label(:path, t('activerecord.attributes.file.path'))
- = f.text_field(:path, class: 'form-control')
- .help-block = t('.hints.path')
- .form-group
- = f.label(:file_type_id, t('activerecord.attributes.file.file_type_id'))
- = f.collection_select(:file_type_id, @file_types, :id, :name, {}, class: 'form-control')
- .form-group
- = f.label(:role, t('activerecord.attributes.file.role'))
- = f.select(:role, CodeOcean::File::TEACHER_DEFINED_ROLES.map { |role| [t("files.roles.#{role}"), role] }, {include_blank: true}, class: 'form-control')
- .checkbox
- label
- = f.check_box(:hidden)
- = t('activerecord.attributes.file.hidden')
- .checkbox
- label
- = f.check_box(:read_only)
- = t('activerecord.attributes.file.read_only')
- .test-related-fields style="display: #{f.object.teacher_defined_test? ? 'initial' : 'none'};"
+ .panel-heading role="tab" id="heading"
+ div.clearfix role="button"
+ span = f.object.name
+ a.pull-right data-toggle="collapse" data-parent="#files" href="#collapse#{id}" collapse
+ .panel-collapse.collapse.in id="collapse#{id}" role="tabpanel"
+ .panel-body
+ .clearfix = link_to(t('shared.destroy'), '#', class:'btn btn-warning btn-sm discard-file pull-right')
.form-group
- = f.label(:name, t('activerecord.attributes.file.feedback_message'))
- = f.text_area(:feedback_message, class: 'form-control', maxlength: 255)
- .help-block = t('.hints.feedback_message')
+ = f.label(:name, t('activerecord.attributes.file.name'))
+ = f.text_field(:name, class: 'form-control')
.form-group
- = f.label(:role, t('activerecord.attributes.file.weight'))
- = f.number_field(:weight, class: 'form-control', min: 1, step: 'any')
- = render('code_field', attribute: :content, form: f, label: t('activerecord.attributes.file.content'))
+ = f.label(:path, t('activerecord.attributes.file.path'))
+ = f.text_field(:path, class: 'form-control')
+ .help-block = t('.hints.path')
+ .form-group
+ = f.label(:file_type_id, t('activerecord.attributes.file.file_type_id'))
+ = f.collection_select(:file_type_id, @file_types, :id, :name, {}, class: 'form-control')
+ .form-group
+ = f.label(:role, t('activerecord.attributes.file.role'))
+ = f.select(:role, CodeOcean::File::TEACHER_DEFINED_ROLES.map { |role| [t("files.roles.#{role}"), role] }, {include_blank: true}, class: 'form-control')
+ .checkbox
+ label
+ = f.check_box(:hidden)
+ = t('activerecord.attributes.file.hidden')
+ .checkbox
+ label
+ = f.check_box(:read_only)
+ = t('activerecord.attributes.file.read_only')
+ .test-related-fields style="display: #{f.object.teacher_defined_test? ? 'initial' : 'none'};"
+ .form-group
+ = f.label(:name, t('activerecord.attributes.file.feedback_message'))
+ = f.text_area(:feedback_message, class: 'form-control', maxlength: 255)
+ .help-block = t('.hints.feedback_message')
+ .form-group
+ = f.label(:role, t('activerecord.attributes.file.weight'))
+ = f.number_field(:weight, class: 'form-control', min: 1, step: 'any')
+ = render('code_field', attribute: :content, form: f, label: t('activerecord.attributes.file.content'))
diff --git a/app/views/exercises/_form.html.slim b/app/views/exercises/_form.html.slim
index c4d312cc..1995c8d8 100644
--- a/app/views/exercises/_form.html.slim
+++ b/app/views/exercises/_form.html.slim
@@ -29,7 +29,7 @@
= f.check_box(:hide_file_tree)
= t('activerecord.attributes.exercise.hide_file_tree')
h2 = t('activerecord.attributes.exercise.files')
- ul#files.list-unstyled
+ ul#files.list-unstyled.panel-group
= f.fields_for :files do |files_form|
= render('file_form', f: files_form)
a#add-file.btn.btn-default.btn-sm.pull-right href='#' = t('.add_file')
diff --git a/app/views/exercises/show.html.slim b/app/views/exercises/show.html.slim
index dbeca3d3..cd0cabf3 100644
--- a/app/views/exercises/show.html.slim
+++ b/app/views/exercises/show.html.slim
@@ -21,12 +21,15 @@ h1
h2 = t('activerecord.attributes.exercise.files')
-ul.list-unstyled
+ul.list-unstyled.panel-group#files
- @exercise.files.each do |file|
li.panel.panel-default
- .panel-heading
- h3.panel-title = file.name_with_extension
- .panel-body
- - if policy(file).destroy?
- .clearfix = link_to(t('shared.destroy'), file, class:'btn btn-warning btn-sm pull-right', data: {confirm: t('shared.confirm_destroy')}, method: :delete)
- = render('shared/file', file: file)
+ .panel-heading role="tab" id="heading"
+ div.clearfix role="button"
+ span.panel-title = file.name_with_extension
+ a.pull-right data-toggle="collapse" data-parent="#files" href="#collapse#{file.id}" collapse
+ .panel-collapse.collapse.in id="collapse#{file.id}" role="tabpanel"
+ .panel-body
+ - if policy(file).destroy?
+ .clearfix = link_to(t('shared.destroy'), file, class:'btn btn-warning btn-sm pull-right', data: {confirm: t('shared.confirm_destroy')}, method: :delete)
+ = render('shared/file', file: file)