diff --git a/lib/form/amd/build/showadvanced.min.js b/lib/form/amd/build/showadvanced.min.js
index 5320d5e7ce8..5a86af8007e 100644
--- a/lib/form/amd/build/showadvanced.min.js
+++ b/lib/form/amd/build/showadvanced.min.js
@@ -1,2 +1,2 @@
-define ("core_form/showadvanced",["jquery","core/log","core/str","core/notification"],function(a,b,c,d){var f={FIELDSETCONTAINSADVANCED:"fieldset.containsadvancedelements",DIVFITEMADVANCED:"div.fitem.advanced",DIVFCONTAINER:"div.fcontainer",MORELESSLINK:"fieldset.containsadvancedelements .moreless-toggler"},g={SHOW:"show",MORELESSACTIONS:"moreless-actions",MORELESSTOGGLER:"moreless-toggler",SHOWLESS:"moreless-less"},h={FITEM:"
",FELEMENT:""},i=0,j=function(b){this.id=b;var c=a(document.getElementById(b));this.enhanceForm(c)};j.prototype.id="";j.prototype.enhanceForm=function(b){var c=b.find(f.FIELDSETCONTAINSADVANCED);c.each(function(b,c){this.enhanceFieldset(a(c))}.bind(this));b.on("click",f.MORELESSLINK,this.switchState);b.on("keydown",f.MORELESSLINK,function(a){if(13==a.which||32==a.which){return this.switchState(a)}return!0}.bind(this));return this};j.prototype.generateId=function(a){var b=a.prop("id");if("undefined"==typeof b){b="showadvancedid-"+i++;a.prop("id",b)}return b};j.prototype.enhanceFieldset=function(e){var i=a("input[name=mform_showmore_"+e.prop("id")+"]");if(!i.length){b.debug("M.form.showadvanced::processFieldset was called on an fieldset without a status field: '"+e.prop("id")+"'");return this}c.get_strings([{key:"showmore",component:"core_form"},{key:"showless",component:"core_form"}]).then(function(b){var c=b[0],d=b[1],j=a("");j.addClass(g.MORELESSTOGGLER);if("0"===i.val()){j.html(c)}else{j.html(d);j.addClass(g.SHOWLESS);e.find(f.DIVFITEMADVANCED).addClass(g.SHOW)}var k=[];e.find(f.DIVFITEMADVANCED).each(function(b,c){k[k.length]=this.generateId(a(c))}.bind(this));j.attr("role","button");j.attr("aria-controls",k.join(" "));var l=a(h.FITEM);l.addClass(g.MORELESSACTIONS);var m=a(h.FELEMENT);m.append(j);l.append(m);e.find(f.DIVFCONTAINER).append(l);return!0}.bind(this)).fail(d.exception);return this};j.prototype.switchState=function(b){b.preventDefault();c.get_strings([{key:"showmore",component:"core_form"},{key:"showless",component:"core_form"}]).then(function(c){var d=c[0],e=c[1],h=a(b.target).closest(f.FIELDSETCONTAINSADVANCED);h.find(f.DIVFITEMADVANCED).toggleClass(g.SHOW);var i=a("input[name=mform_showmore_"+h.prop("id")+"]");if("0"===i.val()){i.val(1);a(b.target).addClass(g.SHOWLESS);a(b.target).html(e)}else{i.val(0);a(b.target).removeClass(g.SHOWLESS);a(b.target).html(d)}return!0}).fail(d.exception);return this};return{init:function init(a){return new j(a)}}});
+define ("core_form/showadvanced",["jquery","core/log","core/str","core/notification"],function(a,b,c,d){var f={FIELDSETCONTAINSADVANCED:"fieldset.containsadvancedelements",DIVFITEMADVANCED:"div.fitem.advanced",DIVADVANCEDSECTION:"div#form-advanced-div",DIVFCONTAINER:"div.fcontainer",MORELESSLINK:"fieldset.containsadvancedelements .moreless-toggler"},g={SHOW:"show",MORELESSACTIONS:"moreless-actions",MORELESSTOGGLER:"moreless-toggler",SHOWLESS:"moreless-less"},h={FITEM:"",FELEMENT:"",ADVANCEDDIV:""},i=0,j=function(b){this.id=b;var c=a(document.getElementById(b));this.enhanceForm(c)};j.prototype.id="";j.prototype.enhanceForm=function(b){var c=b.find(f.FIELDSETCONTAINSADVANCED);c.each(function(b,c){this.enhanceFieldset(a(c))}.bind(this));b.on("click",f.MORELESSLINK,this.switchState);b.on("keydown",f.MORELESSLINK,function(a){if(13==a.which||32==a.which){return this.switchState(a)}return!0}.bind(this));return this};j.prototype.generateId=function(a){var b=a.prop("id");if("undefined"==typeof b){b="showadvancedid-"+i++;a.prop("id",b)}return b};j.prototype.enhanceFieldset=function(e){var i=a("input[name=mform_showmore_"+e.prop("id")+"]");if(!i.length){b.debug("M.form.showadvanced::processFieldset was called on an fieldset without a status field: '"+e.prop("id")+"'");return this}c.get_strings([{key:"showmore",component:"core_form"},{key:"showless",component:"core_form"}]).then(function(b){var c=b[0],d=b[1],j=a("");j.addClass(g.MORELESSTOGGLER);if("0"===i.val()){j.html(c);j.attr("aria-expanded","false")}else{j.html(d);j.attr("aria-expanded","true");j.addClass(g.SHOWLESS);e.find(f.DIVFITEMADVANCED).addClass(g.SHOW)}var k=[];e.find(f.DIVFITEMADVANCED).each(function(b,c){k[k.length]=this.generateId(a(c))}.bind(this));j.attr("role","button");j.attr("aria-controls","form-advanced-div");var l=a(h.ADVANCEDDIV);e.find(f.DIVFITEMADVANCED).wrapAll(l);var m=a(h.FITEM);m.addClass(g.MORELESSACTIONS);var n=a(h.FELEMENT);n.append(j);m.append(n);e.find(f.DIVADVANCEDSECTION).before(m);return!0}.bind(this)).fail(d.exception);return this};j.prototype.switchState=function(b){b.preventDefault();c.get_strings([{key:"showmore",component:"core_form"},{key:"showless",component:"core_form"}]).then(function(c){var d=c[0],e=c[1],h=a(b.target).closest(f.FIELDSETCONTAINSADVANCED);h.find(f.DIVFITEMADVANCED).toggleClass(g.SHOW);var i=a("input[name=mform_showmore_"+h.prop("id")+"]");if("0"===i.val()){i.val(1);a(b.target).addClass(g.SHOWLESS);a(b.target).html(e);a(b.target).attr("aria-expanded","true")}else{i.val(0);a(b.target).removeClass(g.SHOWLESS);a(b.target).html(d);a(b.target).attr("aria-expanded","false")}return!0}).fail(d.exception);return this};return{init:function init(a){return new j(a)}}});
//# sourceMappingURL=showadvanced.min.js.map
diff --git a/lib/form/amd/build/showadvanced.min.js.map b/lib/form/amd/build/showadvanced.min.js.map
index 0a3356d9c03..71a633548c7 100644
--- a/lib/form/amd/build/showadvanced.min.js.map
+++ b/lib/form/amd/build/showadvanced.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/showadvanced.js"],"names":["define","$","Log","Strings","Notification","SELECTORS","FIELDSETCONTAINSADVANCED","DIVFITEMADVANCED","DIVFCONTAINER","MORELESSLINK","CSS","SHOW","MORELESSACTIONS","MORELESSTOGGLER","SHOWLESS","WRAPPERS","FITEM","FELEMENT","uniqIdSeed","ShowAdvanced","id","form","document","getElementById","enhanceForm","prototype","fieldsets","find","each","index","item","enhanceFieldset","bind","on","switchState","e","which","generateId","node","prop","fieldset","statuselement","length","debug","get_strings","key","component","then","results","showmore","showless","morelesslink","addClass","val","html","idlist","attr","join","fitem","felement","append","fail","exception","preventDefault","target","closest","toggleClass","removeClass","init","formid"],"mappings":"AAwBAA,OAAM,0BAAC,CAAC,QAAD,CAAW,UAAX,CAAuB,UAAvB,CAAmC,mBAAnC,CAAD,CAA0D,SAASC,CAAT,CAAYC,CAAZ,CAAiBC,CAAjB,CAA0BC,CAA1B,CAAwC,IAEhGC,CAAAA,CAAS,CAAG,CACRC,wBAAwB,CAAE,mCADlB,CAERC,gBAAgB,CAAE,oBAFV,CAGRC,aAAa,CAAE,gBAHP,CAIRC,YAAY,CAAE,qDAJN,CAFoF,CAQhGC,CAAG,CAAG,CACFC,IAAI,CAAE,MADJ,CAEFC,eAAe,CAAE,kBAFf,CAGFC,eAAe,CAAE,kBAHf,CAIFC,QAAQ,CAAE,eAJR,CAR0F,CAchGC,CAAQ,CAAG,CACPC,KAAK,CAAE,6BADA,CAEPC,QAAQ,CAAE,gCAFH,CAdqF,CAqBhGC,CAAU,CAAG,CArBmF,CA2BhGC,CAAY,CAAG,SAASC,CAAT,CAAa,CAC5B,KAAKA,EAAL,CAAUA,CAAV,CAEA,GAAIC,CAAAA,CAAI,CAAGpB,CAAC,CAACqB,QAAQ,CAACC,cAAT,CAAwBH,CAAxB,CAAD,CAAZ,CACA,KAAKI,WAAL,CAAiBH,CAAjB,CACH,CAhCmG,CAmCpGF,CAAY,CAACM,SAAb,CAAuBL,EAAvB,CAA4B,EAA5B,CAOAD,CAAY,CAACM,SAAb,CAAuBD,WAAvB,CAAqC,SAASH,CAAT,CAAe,CAChD,GAAIK,CAAAA,CAAS,CAAGL,CAAI,CAACM,IAAL,CAAUtB,CAAS,CAACC,wBAApB,CAAhB,CAGAoB,CAAS,CAACE,IAAV,CAAe,SAASC,CAAT,CAAgBC,CAAhB,CAAsB,CACjC,KAAKC,eAAL,CAAqB9B,CAAC,CAAC6B,CAAD,CAAtB,CACH,CAFc,CAEbE,IAFa,CAER,IAFQ,CAAf,EAMAX,CAAI,CAACY,EAAL,CAAQ,OAAR,CAAiB5B,CAAS,CAACI,YAA3B,CAAyC,KAAKyB,WAA9C,EAGAb,CAAI,CAACY,EAAL,CAAQ,SAAR,CAAmB5B,CAAS,CAACI,YAA7B,CAA2C,SAAS0B,CAAT,CAAY,CAEnD,GAAe,EAAX,EAAAA,CAAC,CAACC,KAAF,EAA4B,EAAX,EAAAD,CAAC,CAACC,KAAvB,CAAoC,CAChC,MAAO,MAAKF,WAAL,CAAiBC,CAAjB,CACV,CACD,QACH,CAN0C,CAMzCH,IANyC,CAMpC,IANoC,CAA3C,EAOA,MAAO,KACV,CArBD,CAgCAb,CAAY,CAACM,SAAb,CAAuBY,UAAvB,CAAoC,SAASC,CAAT,CAAe,CAC/C,GAAIlB,CAAAA,CAAE,CAAGkB,CAAI,CAACC,IAAL,CAAU,IAAV,CAAT,CACA,GAAkB,WAAd,QAAOnB,CAAAA,CAAX,CAA+B,CAC3BA,CAAE,CAAG,kBAAYF,CAAU,EAA3B,CACAoB,CAAI,CAACC,IAAL,CAAU,IAAV,CAAgBnB,CAAhB,CACH,CACD,MAAOA,CAAAA,CACV,CAPD,CAcAD,CAAY,CAACM,SAAb,CAAuBM,eAAvB,CAAyC,SAASS,CAAT,CAAmB,CACxD,GAAIC,CAAAA,CAAa,CAAGxC,CAAC,CAAC,6BAA+BuC,CAAQ,CAACD,IAAT,CAAc,IAAd,CAA/B,CAAqD,GAAtD,CAArB,CACA,GAAI,CAACE,CAAa,CAACC,MAAnB,CAA2B,CACvBxC,CAAG,CAACyC,KAAJ,CAAU,2FACNH,CAAQ,CAACD,IAAT,CAAc,IAAd,CADM,CACgB,GAD1B,EAEA,MAAO,KACV,CAGDpC,CAAO,CAACyC,WAAR,CAAoB,CAAC,CACjBC,GAAG,CAAE,UADY,CAEjBC,SAAS,CAAE,WAFM,CAAD,CAGjB,CACCD,GAAG,CAAE,UADN,CAECC,SAAS,CAAE,WAFZ,CAHiB,CAApB,EAMIC,IANJ,CAMS,SAASC,CAAT,CAAkB,IACnBC,CAAAA,CAAQ,CAAGD,CAAO,CAAC,CAAD,CADC,CAEnBE,CAAQ,CAAGF,CAAO,CAAC,CAAD,CAFC,CAKnBG,CAAY,CAAGlD,CAAC,CAAC,oBAAD,CALG,CAMvBkD,CAAY,CAACC,QAAb,CAAsB1C,CAAG,CAACG,eAA1B,EACA,GAA4B,GAAxB,GAAA4B,CAAa,CAACY,GAAd,EAAJ,CAAiC,CAC7BF,CAAY,CAACG,IAAb,CAAkBL,CAAlB,CACH,CAFD,IAEO,CACHE,CAAY,CAACG,IAAb,CAAkBJ,CAAlB,EACAC,CAAY,CAACC,QAAb,CAAsB1C,CAAG,CAACI,QAA1B,EACA0B,CAAQ,CAACb,IAAT,CAActB,CAAS,CAACE,gBAAxB,EAA0C6C,QAA1C,CAAmD1C,CAAG,CAACC,IAAvD,CACH,CAED,GAAI4C,CAAAA,CAAM,CAAG,EAAb,CACAf,CAAQ,CAACb,IAAT,CAActB,CAAS,CAACE,gBAAxB,EAA0CqB,IAA1C,CAA+C,SAASC,CAAT,CAAgBS,CAAhB,CAAsB,CACjEiB,CAAM,CAACA,CAAM,CAACb,MAAR,CAAN,CAAwB,KAAKL,UAAL,CAAgBpC,CAAC,CAACqC,CAAD,CAAjB,CAC3B,CAF8C,CAE7CN,IAF6C,CAExC,IAFwC,CAA/C,EAKAmB,CAAY,CAACK,IAAb,CAAkB,MAAlB,CAA0B,QAA1B,EACAL,CAAY,CAACK,IAAb,CAAkB,eAAlB,CAAmCD,CAAM,CAACE,IAAP,CAAY,GAAZ,CAAnC,EAGA,GAAIC,CAAAA,CAAK,CAAGzD,CAAC,CAACc,CAAQ,CAACC,KAAV,CAAb,CACA0C,CAAK,CAACN,QAAN,CAAe1C,CAAG,CAACE,eAAnB,EACA,GAAI+C,CAAAA,CAAQ,CAAG1D,CAAC,CAACc,CAAQ,CAACE,QAAV,CAAhB,CACA0C,CAAQ,CAACC,MAAT,CAAgBT,CAAhB,EACAO,CAAK,CAACE,MAAN,CAAaD,CAAb,EAEAnB,CAAQ,CAACb,IAAT,CAActB,CAAS,CAACG,aAAxB,EAAuCoD,MAAvC,CAA8CF,CAA9C,EACA,QACH,CAjCQ,CAiCP1B,IAjCO,CAiCF,IAjCE,CANT,EAuCc6B,IAvCd,CAuCmBzD,CAAY,CAAC0D,SAvChC,EAyCA,MAAO,KACV,CAnDD,CA0DA3C,CAAY,CAACM,SAAb,CAAuBS,WAAvB,CAAqC,SAASC,CAAT,CAAY,CAC7CA,CAAC,CAAC4B,cAAF,GAGA5D,CAAO,CAACyC,WAAR,CAAoB,CAAC,CACjBC,GAAG,CAAE,UADY,CAEjBC,SAAS,CAAE,WAFM,CAAD,CAGjB,CACCD,GAAG,CAAE,UADN,CAECC,SAAS,CAAE,WAFZ,CAHiB,CAApB,EAMIC,IANJ,CAMS,SAASC,CAAT,CAAkB,CACvB,GAAIC,CAAAA,CAAQ,CAAGD,CAAO,CAAC,CAAD,CAAtB,CACIE,CAAQ,CAAGF,CAAO,CAAC,CAAD,CADtB,CAEIR,CAAQ,CAAGvC,CAAC,CAACkC,CAAC,CAAC6B,MAAH,CAAD,CAAYC,OAAZ,CAAoB5D,CAAS,CAACC,wBAA9B,CAFf,CAKAkC,CAAQ,CAACb,IAAT,CAActB,CAAS,CAACE,gBAAxB,EAA0C2D,WAA1C,CAAsDxD,CAAG,CAACC,IAA1D,EAGA,GAAI8B,CAAAA,CAAa,CAAGxC,CAAC,CAAC,6BAA+BuC,CAAQ,CAACD,IAAT,CAAc,IAAd,CAA/B,CAAqD,GAAtD,CAArB,CAGA,GAA4B,GAAxB,GAAAE,CAAa,CAACY,GAAd,EAAJ,CAAiC,CAC7BZ,CAAa,CAACY,GAAd,CAAkB,CAAlB,EACApD,CAAC,CAACkC,CAAC,CAAC6B,MAAH,CAAD,CAAYZ,QAAZ,CAAqB1C,CAAG,CAACI,QAAzB,EACAb,CAAC,CAACkC,CAAC,CAAC6B,MAAH,CAAD,CAAYV,IAAZ,CAAiBJ,CAAjB,CACH,CAJD,IAIO,CACHT,CAAa,CAACY,GAAd,CAAkB,CAAlB,EACApD,CAAC,CAACkC,CAAC,CAAC6B,MAAH,CAAD,CAAYG,WAAZ,CAAwBzD,CAAG,CAACI,QAA5B,EACAb,CAAC,CAACkC,CAAC,CAAC6B,MAAH,CAAD,CAAYV,IAAZ,CAAiBL,CAAjB,CACH,CACD,QACH,CA5BD,EA4BGY,IA5BH,CA4BQzD,CAAY,CAAC0D,SA5BrB,EA8BA,MAAO,KACV,CAnCD,CAqCA,MAAO,CAOHM,IAAI,CAAE,cAASC,CAAT,CAAiB,CACnB,MAAO,IAAIlD,CAAAA,CAAJ,CAAiBkD,CAAjB,CACV,CATE,CAWV,CAlMK,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 * A class to help show and hide advanced form content.\n *\n * @module core_form/showadvanced\n * @class showadvanced\n * @package core_form\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/log', 'core/str', 'core/notification'], function($, Log, Strings, Notification) {\n\n var SELECTORS = {\n FIELDSETCONTAINSADVANCED: 'fieldset.containsadvancedelements',\n DIVFITEMADVANCED: 'div.fitem.advanced',\n DIVFCONTAINER: 'div.fcontainer',\n MORELESSLINK: 'fieldset.containsadvancedelements .moreless-toggler'\n },\n CSS = {\n SHOW: 'show',\n MORELESSACTIONS: 'moreless-actions',\n MORELESSTOGGLER: 'moreless-toggler',\n SHOWLESS: 'moreless-less'\n },\n WRAPPERS = {\n FITEM: '',\n FELEMENT: ''\n },\n IDPREFIX = 'showadvancedid-';\n\n /** @type {Integer} uniqIdSeed Auto incrementing number used to generate ids. */\n var uniqIdSeed = 0;\n\n /**\n * ShowAdvanced behaviour class.\n * @param {String} id The id of the form.\n */\n var ShowAdvanced = function(id) {\n this.id = id;\n\n var form = $(document.getElementById(id));\n this.enhanceForm(form);\n };\n\n /** @type {String} id The form id to enhance. */\n ShowAdvanced.prototype.id = '';\n\n /**\n * @method enhanceForm\n * @param {JQuery} form JQuery selector representing the form\n * @return {ShowAdvanced}\n */\n ShowAdvanced.prototype.enhanceForm = function(form) {\n var fieldsets = form.find(SELECTORS.FIELDSETCONTAINSADVANCED);\n\n // Enhance each fieldset in the form matching the selector.\n fieldsets.each(function(index, item) {\n this.enhanceFieldset($(item));\n }.bind(this));\n\n // Attach some event listeners.\n // Subscribe more/less links to click event.\n form.on('click', SELECTORS.MORELESSLINK, this.switchState);\n\n // Subscribe to key events but filter for space or enter.\n form.on('keydown', SELECTORS.MORELESSLINK, function(e) {\n // Enter or space.\n if (e.which == 13 || e.which == 32) {\n return this.switchState(e);\n }\n return true;\n }.bind(this));\n return this;\n };\n\n\n /**\n * Generates a uniq id for the dom element it's called on unless the element already has an id.\n * The id is set on the dom node before being returned.\n *\n * @method generateId\n * @param {JQuery} node JQuery selector representing a single DOM Node.\n * @return {String}\n */\n ShowAdvanced.prototype.generateId = function(node) {\n var id = node.prop('id');\n if (typeof id === 'undefined') {\n id = IDPREFIX + (uniqIdSeed++);\n node.prop('id', id);\n }\n return id;\n };\n\n /**\n * @method enhanceFieldset\n * @param {JQuery} fieldset JQuery selector representing a fieldset\n * @return {ShowAdvanced}\n */\n ShowAdvanced.prototype.enhanceFieldset = function(fieldset) {\n var statuselement = $('input[name=mform_showmore_' + fieldset.prop('id') + ']');\n if (!statuselement.length) {\n Log.debug(\"M.form.showadvanced::processFieldset was called on an fieldset without a status field: '\" +\n fieldset.prop('id') + \"'\");\n return this;\n }\n\n // Fetch some strings.\n Strings.get_strings([{\n key: 'showmore',\n component: 'core_form'\n }, {\n key: 'showless',\n component: 'core_form'\n }]).then(function(results) {\n var showmore = results[0],\n showless = results[1];\n\n // Generate more/less links.\n var morelesslink = $('');\n morelesslink.addClass(CSS.MORELESSTOGGLER);\n if (statuselement.val() === '0') {\n morelesslink.html(showmore);\n } else {\n morelesslink.html(showless);\n morelesslink.addClass(CSS.SHOWLESS);\n fieldset.find(SELECTORS.DIVFITEMADVANCED).addClass(CSS.SHOW);\n }\n // Build a list of advanced fieldsets.\n var idlist = [];\n fieldset.find(SELECTORS.DIVFITEMADVANCED).each(function(index, node) {\n idlist[idlist.length] = this.generateId($(node));\n }.bind(this));\n\n // Set aria attributes.\n morelesslink.attr('role', 'button');\n morelesslink.attr('aria-controls', idlist.join(' '));\n\n // Add elements to the DOM.\n var fitem = $(WRAPPERS.FITEM);\n fitem.addClass(CSS.MORELESSACTIONS);\n var felement = $(WRAPPERS.FELEMENT);\n felement.append(morelesslink);\n fitem.append(felement);\n\n fieldset.find(SELECTORS.DIVFCONTAINER).append(fitem);\n return true;\n }.bind(this)).fail(Notification.exception);\n\n return this;\n };\n\n /**\n * @method switchState\n * @param {Event} e Event that triggered this action.\n * @return {Boolean}\n */\n ShowAdvanced.prototype.switchState = function(e) {\n e.preventDefault();\n\n // Fetch some strings.\n Strings.get_strings([{\n key: 'showmore',\n component: 'core_form'\n }, {\n key: 'showless',\n component: 'core_form'\n }]).then(function(results) {\n var showmore = results[0],\n showless = results[1],\n fieldset = $(e.target).closest(SELECTORS.FIELDSETCONTAINSADVANCED);\n\n // Toggle collapsed class.\n fieldset.find(SELECTORS.DIVFITEMADVANCED).toggleClass(CSS.SHOW);\n\n // Get corresponding hidden variable.\n var statuselement = $('input[name=mform_showmore_' + fieldset.prop('id') + ']');\n\n // Invert it and change the link text.\n if (statuselement.val() === '0') {\n statuselement.val(1);\n $(e.target).addClass(CSS.SHOWLESS);\n $(e.target).html(showless);\n } else {\n statuselement.val(0);\n $(e.target).removeClass(CSS.SHOWLESS);\n $(e.target).html(showmore);\n }\n return true;\n }).fail(Notification.exception);\n\n return this;\n };\n\n return {\n /**\n * Initialise this module.\n * @method init\n * @param {String} formid\n * @return {ShowAdvanced}\n */\n init: function(formid) {\n return new ShowAdvanced(formid);\n }\n };\n});\n"],"file":"showadvanced.min.js"}
\ No newline at end of file
+{"version":3,"sources":["../src/showadvanced.js"],"names":["define","$","Log","Strings","Notification","SELECTORS","FIELDSETCONTAINSADVANCED","DIVFITEMADVANCED","DIVADVANCEDSECTION","DIVFCONTAINER","MORELESSLINK","CSS","SHOW","MORELESSACTIONS","MORELESSTOGGLER","SHOWLESS","WRAPPERS","FITEM","FELEMENT","ADVANCEDDIV","uniqIdSeed","ShowAdvanced","id","form","document","getElementById","enhanceForm","prototype","fieldsets","find","each","index","item","enhanceFieldset","bind","on","switchState","e","which","generateId","node","prop","fieldset","statuselement","length","debug","get_strings","key","component","then","results","showmore","showless","morelesslink","addClass","val","html","attr","idlist","formadvancedsection","wrapAll","fitem","felement","append","before","fail","exception","preventDefault","target","closest","toggleClass","removeClass","init","formid"],"mappings":"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","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 * A class to help show and hide advanced form content.\n *\n * @module core_form/showadvanced\n * @class showadvanced\n * @package core_form\n * @copyright 2016 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/log', 'core/str', 'core/notification'], function($, Log, Strings, Notification) {\n\n var SELECTORS = {\n FIELDSETCONTAINSADVANCED: 'fieldset.containsadvancedelements',\n DIVFITEMADVANCED: 'div.fitem.advanced',\n DIVADVANCEDSECTION: 'div#form-advanced-div',\n DIVFCONTAINER: 'div.fcontainer',\n MORELESSLINK: 'fieldset.containsadvancedelements .moreless-toggler'\n },\n CSS = {\n SHOW: 'show',\n MORELESSACTIONS: 'moreless-actions',\n MORELESSTOGGLER: 'moreless-toggler',\n SHOWLESS: 'moreless-less'\n },\n WRAPPERS = {\n FITEM: '',\n FELEMENT: '',\n ADVANCEDDIV: ''\n },\n IDPREFIX = 'showadvancedid-';\n\n /** @type {Integer} uniqIdSeed Auto incrementing number used to generate ids. */\n var uniqIdSeed = 0;\n\n /**\n * ShowAdvanced behaviour class.\n * @param {String} id The id of the form.\n */\n var ShowAdvanced = function(id) {\n this.id = id;\n\n var form = $(document.getElementById(id));\n this.enhanceForm(form);\n };\n\n /** @type {String} id The form id to enhance. */\n ShowAdvanced.prototype.id = '';\n\n /**\n * @method enhanceForm\n * @param {JQuery} form JQuery selector representing the form\n * @return {ShowAdvanced}\n */\n ShowAdvanced.prototype.enhanceForm = function(form) {\n var fieldsets = form.find(SELECTORS.FIELDSETCONTAINSADVANCED);\n\n // Enhance each fieldset in the form matching the selector.\n fieldsets.each(function(index, item) {\n this.enhanceFieldset($(item));\n }.bind(this));\n\n // Attach some event listeners.\n // Subscribe more/less links to click event.\n form.on('click', SELECTORS.MORELESSLINK, this.switchState);\n\n // Subscribe to key events but filter for space or enter.\n form.on('keydown', SELECTORS.MORELESSLINK, function(e) {\n // Enter or space.\n if (e.which == 13 || e.which == 32) {\n return this.switchState(e);\n }\n return true;\n }.bind(this));\n return this;\n };\n\n\n /**\n * Generates a uniq id for the dom element it's called on unless the element already has an id.\n * The id is set on the dom node before being returned.\n *\n * @method generateId\n * @param {JQuery} node JQuery selector representing a single DOM Node.\n * @return {String}\n */\n ShowAdvanced.prototype.generateId = function(node) {\n var id = node.prop('id');\n if (typeof id === 'undefined') {\n id = IDPREFIX + (uniqIdSeed++);\n node.prop('id', id);\n }\n return id;\n };\n\n /**\n * @method enhanceFieldset\n * @param {JQuery} fieldset JQuery selector representing a fieldset\n * @return {ShowAdvanced}\n */\n ShowAdvanced.prototype.enhanceFieldset = function(fieldset) {\n var statuselement = $('input[name=mform_showmore_' + fieldset.prop('id') + ']');\n if (!statuselement.length) {\n Log.debug(\"M.form.showadvanced::processFieldset was called on an fieldset without a status field: '\" +\n fieldset.prop('id') + \"'\");\n return this;\n }\n\n // Fetch some strings.\n Strings.get_strings([{\n key: 'showmore',\n component: 'core_form'\n }, {\n key: 'showless',\n component: 'core_form'\n }]).then(function(results) {\n var showmore = results[0],\n showless = results[1];\n\n // Generate more/less links.\n var morelesslink = $('');\n morelesslink.addClass(CSS.MORELESSTOGGLER);\n if (statuselement.val() === '0') {\n morelesslink.html(showmore);\n morelesslink.attr('aria-expanded', 'false');\n } else {\n morelesslink.html(showless);\n morelesslink.attr('aria-expanded', 'true');\n morelesslink.addClass(CSS.SHOWLESS);\n fieldset.find(SELECTORS.DIVFITEMADVANCED).addClass(CSS.SHOW);\n }\n // Build a list of advanced fieldsets.\n var idlist = [];\n fieldset.find(SELECTORS.DIVFITEMADVANCED).each(function(index, node) {\n idlist[idlist.length] = this.generateId($(node));\n }.bind(this));\n\n // Set aria attributes.\n morelesslink.attr('role', 'button');\n morelesslink.attr('aria-controls', 'form-advanced-div');\n\n var formadvancedsection = $(WRAPPERS.ADVANCEDDIV);\n fieldset.find(SELECTORS.DIVFITEMADVANCED).wrapAll(formadvancedsection);\n // Add elements to the DOM.\n var fitem = $(WRAPPERS.FITEM);\n fitem.addClass(CSS.MORELESSACTIONS);\n var felement = $(WRAPPERS.FELEMENT);\n felement.append(morelesslink);\n fitem.append(felement);\n\n fieldset.find(SELECTORS.DIVADVANCEDSECTION).before(fitem);\n return true;\n }.bind(this)).fail(Notification.exception);\n\n return this;\n };\n\n /**\n * @method switchState\n * @param {Event} e Event that triggered this action.\n * @return {Boolean}\n */\n ShowAdvanced.prototype.switchState = function(e) {\n e.preventDefault();\n\n // Fetch some strings.\n Strings.get_strings([{\n key: 'showmore',\n component: 'core_form'\n }, {\n key: 'showless',\n component: 'core_form'\n }]).then(function(results) {\n var showmore = results[0],\n showless = results[1],\n fieldset = $(e.target).closest(SELECTORS.FIELDSETCONTAINSADVANCED);\n\n // Toggle collapsed class.\n fieldset.find(SELECTORS.DIVFITEMADVANCED).toggleClass(CSS.SHOW);\n\n // Get corresponding hidden variable.\n var statuselement = $('input[name=mform_showmore_' + fieldset.prop('id') + ']');\n\n // Invert it and change the link text.\n if (statuselement.val() === '0') {\n statuselement.val(1);\n $(e.target).addClass(CSS.SHOWLESS);\n $(e.target).html(showless);\n $(e.target).attr('aria-expanded', 'true');\n } else {\n statuselement.val(0);\n $(e.target).removeClass(CSS.SHOWLESS);\n $(e.target).html(showmore);\n $(e.target).attr('aria-expanded', 'false');\n }\n return true;\n }).fail(Notification.exception);\n\n return this;\n };\n\n return {\n /**\n * Initialise this module.\n * @method init\n * @param {String} formid\n * @return {ShowAdvanced}\n */\n init: function(formid) {\n return new ShowAdvanced(formid);\n }\n };\n});\n"],"file":"showadvanced.min.js"}
\ No newline at end of file
diff --git a/lib/form/amd/src/showadvanced.js b/lib/form/amd/src/showadvanced.js
index a9f9645a400..318db0e7896 100644
--- a/lib/form/amd/src/showadvanced.js
+++ b/lib/form/amd/src/showadvanced.js
@@ -27,6 +27,7 @@ define(['jquery', 'core/log', 'core/str', 'core/notification'], function($, Log,
var SELECTORS = {
FIELDSETCONTAINSADVANCED: 'fieldset.containsadvancedelements',
DIVFITEMADVANCED: 'div.fitem.advanced',
+ DIVADVANCEDSECTION: 'div#form-advanced-div',
DIVFCONTAINER: 'div.fcontainer',
MORELESSLINK: 'fieldset.containsadvancedelements .moreless-toggler'
},
@@ -38,7 +39,8 @@ define(['jquery', 'core/log', 'core/str', 'core/notification'], function($, Log,
},
WRAPPERS = {
FITEM: '',
- FELEMENT: ''
+ FELEMENT: '',
+ ADVANCEDDIV: ''
},
IDPREFIX = 'showadvancedid-';
@@ -134,8 +136,10 @@ define(['jquery', 'core/log', 'core/str', 'core/notification'], function($, Log,
morelesslink.addClass(CSS.MORELESSTOGGLER);
if (statuselement.val() === '0') {
morelesslink.html(showmore);
+ morelesslink.attr('aria-expanded', 'false');
} else {
morelesslink.html(showless);
+ morelesslink.attr('aria-expanded', 'true');
morelesslink.addClass(CSS.SHOWLESS);
fieldset.find(SELECTORS.DIVFITEMADVANCED).addClass(CSS.SHOW);
}
@@ -147,8 +151,10 @@ define(['jquery', 'core/log', 'core/str', 'core/notification'], function($, Log,
// Set aria attributes.
morelesslink.attr('role', 'button');
- morelesslink.attr('aria-controls', idlist.join(' '));
+ morelesslink.attr('aria-controls', 'form-advanced-div');
+ var formadvancedsection = $(WRAPPERS.ADVANCEDDIV);
+ fieldset.find(SELECTORS.DIVFITEMADVANCED).wrapAll(formadvancedsection);
// Add elements to the DOM.
var fitem = $(WRAPPERS.FITEM);
fitem.addClass(CSS.MORELESSACTIONS);
@@ -156,7 +162,7 @@ define(['jquery', 'core/log', 'core/str', 'core/notification'], function($, Log,
felement.append(morelesslink);
fitem.append(felement);
- fieldset.find(SELECTORS.DIVFCONTAINER).append(fitem);
+ fieldset.find(SELECTORS.DIVADVANCEDSECTION).before(fitem);
return true;
}.bind(this)).fail(Notification.exception);
@@ -194,10 +200,12 @@ define(['jquery', 'core/log', 'core/str', 'core/notification'], function($, Log,
statuselement.val(1);
$(e.target).addClass(CSS.SHOWLESS);
$(e.target).html(showless);
+ $(e.target).attr('aria-expanded', 'true');
} else {
statuselement.val(0);
$(e.target).removeClass(CSS.SHOWLESS);
$(e.target).html(showmore);
+ $(e.target).attr('aria-expanded', 'false');
}
return true;
}).fail(Notification.exception);