diff --git a/app/assets/javascripts/experiments/index.js b/app/assets/javascripts/experiments/index.js
new file mode 100644
index 000000000..37d12465b
--- /dev/null
+++ b/app/assets/javascripts/experiments/index.js
@@ -0,0 +1,29 @@
+// Place all the behaviors and hooks related to the matching controller here.
+// All this logic will automatically be available in application.js.
+
+(function(){
+
+ // Initialize new experiment form
+ function initializeNewExperimentModal(){
+ $("#new-experiment")
+ .on("ajax:beforeSend", function(){
+ animateSpinner(this);
+ })
+ .on("ajax:success", function(e, data){
+ $('body').append($.parseHTML(data.html));
+ $('#new-experiment-modal').modal('show',{
+ backdrop: true,
+ keyboard: false,
+ });
+ })
+ .on("ajax:error", function() {
+ animateSpinner(this, false);
+ // TODO
+ })
+ .on("ajax:complete", function(){
+ animateSpinner(this, false);
+ });
+ }
+
+ initializeNewExperimentModal();
+})();
diff --git a/app/controllers/experiments_controller.rb b/app/controllers/experiments_controller.rb
index 6828f2cd8..eaa56b43c 100644
--- a/app/controllers/experiments_controller.rb
+++ b/app/controllers/experiments_controller.rb
@@ -8,18 +8,28 @@ class ExperimentsController < ApplicationController
def new
@experiment = Experiment.new
+ respond_to do |format|
+ format.json {
+ render json:{
+ html: render_to_string( {
+ partial: "new_modal.html.erb",
+ locals: { experiment: @experiment }
+ })
+ }
+ }
+ end
end
def create
@experiment = Experiment.new(experiment_params)
@experiment.created_by = current_user
- # @experiment.last_modified_by = current_user
+ @experiment.last_modified_by = current_user
+ @experiment.project = @project
if @experiment.save
@project.experiments << @experiment
flash[:success] = t('experiments.create.success_flash', name: @experiment.name)
- respond_to do |format|
- format.json{}
- end
+ # have to change to experiments path
+ redirect_to root_path
else
flash[:danger] = t('experiments.create.error_flash', name: @experiment.name)
render :new
@@ -35,9 +45,8 @@ class ExperimentsController < ApplicationController
@experiment.last_modified_by = current_user
if @experiment.save
flash[:success] = t('experiments.update.success_flash', name: @experiment.name)
- respond_to do |format|
- format.json{}
- end
+ # have to change to experiments path
+ redirect_to root_path
else
flash[:danger] = t('experiments.create.error_flash', name: @experiment.name)
render :edit
@@ -50,9 +59,8 @@ class ExperimentsController < ApplicationController
@experiment.archived_on = DateTime.now
if @experiment.save
flash[:success] = t('experiments.archive.success_flash', name: @experiment.name)
- respond_to do |format|
- format.json{}
- end
+ # have to change to experiments path
+ redirect_to root_path
else
flash[:danger] = t('experiments.archive.error_flash', name: @experiment.name)
end
@@ -65,11 +73,11 @@ class ExperimentsController < ApplicationController
end
def set_project
- @project = @experiment.project
+ @project = Project.find_by_id(params[:project_id])
end
def experiment_params
- params.require(:experiment).permit(:name, :description, :archived)
+ params.require(:experiment).permit(:name, :description)
end
def choose_layout
diff --git a/app/views/experiments/_edit_modal.html.erb b/app/views/experiments/_edit_modal.html.erb
new file mode 100644
index 000000000..6da40a7a0
--- /dev/null
+++ b/app/views/experiments/_edit_modal.html.erb
@@ -0,0 +1,20 @@
+
+
+ <%= bootstrap_form_for [@project, @experiment], remote: true do |f| %>
+
+
+
+
+ <%= render partial: "form.html.erb", locals: { form: f } %>
+
+
+
+
+ <% end %>
+
diff --git a/app/views/experiments/_form.html.erb b/app/views/experiments/_form.html.erb
new file mode 100644
index 000000000..29732c85f
--- /dev/null
+++ b/app/views/experiments/_form.html.erb
@@ -0,0 +1,15 @@
+
+
+
+ <%= form.text_field :name, label: t("experiments.new.name"), autofocus: true, placeholder: t("experiments.new.name_placeholder") %>
+
+
+
+
+
+
+
+ <%= form.text_area :description, label: t('experiments.new.description') %>
+
+
+
diff --git a/app/views/experiments/_new_modal.html.erb b/app/views/experiments/_new_modal.html.erb
new file mode 100644
index 000000000..598f202a4
--- /dev/null
+++ b/app/views/experiments/_new_modal.html.erb
@@ -0,0 +1,20 @@
+
+
+ <%= bootstrap_form_for [@project, @experiment] do |f| %>
+
+
+
+
+ <%= render partial: "form.html.erb", locals: { form: f } %>
+
+
+
+
+ <% end %>
+
diff --git a/app/views/experiments/canvas.html.erb b/app/views/experiments/canvas.html.erb
index c8885e52e..b535e472f 100644
--- a/app/views/experiments/canvas.html.erb
+++ b/app/views/experiments/canvas.html.erb
@@ -37,3 +37,4 @@
<%= javascript_include_tag("eventPause-min") %>
<%= javascript_include_tag("projects/canvas") %>
+<%= javascript_include_tag("experiments/index") %>
diff --git a/app/views/projects/_new.html.erb b/app/views/projects/_new.html.erb
index 664886836..3ed45746c 100644
--- a/app/views/projects/_new.html.erb
+++ b/app/views/projects/_new.html.erb
@@ -13,4 +13,4 @@
-<%= form.enum_btn_group :visibility, label: t("projects.index.modal_new_project.visibility"), btn_names: { hidden: t("projects.index.modal_new_project.visibility_hidden"), visible: t("projects.index.modal_new_project.visibility_visible") } %>
\ No newline at end of file
+<%= form.enum_btn_group :visibility, label: t("projects.index.modal_new_project.visibility"), btn_names: { hidden: t("projects.index.modal_new_project.visibility_hidden"), visible: t("projects.index.modal_new_project.visibility_visible") } %>
diff --git a/app/views/shared/_sidebar.html.erb b/app/views/shared/_sidebar.html.erb
index d0bde1ade..c461414b7 100644
--- a/app/views/shared/_sidebar.html.erb
+++ b/app/views/shared/_sidebar.html.erb
@@ -33,7 +33,9 @@
- New experiment...
+ <%= link_to new_project_experiment_path(@project), id: 'new-experiment', remote: true do %>
+ <%= t('experiments.new.create') %>
+ <% end %>
diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb
index 32317c777..118594d19 100644
--- a/config/initializers/assets.rb
+++ b/config/initializers/assets.rb
@@ -35,6 +35,7 @@ Rails.application.config.assets.precompile += %w( samples/sample_datatable.js )
Rails.application.config.assets.precompile += %w( projects/index.js )
Rails.application.config.assets.precompile += %w( samples/samples_importer.js )
Rails.application.config.assets.precompile += %w( projects/canvas.js )
+Rails.application.config.assets.precompile += %w( experiments/index.js )
Rails.application.config.assets.precompile += %w( reports/index.js )
Rails.application.config.assets.precompile += %w( reports/new.js )
Rails.application.config.assets.precompile += %w( protocols/index.js )
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 01181d3b6..9758d61ba 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -659,6 +659,18 @@ en:
no_activities: "There are no activities for this task."
more_activities: "Load older activities"
+ experiments:
+ new:
+ create: 'New experiment...'
+ modal_title: 'Create new experiment'
+ modal_create: 'Create experiment'
+ name: 'Experiment name'
+ name_placeholder: 'My experiment'
+ description: 'Description'
+ edit:
+ modal_title: 'Edit experiment %{experiment}'
+ modal_create: 'Update experiment'
+
my_module_tags:
new:
head_title: "%{project} | %{module} | Add tag"
diff --git a/config/routes.rb b/config/routes.rb
index 2bf2bdf56..e755969e6 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -88,7 +88,7 @@ Rails.application.routes.draw do
post 'destroy', as: :destroy # Destroy multiple entries at once
end
end
- resources :experiments, only: [:new, :create, :edit, :update, :archive]
+ resources :experiments, only: [:new, :create, :edit, :update, :archive], defaults: { format: 'json' }
member do
get 'notifications' # Notifications popup for individual project in projects index
get 'samples' # Samples for single project