From 02f9e99428f94cbe2168224c6fd24c7faddba846 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Sat, 27 Oct 2018 16:18:29 +0300 Subject: [PATCH] Support IE11 Previously `let of` loop was used, which isn't supported in IE11. It seems it just fails when there is some JS syntax error (doesn't matter where exactly) and dataType: 'json' has no effect. Closes #982 --- app/assets/javascripts/admin-manifest.coffee | 4 ++++ .../javascripts/polyfills/node_list_for_each.js | 11 +++++++++++ app/assets/javascripts/registrant-manifest.coffee | 4 ++++ app/assets/javascripts/registrar-manifest.coffee | 4 ++++ app/assets/javascripts/spell_check.js | 10 ++++++---- app/assets/javascripts/text_field_trimmer.js | 10 ++++++---- 6 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 app/assets/javascripts/polyfills/node_list_for_each.js diff --git a/app/assets/javascripts/admin-manifest.coffee b/app/assets/javascripts/admin-manifest.coffee index dd99c1932..883070a7a 100644 --- a/app/assets/javascripts/admin-manifest.coffee +++ b/app/assets/javascripts/admin-manifest.coffee @@ -8,6 +8,10 @@ #= require jquery-ui/datepicker #= require select2 #= require jquery.doubleScroll + +# Load order does matter +#= require polyfills/node_list_for_each + #= require datepicker #= require spell_check #= require admin/application diff --git a/app/assets/javascripts/polyfills/node_list_for_each.js b/app/assets/javascripts/polyfills/node_list_for_each.js new file mode 100644 index 000000000..0b5a1aabe --- /dev/null +++ b/app/assets/javascripts/polyfills/node_list_for_each.js @@ -0,0 +1,11 @@ +// Needed mainly for IE11 +// https://developer.mozilla.org/en-US/docs/Web/API/NodeList/forEach + +if (window.NodeList && !NodeList.prototype.forEach) { + NodeList.prototype.forEach = function (callback, thisArg) { + thisArg = thisArg || window; + for (var i = 0; i < this.length; i++) { + callback.call(thisArg, this[i], i, this); + } + }; +} diff --git a/app/assets/javascripts/registrant-manifest.coffee b/app/assets/javascripts/registrant-manifest.coffee index 84f95374a..febc82e2b 100644 --- a/app/assets/javascripts/registrant-manifest.coffee +++ b/app/assets/javascripts/registrant-manifest.coffee @@ -4,5 +4,9 @@ #= require jquery-ui/datepicker #= require select2 #= require datepicker + +# Load order does matter +#= require polyfills/node_list_for_each + #= require spell_check #= require shared/general diff --git a/app/assets/javascripts/registrar-manifest.coffee b/app/assets/javascripts/registrar-manifest.coffee index f83d9f76e..fd0ec3ca0 100644 --- a/app/assets/javascripts/registrar-manifest.coffee +++ b/app/assets/javascripts/registrar-manifest.coffee @@ -6,6 +6,10 @@ #= require jquery-ui/datepicker #= require select2 #= require datepicker + +# Load order does matter +#= require polyfills/node_list_for_each + #= require spell_check #= require popover #= require text_field_trimmer diff --git a/app/assets/javascripts/spell_check.js b/app/assets/javascripts/spell_check.js index 7c04ab071..9645f3487 100644 --- a/app/assets/javascripts/spell_check.js +++ b/app/assets/javascripts/spell_check.js @@ -1,11 +1,13 @@ -(function() { +(function () { function disableSpellCheck() { let selector = 'input[type=text], textarea'; let textFields = document.querySelectorAll(selector); - for (let field of textFields) { - field.spellcheck = false; - } + textFields.forEach( + function (field, _currentIndex, _listObj) { + field.spellcheck = false; + } + ); } disableSpellCheck(); diff --git a/app/assets/javascripts/text_field_trimmer.js b/app/assets/javascripts/text_field_trimmer.js index 71cbc5295..4293be934 100644 --- a/app/assets/javascripts/text_field_trimmer.js +++ b/app/assets/javascripts/text_field_trimmer.js @@ -2,13 +2,15 @@ function trimTextFields() { let selector = 'input[type=text], input[type=search], input[type=email], textarea'; let textFields = document.querySelectorAll(selector); - let listener = function () { + let changeListener = function () { this.value = this.value.trim(); }; - for (let field of textFields) { - field.addEventListener('change', listener); - } + textFields.forEach( + function (field, currentIndex, listObj) { + field.addEventListener('change', changeListener); + } + ); } trimTextFields();