diff --git a/CHANGES.md b/CHANGES.md
index 926aecfd0b91bde69bb369f1dbfd6249ae3a860e..e5b28120ed8df611375213f1cd38fff4a4ca6d45 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -6,6 +6,7 @@ Changes
 
 ### Unreleased
 
+* 2022-06-26 - Make codechecker happy again
 * 2022-06-26 - Updated Moodle Plugin CI to latest upstream recommendations
 * 2022-06-26 - Add UPGRADE.md as internal upgrade documentation
 * 2022-06-26 - Update maintainers and copyrights in README.md.
diff --git a/amd/build/backtotop.min.js b/amd/build/backtotop.min.js
index cff91ae7de3ad52f49cd81a4b69ff74010de85c2..233a962d7a857a45f49f643eee38ca902b5a7f69 100644
--- a/amd/build/backtotop.min.js
+++ b/amd/build/backtotop.min.js
@@ -1,2 +1,10 @@
-define ("theme_boost_campus/backtotop",["jquery","core/str","core/notification"],function(a,b,c){"use strict";function d(){var d=b.get_string("backtotop","theme_boost_campus");a.when(d).then(function(b){a("#page-footer").after("<i class=\"fa fa-chevron-up fa-2x d-print-none\"id=\"back-to-top\" aria-label=\""+b+"\"></i>");a(window).scroll(function(){if(220<a(document).scrollTop()){a("#back-to-top").fadeIn(300)}else{a("#back-to-top").fadeOut(100)}});a("#back-to-top").click(function(b){b.preventDefault();a("html, body").animate({scrollTop:0},500)});return!0}).fail(c.exception)}return{init:function init(){d()}}});
-//# sourceMappingURL=backtotop.min.js.map
+/**
+ * Theme Boost Campus - JS code back to top button
+ *
+ * @module     theme_boost_campus/backtotop
+ * @copyright  2017 Kathrin Osswald, Ulm University <kathrin.osswald@uni-ulm.de>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+define("theme_boost_campus/backtotop",["jquery","core/str","core/notification"],(function($,str,Notification){return{init:function(){var stringsPromise;stringsPromise=str.get_string("backtotop","theme_boost_campus"),$.when(stringsPromise).then((function(string){return $("#page-footer").after('<i class="fa fa-chevron-up fa-2x d-print-none"id="back-to-top" aria-label="'+string+'"></i>'),$(window).scroll((function(){$(document).scrollTop()>220?$("#back-to-top").fadeIn(300):$("#back-to-top").fadeOut(100)})),$("#back-to-top").click((function(event){event.preventDefault(),$("html, body").animate({scrollTop:0},500)})),!0})).fail(Notification.exception)}}}));
+
+//# sourceMappingURL=backtotop.min.js.map
\ No newline at end of file
diff --git a/amd/build/backtotop.min.js.map b/amd/build/backtotop.min.js.map
index 186a13964b549a3b9d740b36343a1effd255a51c..86f198af5e9ec82ee13437f96db57e35a9df24fc 100644
--- a/amd/build/backtotop.min.js.map
+++ b/amd/build/backtotop.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/backtotop.js"],"names":["define","$","str","Notification","initBackToTop","stringsPromise","get_string","when","then","string","after","window","scroll","document","scrollTop","fadeIn","fadeOut","click","event","preventDefault","animate","fail","exception","init"],"mappings":"AAuBAA,OAAM,gCAAC,CAAC,QAAD,CAAW,UAAX,CAAuB,mBAAvB,CAAD,CAA8C,SAASC,CAAT,CAAYC,CAAZ,CAAiBC,CAAjB,CAA+B,CAC/E,aAKA,QAASC,CAAAA,CAAT,EAAyB,CAErB,GAAIC,CAAAA,CAAc,CAAGH,CAAG,CAACI,UAAJ,CAAe,WAAf,CAA4B,oBAA5B,CAArB,CAGAL,CAAC,CAACM,IAAF,CAAOF,CAAP,EAAuBG,IAAvB,CAA4B,SAASC,CAAT,CAAiB,CAEzCR,CAAC,CAAC,cAAD,CAAD,CAAkBS,KAAlB,CAAwB,mFACcD,CADd,CACuB,SAD/C,EAKAR,CAAC,CAACU,MAAD,CAAD,CAAUC,MAAV,CAAiB,UAAW,CACxB,GAA8B,GAA1B,CAAAX,CAAC,CAACY,QAAD,CAAD,CAAYC,SAAZ,EAAJ,CAAmC,CAC/Bb,CAAC,CAAC,cAAD,CAAD,CAAkBc,MAAlB,CAAyB,GAAzB,CACH,CAFD,IAEO,CACHd,CAAC,CAAC,cAAD,CAAD,CAAkBe,OAAlB,CAA0B,GAA1B,CACH,CACJ,CAND,EASAf,CAAC,CAAC,cAAD,CAAD,CAAkBgB,KAAlB,CAAwB,SAASC,CAAT,CAAgB,CACpCA,CAAK,CAACC,cAAN,GACAlB,CAAC,CAAC,YAAD,CAAD,CAAgBmB,OAAhB,CAAwB,CAACN,SAAS,CAAE,CAAZ,CAAxB,CAAwC,GAAxC,CACH,CAHD,EAKA,QACH,CAtBD,EAsBGO,IAtBH,CAsBQlB,CAAY,CAACmB,SAtBrB,CAuBH,CAED,MAAO,CACHC,IAAI,CAAE,eAAW,CACbnB,CAAa,EAChB,CAHE,CAKV,CAzCK,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 <http://www.gnu.org/licenses/>.\n\n/**\n * Theme Boost Campus - JS code back to top button\n *\n * @module     theme_boost_campus/backtotop\n * @copyright  2017 Kathrin Osswald, Ulm University <kathrin.osswald@uni-ulm.de>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/str', 'core/notification'], function($, str, Notification) {\n    \"use strict\";\n\n    /**\n     * Initialising.\n     */\n    function initBackToTop() {\n        // Get the string backtotop from language file.\n        var stringsPromise = str.get_string('backtotop', 'theme_boost_campus');\n\n        // Add backtotop button to DOM and add scroll and click handlers.\n        $.when(stringsPromise).then(function(string) {\n            // Add a fontawesome icon after the footer as the back to top button.\n            $('#page-footer').after('<i class=\"fa fa-chevron-up fa-2x d-print-none\"' +\n                'id=\"back-to-top\" aria-label=\"' + string + '\"></i>');\n\n            // This function fades the button in when the page is scrolled down or fades it out\n            // if the user is at the top of the page.\n            $(window).scroll(function() {\n                if ($(document).scrollTop() > 220) {\n                    $('#back-to-top').fadeIn(300);\n                } else {\n                    $('#back-to-top').fadeOut(100);\n                }\n            });\n\n            // This function scrolls the page to top with a duration of 500ms.\n            $('#back-to-top').click(function(event) {\n                event.preventDefault();\n                $('html, body').animate({scrollTop: 0}, 500);\n            });\n\n            return true;\n        }).fail(Notification.exception);\n    }\n\n    return {\n        init: function() {\n            initBackToTop();\n        }\n    };\n});\n"],"file":"backtotop.min.js"}
\ No newline at end of file
+{"version":3,"file":"backtotop.min.js","sources":["../src/backtotop.js"],"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 <http://www.gnu.org/licenses/>.\n\n/**\n * Theme Boost Campus - JS code back to top button\n *\n * @module     theme_boost_campus/backtotop\n * @copyright  2017 Kathrin Osswald, Ulm University <kathrin.osswald@uni-ulm.de>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/str', 'core/notification'], function($, str, Notification) {\n    \"use strict\";\n\n    /**\n     * Initialising.\n     */\n    function initBackToTop() {\n        // Get the string backtotop from language file.\n        var stringsPromise = str.get_string('backtotop', 'theme_boost_campus');\n\n        // Add backtotop button to DOM and add scroll and click handlers.\n        $.when(stringsPromise).then(function(string) {\n            // Add a fontawesome icon after the footer as the back to top button.\n            $('#page-footer').after('<i class=\"fa fa-chevron-up fa-2x d-print-none\"' +\n                'id=\"back-to-top\" aria-label=\"' + string + '\"></i>');\n\n            // This function fades the button in when the page is scrolled down or fades it out\n            // if the user is at the top of the page.\n            $(window).scroll(function() {\n                if ($(document).scrollTop() > 220) {\n                    $('#back-to-top').fadeIn(300);\n                } else {\n                    $('#back-to-top').fadeOut(100);\n                }\n            });\n\n            // This function scrolls the page to top with a duration of 500ms.\n            $('#back-to-top').click(function(event) {\n                event.preventDefault();\n                $('html, body').animate({scrollTop: 0}, 500);\n            });\n\n            return true;\n        }).fail(Notification.exception);\n    }\n\n    return {\n        init: function() {\n            initBackToTop();\n        }\n    };\n});\n"],"names":["define","$","str","Notification","init","stringsPromise","get_string","when","then","string","after","window","scroll","document","scrollTop","fadeIn","fadeOut","click","event","preventDefault","animate","fail","exception"],"mappings":";;;;;;;AAuBAA,sCAAO,CAAC,SAAU,WAAY,sBAAsB,SAASC,EAAGC,IAAKC,oBAoC1D,CACHC,KAAM,eA7BFC,eAAAA,eAAiBH,IAAII,WAAW,YAAa,sBAGjDL,EAAEM,KAAKF,gBAAgBG,MAAK,SAASC,eAEjCR,EAAE,gBAAgBS,MAAM,8EACcD,OAAS,UAI/CR,EAAEU,QAAQC,QAAO,WACTX,EAAEY,UAAUC,YAAc,IAC1Bb,EAAE,gBAAgBc,OAAO,KAEzBd,EAAE,gBAAgBe,QAAQ,QAKlCf,EAAE,gBAAgBgB,OAAM,SAASC,OAC7BA,MAAMC,iBACNlB,EAAE,cAAcmB,QAAQ,CAACN,UAAW,GAAI,SAGrC,KACRO,KAAKlB,aAAamB"}
\ No newline at end of file
diff --git a/amd/build/catchshortcuts.min.js b/amd/build/catchshortcuts.min.js
index d76ad393ede8a032455a63b1756cc708977d6c39..08f501fc33b8ed7a9a0d828ea86c82b96dac5f0d 100644
--- a/amd/build/catchshortcuts.min.js
+++ b/amd/build/catchshortcuts.min.js
@@ -1,2 +1,10 @@
-define ("theme_boost_campus/catchshortcuts",["jquery"],function(a){"use strict";function b(b){if("end"==b){a(document).keydown(function(a){if(35==a.keyCode){if(!0!=d()){c(a)}}})}if(-1!=navigator.appVersion.indexOf("Mac")&&"cmdarrowdown"==b){a(document).keydown(function(a){if(40==a.keyCode&&a.metaKey){if(!0!=d()){c(a)}}})}if(-1!=navigator.appVersion.indexOf("Win")&&"ctrlarrowdown"==b){a(document).keydown(function(a){if(40==a.keyCode&&a.ctrlKey){if(!0!=d()){c(a)}}})}}function c(b){b.preventDefault();a("html, body").animate({scrollTop:a("#page-footer").offset().top-a(window).height()+50},500)}function d(){var a=document.activeElement,b=!1;if("INPUT"==a.tagName||"TEXTAREA"==a.tagName||!0==a.isContentEditable){b=!0}return b}return{init:function init(a){for(var c=0,d=a.length;c<d;c++){b(a[c])}}}});
-//# sourceMappingURL=catchshortcuts.min.js.map
+/**
+ * Theme Boost Campus - JS code for catching pressed keys.
+ *
+ * @module     theme_boost_campus/catchshortcuts
+ * @copyright  2017 Kathrin Osswald, Ulm University <kathrin.osswald@uni-ulm.de>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+define("theme_boost_campus/catchshortcuts",["jquery"],(function($){function scrollToBottomOfCourse(event){event.preventDefault(),$("html, body").animate({scrollTop:$("#page-footer").offset().top-$(window).height()+50},500)}function checkForActiveFormElement(){var activeElement=document.activeElement,returnvalue=!1;return"INPUT"!=activeElement.tagName&&"TEXTAREA"!=activeElement.tagName&&1!=activeElement.isContentEditable||(returnvalue=!0),returnvalue}return{init:function(params){for(var i=0,len=params.length;i<len;i++)"end"==(value=params[i])&&$(document).keydown((function(e){35==e.keyCode&&1!=checkForActiveFormElement()&&scrollToBottomOfCourse(e)})),-1!=navigator.appVersion.indexOf("Mac")&&"cmdarrowdown"==value&&$(document).keydown((function(e){40==e.keyCode&&e.metaKey&&1!=checkForActiveFormElement()&&scrollToBottomOfCourse(e)})),-1!=navigator.appVersion.indexOf("Win")&&"ctrlarrowdown"==value&&$(document).keydown((function(e){40==e.keyCode&&e.ctrlKey&&1!=checkForActiveFormElement()&&scrollToBottomOfCourse(e)}));var value}}}));
+
+//# sourceMappingURL=catchshortcuts.min.js.map
\ No newline at end of file
diff --git a/amd/build/catchshortcuts.min.js.map b/amd/build/catchshortcuts.min.js.map
index 6bb0e10a0eadafa14cf4bc1a024cabff1fc0ce23..50856c8895bbd19180f17b99851551140c9aa7d6 100644
--- a/amd/build/catchshortcuts.min.js.map
+++ b/amd/build/catchshortcuts.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/catchshortcuts.js"],"names":["define","$","initcatchshortcuts","value","document","keydown","e","keyCode","checkForActiveFormElement","scrollToBottomOfCourse","navigator","appVersion","indexOf","metaKey","ctrlKey","event","preventDefault","animate","scrollTop","offset","top","window","height","activeElement","returnvalue","tagName","isContentEditable","init","params","i","len","length"],"mappings":"AAuBAA,OAAM,qCAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CAC3B,aAOA,QAASC,CAAAA,CAAT,CAA4BC,CAA5B,CAAmC,CAC/B,GAAa,KAAT,EAAAA,CAAJ,CAAoB,CAEhBF,CAAC,CAACG,QAAD,CAAD,CAAYC,OAAZ,CAAoB,SAASC,CAAT,CAAY,CAC5B,GAAiB,EAAb,EAAAA,CAAC,CAACC,OAAN,CAAqB,CAEjB,GAAI,IAAAC,CAAyB,EAA7B,CAAyC,CAErCC,CAAsB,CAACH,CAAD,CACzB,CACJ,CACJ,CARD,CASH,CAED,GAA2C,CAAC,CAAxC,EAAAI,SAAS,CAACC,UAAV,CAAqBC,OAArB,CAA6B,KAA7B,GAAsD,cAAT,EAAAT,CAAjD,CAA0E,CAEtEF,CAAC,CAACG,QAAD,CAAD,CAAYC,OAAZ,CAAoB,SAASC,CAAT,CAAY,CAC5B,GAAiB,EAAb,EAAAA,CAAC,CAACC,OAAF,EAAmBD,CAAC,CAACO,OAAzB,CAAkC,CAE9B,GAAI,IAAAL,CAAyB,EAA7B,CAAyC,CAErCC,CAAsB,CAACH,CAAD,CACzB,CACJ,CACJ,CARD,CASH,CAED,GAA2C,CAAC,CAAxC,EAAAI,SAAS,CAACC,UAAV,CAAqBC,OAArB,CAA6B,KAA7B,GAAsD,eAAT,EAAAT,CAAjD,CAA2E,CAEvEF,CAAC,CAACG,QAAD,CAAD,CAAYC,OAAZ,CAAoB,SAASC,CAAT,CAAY,CAC5B,GAAiB,EAAb,EAAAA,CAAC,CAACC,OAAF,EAAmBD,CAAC,CAACQ,OAAzB,CAAkC,CAE9B,GAAI,IAAAN,CAAyB,EAA7B,CAAyC,CAErCC,CAAsB,CAACH,CAAD,CACzB,CACJ,CACJ,CARD,CASH,CACJ,CAOD,QAASG,CAAAA,CAAT,CAAgCM,CAAhC,CAAuC,CAEnCA,CAAK,CAACC,cAAN,GAEAf,CAAC,CAAC,YAAD,CAAD,CAAgBgB,OAAhB,CAAwB,CACpBC,SAAS,CAAEjB,CAAC,CAAC,cAAD,CAAD,CAAkBkB,MAAlB,GAA2BC,GAA3B,CAAiCnB,CAAC,CAACoB,MAAD,CAAD,CAAUC,MAAV,EAAjC,CAAsD,EAD7C,CAAxB,CAEG,GAFH,CAGH,CAOD,QAASd,CAAAA,CAAT,EAAqC,IAE7Be,CAAAA,CAAa,CAAGnB,QAAQ,CAACmB,aAFI,CAG7BC,CAAW,GAHkB,CAKjC,GAA6B,OAAzB,EAAAD,CAAa,CAACE,OAAd,EAA6D,UAAzB,EAAAF,CAAa,CAACE,OAAlD,EAA2E,IAAAF,CAAa,CAACG,iBAA7F,CAAwH,CACpHF,CAAW,GACd,CACD,MAAOA,CAAAA,CACV,CAED,MAAO,CACHG,IAAI,CAAE,cAASC,CAAT,CAAiB,CACnB,IAAK,GAAIC,CAAAA,CAAC,CAAG,CAAR,CAAWC,CAAG,CAAGF,CAAM,CAACG,MAA7B,CAAqCF,CAAC,CAAGC,CAAzC,CAA8CD,CAAC,EAA/C,CAAmD,CAC/C3B,CAAkB,CAAC0B,CAAM,CAACC,CAAD,CAAP,CACrB,CACJ,CALE,CAOV,CAtFK,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 <http://www.gnu.org/licenses/>.\n\n/**\n * Theme Boost Campus - JS code for catching pressed keys.\n *\n * @module     theme_boost_campus/catchshortcuts\n * @copyright  2017 Kathrin Osswald, Ulm University <kathrin.osswald@uni-ulm.de>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery'], function($) {\n    \"use strict\";\n\n    /**\n     * Initialising.\n     *\n     * @param {string} value\n     */\n    function initcatchshortcuts(value) {\n        if (value == 'end') {\n            // Catch the end key to be able to change the behavior.\n            $(document).keydown(function(e) {\n                if (e.keyCode == 35) {\n                    // Additionally check no active focus in form elements.\n                    if (checkForActiveFormElement() != true) {\n                        // Scroll only to the bottom of the course content.\n                        scrollToBottomOfCourse(e);\n                    }\n                }\n            });\n        }\n        // This shortcut is only relevant for users operating on MacOS.\n        if (navigator.appVersion.indexOf(\"Mac\") != -1 && value == 'cmdarrowdown') {\n            // Bind the cmd + arrow down shortcut to be able to change the behavior.\n            $(document).keydown(function(e) {\n                if (e.keyCode == 40 && e.metaKey) {\n                    // Additionally check no active focus in form elements.\n                    if (checkForActiveFormElement() != true) {\n                        // Scroll only to the bottom of the course content.\n                        scrollToBottomOfCourse(e);\n                    }\n                }\n            });\n        }\n        // This shortcut is only relevant for users operating on Windows.\n        if (navigator.appVersion.indexOf(\"Win\") != -1 && value == 'ctrlarrowdown') {\n            // Bind the ctrl + arrow down shortcut to be able to change the behavior.\n            $(document).keydown(function(e) {\n                if (e.keyCode == 40 && e.ctrlKey) {\n                    // Additionally check no active focus in form elements.\n                    if (checkForActiveFormElement() != true) {\n                        // Scroll only to the bottom of the course content.\n                        scrollToBottomOfCourse(e);\n                    }\n                }\n            });\n        }\n    }\n\n    /**\n     * Function to scroll only to the bottom of the course and not the bottom of the whole page.\n     *\n     * @param {object} event\n     */\n    function scrollToBottomOfCourse(event) {\n        // Prevent default behavior.\n        event.preventDefault();\n        // Scroll only to the bottom of the course content.\n        $('html, body').animate({\n            scrollTop: $('#page-footer').offset().top - $(window).height() + 50\n        }, 500);\n    }\n\n    /**\n     * Function to check for an active form element.\n     *\n     * @return {boolean}\n     */\n    function checkForActiveFormElement() {\n        // Get the active Element for the current page.\n        var activeElement = document.activeElement;\n        var returnvalue = false;\n        // Check if the given active element is type of input field, textarea or editable content.\n        if (activeElement.tagName == 'INPUT' || activeElement.tagName == 'TEXTAREA' || activeElement.isContentEditable == true) {\n            returnvalue = true;\n        }\n        return returnvalue;\n    }\n\n    return {\n        init: function(params) {\n            for (var i = 0, len = params.length; i < len; i++) {\n                initcatchshortcuts(params[i]);\n            }\n        }\n    };\n});\n"],"file":"catchshortcuts.min.js"}
\ No newline at end of file
+{"version":3,"file":"catchshortcuts.min.js","sources":["../src/catchshortcuts.js"],"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 <http://www.gnu.org/licenses/>.\n\n/**\n * Theme Boost Campus - JS code for catching pressed keys.\n *\n * @module     theme_boost_campus/catchshortcuts\n * @copyright  2017 Kathrin Osswald, Ulm University <kathrin.osswald@uni-ulm.de>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery'], function($) {\n    \"use strict\";\n\n    /**\n     * Initialising.\n     *\n     * @param {string} value\n     */\n    function initcatchshortcuts(value) {\n        if (value == 'end') {\n            // Catch the end key to be able to change the behavior.\n            $(document).keydown(function(e) {\n                if (e.keyCode == 35) {\n                    // Additionally check no active focus in form elements.\n                    if (checkForActiveFormElement() != true) {\n                        // Scroll only to the bottom of the course content.\n                        scrollToBottomOfCourse(e);\n                    }\n                }\n            });\n        }\n        // This shortcut is only relevant for users operating on MacOS.\n        if (navigator.appVersion.indexOf(\"Mac\") != -1 && value == 'cmdarrowdown') {\n            // Bind the cmd + arrow down shortcut to be able to change the behavior.\n            $(document).keydown(function(e) {\n                if (e.keyCode == 40 && e.metaKey) {\n                    // Additionally check no active focus in form elements.\n                    if (checkForActiveFormElement() != true) {\n                        // Scroll only to the bottom of the course content.\n                        scrollToBottomOfCourse(e);\n                    }\n                }\n            });\n        }\n        // This shortcut is only relevant for users operating on Windows.\n        if (navigator.appVersion.indexOf(\"Win\") != -1 && value == 'ctrlarrowdown') {\n            // Bind the ctrl + arrow down shortcut to be able to change the behavior.\n            $(document).keydown(function(e) {\n                if (e.keyCode == 40 && e.ctrlKey) {\n                    // Additionally check no active focus in form elements.\n                    if (checkForActiveFormElement() != true) {\n                        // Scroll only to the bottom of the course content.\n                        scrollToBottomOfCourse(e);\n                    }\n                }\n            });\n        }\n    }\n\n    /**\n     * Function to scroll only to the bottom of the course and not the bottom of the whole page.\n     *\n     * @param {object} event\n     */\n    function scrollToBottomOfCourse(event) {\n        // Prevent default behavior.\n        event.preventDefault();\n        // Scroll only to the bottom of the course content.\n        $('html, body').animate({\n            scrollTop: $('#page-footer').offset().top - $(window).height() + 50\n        }, 500);\n    }\n\n    /**\n     * Function to check for an active form element.\n     *\n     * @return {boolean}\n     */\n    function checkForActiveFormElement() {\n        // Get the active Element for the current page.\n        var activeElement = document.activeElement;\n        var returnvalue = false;\n        // Check if the given active element is type of input field, textarea or editable content.\n        if (activeElement.tagName == 'INPUT' || activeElement.tagName == 'TEXTAREA' || activeElement.isContentEditable == true) {\n            returnvalue = true;\n        }\n        return returnvalue;\n    }\n\n    return {\n        init: function(params) {\n            for (var i = 0, len = params.length; i < len; i++) {\n                initcatchshortcuts(params[i]);\n            }\n        }\n    };\n});\n"],"names":["define","$","scrollToBottomOfCourse","event","preventDefault","animate","scrollTop","offset","top","window","height","checkForActiveFormElement","activeElement","document","returnvalue","tagName","isContentEditable","init","params","i","len","length","value","keydown","e","keyCode","navigator","appVersion","indexOf","metaKey","ctrlKey"],"mappings":";;;;;;;AAuBAA,2CAAO,CAAC,WAAW,SAASC,YAsDfC,uBAAuBC,OAE5BA,MAAMC,iBAENH,EAAE,cAAcI,QAAQ,CACpBC,UAAWL,EAAE,gBAAgBM,SAASC,IAAMP,EAAEQ,QAAQC,SAAW,IAClE,cAQEC,gCAEDC,cAAgBC,SAASD,cACzBE,aAAc,QAEW,SAAzBF,cAAcG,SAA+C,YAAzBH,cAAcG,SAA4D,GAAnCH,cAAcI,oBACzFF,aAAc,GAEXA,kBAGJ,CACHG,KAAM,SAASC,YACN,IAAIC,EAAI,EAAGC,IAAMF,OAAOG,OAAQF,EAAIC,IAAKD,IAxErC,QADWG,MA0EGJ,OAAOC,KAvE9BlB,EAAEY,UAAUU,SAAQ,SAASC,GACR,IAAbA,EAAEC,SAEiC,GAA/Bd,6BAEAT,uBAAuBsB,OAMK,GAAxCE,UAAUC,WAAWC,QAAQ,QAAyB,gBAATN,OAE7CrB,EAAEY,UAAUU,SAAQ,SAASC,GACR,IAAbA,EAAEC,SAAiBD,EAAEK,SAEc,GAA/BlB,6BAEAT,uBAAuBsB,OAMK,GAAxCE,UAAUC,WAAWC,QAAQ,QAAyB,iBAATN,OAE7CrB,EAAEY,UAAUU,SAAQ,SAASC,GACR,IAAbA,EAAEC,SAAiBD,EAAEM,SAEc,GAA/BnB,6BAEAT,uBAAuBsB,UAlCfF"}
\ No newline at end of file
diff --git a/amd/build/incoursesettings.min.js b/amd/build/incoursesettings.min.js
index 6fac6e543c3745bf5dc02eb615ab3935c8ee6004..1d08189c86aec9a9b374ec02cec8f431a4713a19 100644
--- a/amd/build/incoursesettings.min.js
+++ b/amd/build/incoursesettings.min.js
@@ -1,2 +1,10 @@
-define ("theme_boost_campus/incoursesettings",["jquery"],function(a){"use strict";function b(){var b=a("body").hasClass("pagelayout-frontpage");if(!b){var c=a("#boost-campus-course-settings"),d=a("#boost-campus-activity-settings"),e=a("#page-header .card").css("border-bottom"),f=a("#page-header .context-header-settings-menu .dropdown-toggle"),g=a("#region-main-settings-menu .action-menu .dropdown-toggle");f.removeAttr("aria-haspopup").attr("aria-controls","boost-campus-course-settings");g.removeAttr("aria-haspopup").attr("aria-controls","boost-campus-activity-settings");f.on("click",function(b){b.stopPropagation();if(c.is(":visible")){c.hide(400);f.attr("aria-expanded","false");setTimeout(function(){a("#page-header .card").css("border-bottom",e);a("#page-header > div").addClass("pb-3")},300)}else{c.show(400);a("#page-header div").removeClass("pb-3");a("#page-header .card").css("border-bottom","none");c.css("border-top","none");f.attr("aria-expanded","true");if(d.is(":visible")){d.hide(400);g.attr("aria-expanded","false")}}});g.on("click",function(b){b.stopPropagation();if(d.is(":visible")){d.hide(400);g.attr("aria-expanded","false")}else{d.show(400);g.attr("aria-expanded","true");setTimeout(function(){a("#page-header .card").css("border-bottom",e);a("#page-header > div").addClass("pb-3")},300);if(c.is(":visible")){c.hide(400);f.attr("aria-expanded","false")}}})}}return{init:function init(){b()}}});
-//# sourceMappingURL=incoursesettings.min.js.map
+/**
+ * Theme Boost Campus - JS code for displaying course setting within the course.
+ *
+ * @module     theme_boost_campus/incoursesettings
+ * @copyright  2017 Kathrin Osswald, Ulm University <kathrin.osswald@uni-ulm.de>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+define("theme_boost_campus/incoursesettings",["jquery"],(function($){return{init:function(){!function(){if(!$("body").hasClass("pagelayout-frontpage")){var courseSettings=$("#boost-campus-course-settings"),activitySettings=$("#boost-campus-activity-settings"),headerCardBorderBottom=$("#page-header .card").css("border-bottom"),courseSettingsDropdownToggle=$("#page-header .context-header-settings-menu .dropdown-toggle"),activitySettingsDropdownToggle=$("#region-main-settings-menu .action-menu .dropdown-toggle");courseSettingsDropdownToggle.removeAttr("aria-haspopup").attr("aria-controls","boost-campus-course-settings"),activitySettingsDropdownToggle.removeAttr("aria-haspopup").attr("aria-controls","boost-campus-activity-settings"),courseSettingsDropdownToggle.on("click",(function(event){event.stopPropagation(),courseSettings.is(":visible")?(courseSettings.hide(400),courseSettingsDropdownToggle.attr("aria-expanded","false"),setTimeout((function(){$("#page-header .card").css("border-bottom",headerCardBorderBottom),$("#page-header > div").addClass("pb-3")}),300)):(courseSettings.show(400),$("#page-header div").removeClass("pb-3"),$("#page-header .card").css("border-bottom","none"),courseSettings.css("border-top","none"),courseSettingsDropdownToggle.attr("aria-expanded","true"),activitySettings.is(":visible")&&(activitySettings.hide(400),activitySettingsDropdownToggle.attr("aria-expanded","false")))})),activitySettingsDropdownToggle.on("click",(function(event){event.stopPropagation(),activitySettings.is(":visible")?(activitySettings.hide(400),activitySettingsDropdownToggle.attr("aria-expanded","false")):(activitySettings.show(400),activitySettingsDropdownToggle.attr("aria-expanded","true"),setTimeout((function(){$("#page-header .card").css("border-bottom",headerCardBorderBottom),$("#page-header > div").addClass("pb-3")}),300),courseSettings.is(":visible")&&(courseSettings.hide(400),courseSettingsDropdownToggle.attr("aria-expanded","false")))}))}}()}}}));
+
+//# sourceMappingURL=incoursesettings.min.js.map
\ No newline at end of file
diff --git a/amd/build/incoursesettings.min.js.map b/amd/build/incoursesettings.min.js.map
index d667d6bf16eacfa142b92f19006da3d195a8f416..a3600a1004710bd42127f3d025ae7c8b60f45983 100644
--- a/amd/build/incoursesettings.min.js.map
+++ b/amd/build/incoursesettings.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/incoursesettings.js"],"names":["define","$","initInCourseSettings","frontpage","hasClass","courseSettings","activitySettings","headerCardBorderBottom","css","courseSettingsDropdownToggle","activitySettingsDropdownToggle","removeAttr","attr","on","event","stopPropagation","is","hide","setTimeout","addClass","show","removeClass","init"],"mappings":"AAuBAA,OAAM,uCAAC,CAAC,QAAD,CAAD,CAAa,SAASC,CAAT,CAAY,CAC3B,aAKA,QAASC,CAAAA,CAAT,EAAgC,CAC5B,GAAIC,CAAAA,CAAS,CAAGF,CAAC,CAAC,MAAD,CAAD,CAAUG,QAAV,CAAmB,sBAAnB,CAAhB,CAIA,GAAI,CAACD,CAAL,CAAgB,IAERE,CAAAA,CAAc,CAAGJ,CAAC,CAAC,+BAAD,CAFV,CAGRK,CAAgB,CAAGL,CAAC,CAAC,iCAAD,CAHZ,CAIRM,CAAsB,CAAGN,CAAC,CAAC,oBAAD,CAAD,CAAwBO,GAAxB,CAA4B,eAA5B,CAJjB,CAKRC,CAA4B,CAAGR,CAAC,CAAC,6DAAD,CALxB,CAMRS,CAA8B,CAAGT,CAAC,CAAC,0DAAD,CAN1B,CAUZQ,CAA4B,CAACE,UAA7B,CAAwC,eAAxC,EAAyDC,IAAzD,CAA8D,eAA9D,CAA+E,8BAA/E,EAIAF,CAA8B,CAACC,UAA/B,CAA0C,eAA1C,EAA2DC,IAA3D,CAAgE,eAAhE,CAAiF,gCAAjF,EAEAH,CAA4B,CAACI,EAA7B,CAAgC,OAAhC,CAAyC,SAASC,CAAT,CAAgB,CACrDA,CAAK,CAACC,eAAN,GACA,GAAIV,CAAc,CAACW,EAAf,CAAkB,UAAlB,CAAJ,CAAmC,CAC/BX,CAAc,CAACY,IAAf,CAAoB,GAApB,EACAR,CAA4B,CAACG,IAA7B,CAAkC,eAAlC,CAAmD,OAAnD,EACAM,UAAU,CAAC,UAAW,CAClBjB,CAAC,CAAC,oBAAD,CAAD,CAAwBO,GAAxB,CAA4B,eAA5B,CAA6CD,CAA7C,EACAN,CAAC,CAAC,oBAAD,CAAD,CAAwBkB,QAAxB,CAAiC,MAAjC,CACH,CAHS,CAGP,GAHO,CAIb,CAPD,IAOO,CACHd,CAAc,CAACe,IAAf,CAAoB,GAApB,EACAnB,CAAC,CAAC,kBAAD,CAAD,CAAsBoB,WAAtB,CAAkC,MAAlC,EACApB,CAAC,CAAC,oBAAD,CAAD,CAAwBO,GAAxB,CAA4B,eAA5B,CAA6C,MAA7C,EACAH,CAAc,CAACG,GAAf,CAAmB,YAAnB,CAAiC,MAAjC,EACAC,CAA4B,CAACG,IAA7B,CAAkC,eAAlC,CAAmD,MAAnD,EAEA,GAAIN,CAAgB,CAACU,EAAjB,CAAoB,UAApB,CAAJ,CAAqC,CACjCV,CAAgB,CAACW,IAAjB,CAAsB,GAAtB,EACAP,CAA8B,CAACE,IAA/B,CAAoC,eAApC,CAAqD,OAArD,CACH,CACJ,CACJ,CArBD,EAsBAF,CAA8B,CAACG,EAA/B,CAAkC,OAAlC,CAA2C,SAASC,CAAT,CAAgB,CACvDA,CAAK,CAACC,eAAN,GACA,GAAIT,CAAgB,CAACU,EAAjB,CAAoB,UAApB,CAAJ,CAAqC,CACjCV,CAAgB,CAACW,IAAjB,CAAsB,GAAtB,EACAP,CAA8B,CAACE,IAA/B,CAAoC,eAApC,CAAqD,OAArD,CACH,CAHD,IAGO,CACHN,CAAgB,CAACc,IAAjB,CAAsB,GAAtB,EACAV,CAA8B,CAACE,IAA/B,CAAoC,eAApC,CAAqD,MAArD,EACAM,UAAU,CAAC,UAAW,CAClBjB,CAAC,CAAC,oBAAD,CAAD,CAAwBO,GAAxB,CAA4B,eAA5B,CAA6CD,CAA7C,EACAN,CAAC,CAAC,oBAAD,CAAD,CAAwBkB,QAAxB,CAAiC,MAAjC,CACH,CAHS,CAGP,GAHO,CAAV,CAKA,GAAId,CAAc,CAACW,EAAf,CAAkB,UAAlB,CAAJ,CAAmC,CAC/BX,CAAc,CAACY,IAAf,CAAoB,GAApB,EACAR,CAA4B,CAACG,IAA7B,CAAkC,eAAlC,CAAmD,OAAnD,CACH,CACJ,CACJ,CAlBD,CAmBH,CACJ,CAED,MAAO,CACHU,IAAI,CAAE,eAAW,CACbpB,CAAoB,EACvB,CAHE,CAKV,CA5EK,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 <http://www.gnu.org/licenses/>.\n\n/**\n * Theme Boost Campus - JS code for displaying course setting within the course.\n *\n * @module     theme_boost_campus/incoursesettings\n * @copyright  2017 Kathrin Osswald, Ulm University <kathrin.osswald@uni-ulm.de>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery'], function($) {\n    \"use strict\";\n\n    /**\n     * Initialising.\n     */\n    function initInCourseSettings() {\n        var frontpage = $('body').hasClass('pagelayout-frontpage');\n\n        // Only change the behaviour if the setting is enabled and we are not on the frontpage,\n        // because we did not change the settings menu there. So we need the default propagation here.\n        if (!frontpage) {\n\n            var courseSettings = $('#boost-campus-course-settings');\n            var activitySettings = $('#boost-campus-activity-settings');\n            var headerCardBorderBottom = $('#page-header .card').css(\"border-bottom\");\n            var courseSettingsDropdownToggle = $('#page-header .context-header-settings-menu .dropdown-toggle');\n            var activitySettingsDropdownToggle = $('#region-main-settings-menu .action-menu .dropdown-toggle');\n\n            // Remove attribute aria-haspopup because we are replacing this with the in-course course settings and\n            // set the new in-course course settings for the aria-controls attribute\n            courseSettingsDropdownToggle.removeAttr('aria-haspopup').attr('aria-controls', 'boost-campus-course-settings');\n\n            // Remove attribute aria-haspopup because we are replacing this with the in-course activity settings\n            // set the new in-course activity settings for the aria-controls attribute\n            activitySettingsDropdownToggle.removeAttr('aria-haspopup').attr('aria-controls', 'boost-campus-activity-settings');\n\n            courseSettingsDropdownToggle.on('click', function(event) {\n                event.stopPropagation();\n                if (courseSettings.is(\":visible\")) {\n                    courseSettings.hide(400);\n                    courseSettingsDropdownToggle.attr('aria-expanded', 'false');\n                    setTimeout(function() {\n                        $('#page-header .card').css('border-bottom', headerCardBorderBottom);\n                        $('#page-header > div').addClass('pb-3');\n                    }, 300);\n                } else {\n                    courseSettings.show(400);\n                    $('#page-header div').removeClass('pb-3');\n                    $('#page-header .card').css('border-bottom', 'none');\n                    courseSettings.css('border-top', 'none');\n                    courseSettingsDropdownToggle.attr('aria-expanded', 'true');\n                    // Additionally close activity settings if they are currently open.\n                    if (activitySettings.is(\":visible\")) {\n                        activitySettings.hide(400);\n                        activitySettingsDropdownToggle.attr('aria-expanded', 'false');\n                    }\n                }\n            });\n            activitySettingsDropdownToggle.on('click', function(event) {\n                event.stopPropagation();\n                if (activitySettings.is(\":visible\")) {\n                    activitySettings.hide(400);\n                    activitySettingsDropdownToggle.attr('aria-expanded', 'false');\n                } else {\n                    activitySettings.show(400);\n                    activitySettingsDropdownToggle.attr('aria-expanded', 'true');\n                    setTimeout(function() {\n                        $('#page-header .card').css('border-bottom', headerCardBorderBottom);\n                        $('#page-header > div').addClass('pb-3');\n                    }, 300);\n                    // Additionally close course settings if they are currently open.\n                    if (courseSettings.is(\":visible\")) {\n                        courseSettings.hide(400);\n                        courseSettingsDropdownToggle.attr('aria-expanded', 'false');\n                    }\n                }\n            });\n        }\n    }\n\n    return {\n        init: function() {\n            initInCourseSettings();\n        }\n    };\n});\n"],"file":"incoursesettings.min.js"}
\ No newline at end of file
+{"version":3,"file":"incoursesettings.min.js","sources":["../src/incoursesettings.js"],"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 <http://www.gnu.org/licenses/>.\n\n/**\n * Theme Boost Campus - JS code for displaying course setting within the course.\n *\n * @module     theme_boost_campus/incoursesettings\n * @copyright  2017 Kathrin Osswald, Ulm University <kathrin.osswald@uni-ulm.de>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery'], function($) {\n    \"use strict\";\n\n    /**\n     * Initialising.\n     */\n    function initInCourseSettings() {\n        var frontpage = $('body').hasClass('pagelayout-frontpage');\n\n        // Only change the behaviour if the setting is enabled and we are not on the frontpage,\n        // because we did not change the settings menu there. So we need the default propagation here.\n        if (!frontpage) {\n\n            var courseSettings = $('#boost-campus-course-settings');\n            var activitySettings = $('#boost-campus-activity-settings');\n            var headerCardBorderBottom = $('#page-header .card').css(\"border-bottom\");\n            var courseSettingsDropdownToggle = $('#page-header .context-header-settings-menu .dropdown-toggle');\n            var activitySettingsDropdownToggle = $('#region-main-settings-menu .action-menu .dropdown-toggle');\n\n            // Remove attribute aria-haspopup because we are replacing this with the in-course course settings and\n            // set the new in-course course settings for the aria-controls attribute\n            courseSettingsDropdownToggle.removeAttr('aria-haspopup').attr('aria-controls', 'boost-campus-course-settings');\n\n            // Remove attribute aria-haspopup because we are replacing this with the in-course activity settings\n            // set the new in-course activity settings for the aria-controls attribute\n            activitySettingsDropdownToggle.removeAttr('aria-haspopup').attr('aria-controls', 'boost-campus-activity-settings');\n\n            courseSettingsDropdownToggle.on('click', function(event) {\n                event.stopPropagation();\n                if (courseSettings.is(\":visible\")) {\n                    courseSettings.hide(400);\n                    courseSettingsDropdownToggle.attr('aria-expanded', 'false');\n                    setTimeout(function() {\n                        $('#page-header .card').css('border-bottom', headerCardBorderBottom);\n                        $('#page-header > div').addClass('pb-3');\n                    }, 300);\n                } else {\n                    courseSettings.show(400);\n                    $('#page-header div').removeClass('pb-3');\n                    $('#page-header .card').css('border-bottom', 'none');\n                    courseSettings.css('border-top', 'none');\n                    courseSettingsDropdownToggle.attr('aria-expanded', 'true');\n                    // Additionally close activity settings if they are currently open.\n                    if (activitySettings.is(\":visible\")) {\n                        activitySettings.hide(400);\n                        activitySettingsDropdownToggle.attr('aria-expanded', 'false');\n                    }\n                }\n            });\n            activitySettingsDropdownToggle.on('click', function(event) {\n                event.stopPropagation();\n                if (activitySettings.is(\":visible\")) {\n                    activitySettings.hide(400);\n                    activitySettingsDropdownToggle.attr('aria-expanded', 'false');\n                } else {\n                    activitySettings.show(400);\n                    activitySettingsDropdownToggle.attr('aria-expanded', 'true');\n                    setTimeout(function() {\n                        $('#page-header .card').css('border-bottom', headerCardBorderBottom);\n                        $('#page-header > div').addClass('pb-3');\n                    }, 300);\n                    // Additionally close course settings if they are currently open.\n                    if (courseSettings.is(\":visible\")) {\n                        courseSettings.hide(400);\n                        courseSettingsDropdownToggle.attr('aria-expanded', 'false');\n                    }\n                }\n            });\n        }\n    }\n\n    return {\n        init: function() {\n            initInCourseSettings();\n        }\n    };\n});\n"],"names":["define","$","init","hasClass","courseSettings","activitySettings","headerCardBorderBottom","css","courseSettingsDropdownToggle","activitySettingsDropdownToggle","removeAttr","attr","on","event","stopPropagation","is","hide","setTimeout","addClass","show","removeClass","initInCourseSettings"],"mappings":";;;;;;;AAuBAA,6CAAO,CAAC,WAAW,SAASC,SAuEjB,CACHC,KAAM,2BAjEUD,EAAE,QAAQE,SAAS,wBAInB,KAERC,eAAiBH,EAAE,iCACnBI,iBAAmBJ,EAAE,mCACrBK,uBAAyBL,EAAE,sBAAsBM,IAAI,iBACrDC,6BAA+BP,EAAE,+DACjCQ,+BAAiCR,EAAE,4DAIvCO,6BAA6BE,WAAW,iBAAiBC,KAAK,gBAAiB,gCAI/EF,+BAA+BC,WAAW,iBAAiBC,KAAK,gBAAiB,kCAEjFH,6BAA6BI,GAAG,SAAS,SAASC,OAC9CA,MAAMC,kBACFV,eAAeW,GAAG,aAClBX,eAAeY,KAAK,KACpBR,6BAA6BG,KAAK,gBAAiB,SACnDM,YAAW,WACPhB,EAAE,sBAAsBM,IAAI,gBAAiBD,wBAC7CL,EAAE,sBAAsBiB,SAAS,UAClC,OAEHd,eAAee,KAAK,KACpBlB,EAAE,oBAAoBmB,YAAY,QAClCnB,EAAE,sBAAsBM,IAAI,gBAAiB,QAC7CH,eAAeG,IAAI,aAAc,QACjCC,6BAA6BG,KAAK,gBAAiB,QAE/CN,iBAAiBU,GAAG,cACpBV,iBAAiBW,KAAK,KACtBP,+BAA+BE,KAAK,gBAAiB,cAIjEF,+BAA+BG,GAAG,SAAS,SAASC,OAChDA,MAAMC,kBACFT,iBAAiBU,GAAG,aACpBV,iBAAiBW,KAAK,KACtBP,+BAA+BE,KAAK,gBAAiB,WAErDN,iBAAiBc,KAAK,KACtBV,+BAA+BE,KAAK,gBAAiB,QACrDM,YAAW,WACPhB,EAAE,sBAAsBM,IAAI,gBAAiBD,wBAC7CL,EAAE,sBAAsBiB,SAAS,UAClC,KAECd,eAAeW,GAAG,cAClBX,eAAeY,KAAK,KACpBR,6BAA6BG,KAAK,gBAAiB,eAS/DU"}
\ No newline at end of file
diff --git a/amd/build/infobanner.min.js b/amd/build/infobanner.min.js
index e5f456c38d80c66895066a2442a231a2a84d8bba..6b06cbae92c879ce848903dde236f43add06fafe 100644
--- a/amd/build/infobanner.min.js
+++ b/amd/build/infobanner.min.js
@@ -1,2 +1,10 @@
-define ("theme_boost_campus/infobanner",["jquery","core/str","core/modal_factory","core/modal_events","core/notification"],function(a,b,c,d,e){"use strict";function f(f){var g=b.get_strings([{key:"confirmation",component:"theme_boost_campus"},{key:"closingperpetualinfobanner",component:"theme_boost_campus"},{key:"yes_close",component:"theme_boost_campus"}]),h=c.create({type:c.types.SAVE_CANCEL});a("#themeboostcampusperpinfobanner .close").click(function(b){b.stopPropagation();if("1"==f){a.when(g,h).then(function(b,c){c.setTitle(b[0]);c.setBody(b[1]);c.setSaveButtonText(b[2]);c.getRoot().on(d.save,function(){M.util.set_user_preference("theme_boost_campus_infobanner_dismissed",!0);a("#themeboostcampusperpinfobanner").alert("close")});c.show();return c}).fail(e.exception)}else{M.util.set_user_preference("theme_boost_campus_infobanner_dismissed",!0);a("#themeboostcampusperpinfobanner").alert("close")}})}return{init:function init(a){f(a)}}});
-//# sourceMappingURL=infobanner.min.js.map
+/**
+ * Theme Boost Campus - JS code for feature information banner
+ *
+ * @module     theme_boost_campus/infobanner
+ * @copyright  2020 Kathrin Osswald, Ulm University <kathrin.osswald@uni-ulm.de>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+define("theme_boost_campus/infobanner",["jquery","core/str","core/modal_factory","core/modal_events","core/notification"],(function($,str,ModalFactory,ModalEvents,Notification){return{init:function(showconfirmationdialogue){!function(showconfirmationdialogue){var stringsPromise=str.get_strings([{key:"confirmation",component:"theme_boost_campus"},{key:"closingperpetualinfobanner",component:"theme_boost_campus"},{key:"yes_close",component:"theme_boost_campus"}]),modalPromise=ModalFactory.create({type:ModalFactory.types.SAVE_CANCEL});$("#themeboostcampusperpinfobanner .close").click((function(event){event.stopPropagation(),"1"==showconfirmationdialogue?$.when(stringsPromise,modalPromise).then((function(strings,modal){return modal.setTitle(strings[0]),modal.setBody(strings[1]),modal.setSaveButtonText(strings[2]),modal.getRoot().on(ModalEvents.save,(function(){M.util.set_user_preference("theme_boost_campus_infobanner_dismissed",!0),$("#themeboostcampusperpinfobanner").alert("close")})),modal.show(),modal})).fail(Notification.exception):(M.util.set_user_preference("theme_boost_campus_infobanner_dismissed",!0),$("#themeboostcampusperpinfobanner").alert("close"))}))}(showconfirmationdialogue)}}}));
+
+//# sourceMappingURL=infobanner.min.js.map
\ No newline at end of file
diff --git a/amd/build/infobanner.min.js.map b/amd/build/infobanner.min.js.map
index cc429dc87c4dbb221abac55ed825cd71caa57898..9423cf450d3a291f1fe6ef0b1c88948e41a785ae 100644
--- a/amd/build/infobanner.min.js.map
+++ b/amd/build/infobanner.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/infobanner.js"],"names":["define","$","str","ModalFactory","ModalEvents","Notification","initInfoBanner","showconfirmationdialogue","stringsPromise","get_strings","key","component","modalPromise","create","type","types","SAVE_CANCEL","click","event","stopPropagation","when","then","strings","modal","setTitle","setBody","setSaveButtonText","getRoot","on","save","M","util","set_user_preference","alert","show","fail","exception","init"],"mappings":"AAuBAA,OAAM,iCAAC,CAAC,QAAD,CAAW,UAAX,CAAuB,oBAAvB,CAA6C,mBAA7C,CAAkE,mBAAlE,CAAD,CACF,SAASC,CAAT,CAAYC,CAAZ,CAAiBC,CAAjB,CAA+BC,CAA/B,CAA4CC,CAA5C,CAA0D,CAC1D,aAOA,QAASC,CAAAA,CAAT,CAAwBC,CAAxB,CAAkD,IAgB1CC,CAAAA,CAAc,CAAGN,CAAG,CAACO,WAAJ,CAdQ,CACzB,CACIC,GAAG,CAAE,cADT,CAEIC,SAAS,CAAE,oBAFf,CADyB,CAItB,CACCD,GAAG,CAAE,4BADN,CAECC,SAAS,CAAE,oBAFZ,CAJsB,CAOtB,CACCD,GAAG,CAAE,WADN,CAECC,SAAS,CAAE,oBAFZ,CAPsB,CAcR,CAhByB,CAiB1CC,CAAY,CAAGT,CAAY,CAACU,MAAb,CAAoB,CAACC,IAAI,CAAEX,CAAY,CAACY,KAAb,CAAmBC,WAA1B,CAApB,CAjB2B,CAoB9Cf,CAAC,CAAC,wCAAD,CAAD,CAA4CgB,KAA5C,CAAkD,SAASC,CAAT,CAAgB,CAE9DA,CAAK,CAACC,eAAN,GAEA,GAAgC,GAA5B,EAAAZ,CAAJ,CAAqC,CACjCN,CAAC,CAACmB,IAAF,CAAOZ,CAAP,CAAuBI,CAAvB,EAAqCS,IAArC,CAA0C,SAASC,CAAT,CAAkBC,CAAlB,CAAyB,CAC/DA,CAAK,CAACC,QAAN,CAAeF,CAAO,CAAC,CAAD,CAAtB,EACAC,CAAK,CAACE,OAAN,CAAcH,CAAO,CAAC,CAAD,CAArB,EACAC,CAAK,CAACG,iBAAN,CAAwBJ,CAAO,CAAC,CAAD,CAA/B,EAEAC,CAAK,CAACI,OAAN,GAAgBC,EAAhB,CAAmBxB,CAAW,CAACyB,IAA/B,CAAqC,UAAW,CAC5CC,CAAC,CAACC,IAAF,CAAOC,mBAAP,CAA2B,yCAA3B,KAEA/B,CAAC,CAAC,iCAAD,CAAD,CAAqCgC,KAArC,CAA2C,OAA3C,CACH,CAJD,EAKAV,CAAK,CAACW,IAAN,GACA,MAAOX,CAAAA,CACV,CAZD,EAYGY,IAZH,CAYQ9B,CAAY,CAAC+B,SAZrB,CAaH,CAdD,IAcO,CACHN,CAAC,CAACC,IAAF,CAAOC,mBAAP,CAA2B,yCAA3B,KAEA/B,CAAC,CAAC,iCAAD,CAAD,CAAqCgC,KAArC,CAA2C,OAA3C,CACH,CACJ,CAvBD,CAwBH,CAED,MAAO,CACHI,IAAI,CAAE,cAAS9B,CAAT,CAAmC,CACrCD,CAAc,CAACC,CAAD,CACjB,CAHE,CAKV,CA5DK,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 <http://www.gnu.org/licenses/>.\n\n/**\n * Theme Boost Campus - JS code for feature information banner\n *\n * @module     theme_boost_campus/infobanner\n * @copyright  2020 Kathrin Osswald, Ulm University <kathrin.osswald@uni-ulm.de>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/str', 'core/modal_factory', 'core/modal_events', 'core/notification'],\n    function($, str, ModalFactory, ModalEvents, Notification) {\n    \"use strict\";\n\n    /**\n     * Initialising.\n     *\n     * @param {string} showconfirmationdialogue\n     */\n    function initInfoBanner(showconfirmationdialogue) {\n\n        var stringsforInfoBannerJS = [\n            {\n                key: 'confirmation',\n                component: 'theme_boost_campus'\n            }, {\n                key: 'closingperpetualinfobanner',\n                component: 'theme_boost_campus'\n            }, {\n                key: 'yes_close',\n                component: 'theme_boost_campus'\n            }\n        ];\n\n        // Load the strings and modal before clicking on the button so that the confirmation dialogue can pop up faster.\n        var stringsPromise = str.get_strings(stringsforInfoBannerJS);\n        var modalPromise = ModalFactory.create({type: ModalFactory.types.SAVE_CANCEL});\n\n        // With this we store the dismissing of the info banner as a user preference to persist this decision.\n        $('#themeboostcampusperpinfobanner .close').click(function(event) {\n            // Stop propagation to keep the info banner there until the decision in the confirmation dialogue has been made.\n            event.stopPropagation();\n\n            if (showconfirmationdialogue == '1') {\n                $.when(stringsPromise, modalPromise).then(function(strings, modal) {\n                    modal.setTitle(strings[0]);\n                    modal.setBody(strings[1]);\n                    modal.setSaveButtonText(strings[2]);\n                    // Saved clicked - the dismissing of the info banner is confirmed.\n                    modal.getRoot().on(ModalEvents.save, function() {\n                        M.util.set_user_preference('theme_boost_campus_infobanner_dismissed', true);\n                        // Now close the alert.\n                        $('#themeboostcampusperpinfobanner').alert('close');\n                    });\n                    modal.show();\n                    return modal;\n                }).fail(Notification.exception);\n            } else {\n                M.util.set_user_preference('theme_boost_campus_infobanner_dismissed', true);\n                // Now close the alert.\n                $('#themeboostcampusperpinfobanner').alert('close');\n            }\n        });\n    }\n\n    return {\n        init: function(showconfirmationdialogue) {\n            initInfoBanner(showconfirmationdialogue);\n        }\n    };\n});\n"],"file":"infobanner.min.js"}
\ No newline at end of file
+{"version":3,"file":"infobanner.min.js","sources":["../src/infobanner.js"],"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 <http://www.gnu.org/licenses/>.\n\n/**\n * Theme Boost Campus - JS code for feature information banner\n *\n * @module     theme_boost_campus/infobanner\n * @copyright  2020 Kathrin Osswald, Ulm University <kathrin.osswald@uni-ulm.de>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery', 'core/str', 'core/modal_factory', 'core/modal_events', 'core/notification'],\n    function($, str, ModalFactory, ModalEvents, Notification) {\n    \"use strict\";\n\n    /**\n     * Initialising.\n     *\n     * @param {string} showconfirmationdialogue\n     */\n    function initInfoBanner(showconfirmationdialogue) {\n\n        var stringsforInfoBannerJS = [\n            {\n                key: 'confirmation',\n                component: 'theme_boost_campus'\n            }, {\n                key: 'closingperpetualinfobanner',\n                component: 'theme_boost_campus'\n            }, {\n                key: 'yes_close',\n                component: 'theme_boost_campus'\n            }\n        ];\n\n        // Load the strings and modal before clicking on the button so that the confirmation dialogue can pop up faster.\n        var stringsPromise = str.get_strings(stringsforInfoBannerJS);\n        var modalPromise = ModalFactory.create({type: ModalFactory.types.SAVE_CANCEL});\n\n        // With this we store the dismissing of the info banner as a user preference to persist this decision.\n        $('#themeboostcampusperpinfobanner .close').click(function(event) {\n            // Stop propagation to keep the info banner there until the decision in the confirmation dialogue has been made.\n            event.stopPropagation();\n\n            if (showconfirmationdialogue == '1') {\n                $.when(stringsPromise, modalPromise).then(function(strings, modal) {\n                    modal.setTitle(strings[0]);\n                    modal.setBody(strings[1]);\n                    modal.setSaveButtonText(strings[2]);\n                    // Saved clicked - the dismissing of the info banner is confirmed.\n                    modal.getRoot().on(ModalEvents.save, function() {\n                        M.util.set_user_preference('theme_boost_campus_infobanner_dismissed', true);\n                        // Now close the alert.\n                        $('#themeboostcampusperpinfobanner').alert('close');\n                    });\n                    modal.show();\n                    return modal;\n                }).fail(Notification.exception);\n            } else {\n                M.util.set_user_preference('theme_boost_campus_infobanner_dismissed', true);\n                // Now close the alert.\n                $('#themeboostcampusperpinfobanner').alert('close');\n            }\n        });\n    }\n\n    return {\n        init: function(showconfirmationdialogue) {\n            initInfoBanner(showconfirmationdialogue);\n        }\n    };\n});\n"],"names":["define","$","str","ModalFactory","ModalEvents","Notification","init","showconfirmationdialogue","stringsPromise","get_strings","key","component","modalPromise","create","type","types","SAVE_CANCEL","click","event","stopPropagation","when","then","strings","modal","setTitle","setBody","setSaveButtonText","getRoot","on","save","M","util","set_user_preference","alert","show","fail","exception","initInfoBanner"],"mappings":";;;;;;;AAuBAA,uCAAO,CAAC,SAAU,WAAY,qBAAsB,oBAAqB,sBACrE,SAASC,EAAGC,IAAKC,aAAcC,YAAaC,oBAsDrC,CACHC,KAAM,SAASC,oCA/CKA,8BAgBhBC,eAAiBN,IAAIO,YAdI,CACzB,CACIC,IAAK,eACLC,UAAW,sBACZ,CACCD,IAAK,6BACLC,UAAW,sBACZ,CACCD,IAAK,YACLC,UAAW,wBAMfC,aAAeT,aAAaU,OAAO,CAACC,KAAMX,aAAaY,MAAMC,cAGjEf,EAAE,0CAA0CgB,OAAM,SAASC,OAEvDA,MAAMC,kBAE0B,KAA5BZ,yBACAN,EAAEmB,KAAKZ,eAAgBI,cAAcS,MAAK,SAASC,QAASC,cACxDA,MAAMC,SAASF,QAAQ,IACvBC,MAAME,QAAQH,QAAQ,IACtBC,MAAMG,kBAAkBJ,QAAQ,IAEhCC,MAAMI,UAAUC,GAAGxB,YAAYyB,MAAM,WACjCC,EAAEC,KAAKC,oBAAoB,2CAA2C,GAEtE/B,EAAE,mCAAmCgC,MAAM,YAE/CV,MAAMW,OACCX,SACRY,KAAK9B,aAAa+B,YAErBN,EAAEC,KAAKC,oBAAoB,2CAA2C,GAEtE/B,EAAE,mCAAmCgC,MAAM,aAO/CI,CAAe9B"}
\ No newline at end of file
diff --git a/classes/output/core_renderer.php b/classes/output/core_renderer.php
index 347da7cc1637c00b0ef55350438982a285bb50ce..dcd8a5cb69e4fb0b69b15740936d830766df310e 100644
--- a/classes/output/core_renderer.php
+++ b/classes/output/core_renderer.php
@@ -47,9 +47,6 @@ use url_select;
 use context_course;
 use pix_icon;
 
-defined('MOODLE_INTERNAL') || die;
-
-
 /**
  * Extending the core_renderer interface.
  *
diff --git a/classes/privacy/provider.php b/classes/privacy/provider.php
index 1c2fcdb3d4915d250a9a9df62ac2326b562806b8..31c024fdfc4914d1fed73cf5eecd5555c52379c5 100644
--- a/classes/privacy/provider.php
+++ b/classes/privacy/provider.php
@@ -24,8 +24,6 @@
 
 namespace theme_boost_campus\privacy;
 
-defined('MOODLE_INTERNAL') || die();
-
 use \core_privacy\local\metadata\collection;
 use core_privacy\local\request\writer;
 
diff --git a/db/uninstall.php b/db/uninstall.php
index 02c443dd11a0e5411e9a9c623c4f6cbb494c39fc..d2f26d57746d7cdf050735e2d4af10d283c34e24 100644
--- a/db/uninstall.php
+++ b/db/uninstall.php
@@ -22,8 +22,6 @@
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-defined('MOODLE_INTERNAL') || die();
-
 /**
  * Plugin uninstall steps.
  */
diff --git a/db/upgrade.php b/db/upgrade.php
index 450c69245858c7c51773eb2dbeae7bf8f4a3779d..e1701338b904604b17bff91614d6f4a867ec70b5 100644
--- a/db/upgrade.php
+++ b/db/upgrade.php
@@ -22,8 +22,6 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-defined('MOODLE_INTERNAL') || die;
-
 /**
  * Function to upgrade theme_boost_campus
  * @param int $oldversion the version we are upgrading from
diff --git a/lib.php b/lib.php
index 93446b35e8c561b7da69ff9b115cb60b25077324..6c083b198fdfd935db5883ee4b25b7a12e8e85e1 100644
--- a/lib.php
+++ b/lib.php
@@ -22,8 +22,6 @@
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-defined('MOODLE_INTERNAL') || die();
-
 /**
  * Returns the main SCSS content.
  *
diff --git a/locallib.php b/locallib.php
index 0270e766c8effa37394b7660058f839ae3387641..c5c85085d2ae028398f06ae8c4c7aeb8f3a7294f 100644
--- a/locallib.php
+++ b/locallib.php
@@ -21,8 +21,6 @@
  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
- defined('MOODLE_INTERNAL') || die();
-
 /**
  * Return the files from the loginbackgroundimage file area.
  * This function always loads the files from the filearea that is not really performant.