From fc0625df8b6465e2c1137b0932870f4275dea7c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sen=C3=A9n=20Rodero=20Rodr=C3=ADguez?= Date: Fri, 10 Jul 2020 16:33:03 +0200 Subject: [PATCH] Destroy Annotator app before storing page into brwoser cache If we do not destroy annotator app before storing the page at browser cache we will unnecesarily initialize annotations twice (or more) duplicating Annotator HTML markup and causing unexpected errors. Without this commit you will find an error when restoring a page with annotator, you can click on any annotation and you will see the annotation comments are being loaded twice. IMO this is an idempotency issue within Annotator JS library. --- app/assets/javascripts/application.js | 1 + .../javascripts/legislation_annotatable.js | 5 +++++ spec/system/legislation/draft_versions_spec.rb | 17 +++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 512d89bfd..d9298762b 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -172,6 +172,7 @@ var destroy_non_idempotent_modules = function() { App.Datepicker.destroy(); App.HTMLEditor.destroy(); + App.LegislationAnnotatable.destroy(); }; $(document).on("turbolinks:load", initialize_modules); diff --git a/app/assets/javascripts/legislation_annotatable.js b/app/assets/javascripts/legislation_annotatable.js index 9b1125722..9ab0f6d6e 100644 --- a/app/assets/javascripts/legislation_annotatable.js +++ b/app/assets/javascripts/legislation_annotatable.js @@ -226,6 +226,11 @@ }); }); }); + }, + destroy: function() { + if ($(".legislation-annotatable").length > 0) { + App.LegislationAnnotatable.app.destroy(); + } } }; }).call(this); diff --git a/spec/system/legislation/draft_versions_spec.rb b/spec/system/legislation/draft_versions_spec.rb index c3b3bb687..f2914b7d1 100644 --- a/spec/system/legislation/draft_versions_spec.rb +++ b/spec/system/legislation/draft_versions_spec.rb @@ -237,6 +237,23 @@ describe "Legislation Draft Versions" do expect(page).to have_content "Comment can't be blank" end + + scenario "When page is restored from browser cache do not duplicate annotation handlers" do + create(:legislation_annotation, draft_version: draft_version, text: "my annotation") + + visit legislation_process_draft_version_path(draft_version.process, draft_version) + + expect(page).to have_css(".annotator-hl", count: 1) + + click_link "Help" + + expect(page).to have_content "CONSUL is a platform for citizen participation" + + go_back + + expect(page).to have_content "A collaborative legislation process" + expect(page).to have_css(".annotator-hl", count: 1) + end end context "Merged annotations", :js do