From cd09e19d24e23405af1509c6303b3295bc0d72fb Mon Sep 17 00:00:00 2001 From: Hauke Klement Date: Thu, 12 Mar 2015 17:04:47 +0100 Subject: [PATCH] hide fields from the file form if not matching the file's role --- app/assets/javascripts/exercises.js | 10 ++++++++-- app/models/code_ocean/file.rb | 8 +++++++- app/views/exercises/_file_form.html.slim | 15 ++++++++------- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/exercises.js b/app/assets/javascripts/exercises.js index 7c94142e..9471a0a9 100644 --- a/app/assets/javascripts/exercises.js +++ b/app/assets/javascripts/exercises.js @@ -103,8 +103,14 @@ $(function() { $(document).on('change', 'select[name$="[role]"]', function() { var is_test_file = $(this).val() === 'teacher_defined_test'; var parent = $(this).parents('.panel'); - parent.find('[name$="[feedback_message]"]').attr('disabled', !is_test_file); - parent.find('[name$="[weight]"]').attr('disabled', !is_test_file); + var fields = parent.find('.test-related-fields'); + if (is_test_file) { + fields.slideDown(); + } else { + fields.slideUp(); + parent.find('[name$="[feedback_message]"]').val(''); + parent.find('[name$="[weight]"]').val(1); + } }); }; diff --git a/app/models/code_ocean/file.rb b/app/models/code_ocean/file.rb index d156f8db..e9e8f604 100644 --- a/app/models/code_ocean/file.rb +++ b/app/models/code_ocean/file.rb @@ -9,8 +9,9 @@ module CodeOcean TEACHER_DEFINED_ROLES = ROLES - %w(user_defined_file) after_initialize :set_default_values - before_validation :set_ancestor_values, if: :incomplete_descendent? + before_validation :clear_weight, unless: :teacher_defined_test? before_validation :hash_content, if: :content_present? + before_validation :set_ancestor_values, if: :incomplete_descendent? belongs_to :context, polymorphic: true belongs_to :execution_environment @@ -49,6 +50,11 @@ module CodeOcean file_id || id end + def clear_weight + self.weight = nil + end + private :clear_weight + def content_present? content? || native_file? end diff --git a/app/views/exercises/_file_form.html.slim b/app/views/exercises/_file_form.html.slim index 895ad2ad..f009896a 100644 --- a/app/views/exercises/_file_form.html.slim +++ b/app/views/exercises/_file_form.html.slim @@ -22,11 +22,12 @@ li.panel.panel-default label = f.check_box(:read_only) = t('activerecord.attributes.file.read_only') - .form-group - = f.label(:name, t('activerecord.attributes.file.feedback_message')) - = f.text_area(:feedback_message, class: 'form-control', disabled: !f.object.teacher_defined_test?, 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', disabled: !f.object.teacher_defined_test?, min: 1, step: 'any') + .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'))