From 2dc3b8cc803826b6a2f4b2d0e9d8e297b982b271 Mon Sep 17 00:00:00 2001 From: Bo Zhou Date: Mon, 21 Nov 2016 15:26:05 -0700 Subject: [PATCH 01/33] annotation_categories_controller changed --- app/assets/stylesheets/common/_markus.scss | 3 +- .../annotation_categories_controller.rb | 31 ++++++++++++------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/app/assets/stylesheets/common/_markus.scss b/app/assets/stylesheets/common/_markus.scss index 076c9d98fd..8a45044f3f 100644 --- a/app/assets/stylesheets/common/_markus.scss +++ b/app/assets/stylesheets/common/_markus.scss @@ -113,9 +113,8 @@ strong a { .notice { @extend .alert; - background: $light-grey; + background: $light-grey url(icons/information.png) no-repeat 5px center; border: 1px solid $grey; - padding: 0.25em 0.5em; } diff --git a/app/controllers/annotation_categories_controller.rb b/app/controllers/annotation_categories_controller.rb index 79a48cb8a9..0a25f49ead 100644 --- a/app/controllers/annotation_categories_controller.rb +++ b/app/controllers/annotation_categories_controller.rb @@ -21,6 +21,7 @@ def create @annotation_category = @assignment.annotation_categories .new(annotation_category_params) if @annotation_category.save + flash_message(:success, I18n.t('annotations.update.annotation_category_success')) render :insert_new_annotation_category else render :new_annotation_category_error @@ -34,7 +35,9 @@ def show def destroy @annotation_category = AnnotationCategory.find(params[:id]) - @annotation_category.destroy + if @annotation_category.destroy + flash_message(:success, I18n.t('annotations.delete.delete_message')) + end end def update @@ -53,7 +56,9 @@ def update_annotation @annotation_text = AnnotationText.find(params[:id]) @annotation_text.update_attributes(annotation_text_params) @annotation_text.last_editor_id = current_user.id - @annotation_text.save + if @annotation_text.save + flash_now(:success, I18n.t('annotations.update.annotation_category_success')) + end end def add_annotation_text @@ -69,7 +74,7 @@ def add_annotation_text render :new_annotation_text_error return end - flash.now[:success] = I18n.t('annotations.update.annotation_category_success') + flash_now(:success, I18n.t('annotations.update.annotation_category_success')) @assignment = Assignment.find(params[:assignment_id]) render :insert_new_annotation_text end @@ -78,7 +83,9 @@ def add_annotation_text def delete_annotation_text @assignment = Assignment.find(params[:assignment_id]) @annotation_text = AnnotationText.find(params[:id]) - @annotation_text.destroy + if @annotation_text.destroy + flash_now(:success, I18n.t('annotations.delete.delete_message')) + end end def find_annotation_text @@ -160,7 +167,7 @@ def csv_upload flash_message(:success, result[:valid_lines]) end else - flash[:error] = I18n.t('csv.invalid_csv') + flash_message(:error, I18n.t('csv.invalid_csv')) end redirect_to action: 'index', id: @assignment.id end @@ -179,15 +186,15 @@ def yml_upload begin annotations = YAML::load(file.utf8_encode(encoding)) rescue Psych::SyntaxError => e - flash[:error] = I18n.t('annotations.upload.syntax_error', - error: "#{e}") + flash_message(:error, I18n.t('annotations.upload.syntax_error', + error: "#{e}")) redirect_to action: 'index', assignment_id: @assignment.id return end # YAML::load returns a hash if successful unless annotations.is_a? Hash - flash[:error] = I18n.t('annotations.upload.unparseable_yaml') + flash_message(:error, I18n.t('annotations.upload.unparseable_yaml')) redirect_to action: 'index', assignment_id: @assignment.id return end @@ -196,16 +203,16 @@ def yml_upload result = AnnotationCategory.add_by_array(key, annotations.values_at(key), @assignment, current_user) annotation_line += 1 if result[:annotation_upload_invalid_lines].size > 0 - flash[:error] = I18n.t('annotations.upload.error', - annotation_category: key, annotation_line: annotation_line) + flash_message(:error, I18n.t('annotations.upload.error', + annotation_category: key, annotation_line: annotation_line)) break else annotation_category_number += 1 end end if annotation_category_number > 0 - flash[:success] = I18n.t('annotations.upload.success', - annotation_category_number: annotation_category_number) + flash_message(:success, I18n.t('annotations.upload.success', + annotation_category_number: annotation_category_number)) end end redirect_to action: 'index', assignment_id: @assignment.id From 7162f663d59847110da9f9bb762d13079b030795 Mon Sep 17 00:00:00 2001 From: Bo Zhou Date: Mon, 21 Nov 2016 15:47:57 -0700 Subject: [PATCH 02/33] finish groups annotation_categories flash messages, add icon for notice class --- app/controllers/criteria_controller.rb | 2 +- app/controllers/groups_controller.rb | 14 +++++++------- .../_annotation_category_edit.html.erb | 1 - 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/app/controllers/criteria_controller.rb b/app/controllers/criteria_controller.rb index bd06d7e03e..504278f2ea 100644 --- a/app/controllers/criteria_controller.rb +++ b/app/controllers/criteria_controller.rb @@ -62,7 +62,7 @@ def update render :errors return end - flash.now[:success] = t('criterion_saved_success') + flash_now(:success, t('criterion_saved_success')) end # Handles the drag/drop criteria sorting. diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index 806fb2a2b6..5b1e228f4f 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -17,9 +17,9 @@ class GroupsController < ApplicationController def note_message @assignment = Assignment.find(params[:id]) if params[:success] - flash[:notice] = I18n.t('notes.create.success') + flash_message(:success, I18n.t('notes.create.success')) else - flash[:error] = I18n.t('notes.error') + flash_message(:error, I18n.t('notes.error')) end end @@ -30,7 +30,7 @@ def new assignment = Assignment.find(params[:assignment_id]) begin assignment.add_group(params[:new_group_name]) - flash.now[:success] = I18n.t('groups.rename_group.success') + flash_now(:success, I18n.t('groups.rename_group.success')) rescue Exception => e flash[:error] = e.message ensure @@ -55,7 +55,7 @@ def remove_group else grouping.delete_grouping @removed_groupings.push(grouping) - flash[:success] = I18n.t('groups.delete') + flash_message(:success, I18n.t('groups.delete')) end head :ok end @@ -76,7 +76,7 @@ def rename_group # We update the group_name @group.group_name = params[:new_groupname] if @group.save - flash[:success] = I18n.t('groups.rename_group.success') + flash_message(:success, I18n.t('groups.rename_group.success')) end else @@ -198,9 +198,9 @@ def use_another_assignment_groups source_assignment = Assignment.find(params[:clone_assignment_id]) if source_assignment.nil? - flash[:warning] = t('groups.csv.could_not_find_source') + flash_message(:warning, t('groups.csv.could_not_find_source')) elsif target_assignment.nil? - flash[:warning] = t('groups.csv.could_not_find_target') + flash_message(:warning, t('groups.csv.could_not_find_target')) else # Clone the groupings target_assignment.clone_groupings_from(source_assignment.id) diff --git a/app/views/annotation_categories/_annotation_category_edit.html.erb b/app/views/annotation_categories/_annotation_category_edit.html.erb index 4f0711c697..037d74c9f7 100644 --- a/app/views/annotation_categories/_annotation_category_edit.html.erb +++ b/app/views/annotation_categories/_annotation_category_edit.html.erb @@ -1,5 +1,4 @@
- <%= render 'shared/flash_message' %>
From 2f9869c14c3adc6f6bd849ba8dd93003c8399c4a Mon Sep 17 00:00:00 2001 From: Bo Zhou Date: Mon, 21 Nov 2016 17:28:31 -0700 Subject: [PATCH 03/33] standardize flash message for admins_controller --- app/controllers/admins_controller.rb | 13 ++++++------- app/views/groups/index.html.erb | 28 +--------------------------- 2 files changed, 7 insertions(+), 34 deletions(-) diff --git a/app/controllers/admins_controller.rb b/app/controllers/admins_controller.rb index 67e4af8451..687985e11f 100644 --- a/app/controllers/admins_controller.rb +++ b/app/controllers/admins_controller.rb @@ -23,11 +23,11 @@ def update @user = Admin.find(params[:id]) # update_attributes supplied by ActiveRecords if @user.update_attributes(user_params).nil? - flash[:error] = I18n.t('admins.update.error') + flash_message(:error, I18n.t('admins.update.error')) render :edit else - flash[:success] = I18n.t('admins.update.success', - user_name: @user.user_name) + flash_message(:success, I18n.t('admins.update.success', + user_name: @user.user_name)) redirect_to action: 'index' end end @@ -42,12 +42,11 @@ def create # active records--creates a new record if the model is new, otherwise # updates the existing record if @user.save - flash[:success] = I18n.t('admins.create.success', - user_name: @user.user_name) - + flash_message(:success, I18n.t('admins.create.success', + user_name: @user.user_name)) redirect_to action: 'index' else - flash[:error] = I18n.t('admins.create.error') + flash_message(:error, I18n.t('admins.create.error')) render 'new' end end diff --git a/app/views/groups/index.html.erb b/app/views/groups/index.html.erb index 48a1457573..7d805b9417 100644 --- a/app/views/groups/index.html.erb +++ b/app/views/groups/index.html.erb @@ -49,33 +49,7 @@ <%= link_to t('upload'), 'javascript:void(0);', onclick:'modal_upload.open();' %> <% end %> -
- - <% # This is for error display injected by JavaScript %> - - - - - - - - -
- -
+<%= render 'shared/flash_message' %>
From ac8f0a01c4d1e111eff20a939891aad913c98e86 Mon Sep 17 00:00:00 2001 From: Bo Zhou Date: Mon, 21 Nov 2016 17:41:54 -0700 Subject: [PATCH 04/33] standardize flash messages for assignments controller --- app/controllers/assignments_controller.rb | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/app/controllers/assignments_controller.rb b/app/controllers/assignments_controller.rb index bbe6b16815..18836aa5d8 100644 --- a/app/controllers/assignments_controller.rb +++ b/app/controllers/assignments_controller.rb @@ -257,7 +257,7 @@ def edit @sections = Section.all unless @past_date.nil? || @past_date.empty? - flash.now[:notice] = t('past_due_date_notice') + @past_date.join(', ') + flash_now(:notice, t('past_due_date_notice') + @past_date.join(', ')) end # build section_due_dates for each section that doesn't already have a due date @@ -285,13 +285,13 @@ def update end rescue SubmissionRule::InvalidRuleType => e @assignment.errors.add(:base, t('assignment.error', message: e.message)) - flash[:error] = t('assignment.error', message: e.message) + flash_message(:error, t('assignment.error', message: e.message)) render :edit, id: @assignment.id return end if @assignment.save - flash[:success] = I18n.t('assignment.update_success') + flash_message(:success, I18n.t('assignment.update_success')) redirect_to action: 'edit', id: params[:id] else render :edit, id: @assignment.id @@ -345,7 +345,7 @@ def create @assignment.clone_groupings_from(params[:persist_groups_assignment]) end if @assignment.save - flash[:success] = I18n.t('assignment.create_success') + flash_message(:success, I18n.t('assignment.create_success')) end end redirect_to action: 'edit', id: @assignment.id @@ -448,7 +448,7 @@ def deletegroup end @grouping.destroy - flash[:success] = I18n.t('assignment.group.deleted') + flash_message(:success, I18n.t('assignment.group.deleted')) m_logger.log("Student '#{current_user.user_name}' deleted group '" + "#{@grouping.group.group_name}'.", MarkusLogger::INFO) @@ -484,7 +484,7 @@ def invite_member @grouping.invite(to_invite) flash[:fail_notice] = @grouping.errors['base'] if flash[:fail_notice].blank? - flash[:success] = I18n.t('invite_student.success') + flash_message(:success, I18n.t('invite_student.success')) end redirect_to action: 'student_interface', id: @assignment.id end @@ -503,7 +503,7 @@ def disinvite_member m_logger = MarkusLogger.instance m_logger.log("Student '#{current_user.user_name}' cancelled invitation for " + "'#{disinvited_student.user_name}'.") - flash[:success] = I18n.t('student.member_disinvited') + flash_message(:success, I18n.t('student.member_disinvited')) redirect_to action: :student_interface, id: assignment.id end @@ -565,7 +565,7 @@ def download_assignment_list filename: 'assignment_list.csv') return else - flash[:error] = t(:incorrect_format) + flash_message(:error, t(:incorrect_format)) redirect_to action: 'index' return end @@ -580,7 +580,7 @@ def upload_assignment_list assignment_list = params[:assignment_list] if assignment_list.blank? - flash[:error] = I18n.t('csv.invalid_csv') + flash_message(:error, I18n.t('csv.invalid_csv')) redirect_to action: 'index' return end @@ -620,7 +620,7 @@ def upload_assignment_list update_assignment!(row) end rescue ActiveRecord::ActiveRecordError, ArgumentError => e - flash[:error] = e.message + flash_message(:error, e.message) redirect_to action: 'index' return end @@ -898,7 +898,7 @@ def update_assignment!(map) assignment.display_grader_names_to_students = false end assignment.update_attributes!(map) - flash[:success] = t('assignment.create_success') + flash_message(:success, t('assignment.create_success')) end def process_assignment_form(assignment) From 819737e26cdf5239fa19af98bd076f6e387a25a2 Mon Sep 17 00:00:00 2001 From: Bo Zhou Date: Mon, 21 Nov 2016 17:44:02 -0700 Subject: [PATCH 05/33] standardize flash messages for automated tests controller --- app/controllers/automated_tests_controller.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/automated_tests_controller.rb b/app/controllers/automated_tests_controller.rb index d9454642b3..6efb7fc5d7 100644 --- a/app/controllers/automated_tests_controller.rb +++ b/app/controllers/automated_tests_controller.rb @@ -28,7 +28,7 @@ def update new_support_file) # Save assignment and associated test files if @assignment.save - flash[:success] = I18n.t('assignment.update_success') + flash_message(:success, I18n.t('assignment.update_success')) unless new_script.nil? assignment_tests_path = File.join( MarkusConfigurator.markus_ate_client_dir, @@ -151,11 +151,11 @@ def download # print flash error messages else - flash[:error] = I18n.t('automated_tests.download_wrong_place_or_unreadable'); + flash_message(:error, I18n.t('automated_tests.download_wrong_place_or_unreadable')) redirect_to action: 'manage' end else - flash[:error] = I18n.t('automated_tests.download_not_in_db'); + flash_message(:error, I18n.t('automated_tests.download_not_in_db')) redirect_to action: 'manage' end end From d5629b979e93f3c341009c07ca59302d639fb257 Mon Sep 17 00:00:00 2001 From: Bo Zhou Date: Mon, 21 Nov 2016 17:49:31 -0700 Subject: [PATCH 06/33] standardize flash messages for grade_entry_forms_controller --- app/controllers/grade_entry_forms_controller.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/grade_entry_forms_controller.rb b/app/controllers/grade_entry_forms_controller.rb index 5bc0a40469..aa58ffdf0e 100644 --- a/app/controllers/grade_entry_forms_controller.rb +++ b/app/controllers/grade_entry_forms_controller.rb @@ -38,7 +38,7 @@ def create new_params = update_grade_entry_form_params(params) if @grade_entry_form.update_attributes(new_params) # Success message - flash[:success] = I18n.t('grade_entry_forms.create.success') + flash_message(:success, I18n.t('grade_entry_forms.create.success')) redirect_to action: 'edit', id: @grade_entry_form.id else render 'new' @@ -67,7 +67,7 @@ def update if @grade_entry_form.update_attributes(new_params) # Success message - flash[:success] = I18n.t('grade_entry_forms.edit.success') + flash_message(:success, I18n.t('grade_entry_forms.edit.success')) redirect_to action: 'edit', id: @grade_entry_form.id else render 'edit', id: @grade_entry_form.id @@ -272,12 +272,12 @@ def update_grade_entry_students # Display success message if numGradeEntryStudentsChanged > 0 - flash[:success] = I18n.t('grade_entry_forms.grades.successfully_changed', - {numGradeEntryStudentsChanged: numGradeEntryStudentsChanged}) + flash_message(:success, I18n.t('grade_entry_forms.grades.successfully_changed', + {numGradeEntryStudentsChanged: numGradeEntryStudentsChanged})) m_logger = MarkusLogger.instance m_logger.log(log_message) end - flash[:error] = errors + flash_message(:error, errors) head :ok end From cb993bd86f024b48f3bda2528c89b0f8af159313 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Mon, 21 Nov 2016 20:56:49 -0400 Subject: [PATCH 07/33] Refactoring upload and download modals in assignments --- .../_assignment_download_modal.erb | 30 ++++++++ .../assignments/_assignment_upload_modal.erb | 45 ++++++++++++ app/views/assignments/index.html.erb | 69 ++----------------- 3 files changed, 79 insertions(+), 65 deletions(-) create mode 100644 app/views/assignments/_assignment_download_modal.erb create mode 100644 app/views/assignments/_assignment_upload_modal.erb diff --git a/app/views/assignments/_assignment_download_modal.erb b/app/views/assignments/_assignment_download_modal.erb new file mode 100644 index 0000000000..31b3387894 --- /dev/null +++ b/app/views/assignments/_assignment_download_modal.erb @@ -0,0 +1,30 @@ +<%= content_for :modal_id, 'download_dialog' %> +<%= content_for :modal_title, t('annotations.download.download_annotations') %> +<%= content_for :modal_content do %> + + + +
+ +
+<% end %> \ No newline at end of file diff --git a/app/views/assignments/_assignment_upload_modal.erb b/app/views/assignments/_assignment_upload_modal.erb new file mode 100644 index 0000000000..62ae196557 --- /dev/null +++ b/app/views/assignments/_assignment_upload_modal.erb @@ -0,0 +1,45 @@ +<%= content_for :modal_id, 'upload_dialog' %> +<%= content_for :modal_title, t('annotations.upload.upload_annotations') %> +<%= content_for :modal_content do %> + + + <%= javascript_include_tag 'upload_button_control.js', + id: 'upload_script', + upload_id: 'assignment_list', + button_id: 'yml_upload csv_upload' %> +

+ <%= t(:select_csv_file, + code: @default_fields[0..3].join(', ')).html_safe %> +

+

+ <%= t(:all_csv_file) %> + <%= link_to '[...]', '#', onclick: "toggleElem('hide')" %> + +

+ + <%= form_tag upload_assignment_list_assignments_path, + { multipart: true } do %> +

+ <%= t('encoding') %> + <%= select_tag(:encoding, options_for_select(@encodings)) %> +

+ + + +
+ <%= hidden_field_tag :file_format, '', id: 'file_format' %> + <% if @current_user.admin? %> + <%= submit_tag t(:upload_assignment_format, file: 'YML'), + disabled: true, + id: 'yml_upload', + onclick: 'choose_upload("yml")' %> + <%= submit_tag t(:upload_assignment_format, file: 'CSV'), + disabled: true, + id: 'csv_upload', + onclick: 'choose_upload("csv")' %> + <% end %> +
+ <% end %> +<% end %> diff --git a/app/views/assignments/index.html.erb b/app/views/assignments/index.html.erb index 5b80231cc6..98028da467 100644 --- a/app/views/assignments/index.html.erb +++ b/app/views/assignments/index.html.erb @@ -1,5 +1,6 @@ <% content_for :head do %> <%= javascript_include_tag 'Assignments/index' %> + <%= stylesheet_link_tag('clickable') %> <% end %> <% content_for :title, t(:manage_course_work) %> @@ -34,68 +35,6 @@ <% end %> <% end %> - - - - +<%# Modals %> +<%= render partial: 'assignment_download_modal', layout: 'layouts/modal_dialog' %> +<%= render partial: 'assignment_upload_modal', layout: 'layouts/modal_dialog' %> From e69a43e6986f70570f9848303ece3020b27cfa75 Mon Sep 17 00:00:00 2001 From: Bo Zhou Date: Mon, 21 Nov 2016 18:10:40 -0700 Subject: [PATCH 08/33] standardize all flash messages for all controllers --- app/controllers/marks_graders_controller.rb | 2 +- app/controllers/notes_controller.rb | 10 +++++----- app/controllers/sections_controller.rb | 14 +++++++------- app/controllers/students_controller.rb | 16 ++++++++-------- app/controllers/submissions_controller.rb | 4 ++-- app/controllers/tags_controller.rb | 20 ++++++++++---------- app/controllers/tas_controller.rb | 19 +++++++++---------- 7 files changed, 42 insertions(+), 43 deletions(-) diff --git a/app/controllers/marks_graders_controller.rb b/app/controllers/marks_graders_controller.rb index 4ca9f07196..104b34ef9f 100644 --- a/app/controllers/marks_graders_controller.rb +++ b/app/controllers/marks_graders_controller.rb @@ -34,7 +34,7 @@ def index # Assign TAs to Students via a csv file def csv_upload_grader_groups_mapping if params[:grader_mapping].nil? - flash[:error] = I18n.t('csv.student_to_grader') + flash_message(:error, I18n.t('csv.student_to_grader')) else result = MarkusCSV.parse( params[:grader_mapping].read, diff --git a/app/controllers/notes_controller.rb b/app/controllers/notes_controller.rb index 271c73c5bb..d431f51d7c 100644 --- a/app/controllers/notes_controller.rb +++ b/app/controllers/notes_controller.rb @@ -59,7 +59,7 @@ def create @note.creator_id = @current_user.id if @note.save - flash[:success] = I18n.t('notes.create.success') + flash_message(:success, I18n.t('notes.create.success')) redirect_to action: 'index' else new_retrieve @@ -85,7 +85,7 @@ def noteable_object_selector else # default to groupings if all else fails. params[:noteable_type] = 'Grouping' - flash[:error] = I18n.t('notes.new.invalid_selector') + flash_message(:error, I18n.t('notes.new.invalid_selector')) new_retrieve end render 'noteable_object_selector', formats: [:js], handlers: [:erb] @@ -97,7 +97,7 @@ def edit def update if @note.update_attributes(notes_params) - flash[:success] = I18n.t('notes.update.success') + flash_message(:success, I18n.t('notes.update.success')) redirect_to action: 'index' else render 'edit', formats: [:html], handlers: [:erb] @@ -108,9 +108,9 @@ def destroy @note = Note.find(params[:id]) if @note.user_can_modify?(current_user) @note.destroy - flash[:success] = I18n.t('notes.delete.success') + flash_message(:success, I18n.t('notes.delete.success')) else - flash[:error] = I18n.t('notes.delete.error_permissions') + flash_message(:error, I18n.t('notes.delete.error_permissions')) end render 'destroy', formats: [:js], handlers: [:erb] end diff --git a/app/controllers/sections_controller.rb b/app/controllers/sections_controller.rb index b01d074041..77b62f0a80 100644 --- a/app/controllers/sections_controller.rb +++ b/app/controllers/sections_controller.rb @@ -21,14 +21,14 @@ def create @section = Section.new(section_params) if @section.save @sections = Section.all - flash[:success] = I18n.t('section.create.success', name: @section.name) + flash_message(:success, I18n.t('section.create.success', name: @section.name)) if params[:section_modal] render 'close_modal_add_section' return end redirect_to action: 'index' else - flash[:error] = I18n.t('section.create.error') + flash_message(:error, I18n.t('section.create.error')) if params[:section_modal] render 'add_new_section_handler' return @@ -46,10 +46,10 @@ def edit def update @section = Section.find(params[:id]) if @section.update_attributes(section_params) - flash[:success] = I18n.t('section.update.success', name: @section.name) + flash_message(:success, I18n.t('section.update.success', name: @section.name)) redirect_to action: 'index' else - flash[:error] = I18n.t('section.update.error') + flash_message(:error, I18n.t('section.update.error')) render :edit end end @@ -60,14 +60,14 @@ def destroy # only destroy section if this user is allowed to do so and the section has no students if @section.user_can_modify?(current_user) if @section.has_students? - flash[:error] = I18n.t('section.delete.not_empty') + flash_message(:error, I18n.t('section.delete.not_empty')) else @section.section_due_dates.each(&:destroy) @section.destroy - flash[:success] = I18n.t('section.delete.success') + flash_message(:success, I18n.t('section.delete.success')) end else - flash[:error] = I18n.t('section.delete.error_permissions') + flash_message(:error, I18n.t('section.delete.error_permissions')) end redirect_to action: :index end diff --git a/app/controllers/students_controller.rb b/app/controllers/students_controller.rb index 0cdfdbc507..de9d4b9b7e 100644 --- a/app/controllers/students_controller.rb +++ b/app/controllers/students_controller.rb @@ -6,9 +6,9 @@ class StudentsController < ApplicationController def note_message @student = Student.find(params[:id]) if params[:success] - flash[:success] = I18n.t('notes.create.success') + flash_message(:success, I18n.t('notes.create.success')) else - flash[:error] = I18n.t('notes.error') + flash_message(:error, I18n.t('notes.error')) end end @@ -37,11 +37,11 @@ def update @user = Student.find_by_id(params[:id]) # update_attributes supplied by ActiveRecords if @user.update_attributes(user_params) - flash[:success] = I18n.t('students.update.success', - user_name: @user.user_name) + flash_message(:success, I18n.t('students.update.success', + user_name: @user.user_name)) redirect_to action: 'index' else - flash[:error] = I18n.t('students.update.error') + flash_message(:error, I18n.t('students.update.error')) @sections = Section.order(:name) render :edit end @@ -81,12 +81,12 @@ def create # by the HTML form with the help of ActiveView::Helper:: @user = Student.new(user_params) if @user.save - flash[:success] = I18n.t('students.create.success', - user_name: @user.user_name) + flash_message(:success, I18n.t('students.create.success', + user_name: @user.user_name)) redirect_to action: 'index' # Redirect else @sections = Section.order(:name) - flash[:error] = I18n.t('students.create.error') + flash_message(:error, I18n.t('students.create.error')) render :new end end diff --git a/app/controllers/submissions_controller.rb b/app/controllers/submissions_controller.rb index ac4a34ac92..400e19a4cb 100644 --- a/app/controllers/submissions_controller.rb +++ b/app/controllers/submissions_controller.rb @@ -497,7 +497,7 @@ def update_files return end if repo.commit(txn) - flash[:success] = I18n.t('update_files.success') + flash_message(:success, I18n.t('update_files.success')) # flush log messages m_logger = MarkusLogger.instance log_messages.each do |msg| @@ -600,7 +600,7 @@ def download_groupings_files begin file_content = file.retrieve_file rescue Exception => e - flash[:error] = e.message + flash_message(:error, e.message) redirect_to :back return end diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb index 805821ebb7..38c143bb3e 100644 --- a/app/controllers/tags_controller.rb +++ b/app/controllers/tags_controller.rb @@ -30,12 +30,12 @@ def create user: @current_user) if new_tag.save - flash[:success] = I18n.t('tags.create.successful') + flash_message(:success, I18n.t('tags.create.successful')) if params[:grouping_id] create_grouping_tag_association(params[:grouping_id], new_tag) end else - flash[:error] = I18n.t('tags.create.error') + flash_message(:error, I18n.t('tags.create.error')) end redirect_to :back @@ -51,10 +51,10 @@ def update_tag @tag.name = params[:update_tag][:name] @tag.description = params[:update_tag][:description] if @tag.save - flash[:success] = I18n.t('tags.create.successful') + flash_message(:success, I18n.t('tags.create.successful')) redirect_to :back else - flash[:error] = I18n.t('tags.create.error') + flash_message(:error, I18n.t('tags.create.error')) end end @@ -176,15 +176,15 @@ def yml_upload # Handles errors associated with loads. rescue Psych::SyntaxError => e - flash[:error] = I18n.t('tags.upload.error') + ' ' + - I18n.t('tags.upload.syntax_error', error: "#{e}") + flash_message(:error, I18n.t('tags.upload.error') + ' ' + + I18n.t('tags.upload.syntax_error', error: "#{e}")) redirect_to :back return end unless tags - flash[:error] = I18n.t('tags.upload.error') + - ' ' + I18n.t('tags.upload.empty_error') + flash_message(:error, I18n.t('tags.upload.error') + + ' ' + I18n.t('tags.upload.empty_error')) redirect_to :back return end @@ -217,12 +217,12 @@ def yml_upload end if successes < tags.length - flash[:error] = I18n.t('tags.upload.error') + bad_names + flash_message(:error, I18n.t('tags.upload.error') + bad_names) end # Displays the tags that are successful. if successes > 0 - flash[:success] = I18n.t('tags.upload.upload_success', nb_updates: successes) + flash_message(:success, I18n.t('tags.upload.upload_success', nb_updates: successes)) end end diff --git a/app/controllers/tas_controller.rb b/app/controllers/tas_controller.rb index f60a996b9a..39c02ac8fb 100644 --- a/app/controllers/tas_controller.rb +++ b/app/controllers/tas_controller.rb @@ -22,10 +22,10 @@ def edit def destroy @user = Ta.find(params[:id]) if @user && @user.destroy - flash[:success] = I18n.t('tas.delete.success', - user_name: @user.user_name) + flash_message(:success, I18n.t('tas.delete.success', + user_name: @user.user_name)) else - flash[:error] = I18n.t('tas.delete.error') + flash_message(:error, I18n.t('tas.delete.error')) end redirect_to action: :index end @@ -34,12 +34,11 @@ def update @user = Ta.find_by_id(params[:user][:id]) # update_attributes supplied by ActiveRecords if @user.update_attributes(user_params) - flash[:success] = I18n.t('tas.update.success', - user_name: @user.user_name) - + flash(:success, I18n.t('tas.update.success', + user_name: @user.user_name)) redirect_to action: :index else - flash[:error] = I18n.t('tas.update.error') + flash_message(:error, I18n.t('tas.update.error')) render :edit end end @@ -53,11 +52,11 @@ def create # active records--creates a new record if the model is new, otherwise # updates the existing record if @user.save - flash[:success] = I18n.t('tas.create.success', - user_name: @user.user_name) + flash_message(:success, I18n.t('tas.create.success', + user_name: @user.user_name)) redirect_to action: 'index' # Redirect else - flash[:error] = I18n.t('tas.create.error') + flash_message(:error, I18n.t('tas.create.error')) render :new end end From fe7fcb2644882577806253c7f65d4b529d3adbcc Mon Sep 17 00:00:00 2001 From: Bo Zhou Date: Tue, 22 Nov 2016 14:33:18 -0700 Subject: [PATCH 09/33] delete successDiv and errorDiv for React component return --- .../javascripts/ReactComponents/error.js | 43 ------------------- .../javascripts/ReactComponents/success.js | 43 ------------------- .../_peer_submissions_table.js.jsx.erb | 2 - .../_react_file_manager_boot_table.js.jsx.erb | 2 - .../grade_entry_forms/_marks_table.js.jsx.erb | 1 - .../_react_grades_table.js.jsx.erb | 1 - app/views/graders/_graders_manager.js.jsx.erb | 1 - app/views/groups/_groups_manager.js.jsx.erb | 1 - .../_marks_graders_manager.js.jsx.erb | 1 - .../_peer_reviews_new_manager.js.jsx.erb | 1 - app/views/students/_students_table.js.jsx.erb | 1 - .../_react_file_manager_boot_table.js.jsx.erb | 2 - .../submissions/_repo_files_table.js.jsx.erb | 2 - .../submissions/_submissions_table.js.jsx.erb | 2 - app/views/tags/_tags_table.js.jsx.erb | 1 - 15 files changed, 104 deletions(-) delete mode 100644 app/assets/javascripts/ReactComponents/error.js delete mode 100644 app/assets/javascripts/ReactComponents/success.js diff --git a/app/assets/javascripts/ReactComponents/error.js b/app/assets/javascripts/ReactComponents/error.js deleted file mode 100644 index 5b690094b5..0000000000 --- a/app/assets/javascripts/ReactComponents/error.js +++ /dev/null @@ -1,43 +0,0 @@ -/** @jsx React.DOM */ - -/* Component that represents the error div commonly - * seen on MarkUs pages. It takes only one prop, - * which is the error string. If the string is empty - * (or null), the div doesn't show anything, but otherwise - * it returns a div with class 'error', which is style - * according to the CSS. - */ - var ErrorDiv = React.createClass({displayName: 'ErrorDiv', - propTypes: { - error: React.PropTypes.oneOfType([ - React.PropTypes.string, - React.PropTypes.array - ]) - }, - render: function() { - if (this.props.error) { - if (typeof(this.props.error) === 'string') { - return ( - React.DOM.div( {className:'error'}, this.props.error) - ); - } else if (typeof(this.props.error) === 'object' && - this.props.error.length > 0) { // Array - errors = this.props.error.map(function(err) { - return React.DOM.li( { className: 'error' }, err); - }); - return ( - React.DOM.div(null, errors) - ); - } else { - return ( - React.DOM.div(null) - ); - } - } - else { - return ( - React.DOM.div(null) - ); - } - } -}); diff --git a/app/assets/javascripts/ReactComponents/success.js b/app/assets/javascripts/ReactComponents/success.js deleted file mode 100644 index 67c6baa082..0000000000 --- a/app/assets/javascripts/ReactComponents/success.js +++ /dev/null @@ -1,43 +0,0 @@ -/** @jsx React.DOM */ - -/* Component that represents the success div commonly - * seen on MarkUs pages. It takes only one prop, - * which is the success string. If the string is empty - * (or null), the div doesn't show anything, but otherwise - * it returns a div with class 'success', which is style - * according to the CSS. - */ - var SuccessDiv = React.createClass({displayName: 'SuccessDiv', - propTypes: { - success: React.PropTypes.oneOfType([ - React.PropTypes.string, - React.PropTypes.array - ]) - }, - render: function() { - if (this.props.success) { - if (typeof(this.props.success) === 'string') { - return ( - React.DOM.div( {className:'success'}, this.props.success) - ); - } else if (typeof(this.props.success) === 'object' && - this.props.success.length > 0) { // Array - successs = this.props.success.map(function(err) { - return React.DOM.div( { className: 'success' }, err); - }); - return ( - React.DOM.div(null, successs) - ); - } else { - return ( - React.DOM.div(null) - ); - } - } - else { - return ( - React.DOM.div(null) - ); - } - } -}); diff --git a/app/views/assignments/_peer_submissions_table.js.jsx.erb b/app/views/assignments/_peer_submissions_table.js.jsx.erb index 9631f96d94..f501b4e5a7 100644 --- a/app/views/assignments/_peer_submissions_table.js.jsx.erb +++ b/app/views/assignments/_peer_submissions_table.js.jsx.erb @@ -113,8 +113,6 @@ return (
- - {/* This table and its attributes are defined in table.js */} '} ref='table' /> - - ); } diff --git a/app/views/grade_entry_forms/_marks_table.js.jsx.erb b/app/views/grade_entry_forms/_marks_table.js.jsx.erb index 44ff89b959..2f5c115340 100644 --- a/app/views/grade_entry_forms/_marks_table.js.jsx.erb +++ b/app/views/grade_entry_forms/_marks_table.js.jsx.erb @@ -108,7 +108,6 @@ return (
-
- ); return (
-
{graders_to_criteria}
diff --git a/app/views/groups/_groups_manager.js.jsx.erb b/app/views/groups/_groups_manager.js.jsx.erb index b8aca3a27f..c0079ebfa3 100644 --- a/app/views/groups/_groups_manager.js.jsx.erb +++ b/app/views/groups/_groups_manager.js.jsx.erb @@ -90,7 +90,6 @@ render: function() { return (
-
); return (
-
{to_render}
); diff --git a/app/views/peer_reviews/_peer_reviews_new_manager.js.jsx.erb b/app/views/peer_reviews/_peer_reviews_new_manager.js.jsx.erb index 6563fe7df8..61f1514214 100644 --- a/app/views/peer_reviews/_peer_reviews_new_manager.js.jsx.erb +++ b/app/views/peer_reviews/_peer_reviews_new_manager.js.jsx.erb @@ -106,7 +106,6 @@ render: function() { return (
-
<%= j raw t('peer_review.number_per_group') %>: diff --git a/app/views/students/_students_table.js.jsx.erb b/app/views/students/_students_table.js.jsx.erb index 490138a805..b3d9de6760 100644 --- a/app/views/students/_students_table.js.jsx.erb +++ b/app/views/students/_students_table.js.jsx.erb @@ -140,7 +140,6 @@ return (
- '} ref='table' /> - -
); } diff --git a/app/views/submissions/_repo_files_table.js.jsx.erb b/app/views/submissions/_repo_files_table.js.jsx.erb index 75a46fc5e5..1aa0abf150 100644 --- a/app/views/submissions/_repo_files_table.js.jsx.erb +++ b/app/views/submissions/_repo_files_table.js.jsx.erb @@ -92,8 +92,6 @@ return (
- -
diff --git a/app/views/submissions/_submissions_table.js.jsx.erb b/app/views/submissions/_submissions_table.js.jsx.erb index f76324c332..ba1d455f58 100644 --- a/app/views/submissions/_submissions_table.js.jsx.erb +++ b/app/views/submissions/_submissions_table.js.jsx.erb @@ -289,8 +289,6 @@ return (
- - -
'} selectable={false} From fb6b5b0c94997901bfa6bb2457e8d9c2c799e0c8 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sun, 27 Nov 2016 17:03:52 -0400 Subject: [PATCH 10/33] Adding standardized modals to assignments and criteria pages --- app/assets/stylesheets/criteria.scss | 6 +++ .../_annotation_download_modal.html.erb | 2 +- ...rb => _assignment_download_modal.html.erb} | 2 +- ....erb => _assignment_upload_modal.html.erb} | 0 app/views/criteria/_download_modal.html.erb | 20 +++++++ app/views/criteria/_upload_modal.html.erb | 34 ++++++++++++ app/views/criteria/index.html.erb | 52 ++----------------- config/locales/en.yml | 1 + 8 files changed, 67 insertions(+), 50 deletions(-) rename app/views/assignments/{_assignment_download_modal.erb => _assignment_download_modal.html.erb} (93%) rename app/views/assignments/{_assignment_upload_modal.erb => _assignment_upload_modal.html.erb} (100%) create mode 100644 app/views/criteria/_download_modal.html.erb create mode 100644 app/views/criteria/_upload_modal.html.erb diff --git a/app/assets/stylesheets/criteria.scss b/app/assets/stylesheets/criteria.scss index 12be74f81d..0e0406d4c6 100644 --- a/app/assets/stylesheets/criteria.scss +++ b/app/assets/stylesheets/criteria.scss @@ -111,3 +111,9 @@ margin-top: 1em; } } + +.scroll_content { + display: block; + height: 400px; + overflow-y: scroll; +} diff --git a/app/views/annotation_categories/_annotation_download_modal.html.erb b/app/views/annotation_categories/_annotation_download_modal.html.erb index 1fe675b949..1660dd5c67 100644 --- a/app/views/annotation_categories/_annotation_download_modal.html.erb +++ b/app/views/annotation_categories/_annotation_download_modal.html.erb @@ -1,5 +1,5 @@ <%= content_for :modal_id, 'download_dialog' %> -<%= content_for :modal_title, t('annotations.download.download_annotations') %> +<%= content_for :modal_title, t('download') %> <%= content_for :modal_content do %> - - - +<%# Modals %> +<%= render partial: 'download_modal', layout: 'layouts/modal_dialog' %> +<%= render partial: 'upload_modal', layout: 'layouts/modal_dialog' %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 12fd70eb24..b19a7493ab 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -175,6 +175,7 @@ en: no_required_files_read: "There are no required files for this assignment." required_files_by_student: "Add filename(s) that students would be required to submit:" add_required_file: "Add a Required File" + download: "Download Assignments" type: "Assignment type" overall_comment: "Overall Comment" upload_file_requirement: "The list of uploaded files does not match the required files for this assignment." From 0c954b8a9f606de99fed76737fb35e526b2bf1d1 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sun, 27 Nov 2016 17:07:25 -0400 Subject: [PATCH 11/33] Changing the text on download annotation from 'Download' to 'Download Annotations' --- .../annotation_categories/_annotation_download_modal.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/annotation_categories/_annotation_download_modal.html.erb b/app/views/annotation_categories/_annotation_download_modal.html.erb index 1660dd5c67..1fe675b949 100644 --- a/app/views/annotation_categories/_annotation_download_modal.html.erb +++ b/app/views/annotation_categories/_annotation_download_modal.html.erb @@ -1,5 +1,5 @@ <%= content_for :modal_id, 'download_dialog' %> -<%= content_for :modal_title, t('download') %> +<%= content_for :modal_title, t('annotations.download.download_annotations') %> <%= content_for :modal_content do %> <%= link_to '', - download_yml_assignment_criteria_path(@assignment), + { action: 'download_yml', + id: @criteria }, onclick: 'modal_download_yml.close();', class: 'make_div_clickable' if @current_user.admin? %> diff --git a/app/views/grade_entry_forms/_download_modal.html.erb b/app/views/grade_entry_forms/_download_modal.html.erb index 87e7e7ae3c..6753f8f710 100644 --- a/app/views/grade_entry_forms/_download_modal.html.erb +++ b/app/views/grade_entry_forms/_download_modal.html.erb @@ -8,8 +8,7 @@ <%= link_to '', { action: 'csv_download', - id: @grade_entry_form, - format: 'csv' }, + id: @grade_entry_form }, onclick: 'modal_download.close();', class: 'make_div_clickable' if @current_user.admin? %> diff --git a/app/views/graders/_download_modal.html.erb b/app/views/graders/_download_modal.html.erb new file mode 100644 index 0000000000..09c43b3c2a --- /dev/null +++ b/app/views/graders/_download_modal.html.erb @@ -0,0 +1,32 @@ +<%= content_for :modal_id, 'download_dialog' %> +<%= content_for :modal_title, t('groups.download.download_grader_maps') %> +<%= content_for :modal_content do %> + + + +
+ +
+<% end %> diff --git a/app/views/graders/_upload_modal.html.erb b/app/views/graders/_upload_modal.html.erb new file mode 100644 index 0000000000..b6f713778d --- /dev/null +++ b/app/views/graders/_upload_modal.html.erb @@ -0,0 +1,49 @@ +<%= content_for :modal_id, 'upload_dialog' %> +<%= content_for :modal_title, t("groups.upload.upload_grader_map") %> +<%= content_for :modal_content do %> + + + <%= javascript_include_tag 'upload_button_control.js', + id: 'upload_script', + upload_id: 'grader_mapping', + button_id: 'upload' %> + +

<%= raw(I18n.t("groups.upload.description_grader_map")) %>

+ + <%= form_tag({controller:"graders", + action: 'csv_upload_grader_groups_mapping',id: @assignment.id}, + {multipart: true}) do %> +

+ <%= t("encoding") %> + <%= select_tag(:encoding, options_for_select(@encodings)) %> +

+ <%= file_field_tag :grader_mapping, size: 2 %> + +
+ <%= submit_tag t(:upload), + data: { disable_with: t(:uploading_please_wait) }, + disabled: true, + id: 'upload' %> + +
+ <% end %> + + <% if @assignment.assign_graders_to_criteria %> +

<%= t("groups.upload.upload_grader_criteria_map") %>

+ <%= raw(t("groups.upload.description_grader_criteria_map")) %> + <%= form_tag({controller:"graders", + action: 'csv_upload_grader_criteria_mapping',id: @assignment.id}, + {multipart: true}) do %> +

+ <%= t("encoding") %> + <%= select_tag(:encoding, options_for_select(@encodings)) %> +

+ <%= file_field_tag :grader_criteria_mapping, size: 2 %> + +
+ <%= submit_tag t(:upload), data: { disable_with: t(:uploading_please_wait) } %> + <%= button_tag I18n.t('cancel'), onclick:'modal_upload.close();' %> +
+ <% end %> + <% end %> +<% end %> diff --git a/app/views/graders/index.html.erb b/app/views/graders/index.html.erb index f39178fc8a..79d968d5c4 100644 --- a/app/views/graders/index.html.erb +++ b/app/views/graders/index.html.erb @@ -1,5 +1,6 @@ <%= content_for :head do %> <%= javascript_include_tag 'Graders/index' %> + <%= stylesheet_link_tag('clickable') %> <%= render partial: 'graders_action_column', formats: [:'js.jsx'], handlers: [:erb] %> <%= render partial: 'graders_table', formats: [:'js.jsx'], handlers: [:erb] %> @@ -46,73 +47,9 @@
- - - - +<%# Modals %> +<%= render partial: 'download_modal', layout: 'layouts/modal_dialog' %> +<%= render partial: 'upload_modal', layout: 'layouts/modal_dialog' %> diff --git a/app/views/groups/_assignment_group_use_modal.html.erb b/app/views/groups/_assignment_group_use_modal.html.erb new file mode 100644 index 0000000000..ca9dd2ca5e --- /dev/null +++ b/app/views/groups/_assignment_group_use_modal.html.erb @@ -0,0 +1,16 @@ +<%= content_for :modal_id, 'assignment_group_use_dialog' %> +<%= content_for :modal_title, t('groups.reuse_groups') %> +<%= content_for :modal_content do %> + <%= form_tag use_another_assignment_groups_assignment_groups_path(@assignment) do %> + <%= label_tag :clone_assignment_id, t('groups.assignment_to_use') %> + <%= select_tag :clone_assignment_id, + options_for_select( + @clone_assignments.map {|a| [a.short_identifier, a.id]}) %> +
+ <%= submit_tag t(:submit), + data: { disable_with: t(:working), + confirm: t('groups.delete_groups_linked') } %> + <%= button_tag t(:cancel), onclick:'modalAssignmentGroupReUse.close()' %> +
+ <% end %> +<% end %> diff --git a/app/views/groups/_create_group_modal.html.erb b/app/views/groups/_create_group_modal.html.erb new file mode 100644 index 0000000000..77aec14a32 --- /dev/null +++ b/app/views/groups/_create_group_modal.html.erb @@ -0,0 +1,16 @@ +<%= content_for :modal_id, 'create_group_dialog' %> +<%= content_for :modal_title, t('groups.create_new_group') %> +<%= content_for :modal_content do %> + <%= form_tag new_assignment_group_path(@assignment), + method: :get, + remote: true do %> + <%= label_tag :new_group_name, t('groups.group_name') %> + <%= text_field_tag :new_group_name, + '', + maxlength: 30 %> +
+ <%= submit_tag t('groups.create_new_group') %> + <%= button_tag t(:cancel), onclick:'modalCreate.close()' %> +
+ <% end %> +<% end %> diff --git a/app/views/groups/_download_modal.html.erb b/app/views/groups/_download_modal.html.erb new file mode 100644 index 0000000000..6c38e96118 --- /dev/null +++ b/app/views/groups/_download_modal.html.erb @@ -0,0 +1,18 @@ +<%= content_for :modal_id, 'download_dialog' %> +<%= content_for :modal_title, t('groups.download.download_groups_file') %> +<%= content_for :modal_content do %> + +
+ +
+<% end %> diff --git a/app/views/groups/_rename_group_modal.html.erb b/app/views/groups/_rename_group_modal.html.erb new file mode 100644 index 0000000000..767ff085ef --- /dev/null +++ b/app/views/groups/_rename_group_modal.html.erb @@ -0,0 +1,12 @@ +<%= content_for :modal_id, 'rename_group_dialog' %> +<%= content_for :modal_title, t('groups.rename_group.title') %> +<%= content_for :modal_content do %> + <%= form_tag '', remote: true do %> + <%= label_tag :new_groupname, t('groups.rename_group.group_name') %> + <%= text_field_tag :new_groupname, '', maxlength: 30 %> +
+ <%= submit_tag t('groups.rename_group.title') %> + +
+ <% end %> +<% end %> diff --git a/app/views/groups/_upload_modal.html.erb b/app/views/groups/_upload_modal.html.erb new file mode 100644 index 0000000000..90b0b45953 --- /dev/null +++ b/app/views/groups/_upload_modal.html.erb @@ -0,0 +1,37 @@ +<%= content_for :modal_id, 'upload_dialog' %> +<%= content_for :modal_title, t('groups.upload.upload_groups_file') %> +<%= content_for :modal_content do %> + + + <%= javascript_include_tag 'upload_button_control.js', + id: 'upload_script', + upload_id: 'group_grouplist', + button_id: 'upload' %> + +

+ <%= t('groups.upload.description').html_safe %> + <% if !@assignment.groupings.nil? && @assignment.groupings.length > 0 %> +

+ <%= t('groups.upload.importing') %> +
+ <% end %> +

+ <%= form_for :group, html: {multipart: true}, + url: { controller:'groups', + action: 'csv_upload', + id: @assignment.id } do |f| %> +

+ <%= t('encoding') %> + <%= select_tag(:encoding, options_for_select(@encodings)) %> +

+ <%= f.file_field :grouplist, size: 2 %> + +
+ <%= submit_tag t(:upload), + data: { disable_with: t(:uploading_please_wait) }, + disabled: true, + id: 'upload' %> + +
+ <% end %> +<% end %> diff --git a/app/views/groups/index.html.erb b/app/views/groups/index.html.erb index 48a1457573..08327e7bba 100644 --- a/app/views/groups/index.html.erb +++ b/app/views/groups/index.html.erb @@ -1,5 +1,6 @@ <% content_for :head do %> <%= javascript_include_tag 'Groups/index' %> + <%= stylesheet_link_tag('clickable') %> <%= render partial: 'layouts/head' %> <%= render partial: 'groups_manager', formats: [:'js.jsx'], handlers: [:erb] %> @@ -42,11 +43,9 @@ onclick:'modalAssignmentGroupReUse.open();' %> <% end %> - <%= link_to t(:download), - { controller: 'groups', action: 'download_grouplist', - id: @assignment.id } %> + <%= link_to t('download'), '#', onclick:'modal_download.open();' %> - <%= link_to t('upload'), 'javascript:void(0);', onclick:'modal_upload.open();' %> + <%= link_to t('upload'), '#', onclick:'modal_upload.open();' %> <% end %>
@@ -79,86 +78,11 @@
- - - - - - - - +<%# Modals %> +<%= render partial: 'download_modal', layout: 'layouts/modal_dialog' %> +<%= render partial: 'upload_modal', layout: 'layouts/modal_dialog' %> +<%= render partial: 'assignment_group_use_modal', layout: 'layouts/modal_dialog' %> +<%= render partial: 'create_group_modal', layout: 'layouts/modal_dialog' %> +<%= render partial: 'rename_group_modal', layout: 'layouts/modal_dialog' %> - From cc4dacc722cd9e270ddd640efc4561a642e05da0 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Tue, 29 Nov 2016 13:28:49 -0400 Subject: [PATCH 17/33] Adding marks_graders and reformating 'cancel' button so it does not cause a page reload --- app/assets/javascripts/Groups/index.js | 9 +++ app/assets/javascripts/MarksGraders/index.js | 11 +++ app/views/criteria/_upload_modal.html.erb | 4 +- app/views/graders/_upload_modal.html.erb | 2 +- app/views/groups/index.html.erb | 13 ---- .../marks_graders/_download_modal.html.erb | 18 +++++ .../marks_graders/_upload_modal.html.erb | 34 ++++++++++ app/views/marks_graders/index.html.erb | 67 +++---------------- 8 files changed, 83 insertions(+), 75 deletions(-) create mode 100644 app/assets/javascripts/MarksGraders/index.js create mode 100644 app/views/marks_graders/_download_modal.html.erb create mode 100644 app/views/marks_graders/_upload_modal.html.erb diff --git a/app/assets/javascripts/Groups/index.js b/app/assets/javascripts/Groups/index.js index ceb7a7f1e9..143473c66f 100644 --- a/app/assets/javascripts/Groups/index.js +++ b/app/assets/javascripts/Groups/index.js @@ -1,3 +1,12 @@ +var modalCreate, + modalAddMember, + modalNotesGroup, + modalAssignmentGroupReUse = null; + +jQuery(document).ready(function() { + +}); + jQuery(document).ready(function () { window.modal_download = new ModalMarkus('#download_dialog'); window.modal_upload = new ModalMarkus('#upload_dialog'); diff --git a/app/assets/javascripts/MarksGraders/index.js b/app/assets/javascripts/MarksGraders/index.js new file mode 100644 index 0000000000..31cb12e7e2 --- /dev/null +++ b/app/assets/javascripts/MarksGraders/index.js @@ -0,0 +1,11 @@ +var modalCreate, + modalAssignmentGroupReUse, + modalRenameGroup, + modalAddMember, + modalNotesGroup, + modal_download, + modal_download = null; +jQuery(document).ready(function() { + modal_upload = new ModalMarkus('#upload_dialog'); + modal_download = new ModalMarkus('#download_dialog'); +}); \ No newline at end of file diff --git a/app/views/criteria/_upload_modal.html.erb b/app/views/criteria/_upload_modal.html.erb index 4654898d43..8565d9316d 100644 --- a/app/views/criteria/_upload_modal.html.erb +++ b/app/views/criteria/_upload_modal.html.erb @@ -26,9 +26,7 @@ data: { disable_with: t(:uploading_please_wait) }, id: 'upload_yml', disabled: true %> - + <% end %> <% end %> diff --git a/app/views/graders/_upload_modal.html.erb b/app/views/graders/_upload_modal.html.erb index b6f713778d..a803376a8b 100644 --- a/app/views/graders/_upload_modal.html.erb +++ b/app/views/graders/_upload_modal.html.erb @@ -42,7 +42,7 @@
<%= submit_tag t(:upload), data: { disable_with: t(:uploading_please_wait) } %> - <%= button_tag I18n.t('cancel'), onclick:'modal_upload.close();' %> +
<% end %> <% end %> diff --git a/app/views/groups/index.html.erb b/app/views/groups/index.html.erb index 08327e7bba..bb69b7fd98 100644 --- a/app/views/groups/index.html.erb +++ b/app/views/groups/index.html.erb @@ -4,19 +4,6 @@ <%= render partial: 'layouts/head' %> <%= render partial: 'groups_manager', formats: [:'js.jsx'], handlers: [:erb] %> - - <% end %> <% if @assignment.past_all_due_dates? %> diff --git a/app/views/marks_graders/_download_modal.html.erb b/app/views/marks_graders/_download_modal.html.erb new file mode 100644 index 0000000000..6e911977f2 --- /dev/null +++ b/app/views/marks_graders/_download_modal.html.erb @@ -0,0 +1,18 @@ +<%= content_for :modal_id, 'download_dialog' %> +<%= content_for :modal_title, t('groups.download.download_grader_maps') %> +<%= content_for :modal_content do %> + +
+ +
+<% end %> diff --git a/app/views/marks_graders/_upload_modal.html.erb b/app/views/marks_graders/_upload_modal.html.erb new file mode 100644 index 0000000000..77c25a43e8 --- /dev/null +++ b/app/views/marks_graders/_upload_modal.html.erb @@ -0,0 +1,34 @@ +<%= content_for :modal_id, 'upload_dialog' %> +<%= content_for :modal_title, t('marks_graders.upload.upload_grader_map') %> +<%= content_for :modal_content do %> + + + <%= javascript_include_tag 'upload_button_control.js', + id: 'upload_script', + upload_id: 'grader_mapping', + button_id: 'upload' %> + +

<%= raw(t('marks_graders.upload.description_grader_map')) %>

+ + <%= form_tag({ controller: 'marks_graders', + action: 'csv_upload_grader_groups_mapping', + id: @grade_entry_form.id }, + { multipart: true }) do %> +

+ <%= t('encoding') %> + <%= select_tag(:encoding, options_for_select(@encodings)) %> +

+ +

+ <%= file_field_tag :grader_mapping, size: 2 %> +

+ +
+ <%= submit_tag t(:upload), + data: { disable_with: t(:uploading_please_wait) }, + disabled: true, + id: 'upload' %> + +
+ <% end %> +<% end %> diff --git a/app/views/marks_graders/index.html.erb b/app/views/marks_graders/index.html.erb index 69988d2558..ef6c4d2fc9 100644 --- a/app/views/marks_graders/index.html.erb +++ b/app/views/marks_graders/index.html.erb @@ -4,31 +4,19 @@ <%= render partial: 'marks_graders_student_table', formats: [:'js.jsx'], handlers: [:erb] %> <%= render partial: 'marks_graders_manager', formats: [:'js.jsx'], handlers: [:erb] %> - + <%= javascript_include_tag 'MarksGraders/index' %> + <%= stylesheet_link_tag('clickable') %> <% end %> <% content_for :title, t('graders.manage_graders') %> <% @heading_buttons = [ { link_text: t('download'), - link_path: 'javascript:void(0);', - html_options: { onclick: 'modalDownload.open();' } }, + link_path: '#', + html_options: { onclick: 'modal_download.open();' } }, { link_text: t('upload'), - link_path: 'javascript:void(0);', - html_options: { onclick: 'modalUpload.open();' } } + link_path: '#', + html_options: { onclick: 'modal_upload.open();' } } ] %>
@@ -53,43 +41,6 @@
- - - - +<%# Modals %> +<%= render partial: 'download_modal', layout: 'layouts/modal_dialog' %> +<%= render partial: 'upload_modal', layout: 'layouts/modal_dialog' %> From 3e8cb423e831f43c2b412e4ccb987925db1d8e8c Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Tue, 29 Nov 2016 16:37:51 -0400 Subject: [PATCH 18/33] Adding peer_review and results standardization --- app/assets/javascripts/Results/index.js | 1 + .../peer_reviews/_download_modal.html.erb | 18 +++++++ app/views/peer_reviews/_upload_modal.html.erb | 29 +++++++++++ app/views/peer_reviews/index.html.erb | 48 ++----------------- app/views/results/_download_modal.html.erb | 17 +++++++ app/views/results/edit.html.erb | 4 +- app/views/results/view_marks.html.erb | 28 ++--------- 7 files changed, 76 insertions(+), 69 deletions(-) create mode 100644 app/views/peer_reviews/_download_modal.html.erb create mode 100644 app/views/peer_reviews/_upload_modal.html.erb create mode 100644 app/views/results/_download_modal.html.erb diff --git a/app/assets/javascripts/Results/index.js b/app/assets/javascripts/Results/index.js index 138e761fd1..b524be780e 100644 --- a/app/assets/javascripts/Results/index.js +++ b/app/assets/javascripts/Results/index.js @@ -1,3 +1,4 @@ jQuery(document).ready(function () { window.modal_download_files = new ModalMarkus('#download_files_dialog'); + window.modal_download = new ModalMarkus('#download_dialog'); }); \ No newline at end of file diff --git a/app/views/peer_reviews/_download_modal.html.erb b/app/views/peer_reviews/_download_modal.html.erb new file mode 100644 index 0000000000..312873c826 --- /dev/null +++ b/app/views/peer_reviews/_download_modal.html.erb @@ -0,0 +1,18 @@ +<%= content_for :modal_id, 'download_dialog' %> +<%= content_for :modal_title, t('peer_review.download.assigned_reviewers_header') %> +<%= content_for :modal_content do %> + +
+ +
+<% end %> diff --git a/app/views/peer_reviews/_upload_modal.html.erb b/app/views/peer_reviews/_upload_modal.html.erb new file mode 100644 index 0000000000..a7f3fa286a --- /dev/null +++ b/app/views/peer_reviews/_upload_modal.html.erb @@ -0,0 +1,29 @@ +<%= content_for :modal_id, 'upload_dialog' %> +<%= content_for :modal_title, t('peer_review.upload.header') %> +<%= content_for :modal_content do %> + + + <%= javascript_include_tag 'upload_button_control.js', + id: 'upload_script', + upload_id: 'peer_review_mapping', + button_id: 'upload' %> + + <%= raw(t("peer_review.upload.description")) %> + <%= form_tag({ controller: "peer_reviews", + action: 'csv_upload_handler', id: @assignment.id}, + { multipart: true }) do %> +

+ <%= t("encoding") %> + <%= select_tag(:encoding, options_for_select(@encodings)) %> +

+ <%= file_field_tag :peer_review_mapping, size: 2 %> + +
+ <%= submit_tag t(:upload), + data: { disable_with: t(:uploading_please_wait) }, + disabled: true, + id: 'upload' %> + +
+ <% end %> +<% end %> diff --git a/app/views/peer_reviews/index.html.erb b/app/views/peer_reviews/index.html.erb index cdbc332752..29cd83b4c0 100644 --- a/app/views/peer_reviews/index.html.erb +++ b/app/views/peer_reviews/index.html.erb @@ -1,5 +1,6 @@ <%= content_for :head do %> <%= javascript_include_tag 'PeerReviews/index' %> + <%= stylesheet_link_tag('clickable') %> <%= render partial: 'peer_reviews_new_manager', formats: [:'js.jsx'], handlers: [:erb] %> <% end %> @@ -38,47 +39,6 @@
- - - - +<%# Modals %> +<%= render partial: 'download_modal', layout: 'layouts/modal_dialog' %> +<%= render partial: 'upload_modal', layout: 'layouts/modal_dialog' %> diff --git a/app/views/results/_download_modal.html.erb b/app/views/results/_download_modal.html.erb new file mode 100644 index 0000000000..bb595ec2e8 --- /dev/null +++ b/app/views/results/_download_modal.html.erb @@ -0,0 +1,17 @@ +<%= content_for :modal_id, 'download_dialog' %> +<%= content_for :modal_title, 'Download Files' %> +<%= content_for :modal_content do %> + <%= render partial: 'results/common/download_file_selector', + locals: { files: @files, + can_download: true } %> + <% if can_show_feedback_files_tab?(@submission) %> +
+ <%= render partial: 'results/common/feedback_file_selector', + locals: { feedback_files: @feedback_files, + submission_id: @submission.id } %> +
+ <% end %> +
+ +
+<% end %> diff --git a/app/views/results/edit.html.erb b/app/views/results/edit.html.erb index aaa9980cb6..540502c3dc 100644 --- a/app/views/results/edit.html.erb +++ b/app/views/results/edit.html.erb @@ -37,7 +37,7 @@ jQuery(document).ready(function() { window.modalNotesGroup = new ModalMarkus('#notes_dialog'); - window.modalDownloadFiles = new ModalMarkus('#download_files_dialog'); + window.modal_download = new ModalMarkus('#download_files_dialog'); // Set up the 'working' notices jQuery('#working').ajaxStart(function() { @@ -160,7 +160,7 @@ <% unless @current_user.is_reviewer_for?(@assignment.pr_assignment, @result) %> <%= link_to t(:download), 'javascript:void(0);', - onclick:'modalDownloadFiles.open();' %> + onclick:'modal_download.open();' %> <% end %>
diff --git a/app/views/results/view_marks.html.erb b/app/views/results/view_marks.html.erb index 05a3b8c2f6..7c285876e6 100644 --- a/app/views/results/view_marks.html.erb +++ b/app/views/results/view_marks.html.erb @@ -2,7 +2,8 @@ <%= stylesheet_link_tag('common/SyntaxHighlighter') %> <%= stylesheet_link_tag('grader') %> <%= stylesheet_link_tag('pdfjs/viewer') %> - + <%= stylesheet_link_tag('clickable') %> + <%= javascript_include_tag 'Results/index' %> <%= javascript_include_tag 'panes.js' %> <%= javascript_include_tag 'pdfjs' %> <%= javascript_tag do -%> @@ -42,27 +43,8 @@ <%= render partial: 'results/student/enable_remark_request_buttons', formats: [:js] %> - - - - +<%# Modals %> +<%= render partial: 'download_modal', layout: 'layouts/modal_dialog' %>

@@ -83,7 +65,7 @@
<%= link_to t(:download), 'javascript:void(0);', - onclick:'modalDownloadFiles.open();' %> + onclick:'modal_download.open();' %>

From 12960f2c29a26ae70142ca13a6daa5b02c9c5235 Mon Sep 17 00:00:00 2001 From: reid Date: Tue, 29 Nov 2016 18:47:45 -0500 Subject: [PATCH 19/33] This should fix one problem --- lib/repo/git_repository.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/repo/git_repository.rb b/lib/repo/git_repository.rb index b3bf971956..1f3cba29f5 100644 --- a/lib/repo/git_repository.rb +++ b/lib/repo/git_repository.rb @@ -1152,6 +1152,16 @@ def changed_files_at_path(path) end end + def changed_filenames_at_path(path) + files = files_at_path(path) + + files.select do |_name, file| + file.changed + end + return files.keys + end + + def last_modified_date() return self.timestamp end From d2f960d51c88d2cb6732fe2df7a9bb9207628abf Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Wed, 30 Nov 2016 22:31:16 -0400 Subject: [PATCH 20/33] Adding students and tags views --- app/assets/javascripts/Students/index.js | 3 + app/views/students/_download_modal.html.erb | 31 +++++ app/views/students/_upload_modal.html.erb | 33 +++++ app/views/students/index.html.erb | 67 +--------- app/views/tags/_boot.js.erb | 3 +- app/views/tags/_create_new_modal.html.erb | 38 ++++++ app/views/tags/_download_modal.html.erb | 31 +++++ app/views/tags/_upload_modal.html.erb | 74 +++++++++++ app/views/tags/index.html.erb | 134 +------------------- app/views/tas/index.html.erb | 2 +- 10 files changed, 223 insertions(+), 193 deletions(-) create mode 100644 app/views/students/_download_modal.html.erb create mode 100644 app/views/students/_upload_modal.html.erb create mode 100644 app/views/tags/_create_new_modal.html.erb create mode 100644 app/views/tags/_download_modal.html.erb create mode 100644 app/views/tags/_upload_modal.html.erb diff --git a/app/assets/javascripts/Students/index.js b/app/assets/javascripts/Students/index.js index d5b68f1962..15ace7c705 100644 --- a/app/assets/javascripts/Students/index.js +++ b/app/assets/javascripts/Students/index.js @@ -1,4 +1,7 @@ +var modalNotesGroup = null; + jQuery(document).ready(function () { window.modal_download = new ModalMarkus('#download_dialog'); window.modal_upload = new ModalMarkus('#upload_dialog'); + modalNotesGroup = new ModalMarkus('#notes_dialog'); }); diff --git a/app/views/students/_download_modal.html.erb b/app/views/students/_download_modal.html.erb new file mode 100644 index 0000000000..0ea6d5755f --- /dev/null +++ b/app/views/students/_download_modal.html.erb @@ -0,0 +1,31 @@ +<%= content_for :modal_id, 'download_dialog' %> +<%= content_for :modal_title, t('download') %> +<%= content_for :modal_content do %> + + +
+ +
+<% end %> diff --git a/app/views/students/_upload_modal.html.erb b/app/views/students/_upload_modal.html.erb new file mode 100644 index 0000000000..8c0399e141 --- /dev/null +++ b/app/views/students/_upload_modal.html.erb @@ -0,0 +1,33 @@ +<%= content_for :modal_id, 'upload_dialog' %> +<%= content_for :modal_title, t('students.upload.upload_a_class_list') %> +<%= content_for :modal_content do %> + + + <%= javascript_include_tag 'upload_button_control.js', + id: 'upload_script', + upload_id: 'userlist', + button_id: 'upload' %> + +

<%= t('students.upload.select_csv_file').html_safe %>

+

<%= t('students.upload.student_same_number') %>

+ + <%= form_tag upload_student_list_students_path(), + { multipart: true } %> +
+ + +
+ +
+ <%= t('encoding') %> + <%= select_tag(:encoding, options_for_select(@encodings)) %> +
+ +
+ <%= submit_tag t(:upload), + data: { disable_with: t(:uploading_please_wait) }, + id: 'upload', + disabled: true %> + <%= button_to t(:close), '#', onclick: 'modal_upload.close(); return false;' %> +
+<% end %> diff --git a/app/views/students/index.html.erb b/app/views/students/index.html.erb index 8c6585f83e..d7282f1d36 100644 --- a/app/views/students/index.html.erb +++ b/app/views/students/index.html.erb @@ -1,15 +1,8 @@ <% content_for :head do %> <%= javascript_include_tag 'effects.js', 'Students/index' %> + <%= stylesheet_link_tag('clickable') %> <%= render partial: 'students_table', formats: [:'js.jsx'], handlers: [:erb] %> - - <% end %>
@@ -56,59 +49,7 @@
- - - - - +<%# Modals %> +<%= render partial: 'download_modal', layout: 'layouts/modal_dialog' %> +<%= render partial: 'upload_modal', layout: 'layouts/modal_dialog' %> diff --git a/app/views/tags/_boot.js.erb b/app/views/tags/_boot.js.erb index c3c2c87558..546ee92634 100644 --- a/app/views/tags/_boot.js.erb +++ b/app/views/tags/_boot.js.erb @@ -2,8 +2,7 @@ jQuery(document).ready(function() { window.modal_create_new = new ModalMarkus('#create_new_dialog'); window.modal_download = new ModalMarkus('#download_dialog'); - window.modal_upload_csv = new ModalMarkus('#upload_csv_dialog'); - window.modal_upload_yml = new ModalMarkus('#upload_yml_dialog'); + window.modal_upload = new ModalMarkus('#upload_dialog'); window.modal_edit = new ModalMarkus('#edit_tags_dialog'); jQuery('.sortable ul').sortable({ diff --git a/app/views/tags/_create_new_modal.html.erb b/app/views/tags/_create_new_modal.html.erb new file mode 100644 index 0000000000..0be27cfd49 --- /dev/null +++ b/app/views/tags/_create_new_modal.html.erb @@ -0,0 +1,38 @@ +<%= content_for :modal_id, 'create_new_dialog' %> +<%= content_for :modal_title, t('tags.create.create_new') %> +<%= content_for :modal_content do %> + + <%= javascript_include_tag 'Tags/text_updater.js', + id: 'text_script' %> + <%= t('tags.create.tag_prompt') %> + <%= form_for :create_new, + url: assignment_tags_path(@assignment), + html: { multipart: true, size: 1 } do |f| %> +
+

+ <%= f.text_field :name, + placeholder: t('tags.create.name_prompt'), + maxlength: 30 %> +

+
+
+

<%= t('tags.create.tag_description') %>

+

0/120

+

+ <%= f.text_area :description, + id: 'description', + cols: 30, + rows: 3, + maxlength: 120, + placeholder: t('tags.create.descript_prompt') %> +

+
+
+ <%= f.submit t('tags.create.button_text'), + name: 'submit', + data: { disable_with: t('working') }, + class: 'button' %> + +
+ <% end %> +<% end %> diff --git a/app/views/tags/_download_modal.html.erb b/app/views/tags/_download_modal.html.erb new file mode 100644 index 0000000000..96ddaa7ab0 --- /dev/null +++ b/app/views/tags/_download_modal.html.erb @@ -0,0 +1,31 @@ +<%= content_for :modal_id, 'download_dialog' %> +<%= content_for :modal_title, t('tags.download.download_title') %> +<%= content_for :modal_content do %> + + +
+ +
+<% end %> diff --git a/app/views/tags/_upload_modal.html.erb b/app/views/tags/_upload_modal.html.erb new file mode 100644 index 0000000000..861eb8f68f --- /dev/null +++ b/app/views/tags/_upload_modal.html.erb @@ -0,0 +1,74 @@ +<%= content_for :modal_id, 'upload_dialog' %> +<%= content_for :modal_title, t('annotations.upload.upload_annotations') %> +<%= content_for :modal_content do %> + + + <%= javascript_include_tag 'switch_content_control.js' %> + <%= javascript_tag do %> + LIB.init(["#upload_csv", "#upload_yml"]); + <% end %> + + <%= label_tag :csv, "CSV" %> + <%= radio_button_tag :upload_file_type, "csv", checked: true %> + <%= radio_button_tag :upload_file_type, "yml" %> + <%= label_tag :yml, "YML" %> + +
+ + <%= javascript_include_tag 'upload_button_control.js', + id: 'upload_csv_script', + upload_id: 'upload_csv', + button_id: 'button_upload_csv' %> +

<%= t('tags.upload.upload_csv_prompt') %>

+ <%= form_for :upload_csv, + url: csv_upload_assignment_tags_path(@assignment), + html: { multipart: true, size: 1 } do |f| %> +
+

+ <%= t('tags.upload.upload_csv_html') %> + <%= t('csv_special_characters_html') %> +
+
+ <%= t('encoding') %> + <%= select_tag(:encoding, options_for_select(@encodings)) %> +
+ +
+ <%= submit_tag t(:upload), + data: { disable_with: t(:uploading_please_wait) }, + disabled: true, + id: 'button_upload_csv' %> + +
+ <% end %> +
+
+ + <%= javascript_include_tag 'upload_button_control.js', + id: 'upload_yml_script', + upload_id: 'upload_yml', + button_id: 'button_upload_yml' %> +

<%= t('tags.upload.upload_yml_prompt') %>

+ <%= form_for :upload_yml, + url: yml_upload_assignment_tags_path(@assignment), + html: { multipart: true, size: 1 } do |f| %> +
+

+ <%= t('tags.upload.upload_yml_html') %> +
+ +
+ <%= t('encoding') %> + <%= select_tag(:encoding, options_for_select(@encodings)) %> +
+ +
+ <%= submit_tag t(:upload), + data: { disable_with: t(:uploading_please_wait) }, + disabled: true, + id: 'button_upload_yml' %> + +
+ <% end %> +
+<% end %> diff --git a/app/views/tags/index.html.erb b/app/views/tags/index.html.erb index 89f8424a92..6e79b2cc20 100644 --- a/app/views/tags/index.html.erb +++ b/app/views/tags/index.html.erb @@ -5,6 +5,7 @@ <%= render partial: 'tags_table', formats: [:'js.jsx'], handlers: [:erb] %> + <%= stylesheet_link_tag('clickable') %> <% end %> @@ -20,12 +21,9 @@ { link_text: t('tags.download.download'), link_path: '#', html_options: { onclick: 'modal_download.open()' } }, - { link_text: t('tags.upload.upload_csv'), + { link_text: "Upload", link_path: '#', - html_options: { onclick: 'modal_upload_csv.open()' } }, - { link_text: t('tags.upload.upload_yml'), - link_path: '#', - html_options: { onclick: 'modal_upload_yml.open()' } } + html_options: { onclick: 'modal_upload.open()' } } ] %> <% content_for :wrap_left_content do %> @@ -33,127 +31,9 @@
<% end %> - - - - - +<%# Modals %> +<%= render partial: 'create_new_modal', layout: 'layouts/modal_dialog' %> +<%= render partial: 'download_modal', layout: 'layouts/modal_dialog' %> +<%= render partial: 'upload_modal', layout: 'layouts/modal_dialog' %> diff --git a/app/views/tas/index.html.erb b/app/views/tas/index.html.erb index 25afa5a9b5..64f26174ea 100644 --- a/app/views/tas/index.html.erb +++ b/app/views/tas/index.html.erb @@ -50,7 +50,7 @@ <% end %> - +<%# Modals %>
', - success: function(data) { - this.props.refresh(); - }.bind(this) }); }, <% else %> diff --git a/app/views/students/_students_table.js.jsx.erb b/app/views/students/_students_table.js.jsx.erb index b3d9de6760..2f1dba96b3 100644 --- a/app/views/students/_students_table.js.jsx.erb +++ b/app/views/students/_students_table.js.jsx.erb @@ -93,26 +93,14 @@ success: function(data) { this.setState({ students: data, - error: null }); }.bind(this), - error: function(xhr, status, text) { - var error = text; - this.setState({ - error: error - }); - }, complete: function() { document.getElementById('working').style.display = 'none'; } }); }, - onError: function(error) { - this.setState({ - error: error - }); - }, render: function() { // Do student-specific table stuff here. var students_data = this.state.students.map(function(student) { diff --git a/app/views/submissions/_react_file_manager_boot_table.js.jsx.erb b/app/views/submissions/_react_file_manager_boot_table.js.jsx.erb index 7c74bc328f..1fb6e98838 100644 --- a/app/views/submissions/_react_file_manager_boot_table.js.jsx.erb +++ b/app/views/submissions/_react_file_manager_boot_table.js.jsx.erb @@ -36,7 +36,6 @@ getInitialState: function() { return { - error: null, files: [], selected_files: [], data_files: [], @@ -66,13 +65,8 @@ success: function(data) { this.setState({ files: data, - errors: null }); }.bind(this), - error: function(xhr, status, text) { - var error = text + ':' + xhr.responseText; - this.setState({ error: error }); - }.bind(this), // Close working indicator. complete: function() { document.getElementById('working').style.display = 'none'; @@ -80,10 +74,6 @@ }); }, - onError: function(error) { - this.setState({ error: error }); - }, - resetTable: function() { this.refs.table.clearCheckboxes(); this.refresh(); @@ -110,7 +100,6 @@ <% end %> @@ -173,10 +162,6 @@ success: function(data) { this.props.resetTable(); }.bind(this), - error: function(xhr, status, text) { - var error = text + ': ' + xhr.responseText; - this.props.onError(error); - }.bind(this) }); }, diff --git a/app/views/submissions/_repo_files_table.js.jsx.erb b/app/views/submissions/_repo_files_table.js.jsx.erb index 1aa0abf150..28257a4567 100644 --- a/app/views/submissions/_repo_files_table.js.jsx.erb +++ b/app/views/submissions/_repo_files_table.js.jsx.erb @@ -34,7 +34,6 @@ getInitialState: function() { return { - error: null, files: [] }; }, @@ -59,16 +58,9 @@ dataType: 'json', success: function(data) { this.setState({ - error: null, files: data }); }.bind(this), - error: function(xhr, status, text) { - var error = text + ': ' + xhr.responseText; - this.setState({ - error: error - }); - }.bind(this), // Close working indicator. complete: function() { document.getElementById('working').style.display = 'none'; @@ -76,10 +68,6 @@ }); }, - onError: function(error) { - this.setState({ error: error }); - }, - render: function() { var files_data = this.state.files.map(function(file) { var f = {}; diff --git a/app/views/summaries/_summaries_table.js.jsx.erb b/app/views/summaries/_summaries_table.js.jsx.erb index 5892cf5c6b..36ddcbe8d3 100644 --- a/app/views/summaries/_summaries_table.js.jsx.erb +++ b/app/views/summaries/_summaries_table.js.jsx.erb @@ -122,12 +122,6 @@ summaries: data }); }.bind(this), - error: function(xhr, status, text) { - var error = text + ': ' + xhr.responseText; - this.setState({ - error: error - }); - }.bind(this), complete: function() { document.getElementById('working').style.display = 'none'; } diff --git a/app/views/tags/_tags_table.js.jsx.erb b/app/views/tags/_tags_table.js.jsx.erb index 1cd38218ef..d822ffa378 100644 --- a/app/views/tags/_tags_table.js.jsx.erb +++ b/app/views/tags/_tags_table.js.jsx.erb @@ -94,12 +94,6 @@ error: null }); }.bind(this), - error: function(xhr, status, text) { - var error = text + ': ' + xhr.responseText; - this.setState({ - error: error - }); - }, complete: function() { document.getElementById('working').style.display = 'none'; } From 4fb3b4949ecc8246be29c8295a67f0cfe170ac4b Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Tue, 6 Dec 2016 09:42:29 -0400 Subject: [PATCH 30/33] Fixed: replaced tabs with spaces using RubyMine Edit->Convert Indent->To Spaces --- .../_annotation_download_modal.html.erb | 56 +++++++++---------- app/views/groups/_download_modal.html.erb | 2 +- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/app/views/annotation_categories/_annotation_download_modal.html.erb b/app/views/annotation_categories/_annotation_download_modal.html.erb index f43c014d7a..0b72d9018b 100644 --- a/app/views/annotation_categories/_annotation_download_modal.html.erb +++ b/app/views/annotation_categories/_annotation_download_modal.html.erb @@ -1,32 +1,32 @@ <%= content_for :modal_id, 'download_dialog' %> <%= content_for :modal_title, t('annotations.download.download_annotations') %> <%= content_for :modal_content do %> - - - -
- -
+ + + +
+ +
<% end %> diff --git a/app/views/groups/_download_modal.html.erb b/app/views/groups/_download_modal.html.erb index 2656e7eb10..3501c24618 100644 --- a/app/views/groups/_download_modal.html.erb +++ b/app/views/groups/_download_modal.html.erb @@ -2,7 +2,7 @@ <%= content_for :modal_title, t('groups.download.download_groups_file') %> <%= content_for :modal_content do %> -
'} @@ -280,9 +276,6 @@ method: 'POST', url: 'update_grade_entry_students', data: dataLoad, -// success: function(data) { -// this.props.refresh(); -// }.bind(this), }); }, unreleaseMarks: function() { @@ -296,9 +289,6 @@ method: 'POST', url: 'update_grade_entry_students', data: dataLoad, -// success: function(data) { -// this.props.refresh(); -// }.bind(this), }); }, render: function() { diff --git a/app/views/marking_schemes/_marking_schemes_table.js.jsx.erb b/app/views/marking_schemes/_marking_schemes_table.js.jsx.erb index 2eb76f8ceb..a11d53ba81 100644 --- a/app/views/marking_schemes/_marking_schemes_table.js.jsx.erb +++ b/app/views/marking_schemes/_marking_schemes_table.js.jsx.erb @@ -67,12 +67,6 @@ markingSchemes: data, }); }.bind(this), - error: function(xhr, status, text) { - var error = text + ': ' + xhr.responseText; - this.setState({ - error: error - }); - }.bind(this), complete: function() { document.getElementById('working').style.display = 'none'; } diff --git a/app/views/marks_graders/_marks_grader_table.js.jsx.erb b/app/views/marks_graders/_marks_grader_table.js.jsx.erb index 3f75fe811a..880a4804fa 100644 --- a/app/views/marks_graders/_marks_grader_table.js.jsx.erb +++ b/app/views/marks_graders/_marks_grader_table.js.jsx.erb @@ -4,7 +4,6 @@ var GradersTable = React.createClass({ getInitialState: function() { return { - error: null, graders: [], selected_graders: [] }; @@ -46,26 +45,14 @@ success: function(data) { this.setState({ graders: data, - error: null }); }.bind(this), - error: function(xhr, status, text) { - var error = text + ': ' + xhr.responseText; - this.setState({ - error: error - }); - }, complete: function() { document.getElementById('working').style.display = 'none'; } }); }, - onError: function(error) { - this.setState({ - error: error - }); - }, render: function() { var columns = [ { diff --git a/app/views/marks_graders/_marks_graders_actions.js.jsx.erb b/app/views/marks_graders/_marks_graders_actions.js.jsx.erb index 93c63b5fb8..4a950d68bd 100644 --- a/app/views/marks_graders/_marks_graders_actions.js.jsx.erb +++ b/app/views/marks_graders/_marks_graders_actions.js.jsx.erb @@ -28,13 +28,8 @@ this.props.updateSelectedGraders([]); this.props.updateSelectedStudents([]); this.props.updateSelectedGradersForStudents([]); - this.props.setError(null); this.props.refresh(); }.bind(this), - error: function(xhr, status, text) { - var error = text + ': ' + xhr.responseText; - this.props.setError(error); - }.bind(this) }); }, render: function() { diff --git a/app/views/marks_graders/_marks_graders_manager.js.jsx.erb b/app/views/marks_graders/_marks_graders_manager.js.jsx.erb index 933668a253..a57f56460b 100644 --- a/app/views/marks_graders/_marks_graders_manager.js.jsx.erb +++ b/app/views/marks_graders/_marks_graders_manager.js.jsx.erb @@ -6,7 +6,6 @@ var MarksGradersManager = React.createClass({ getInitialState: function() { return { - error: null, current_table: 'groups_table', students: [], graders: [], @@ -48,15 +47,8 @@ graders_for_students: [].concat.apply([], data[0].map(function(student){ return student.graders; })), - error: null }); }.bind(this), - error: function(xhr, status, text) { - var error = text + ': ' + xhr.responseText; - this.setState({ - error: error - }); - }, complete: function() { document.getElementById('working').style.display = 'none'; } @@ -70,15 +62,8 @@ success: function(data) { this.setState({ graders: data, - error: null }); }.bind(this), - error: function(xhr, status, text) { - var error = text + ': ' + xhr.responseText; - this.setState({ - error: error - }); - }, complete: function() { document.getElementById('working').style.display = 'none'; } diff --git a/app/views/marks_graders/_marks_graders_student_table.js.jsx.erb b/app/views/marks_graders/_marks_graders_student_table.js.jsx.erb index 95504d5925..6c5f080011 100644 --- a/app/views/marks_graders/_marks_graders_student_table.js.jsx.erb +++ b/app/views/marks_graders/_marks_graders_student_table.js.jsx.erb @@ -51,7 +51,6 @@ }, getInitialState: function() { return { - error: null, students: [], graders_for_students: [], selected_students: [], @@ -78,26 +77,14 @@ return student.graders; })), sections: data[1], - error: null }); }.bind(this), - error: function(xhr, status, text) { - var error = text + ': ' + xhr.responseText; - this.setState({ - error: error - }); - }, complete: function() { document.getElementById('working').style.display = 'none'; } }); }, - onError: function(error) { - this.setState({ - error: error - }); - }, render: function() { var section_filters = this.state.sections.map(function(section) { var filter = { diff --git a/app/views/peer_reviews/_peer_reviews_new_manager.js.jsx.erb b/app/views/peer_reviews/_peer_reviews_new_manager.js.jsx.erb index 61f1514214..a4a17750af 100644 --- a/app/views/peer_reviews/_peer_reviews_new_manager.js.jsx.erb +++ b/app/views/peer_reviews/_peer_reviews_new_manager.js.jsx.erb @@ -16,7 +16,6 @@ revieweeToReviewers: {}, reviewerToNumReviews: {}, groupIdToName: {}, - error: null }; }, @@ -36,9 +35,6 @@ this.setState({selectedRevieweeGroups: revieweeGroups}); }, - setErrorMessage: function(msg) { - this.setState({error: msg}); - }, updatedSelectedReviewersInRevieweesTable: function(reviewerGroupId, revieweeGroupId, isChecked) { // If the reviewee is not in the dictionary, add a dictionary for the reviewee id. @@ -120,8 +116,7 @@ selectedReviewerGroups={this.state.selectedReviewerGroups} selectedRevieweeGroups={this.state.selectedRevieweeGroups} selectedReviewerInRevieweeGroups={this.state.selectedReviewerInRevieweeGroups} - clearSelectedFields={this.clearSelectedFields} - setErrorMessage={this.setErrorMessage} /> + clearSelectedFields={this.clearSelectedFields} /> @@ -291,8 +271,6 @@
Date: Tue, 6 Dec 2016 23:38:59 -0700 Subject: [PATCH 32/33] delete duplicate render --- app/views/annotation_categories/_annotation_text.html.erb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/views/annotation_categories/_annotation_text.html.erb b/app/views/annotation_categories/_annotation_text.html.erb index ffa3674bd4..aa0a83efca 100644 --- a/app/views/annotation_categories/_annotation_text.html.erb +++ b/app/views/annotation_categories/_annotation_text.html.erb @@ -1,6 +1,5 @@
  • - <%= render 'shared/flash_message' %>

    <%= markdown(annotation_text.content) %>

    From bbfb2277b5d94a2aeb927b96794a98a214f486de Mon Sep 17 00:00:00 2001 From: David Liu Date: Wed, 7 Dec 2016 14:05:57 -0500 Subject: [PATCH 33/33] Some final tidying up for #2821. Converts some render text errors to flash messages. --- app/controllers/graders_controller.rb | 33 +++++++++++-------- app/controllers/groups_controller.rb | 3 +- app/controllers/marks_graders_controller.rb | 15 ++++----- app/controllers/peer_reviews_controller.rb | 18 ++++++---- app/controllers/students_controller.rb | 3 +- app/controllers/submissions_controller.rb | 19 ++++++++--- .../_peer_submissions_table.js.jsx.erb | 8 ----- .../_react_grades_table.js.jsx.erb | 6 ++++ app/views/graders/_graders_manager.js.jsx.erb | 5 --- app/views/groups/_groups_manager.js.jsx.erb | 3 +- .../_marks_graders_manager.js.jsx.erb | 8 ++--- .../_peer_reviews_new_manager.js.jsx.erb | 10 ++++-- .../shared/_global_action_warning.js.erb | 7 ---- app/views/students/_students_table.js.jsx.erb | 9 +---- .../submissions/_submissions_table.js.jsx.erb | 18 +++++++--- spec/controllers/criteria_controller_spec.rb | 4 +-- .../submissions_controller_spec.rb | 10 +++--- 17 files changed, 94 insertions(+), 85 deletions(-) delete mode 100644 app/views/shared/_global_action_warning.js.erb diff --git a/app/controllers/graders_controller.rb b/app/controllers/graders_controller.rb index dc195029af..c3655324ae 100644 --- a/app/controllers/graders_controller.rb +++ b/app/controllers/graders_controller.rb @@ -167,8 +167,8 @@ def global_actions case params[:global_actions] when 'assign' if grader_ids.blank? - render text: I18n.t('assignment.group.select_a_grader'), - status: 400 + flash_now(:error, I18n.t('assignment.group.select_a_grader')) + head 400 return end if params[:skip_empty_submissions] == 'true' @@ -181,22 +181,24 @@ def global_actions end if found_empty_submission assign_all_graders(filtered_grouping_ids, grader_ids) - render text: I18n.t('assignment.group.group_submission_no_files'), - status: 200 + flash_now(:info, I18n.t('assignment.group.group_submission_no_files')) + head 200 else assign_all_graders(grouping_ids, grader_ids) head :ok end when 'unassign' if params[:grader_memberships].blank? - render text: I18n.t('assignment.group.select_a_grader'), status: 400 + flash_now(:error, I18n.t('assignment.group.select_a_grader')) + head 400 else unassign_graders(params[:grader_memberships]) head :ok end when 'random_assign' if grader_ids.blank? - render text: I18n.t('assignment.group.select_a_grader'), status: 400 + flash_now(:error, I18n.t('assignment.group.select_a_grader')) + head 400 else if params[:skip_empty_submissions] == 'true' filtered_grouping_ids = filter_empty_submissions(grouping_ids) @@ -206,8 +208,8 @@ def global_actions end if found_empty_submission randomly_assign_graders(filtered_grouping_ids, grader_ids) - render text: I18n.t('assignment.group.group_submission_no_files'), - status: 200 + flash_now(:info, I18n.t('assignment.group.group_submission_no_files')) + head 200 else randomly_assign_graders(grouping_ids, grader_ids) head :ok @@ -218,16 +220,19 @@ def global_actions case params[:global_actions] when 'assign' if grader_ids.blank? - render text: I18n.t('assignment.group.select_a_grader'), status: 400 + flash_now(:error, I18n.t('assignment.group.select_a_grader')) + head 400 elsif criterion_ids_types.blank? - render text: I18n.t('assignment.group.select_a_criterion'), status: 400 + flash_now(:error, I18n.t('assignment.group.select_a_criterion')) + head 400 else assign_all_graders_to_criteria(criterion_ids_types, grader_ids) head :ok end when 'unassign' if params[:criterion_associations].blank? - render text: I18n.t('assignment.group.select_a_grader'), status: 400 + flash_now(:error, I18n.t('assignment.group.select_a_grader')) + head 400 else # Gets criterion associations from params then # gets their criterion ids so we can update the @@ -248,9 +253,11 @@ def global_actions end when 'random_assign' if grader_ids.blank? - render text: I18n.t('assignment.group.select_a_grader'), status: 400 + flash_now(:error, I18n.t('assignment.group.select_a_grader')) + head 400 elsif criterion_ids_types.blank? - render text: I18n.t('assignment.group.select_a_criterion'), status: 400 + flash_now(:error, I18n.t('assignment.group.select_a_criterion')) + head 400 else randomly_assign_graders_to_criteria(criterion_ids_types, grader_ids) head :ok diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index 5b1e228f4f..290e183603 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -254,7 +254,8 @@ def global_actions end head :ok rescue => e - render text: e.message, status: 400 + flash_now(:error, e.message) + head 400 end end diff --git a/app/controllers/marks_graders_controller.rb b/app/controllers/marks_graders_controller.rb index 104b34ef9f..110d7e6dc5 100644 --- a/app/controllers/marks_graders_controller.rb +++ b/app/controllers/marks_graders_controller.rb @@ -90,9 +90,8 @@ def global_actions if params[:students].nil? || params[:students].size == 0 # If there is a global action than there should be a student selected if params[:global_actions] - @global_action_warning = t('assignment.group.select_a_student') - render partial: 'shared/global_action_warning', formats: [:js], - handlers: [:erb] + flash_now(:error, t('assignment.group.select_a_student')) + head 400 return end end @@ -100,9 +99,8 @@ def global_actions case params[:global_actions] when 'assign' if params[:graders].nil? || params[:graders].size == 0 - @global_action_warning = t('assignment.group.select_a_grader') - render partial: 'shared/global_action_warning', formats: [:js], - handlers: [:erb] + flash_now(:error, t('assignment.group.select_a_grader')) + head 400 return end assign_all_graders(student_ids, grader_ids, @grade_entry_form) @@ -112,9 +110,8 @@ def global_actions return when 'random_assign' if params[:graders].nil? or params[:graders].size == 0 - @global_action_warning = t('assignment.group.select_a_grader') - render partial: 'shared/global_action_warning', formats: [:js], - handlers: [:erb] + flash_now(:error, t('assignment.group.select_a_grader')) + head 400 return end randomly_assign_graders(student_ids, grader_ids, @grade_entry_form) diff --git a/app/controllers/peer_reviews_controller.rb b/app/controllers/peer_reviews_controller.rb index d7e42b5bff..2e901f616d 100644 --- a/app/controllers/peer_reviews_controller.rb +++ b/app/controllers/peer_reviews_controller.rb @@ -74,10 +74,12 @@ def assign_groups if action_string == 'assign' || action_string == 'random_assign' if selected_reviewer_group_ids.empty? - render text: t('peer_review.empty_list_reviewers'), status: 400 + flash_now(:error, t('peer_review.empty_list_reviewers')) + head 400 return elsif selected_reviewee_group_ids.empty? - render text: t('peer_review.empty_list_reviewees'), status: 400 + flash_now(:error, t('peer_review.empty_list_reviewees')) + head 400 return end end @@ -88,7 +90,8 @@ def assign_groups perform_random_assignment(@assignment, num_groups_for_reviewers, selected_reviewer_group_ids, selected_reviewee_group_ids) rescue UnableToRandomlyAssignGroupException - render text: t('peer_review.random_assign_failure'), status: 400 + flash_now(:error, t('peer_review.random_assign_failure')) + head 400 return end when 'assign' @@ -97,16 +100,19 @@ def assign_groups begin assign(reviewer_groups, reviewee_groups) rescue ActiveRecord::RecordInvalid - render text: t('peer_review.problem'), status: 400 + flash_now(:error, t('peer_review.problem')) + head 400 return rescue SubmissionsNotCollectedException - render text: t('peer_review.submission_nil_failure'), status: 400 + flash_now(:error, t('peer_review.submission_nil_failure')) + head 400 return end when 'unassign' unassign(selected_reviewee_group_ids, reviewers_to_remove_from_reviewees_map) else - render text: t('peer_review.problem'), status: 400 + flash_now(:error, t('peer_review.problem')) + head 400 return end diff --git a/app/controllers/students_controller.rb b/app/controllers/students_controller.rb index de9d4b9b7e..28456937dd 100644 --- a/app/controllers/students_controller.rb +++ b/app/controllers/students_controller.rb @@ -66,7 +66,8 @@ def bulk_modify end head :ok rescue RuntimeError => e - render text: e.message, status: 500 + flash_now(:error, e.message) + head 500 end end diff --git a/app/controllers/submissions_controller.rb b/app/controllers/submissions_controller.rb index 400e19a4cb..20f97f894b 100644 --- a/app/controllers/submissions_controller.rb +++ b/app/controllers/submissions_controller.rb @@ -213,7 +213,8 @@ def uncollect_all_submissions def collect_submissions if !params.has_key?(:groupings) || params[:groupings].empty? - render text: t('results.must_select_a_group_to_collect'), status: 400 + flash_now(:error, t('results.must_select_a_group_to_collect')) + head 400 return end assignment = Assignment.includes(:groupings).find(params[:assignment_id]) @@ -222,6 +223,8 @@ def collect_submissions section = grouping.inviter.present? ? grouping.inviter.section : nil assignment.submission_rule.can_collect_now?(section) end + success = '' + error = '' if partition[0].count > 0 @current_job = SubmissionsJob.perform_later(partition[0]) success = I18n.t('collect_submissions.collection_job_started_for_groups', @@ -231,12 +234,16 @@ def collect_submissions error = I18n.t('collect_submissions.could_not_collect_some', assignment_identifier: assignment.short_identifier) end + flash_now(:success, success) unless success.empty? + flash_now(:error, error) unless error.empty? + render json: { success: success, error: error } end def run_tests if !params.has_key?(:groupings) || params[:groupings].empty? - render text: t('results.must_select_a_group'), status: 400 + flash_now(:error, t('results.must_select_a_group')) + head 400 return end assignment = Assignment.includes(:groupings).find(params[:assignment_id]) @@ -259,7 +266,7 @@ def run_tests end end if partition[1].count > 0 - error = I18n.t('automated_tests.need_submission') + flash_now(:error, I18n.t('automated_tests.need_submission')) end render json: { success: success, error: error } end @@ -728,7 +735,8 @@ def downloads_subdirectories(subdirectory, subdirectory_path, zip_file, # Release or unrelease submissions def update_submissions if !params.has_key?(:groupings) || params[:groupings].empty? - render text: t('results.must_select_a_group'), status: 400 + flash_now(:error, t('results.must_select_a_group')) + head 400 return end assignment = Assignment.find(params[:assignment_id]) @@ -761,7 +769,8 @@ def update_submissions head :ok rescue => e - render text: e.message, status: 400 + flash_now(:error, e.message) + head 400 end end diff --git a/app/views/assignments/_peer_submissions_table.js.jsx.erb b/app/views/assignments/_peer_submissions_table.js.jsx.erb index 80e8af8f19..d8b535b0b7 100644 --- a/app/views/assignments/_peer_submissions_table.js.jsx.erb +++ b/app/views/assignments/_peer_submissions_table.js.jsx.erb @@ -24,8 +24,6 @@ }, getInitialState: function() { return { - error: [], - success: [], submissions: [], }; }, @@ -40,12 +38,6 @@ { method: 'GET', dataType: 'json', success: function(data) { - this.setState({error: []}); - jQuery.each(data, function (submission) { - if (submission.error !== undefined && submission.error !== '') { - this.setState({error: this.state.error.concat([submission.error])}); - } - }.bind(this)); this.setState({ submissions: data, }); diff --git a/app/views/grade_entry_forms/_react_grades_table.js.jsx.erb b/app/views/grade_entry_forms/_react_grades_table.js.jsx.erb index d4baf24f1f..b4cda17fbb 100644 --- a/app/views/grade_entry_forms/_react_grades_table.js.jsx.erb +++ b/app/views/grade_entry_forms/_react_grades_table.js.jsx.erb @@ -276,6 +276,9 @@ method: 'POST', url: 'update_grade_entry_students', data: dataLoad, + success: function(data) { + this.props.refresh(); + }.bind(this) }); }, unreleaseMarks: function() { @@ -289,6 +292,9 @@ method: 'POST', url: 'update_grade_entry_students', data: dataLoad, + success: function(data) { + this.props.refresh(); + }.bind(this) }); }, render: function() { diff --git a/app/views/graders/_graders_manager.js.jsx.erb b/app/views/graders/_graders_manager.js.jsx.erb index 909c4fdfdf..2bfada3848 100644 --- a/app/views/graders/_graders_manager.js.jsx.erb +++ b/app/views/graders/_graders_manager.js.jsx.erb @@ -10,7 +10,6 @@ return { assign_to_criteria: false, skip_empty_submissions: false, - error: null, current_table: 'groups_table', groups_and_criteria: {groups: [], criteria: []}, graders: [], @@ -40,9 +39,6 @@ updateSelectedGradersInCriteria: function(graders) { this.setState({selected_graders_in_criteria: graders}); }, - setError: function(error_msg) { - this.setState({error: error_msg}); - }, criteriaCheckboxClicked: function(event) { var dataLoad = {value: event.currentTarget.checked}; jQuery.ajax({ @@ -116,7 +112,6 @@ updateSelectedGradersInGroups={this.updateSelectedGradersInGroups} updateSelectedGradersInCriteria={this.updateSelectedGradersInCriteria} skip_empty_submissions={this.state.skip_empty_submissions} - setError={this.setError} />); to_render.push(); + updateSelectedGradersForStudents={this.updateSelectedGradersForStudents} />); to_render.push( - document.getElementById('global_action_warning_msg').innerHTML = - '<%= @global_action_warning %>'; - document.getElementById('global_action_warning').style.display = ''; -<% else %> - document.getElementById('global_action_warning').style.display = 'none'; -<% end %> diff --git a/app/views/students/_students_table.js.jsx.erb b/app/views/students/_students_table.js.jsx.erb index 2f1dba96b3..c019056179 100644 --- a/app/views/students/_students_table.js.jsx.erb +++ b/app/views/students/_students_table.js.jsx.erb @@ -71,7 +71,6 @@ }, getInitialState: function() { return { - error: null, students: [], selected_students: [] }; @@ -130,8 +129,7 @@
    + refresh={this.refresh} />
  • '} selectable={true} @@ -274,12 +272,7 @@ url: 'students/bulk_modify', data: dataLoad, success: function(data) { - this.props.errorThrown(null); this.props.refresh(); - }.bind(this), - error: function(xhr, status, text) { - var error = text + ': ' + xhr.responseText; - this.props.errorThrown(error); }.bind(this) }); } diff --git a/app/views/submissions/_submissions_table.js.jsx.erb b/app/views/submissions/_submissions_table.js.jsx.erb index 2973c14216..2f6ef5439b 100644 --- a/app/views/submissions/_submissions_table.js.jsx.erb +++ b/app/views/submissions/_submissions_table.js.jsx.erb @@ -304,7 +304,7 @@ data: dataLoad, success: function(data) { this.props.refresh(); - }.bind(this), + }.bind(this) }); }, unreleasePeerReviews: function() { @@ -319,7 +319,7 @@ data: dataLoad, success: function(data) { this.props.refresh(); - }.bind(this), + }.bind(this) }); }, releaseMarks: function() { @@ -334,7 +334,7 @@ data: dataLoad, success: function(data) { this.props.refresh(); - }.bind(this), + }.bind(this) }); }, unreleaseMarks: function() { @@ -349,7 +349,7 @@ data: dataLoad, success: function(data) { this.props.refresh(); - }.bind(this), + }.bind(this) }); }, uncollectAllSubmissions: function() { @@ -371,6 +371,11 @@ method: 'POST', url: 'collect_submissions', data: dataLoad, + success: function(data) { + if (data.success) { + window.setInterval(this.props.refresh, 30000); + } + }.bind(this) }); }, runTests: function () { @@ -378,6 +383,11 @@ method: 'POST', url: 'run_tests', data: {groupings: this.props.selected_submissions}, + success: function(data) { + if (data.success) { + window.setInterval(this.props.refresh, 30000); + } + }.bind(this) }) }, render: function() { diff --git a/spec/controllers/criteria_controller_spec.rb b/spec/controllers/criteria_controller_spec.rb index 704f8bfc79..a60f118e01 100644 --- a/spec/controllers/criteria_controller_spec.rb +++ b/spec/controllers/criteria_controller_spec.rb @@ -299,7 +299,7 @@ @errors = ActiveModel::Errors.new(self) @errors['message'] = 'error message' expect_any_instance_of(FlexibleCriterion) - .to receive(:save).and_return(false) + .to receive(:update).and_return(false) expect_any_instance_of(FlexibleCriterion) .to receive(:errors).and_return(@errors) post_as @admin, @@ -731,7 +731,7 @@ @errors = ActiveModel::Errors.new(self) @errors['message'] = 'error message' expect_any_instance_of(RubricCriterion) - .to receive(:save).and_return(false) + .to receive(:update).and_return(false) expect_any_instance_of(RubricCriterion) .to receive(:errors).and_return(@errors) post_as @admin, diff --git a/spec/controllers/submissions_controller_spec.rb b/spec/controllers/submissions_controller_spec.rb index 126ae46a4a..89d63a58ed 100644 --- a/spec/controllers/submissions_controller_spec.rb +++ b/spec/controllers/submissions_controller_spec.rb @@ -411,8 +411,6 @@ assignment_id: 1, groupings: [] - expect(response.body).to eql( - I18n.t('results.must_select_a_group_to_collect')) is_expected.to respond_with(:bad_request) end @@ -440,7 +438,7 @@ expect(response_body['error']).to eql( I18n.t('collect_submissions.could_not_collect_some', assignment_identifier: 'a1')) - expect(response_body['success']).to be_nil + expect(response_body['success']).to be_empty is_expected.to respond_with(:ok) end @@ -461,7 +459,7 @@ expect(response_body['success']).to eql( I18n.t('collect_submissions.collection_job_started_for_groups', assignment_identifier: 'a1')) - expect(response_body['error']).to be_nil + expect(response_body['error']).to be_empty is_expected.to respond_with(:ok) end end @@ -484,7 +482,7 @@ expect(response_body['error']).to eql( I18n.t('collect_submissions.could_not_collect_some', assignment_identifier: 'a1')) - expect(response_body['success']).to be_nil + expect(response_body['success']).to be_empty is_expected.to respond_with(:ok) end @@ -505,7 +503,7 @@ expect(response_body['success']).to eql( I18n.t('collect_submissions.collection_job_started_for_groups', assignment_identifier: 'a1')) - expect(response_body['error']).to be_nil + expect(response_body['error']).to be_empty is_expected.to respond_with(:ok) end end