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 @@ + + 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 @@ + + 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