diff --git a/app/assets/javascripts/exercises.js b/app/assets/javascripts/exercises.js
index 1f861ef6..0e3805db 100644
--- a/app/assets/javascripts/exercises.js
+++ b/app/assets/javascripts/exercises.js
@@ -148,6 +148,22 @@ $(function() {
});
};
+ var updateFileTemplates = function(fileType) {
+ var jqxhr = $.ajax({
+ url: '/file_templates/by_file_type/' + fileType + '.json',
+ dataType: 'json'
+ });
+ jqxhr.done(function(response) {
+ var noTemplateLabel = $('#noTemplateLabel').data('text');
+ var options = "";
+ for (var i = 0; i < response.length; i++) {
+ options += ""
+ }
+ $("#code_ocean_file_file_template_id").find('option').remove().end().append($(options));
+ });
+ jqxhr.fail(ajaxError);
+ }
+
if ($.isController('exercises')) {
if ($('table').isPresent()) {
enableBatchUpdate();
@@ -162,6 +178,10 @@ $(function() {
inferFileAttributes();
observeFileRoleChanges();
overrideTextareaTabBehavior();
+ } else if ($('#files.jstree').isPresent()) {
+ var fileTypeSelect = $('#code_ocean_file_file_type_id');
+ fileTypeSelect.on("change", function() {updateFileTemplates(fileTypeSelect.val())});
+ updateFileTemplates(fileTypeSelect.val());
}
toggleCodeHeight();
if (window.hljs) {
diff --git a/app/controllers/file_templates_controller.rb b/app/controllers/file_templates_controller.rb
index 45636d61..a6039500 100644
--- a/app/controllers/file_templates_controller.rb
+++ b/app/controllers/file_templates_controller.rb
@@ -6,6 +6,14 @@ class FileTemplatesController < ApplicationController
end
private :authorize!
+ def by_file_type
+ @file_templates = FileTemplate.where(:file_type_id => params[:file_type_id])
+ authorize!
+ respond_to do |format|
+ format.json { render :show, status: :ok, json: @file_templates.to_json }
+ end
+ end
+
# GET /file_templates
# GET /file_templates.json
def index
diff --git a/app/policies/file_template_policy.rb b/app/policies/file_template_policy.rb
index b2f780a8..92ced442 100644
--- a/app/policies/file_template_policy.rb
+++ b/app/policies/file_template_policy.rb
@@ -4,4 +4,8 @@ class FileTemplatePolicy < AdminOnlyPolicy
everyone
end
+ def by_file_type?
+ everyone
+ end
+
end
diff --git a/app/views/code_ocean/files/_form.html.slim b/app/views/code_ocean/files/_form.html.slim
index 4b44647d..46c5b2c2 100644
--- a/app/views/code_ocean/files/_form.html.slim
+++ b/app/views/code_ocean/files/_form.html.slim
@@ -12,4 +12,5 @@
= f.label(:file_template_id, t('activerecord.attributes.file.file_template_id'))
= f.collection_select(:file_template_id, FileTemplate.all.order(:name), :id, :name, {:include_blank => true}, class: 'form-control')
= f.hidden_field(:context_id)
+ .hidden#noTemplateLabel data-text=t('file_template.no_template_label')
.actions = render('shared/submit_button', f: f, object: CodeOcean::File.new)
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 9a48ee4f..c0aa4b13 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -432,3 +432,5 @@ de:
next_label: 'Nächste Seite →'
page_gap: '…'
previous_label: '← Vorherige Seite'
+ file_template:
+ no_template_label: "Leere Datei"
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 49fc8bbb..f03e42fb 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -432,3 +432,5 @@ en:
next_label: 'Next Page →'
page_gap: '…'
previous_label: '← Previous Page'
+ file_template:
+ no_template_label: "Empty File"
diff --git a/config/routes.rb b/config/routes.rb
index 7965f0a3..afd8c8ce 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,7 +1,11 @@
FILENAME_REGEXP = /[\w\.]+/ unless Kernel.const_defined?(:FILENAME_REGEXP)
Rails.application.routes.draw do
- resources :file_templates
+ resources :file_templates do
+ collection do
+ get 'by_file_type/:file_type_id', as: :by_file_type, to: :by_file_type
+ end
+ end
resources :code_harbor_links
resources :request_for_comments
get '/my_request_for_comments', as: 'my_request_for_comments', to: 'request_for_comments#get_my_comment_requests'