diff --git a/app/controllers/checklists_controller.rb b/app/controllers/checklists_controller.rb index 6243166..8cdc0ac 100644 --- a/app/controllers/checklists_controller.rb +++ b/app/controllers/checklists_controller.rb @@ -57,6 +57,7 @@ class ChecklistsController < ApplicationController # Only allow a list of trusted parameters through. def checklist_params params.require(:checklist).permit(:code, :name, :description, :description_html, + check_ids: [], checklist_entries_attributes: %i[id check_id position _destroy]) end end diff --git a/app/javascript/controllers/unsaved_changes_controller.js b/app/javascript/controllers/unsaved_changes_controller.js index 66228a4..e3ae242 100644 --- a/app/javascript/controllers/unsaved_changes_controller.js +++ b/app/javascript/controllers/unsaved_changes_controller.js @@ -11,22 +11,30 @@ export default class extends Controller { window.addEventListener("beforeunload", (event) => this.leavingPage(event)) document.addEventListener('turbo:before-visit', (e) => this.leavingPage(e)) - this.element.addEventListener("submit", (_) => this.initialState = this.formState()) - } + this.element.addEventListener("submit", (_) => this.initialState = null) + } formState() { return JSON.stringify(Array.from(new FormData(this.element).entries()) - .filter(x => x[1] != "") - .sort(x => x[0])) + .filter(x => x[1] != "") + .sort(x => x[0])) } - + leavingPage(event) { - if(this.initialState == this.formState()) { + console.log(event.type) + if (this.initialState == null || this.initialState == this.formState()) { return } - - if (!window.confirm(LEAVE_ALERT)) { - event.preventDefault() + if (event.type == "turbo:before-visit") { + if (!window.confirm(LEAVE_ALERT)) { + event.preventDefault() + } else { + this.initialState = null + } + } else { + this.initialState = null + event.returnValue = LEAVE_ALERT; + return event.returnValue; } } } \ No newline at end of file diff --git a/app/models/page.rb b/app/models/page.rb index 3686935..aed1df3 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -1,6 +1,6 @@ class Page < ApplicationRecord belongs_to :report - has_many :elements + has_many :elements, dependent: :destroy has_rich_text :comment end diff --git a/app/views/checklists/_form.html.erb b/app/views/checklists/_form.html.erb_ similarity index 55% rename from app/views/checklists/_form.html.erb rename to app/views/checklists/_form.html.erb_ index 59cc236..bcce199 100644 --- a/app/views/checklists/_form.html.erb +++ b/app/views/checklists/_form.html.erb_ @@ -1,4 +1,4 @@ -<%= bootstrap_form_with(model: checklist) do |form| %> +<%= bootstrap_form_with(model: checklist, data: { controller: "unsaved-changes" }) do |form| %> <%= form.text_field :name %> <%= form.rich_text_area :description_html, rows: 12 %> <%= form.submit %> diff --git a/app/views/checklists/_form.html.slim b/app/views/checklists/_form.html.slim new file mode 100644 index 0000000..59cc33c --- /dev/null +++ b/app/views/checklists/_form.html.slim @@ -0,0 +1,5 @@ += bootstrap_form_with(model: checklist, data: { controller: "unsaved-changes" }) do |form| + = form.text_field :name + = form.rich_text_area :description_html, rows: 12 + = form.collection_check_boxes :check_ids, Check.all.order(:external_number), :id, :display_label + = form.submit diff --git a/app/views/links/_form.html.erb b/app/views/links/_form.html.erb index f303568..d8b9cc6 100644 --- a/app/views/links/_form.html.erb +++ b/app/views/links/_form.html.erb @@ -1,4 +1,4 @@ -<%= bootstrap_form_with(model: link) do |form| %> +<%= bootstrap_form_with(model: link, data: { controller: "unsaved-changes" }) do |form| %>
<%= form.text_field :url, placeholder: "https://wikipedia.org", data: { "check-link-target": "input" } %> diff --git a/app/views/success_criteria/_form.html.erb b/app/views/success_criteria/_form.html.erb index 5077f72..09bfb50 100644 --- a/app/views/success_criteria/_form.html.erb +++ b/app/views/success_criteria/_form.html.erb @@ -4,7 +4,7 @@
- <%= bootstrap_form_with(model: success_criterion.persisted? ? success_criterion : [:element, success_criterion]) do |form| %> + <%= bootstrap_form_with(model: success_criterion.persisted? ? success_criterion : [:element, success_criterion], data: { controller: "unsaved-changes" }) do |form| %>