diff --git a/theme/boost/amd/build/form-display-errors.min.js b/theme/boost/amd/build/form-display-errors.min.js
index cd80f4746f2..e169aac1e44 100644
--- a/theme/boost/amd/build/form-display-errors.min.js
+++ b/theme/boost/amd/build/form-display-errors.min.js
@@ -1,2 +1,2 @@
-define ("theme_boost/form-display-errors",["jquery","core/event"],function(a,b){return{enhance:function enhance(c){var d=document.getElementById(c);if(!d){return}a(d).on(b.Events.FORM_FIELD_VALIDATION,function(b,c){b.preventDefault();var e=a(d).closest(".form-group"),f=e.find(".form-control-feedback");if("TEXTAREA"==a(d).prop("tagName")&&e.find("[contenteditable]")){d=e.find("[contenteditable]")}if(""!==c){e.addClass("has-danger");e.data("client-validation-error",!0);a(d).addClass("is-invalid");a(d).attr("aria-describedby",f.attr("id"));a(d).attr("aria-invalid",!0);f.attr("tabindex",0);f.html(c);if(!f.is(":visible")){f.show();f.focus()}}else{if(!0===e.data("client-validation-error")){e.removeClass("has-danger");e.data("client-validation-error",!1);a(d).removeClass("is-invalid");a(d).removeAttr("aria-describedby");a(d).attr("aria-invalid",!1);f.hide()}}});var e=d.closest("form");if(!("boostFormErrorsEnhanced"in e.dataset)){e.addEventListener("submit",function(){var b=a(".form-control-feedback:visible");if(b.length){b[0].focus()}});e.dataset.boostFormErrorsEnhanced=1}}}});
+define ("theme_boost/form-display-errors",["jquery","core/event"],function(a,b){return{enhance:function enhance(c){var d=document.getElementById(c);if(!d){return}a(d).on(b.Events.FORM_FIELD_VALIDATION,function(b,c){b.preventDefault();var e=a(d).closest(".form-group"),f=e.find(".form-control-feedback");if("TEXTAREA"==a(d).prop("tagName")&&e.find("[contenteditable]")){d=e.find("[contenteditable]")}if(""!==c){e.addClass("has-danger");e.data("client-validation-error",!0);a(d).addClass("is-invalid");a(d).attr("aria-describedby",f.attr("id"));a(d).attr("aria-invalid",!0);f.attr("tabindex",0);f.html(c);if(!f.is(":visible")){f.show();f.focus()}}else{if(!0===e.data("client-validation-error")){e.removeClass("has-danger");e.data("client-validation-error",!1);a(d).removeClass("is-invalid");a(d).removeAttr("aria-describedby");a(d).attr("aria-invalid",!1);f.hide()}}});var e=d.closest("form");if(e&&!("boostFormErrorsEnhanced"in e.dataset)){e.addEventListener("submit",function(){var b=a(".form-control-feedback:visible");if(b.length){b[0].focus()}});e.dataset.boostFormErrorsEnhanced=1}}}});
//# sourceMappingURL=form-display-errors.min.js.map
diff --git a/theme/boost/amd/build/form-display-errors.min.js.map b/theme/boost/amd/build/form-display-errors.min.js.map
index 4ff6e98e6ec..bfeb1b8b856 100644
--- a/theme/boost/amd/build/form-display-errors.min.js.map
+++ b/theme/boost/amd/build/form-display-errors.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/form-display-errors.js"],"names":["define","$","Event","enhance","elementid","element","document","getElementById","on","Events","FORM_FIELD_VALIDATION","event","msg","preventDefault","parent","closest","feedback","find","prop","addClass","data","attr","html","is","show","focus","removeClass","removeAttr","hide","form","dataset","addEventListener","visibleError","length","boostFormErrorsEnhanced"],"mappings":"AAuBAA,OAAM,mCAAC,CAAC,QAAD,CAAW,YAAX,CAAD,CAA2B,SAASC,CAAT,CAAYC,CAAZ,CAAmB,CAChD,MAAO,CACHC,OAAO,CAAE,iBAASC,CAAT,CAAoB,CACzB,GAAIC,CAAAA,CAAO,CAAGC,QAAQ,CAACC,cAAT,CAAwBH,CAAxB,CAAd,CACA,GAAI,CAACC,CAAL,CAAc,CAGV,MACH,CAEDJ,CAAC,CAACI,CAAD,CAAD,CAAWG,EAAX,CAAcN,CAAK,CAACO,MAAN,CAAaC,qBAA3B,CAAkD,SAASC,CAAT,CAAgBC,CAAhB,CAAqB,CACnED,CAAK,CAACE,cAAN,GADmE,GAE/DC,CAAAA,CAAM,CAAGb,CAAC,CAACI,CAAD,CAAD,CAAWU,OAAX,CAAmB,aAAnB,CAFsD,CAG/DC,CAAQ,CAAGF,CAAM,CAACG,IAAP,CAAY,wBAAZ,CAHoD,CAMnE,GAAmC,UAA9B,EAAAhB,CAAC,CAACI,CAAD,CAAD,CAAWa,IAAX,CAAgB,SAAhB,CAAD,EAA8CJ,CAAM,CAACG,IAAP,CAAY,mBAAZ,CAAlD,CAAoF,CAChFZ,CAAO,CAAGS,CAAM,CAACG,IAAP,CAAY,mBAAZ,CACb,CACD,GAAY,EAAR,GAAAL,CAAJ,CAAgB,CACZE,CAAM,CAACK,QAAP,CAAgB,YAAhB,EACAL,CAAM,CAACM,IAAP,CAAY,yBAAZ,KACAnB,CAAC,CAACI,CAAD,CAAD,CAAWc,QAAX,CAAoB,YAApB,EACAlB,CAAC,CAACI,CAAD,CAAD,CAAWgB,IAAX,CAAgB,kBAAhB,CAAoCL,CAAQ,CAACK,IAAT,CAAc,IAAd,CAApC,EACApB,CAAC,CAACI,CAAD,CAAD,CAAWgB,IAAX,CAAgB,cAAhB,KACAL,CAAQ,CAACK,IAAT,CAAc,UAAd,CAA0B,CAA1B,EACAL,CAAQ,CAACM,IAAT,CAAcV,CAAd,EAIA,GAAI,CAACI,CAAQ,CAACO,EAAT,CAAY,UAAZ,CAAL,CAA8B,CAC1BP,CAAQ,CAACQ,IAAT,GACAR,CAAQ,CAACS,KAAT,EACH,CAEJ,CAhBD,IAgBO,CACH,GAAI,KAAAX,CAAM,CAACM,IAAP,CAAY,yBAAZ,CAAJ,CAAqD,CACjDN,CAAM,CAACY,WAAP,CAAmB,YAAnB,EACAZ,CAAM,CAACM,IAAP,CAAY,yBAAZ,KACAnB,CAAC,CAACI,CAAD,CAAD,CAAWqB,WAAX,CAAuB,YAAvB,EACAzB,CAAC,CAACI,CAAD,CAAD,CAAWsB,UAAX,CAAsB,kBAAtB,EACA1B,CAAC,CAACI,CAAD,CAAD,CAAWgB,IAAX,CAAgB,cAAhB,KACAL,CAAQ,CAACY,IAAT,EACH,CACJ,CACJ,CAnCD,EAqCA,GAAIC,CAAAA,CAAI,CAAGxB,CAAO,CAACU,OAAR,CAAgB,MAAhB,CAAX,CACA,GAAI,EAAE,2BAA6Bc,CAAAA,CAAI,CAACC,OAApC,CAAJ,CAAkD,CAC9CD,CAAI,CAACE,gBAAL,CAAsB,QAAtB,CAAgC,UAAW,CACvC,GAAIC,CAAAA,CAAY,CAAG/B,CAAC,CAAC,gCAAD,CAApB,CACA,GAAI+B,CAAY,CAACC,MAAjB,CAAyB,CACrBD,CAAY,CAAC,CAAD,CAAZ,CAAgBP,KAAhB,EACH,CACJ,CALD,EAMAI,CAAI,CAACC,OAAL,CAAaI,uBAAb,CAAuC,CAC1C,CACJ,CAxDE,CA0DV,CA3DK,CAAN","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Custom form error event handler to manipulate the bootstrap markup and show\n * nicely styled errors in an mform.\n *\n * @module theme_boost/form-display-errors\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/event'], function($, Event) {\n return {\n enhance: function(elementid) {\n var element = document.getElementById(elementid);\n if (!element) {\n // Some elements (e.g. static) don't have a form field.\n // Hence there is no validation. So, no setup required here.\n return;\n }\n\n $(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {\n event.preventDefault();\n var parent = $(element).closest('.form-group');\n var feedback = parent.find('.form-control-feedback');\n\n // Sometimes (atto) we have a hidden textarea backed by a real contenteditable div.\n if (($(element).prop(\"tagName\") == 'TEXTAREA') && parent.find('[contenteditable]')) {\n element = parent.find('[contenteditable]');\n }\n if (msg !== '') {\n parent.addClass('has-danger');\n parent.data('client-validation-error', true);\n $(element).addClass('is-invalid');\n $(element).attr('aria-describedby', feedback.attr('id'));\n $(element).attr('aria-invalid', true);\n feedback.attr('tabindex', 0);\n feedback.html(msg);\n\n // Only display and focus when the error was not already visible.\n // This is so that, when tabbing around the form, you don't get stuck.\n if (!feedback.is(':visible')) {\n feedback.show();\n feedback.focus();\n }\n\n } else {\n if (parent.data('client-validation-error') === true) {\n parent.removeClass('has-danger');\n parent.data('client-validation-error', false);\n $(element).removeClass('is-invalid');\n $(element).removeAttr('aria-describedby');\n $(element).attr('aria-invalid', false);\n feedback.hide();\n }\n }\n });\n\n var form = element.closest('form');\n if (!('boostFormErrorsEnhanced' in form.dataset)) {\n form.addEventListener('submit', function() {\n var visibleError = $('.form-control-feedback:visible');\n if (visibleError.length) {\n visibleError[0].focus();\n }\n });\n form.dataset.boostFormErrorsEnhanced = 1;\n }\n }\n };\n});\n"],"file":"form-display-errors.min.js"}
\ No newline at end of file
+{"version":3,"sources":["../src/form-display-errors.js"],"names":["define","$","Event","enhance","elementid","element","document","getElementById","on","Events","FORM_FIELD_VALIDATION","event","msg","preventDefault","parent","closest","feedback","find","prop","addClass","data","attr","html","is","show","focus","removeClass","removeAttr","hide","form","dataset","addEventListener","visibleError","length","boostFormErrorsEnhanced"],"mappings":"AAuBAA,OAAM,mCAAC,CAAC,QAAD,CAAW,YAAX,CAAD,CAA2B,SAASC,CAAT,CAAYC,CAAZ,CAAmB,CAChD,MAAO,CACHC,OAAO,CAAE,iBAASC,CAAT,CAAoB,CACzB,GAAIC,CAAAA,CAAO,CAAGC,QAAQ,CAACC,cAAT,CAAwBH,CAAxB,CAAd,CACA,GAAI,CAACC,CAAL,CAAc,CAGV,MACH,CAEDJ,CAAC,CAACI,CAAD,CAAD,CAAWG,EAAX,CAAcN,CAAK,CAACO,MAAN,CAAaC,qBAA3B,CAAkD,SAASC,CAAT,CAAgBC,CAAhB,CAAqB,CACnED,CAAK,CAACE,cAAN,GADmE,GAE/DC,CAAAA,CAAM,CAAGb,CAAC,CAACI,CAAD,CAAD,CAAWU,OAAX,CAAmB,aAAnB,CAFsD,CAG/DC,CAAQ,CAAGF,CAAM,CAACG,IAAP,CAAY,wBAAZ,CAHoD,CAMnE,GAAmC,UAA9B,EAAAhB,CAAC,CAACI,CAAD,CAAD,CAAWa,IAAX,CAAgB,SAAhB,CAAD,EAA8CJ,CAAM,CAACG,IAAP,CAAY,mBAAZ,CAAlD,CAAoF,CAChFZ,CAAO,CAAGS,CAAM,CAACG,IAAP,CAAY,mBAAZ,CACb,CACD,GAAY,EAAR,GAAAL,CAAJ,CAAgB,CACZE,CAAM,CAACK,QAAP,CAAgB,YAAhB,EACAL,CAAM,CAACM,IAAP,CAAY,yBAAZ,KACAnB,CAAC,CAACI,CAAD,CAAD,CAAWc,QAAX,CAAoB,YAApB,EACAlB,CAAC,CAACI,CAAD,CAAD,CAAWgB,IAAX,CAAgB,kBAAhB,CAAoCL,CAAQ,CAACK,IAAT,CAAc,IAAd,CAApC,EACApB,CAAC,CAACI,CAAD,CAAD,CAAWgB,IAAX,CAAgB,cAAhB,KACAL,CAAQ,CAACK,IAAT,CAAc,UAAd,CAA0B,CAA1B,EACAL,CAAQ,CAACM,IAAT,CAAcV,CAAd,EAIA,GAAI,CAACI,CAAQ,CAACO,EAAT,CAAY,UAAZ,CAAL,CAA8B,CAC1BP,CAAQ,CAACQ,IAAT,GACAR,CAAQ,CAACS,KAAT,EACH,CAEJ,CAhBD,IAgBO,CACH,GAAI,KAAAX,CAAM,CAACM,IAAP,CAAY,yBAAZ,CAAJ,CAAqD,CACjDN,CAAM,CAACY,WAAP,CAAmB,YAAnB,EACAZ,CAAM,CAACM,IAAP,CAAY,yBAAZ,KACAnB,CAAC,CAACI,CAAD,CAAD,CAAWqB,WAAX,CAAuB,YAAvB,EACAzB,CAAC,CAACI,CAAD,CAAD,CAAWsB,UAAX,CAAsB,kBAAtB,EACA1B,CAAC,CAACI,CAAD,CAAD,CAAWgB,IAAX,CAAgB,cAAhB,KACAL,CAAQ,CAACY,IAAT,EACH,CACJ,CACJ,CAnCD,EAqCA,GAAIC,CAAAA,CAAI,CAAGxB,CAAO,CAACU,OAAR,CAAgB,MAAhB,CAAX,CACA,GAAIc,CAAI,EAAI,EAAE,2BAA6BA,CAAAA,CAAI,CAACC,OAApC,CAAZ,CAA0D,CACtDD,CAAI,CAACE,gBAAL,CAAsB,QAAtB,CAAgC,UAAW,CACvC,GAAIC,CAAAA,CAAY,CAAG/B,CAAC,CAAC,gCAAD,CAApB,CACA,GAAI+B,CAAY,CAACC,MAAjB,CAAyB,CACrBD,CAAY,CAAC,CAAD,CAAZ,CAAgBP,KAAhB,EACH,CACJ,CALD,EAMAI,CAAI,CAACC,OAAL,CAAaI,uBAAb,CAAuC,CAC1C,CACJ,CAxDE,CA0DV,CA3DK,CAAN","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * Custom form error event handler to manipulate the bootstrap markup and show\n * nicely styled errors in an mform.\n *\n * @module theme_boost/form-display-errors\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/event'], function($, Event) {\n return {\n enhance: function(elementid) {\n var element = document.getElementById(elementid);\n if (!element) {\n // Some elements (e.g. static) don't have a form field.\n // Hence there is no validation. So, no setup required here.\n return;\n }\n\n $(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {\n event.preventDefault();\n var parent = $(element).closest('.form-group');\n var feedback = parent.find('.form-control-feedback');\n\n // Sometimes (atto) we have a hidden textarea backed by a real contenteditable div.\n if (($(element).prop(\"tagName\") == 'TEXTAREA') && parent.find('[contenteditable]')) {\n element = parent.find('[contenteditable]');\n }\n if (msg !== '') {\n parent.addClass('has-danger');\n parent.data('client-validation-error', true);\n $(element).addClass('is-invalid');\n $(element).attr('aria-describedby', feedback.attr('id'));\n $(element).attr('aria-invalid', true);\n feedback.attr('tabindex', 0);\n feedback.html(msg);\n\n // Only display and focus when the error was not already visible.\n // This is so that, when tabbing around the form, you don't get stuck.\n if (!feedback.is(':visible')) {\n feedback.show();\n feedback.focus();\n }\n\n } else {\n if (parent.data('client-validation-error') === true) {\n parent.removeClass('has-danger');\n parent.data('client-validation-error', false);\n $(element).removeClass('is-invalid');\n $(element).removeAttr('aria-describedby');\n $(element).attr('aria-invalid', false);\n feedback.hide();\n }\n }\n });\n\n var form = element.closest('form');\n if (form && !('boostFormErrorsEnhanced' in form.dataset)) {\n form.addEventListener('submit', function() {\n var visibleError = $('.form-control-feedback:visible');\n if (visibleError.length) {\n visibleError[0].focus();\n }\n });\n form.dataset.boostFormErrorsEnhanced = 1;\n }\n }\n };\n});\n"],"file":"form-display-errors.min.js"}
\ No newline at end of file
diff --git a/theme/boost/amd/src/form-display-errors.js b/theme/boost/amd/src/form-display-errors.js
index 230cbc59f40..a8391847a5a 100644
--- a/theme/boost/amd/src/form-display-errors.js
+++ b/theme/boost/amd/src/form-display-errors.js
@@ -69,7 +69,7 @@ define(['jquery', 'core/event'], function($, Event) {
});
var form = element.closest('form');
- if (!('boostFormErrorsEnhanced' in form.dataset)) {
+ if (form && !('boostFormErrorsEnhanced' in form.dataset)) {
form.addEventListener('submit', function() {
var visibleError = $('.form-control-feedback:visible');
if (visibleError.length) {