diff --git a/lib/form/amd/build/showadvanced.min.js b/lib/form/amd/build/showadvanced.min.js
new file mode 100644
index 00000000000..fb4ccde9d4b
--- /dev/null
+++ b/lib/form/amd/build/showadvanced.min.js
@@ -0,0 +1 @@
+define(["jquery","core/log","core/str","core/notification"],function(a,b,c,d){var e={FIELDSETCONTAINSADVANCED:"fieldset.containsadvancedelements",DIVFITEMADVANCED:"div.fitem.advanced",DIVFCONTAINER:"div.fcontainer",MORELESSLINK:"fieldset.containsadvancedelements .moreless-toggler"},f={SHOW:"show",MORELESSACTIONS:"moreless-actions",MORELESSTOGGLER:"moreless-toggler",SHOWLESS:"moreless-less"},g={FITEM:'
',FELEMENT:''},h="showadvancedid-",i=0,j=function(b){this.id=b;var c=a(document.getElementById(b));this.enhanceForm(c)};return j.prototype.id="",j.prototype.enhanceForm=function(b){var c=b.find(e.FIELDSETCONTAINSADVANCED);return c.each(function(b,c){this.enhanceFieldset(a(c))}.bind(this)),b.on("click",e.MORELESSLINK,this.switchState),b.on("keydown",e.MORELESSLINK,function(a){return 13!=a.which&&32!=a.which||this.switchState(a)}.bind(this)),this},j.prototype.generateId=function(a){var b=a.prop("id");return"undefined"==typeof b&&(b=h+i++,a.prop("id",b)),b},j.prototype.enhanceFieldset=function(h){var i=a("input[name=mform_showmore_"+h.prop("id")+"]");return i.length?(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(f.MORELESSTOGGLER),"0"===i.val()?j.html(c):(j.html(d),j.addClass(f.SHOWLESS),h.find(e.DIVFITEMADVANCED).addClass(f.SHOW));var k=[];h.find(e.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(g.FITEM);l.addClass(f.MORELESSACTIONS);var m=a(g.FELEMENT);return m.append(j),l.append(m),h.find(e.DIVFCONTAINER).append(l),!0}.bind(this)).fail(d.exception),this):(b.debug("M.form.showadvanced::processFieldset was called on an fieldset without a status field: '"+h.prop("id")+"'"),this)},j.prototype.switchState=function(b){return b.preventDefault(),c.get_strings([{key:"showmore",component:"core_form"},{key:"showless",component:"core_form"}]).then(function(c){var d=c[0],g=c[1],h=a(b.target).closest(e.FIELDSETCONTAINSADVANCED);h.find(e.DIVFITEMADVANCED).toggleClass(f.SHOW);var i=a("input[name=mform_showmore_"+h.prop("id")+"]");return"0"===i.val()?(i.val(1),a(b.target).addClass(f.SHOWLESS),a(b.target).html(g)):(i.val(0),a(b.target).removeClass(f.SHOWLESS),a(b.target).html(d)),!0}).fail(d.exception),this},{init:function(a){return new j(a)}}});
\ No newline at end of file
diff --git a/lib/form/amd/src/showadvanced.js b/lib/form/amd/src/showadvanced.js
new file mode 100644
index 00000000000..a9f9645a400
--- /dev/null
+++ b/lib/form/amd/src/showadvanced.js
@@ -0,0 +1,219 @@
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle. If not, see .
+
+/**
+ * A class to help show and hide advanced form content.
+ *
+ * @module core_form/showadvanced
+ * @class showadvanced
+ * @package core_form
+ * @copyright 2016 Damyon Wiese
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+define(['jquery', 'core/log', 'core/str', 'core/notification'], function($, Log, Strings, Notification) {
+
+ var SELECTORS = {
+ FIELDSETCONTAINSADVANCED: 'fieldset.containsadvancedelements',
+ DIVFITEMADVANCED: 'div.fitem.advanced',
+ DIVFCONTAINER: 'div.fcontainer',
+ MORELESSLINK: 'fieldset.containsadvancedelements .moreless-toggler'
+ },
+ CSS = {
+ SHOW: 'show',
+ MORELESSACTIONS: 'moreless-actions',
+ MORELESSTOGGLER: 'moreless-toggler',
+ SHOWLESS: 'moreless-less'
+ },
+ WRAPPERS = {
+ FITEM: '',
+ FELEMENT: ''
+ },
+ IDPREFIX = 'showadvancedid-';
+
+ /** @type {Integer} uniqIdSeed Auto incrementing number used to generate ids. */
+ var uniqIdSeed = 0;
+
+ /**
+ * ShowAdvanced behaviour class.
+ * @param {String} id The id of the form.
+ */
+ var ShowAdvanced = function(id) {
+ this.id = id;
+
+ var form = $(document.getElementById(id));
+ this.enhanceForm(form);
+ };
+
+ /** @type {String} id The form id to enhance. */
+ ShowAdvanced.prototype.id = '';
+
+ /**
+ * @method enhanceForm
+ * @param {JQuery} form JQuery selector representing the form
+ * @return {ShowAdvanced}
+ */
+ ShowAdvanced.prototype.enhanceForm = function(form) {
+ var fieldsets = form.find(SELECTORS.FIELDSETCONTAINSADVANCED);
+
+ // Enhance each fieldset in the form matching the selector.
+ fieldsets.each(function(index, item) {
+ this.enhanceFieldset($(item));
+ }.bind(this));
+
+ // Attach some event listeners.
+ // Subscribe more/less links to click event.
+ form.on('click', SELECTORS.MORELESSLINK, this.switchState);
+
+ // Subscribe to key events but filter for space or enter.
+ form.on('keydown', SELECTORS.MORELESSLINK, function(e) {
+ // Enter or space.
+ if (e.which == 13 || e.which == 32) {
+ return this.switchState(e);
+ }
+ return true;
+ }.bind(this));
+ return this;
+ };
+
+
+ /**
+ * Generates a uniq id for the dom element it's called on unless the element already has an id.
+ * The id is set on the dom node before being returned.
+ *
+ * @method generateId
+ * @param {JQuery} node JQuery selector representing a single DOM Node.
+ * @return {String}
+ */
+ ShowAdvanced.prototype.generateId = function(node) {
+ var id = node.prop('id');
+ if (typeof id === 'undefined') {
+ id = IDPREFIX + (uniqIdSeed++);
+ node.prop('id', id);
+ }
+ return id;
+ };
+
+ /**
+ * @method enhanceFieldset
+ * @param {JQuery} fieldset JQuery selector representing a fieldset
+ * @return {ShowAdvanced}
+ */
+ ShowAdvanced.prototype.enhanceFieldset = function(fieldset) {
+ var statuselement = $('input[name=mform_showmore_' + fieldset.prop('id') + ']');
+ if (!statuselement.length) {
+ Log.debug("M.form.showadvanced::processFieldset was called on an fieldset without a status field: '" +
+ fieldset.prop('id') + "'");
+ return this;
+ }
+
+ // Fetch some strings.
+ Strings.get_strings([{
+ key: 'showmore',
+ component: 'core_form'
+ }, {
+ key: 'showless',
+ component: 'core_form'
+ }]).then(function(results) {
+ var showmore = results[0],
+ showless = results[1];
+
+ // Generate more/less links.
+ var morelesslink = $('');
+ morelesslink.addClass(CSS.MORELESSTOGGLER);
+ if (statuselement.val() === '0') {
+ morelesslink.html(showmore);
+ } else {
+ morelesslink.html(showless);
+ morelesslink.addClass(CSS.SHOWLESS);
+ fieldset.find(SELECTORS.DIVFITEMADVANCED).addClass(CSS.SHOW);
+ }
+ // Build a list of advanced fieldsets.
+ var idlist = [];
+ fieldset.find(SELECTORS.DIVFITEMADVANCED).each(function(index, node) {
+ idlist[idlist.length] = this.generateId($(node));
+ }.bind(this));
+
+ // Set aria attributes.
+ morelesslink.attr('role', 'button');
+ morelesslink.attr('aria-controls', idlist.join(' '));
+
+ // Add elements to the DOM.
+ var fitem = $(WRAPPERS.FITEM);
+ fitem.addClass(CSS.MORELESSACTIONS);
+ var felement = $(WRAPPERS.FELEMENT);
+ felement.append(morelesslink);
+ fitem.append(felement);
+
+ fieldset.find(SELECTORS.DIVFCONTAINER).append(fitem);
+ return true;
+ }.bind(this)).fail(Notification.exception);
+
+ return this;
+ };
+
+ /**
+ * @method switchState
+ * @param {Event} e Event that triggered this action.
+ * @return {Boolean}
+ */
+ ShowAdvanced.prototype.switchState = function(e) {
+ e.preventDefault();
+
+ // Fetch some strings.
+ Strings.get_strings([{
+ key: 'showmore',
+ component: 'core_form'
+ }, {
+ key: 'showless',
+ component: 'core_form'
+ }]).then(function(results) {
+ var showmore = results[0],
+ showless = results[1],
+ fieldset = $(e.target).closest(SELECTORS.FIELDSETCONTAINSADVANCED);
+
+ // Toggle collapsed class.
+ fieldset.find(SELECTORS.DIVFITEMADVANCED).toggleClass(CSS.SHOW);
+
+ // Get corresponding hidden variable.
+ var statuselement = $('input[name=mform_showmore_' + fieldset.prop('id') + ']');
+
+ // Invert it and change the link text.
+ if (statuselement.val() === '0') {
+ statuselement.val(1);
+ $(e.target).addClass(CSS.SHOWLESS);
+ $(e.target).html(showless);
+ } else {
+ statuselement.val(0);
+ $(e.target).removeClass(CSS.SHOWLESS);
+ $(e.target).html(showmore);
+ }
+ return true;
+ }).fail(Notification.exception);
+
+ return this;
+ };
+
+ return {
+ /**
+ * Initialise this module.
+ * @method init
+ * @param {String} formid
+ * @return {ShowAdvanced}
+ */
+ init: function(formid) {
+ return new ShowAdvanced(formid);
+ }
+ };
+});
diff --git a/lib/form/yui/build/moodle-form-showadvanced/moodle-form-showadvanced-debug.js b/lib/form/yui/build/moodle-form-showadvanced/moodle-form-showadvanced-debug.js
deleted file mode 100644
index 4a032e0c237..00000000000
--- a/lib/form/yui/build/moodle-form-showadvanced/moodle-form-showadvanced-debug.js
+++ /dev/null
@@ -1,151 +0,0 @@
-YUI.add('moodle-form-showadvanced', function (Y, NAME) {
-
-/**
- * Provides the form showadvanced class.
- *
- * @module moodle-form-showadvanced
- */
-
-/**
- * A class to help show and hide advanced form content.
- *
- * @class M.form.showadvanced
- * @constructor
- * @extends Base
- */
-function SHOWADVANCED() {
- SHOWADVANCED.superclass.constructor.apply(this, arguments);
-}
-
-var SELECTORS = {
- FIELDSETCONTAINSADVANCED: 'fieldset.containsadvancedelements',
- DIVFITEMADVANCED: 'div.fitem.advanced',
- DIVFCONTAINER: 'div.fcontainer',
- MORELESSLINK: 'fieldset.containsadvancedelements .moreless-toggler'
- },
- CSS = {
- SHOW: 'show',
- MORELESSACTIONS: 'moreless-actions',
- MORELESSTOGGLER: 'moreless-toggler',
- SHOWLESS: 'moreless-less'
- },
- WRAPPERS = {
- FITEM: '',
- FELEMENT: ''
- },
- ATTRS = {};
-
-/**
- * The form ID attribute definition.
- *
- * @attribute formid
- * @type String
- * @default null
- * @writeOnce
- */
-ATTRS.formid = {
- value: null
-};
-
-Y.extend(SHOWADVANCED, Y.Base, {
- /**
- * The initializer for the showadvanced instance.
- *
- * @method initializer
- * @protected
- */
- initializer: function() {
- var form = Y.one('#' + this.get('formid')),
- fieldlist = form.all(SELECTORS.FIELDSETCONTAINSADVANCED);
-
- // Look through fieldset divs that contain advanced elements.
- fieldlist.each(this.processFieldset, this);
-
- // Subscribe more/less links to click event.
- form.delegate('click', this.switchState, SELECTORS.MORELESSLINK);
- form.delegate('key', this.switchState, 'down:enter,32', SELECTORS.MORELESSLINK);
- },
-
- /**
- * Process the supplied fieldset to add appropriate links, and ARIA roles.
- *
- * @method processFieldset
- * @param {Node} fieldset The Node relating to the fieldset to add collapsing to.
- * @chainable
- */
- processFieldset: function(fieldset) {
- var statuselement = Y.one('input[name=mform_showmore_' + fieldset.get('id') + ']');
- if (!statuselement) {
- Y.log("M.form.showadvanced::processFieldset was called on an fieldset without a status field: '" +
- fieldset.get('id') + "'", 'debug', 'moodle-form-showadvanced');
- return this;
- }
-
- var morelesslink = Y.Node.create('');
- morelesslink.addClass(CSS.MORELESSTOGGLER);
- if (statuselement.get('value') === '0') {
- morelesslink.setHTML(M.util.get_string('showmore', 'form'));
- } else {
- morelesslink.setHTML(M.util.get_string('showless', 'form'));
- morelesslink.addClass(CSS.SHOWLESS);
- fieldset.all(SELECTORS.DIVFITEMADVANCED).addClass(CSS.SHOW);
- }
-
- // Get list of IDs controlled by this button to set the aria-controls attribute.
- var idlist = [];
- fieldset.all(SELECTORS.DIVFITEMADVANCED).each(function(node) {
- idlist[idlist.length] = node.generateID();
- });
- morelesslink.setAttribute('role', 'button');
- morelesslink.setAttribute('aria-controls', idlist.join(' '));
-
- var fitem = Y.Node.create(WRAPPERS.FITEM);
- fitem.addClass(CSS.MORELESSACTIONS);
- var felement = Y.Node.create(WRAPPERS.FELEMENT);
- felement.append(morelesslink);
- fitem.append(felement);
-
- fieldset.one(SELECTORS.DIVFCONTAINER).append(fitem);
-
- return this;
- },
-
- /**
- * Toggle the state for the fieldset that was clicked.
- *
- * @method switchState
- * @param {EventFacade} e
- */
- switchState: function(e) {
- e.preventDefault();
- var fieldset = this.ancestor(SELECTORS.FIELDSETCONTAINSADVANCED);
-
- // Toggle collapsed class.
- fieldset.all(SELECTORS.DIVFITEMADVANCED).toggleClass(CSS.SHOW);
-
- // Get corresponding hidden variable.
- var statuselement = Y.one('input[name=mform_showmore_' + fieldset.get('id') + ']');
-
- // Invert it and change the link text.
- if (statuselement.get('value') === '0') {
- statuselement.set('value', 1);
- this.addClass(CSS.SHOWLESS);
- this.setHTML(M.util.get_string('showless', 'form'));
- } else {
- statuselement.set('value', 0);
- this.removeClass(CSS.SHOWLESS);
- this.setHTML(M.util.get_string('showmore', 'form'));
- }
- }
-}, {
- NAME: 'moodle-form-showadvanced',
- ATTRS: ATTRS
-});
-
-M.form = M.form || {};
-M.form.showadvanced = M.form.showadvanced || function(params) {
- return new SHOWADVANCED(params);
-};
-
-
-}, '@VERSION@', {"requires": ["node", "base", "selector-css3"]});
diff --git a/lib/form/yui/build/moodle-form-showadvanced/moodle-form-showadvanced-min.js b/lib/form/yui/build/moodle-form-showadvanced/moodle-form-showadvanced-min.js
deleted file mode 100644
index 8cfbaa15369..00000000000
--- a/lib/form/yui/build/moodle-form-showadvanced/moodle-form-showadvanced-min.js
+++ /dev/null
@@ -1 +0,0 @@
-YUI.add("moodle-form-showadvanced",function(e,t){function n(){n.superclass.constructor.apply(this,arguments)}var r={FIELDSETCONTAINSADVANCED:"fieldset.containsadvancedelements",DIVFITEMADVANCED:"div.fitem.advanced",DIVFCONTAINER:"div.fcontainer",MORELESSLINK:"fieldset.containsadvancedelements .moreless-toggler"},i={SHOW:"show",MORELESSACTIONS:"moreless-actions",MORELESSTOGGLER:"moreless-toggler",SHOWLESS:"moreless-less"},s={FITEM:'',FELEMENT:''},o={};o.formid={value:null},e.extend(n,e.Base,{initializer:function(){var t=e.one("#"+this.get("formid")),n=t.all(r.FIELDSETCONTAINSADVANCED);n.each(this.processFieldset,this),t.delegate("click",this.switchState,r.MORELESSLINK),t.delegate("key",this.switchState,"down:enter,32",r.MORELESSLINK)},processFieldset:function(t){var n=e.one("input[name=mform_showmore_"+t.get("id")+"]");if(!n)return this;var o=e.Node.create('');o.addClass(i.MORELESSTOGGLER),n.get("value")==="0"?o.setHTML(M.util.get_string("showmore","form")):(o.setHTML(M.util.get_string("showless","form")),o.addClass(i.SHOWLESS),t.all(r.DIVFITEMADVANCED).addClass(i.SHOW));var u=[];t.all(r.DIVFITEMADVANCED).each(function(e){u[u.length]=e.generateID()}),o.setAttribute("role","button"),o.setAttribute("aria-controls",u.join(" "));var a=e.Node.create(s.FITEM);a.addClass(i.MORELESSACTIONS);var f=e.Node.create(s.FELEMENT);return f.append(o),a.append(f),t.one(r.DIVFCONTAINER).append(a),this},switchState:function(t){t.preventDefault();var n=this.ancestor(r.FIELDSETCONTAINSADVANCED);n.all(r.DIVFITEMADVANCED).toggleClass(i.SHOW);var s=e.one("input[name=mform_showmore_"+n.get("id")+"]");s.get("value")==="0"?(s.set("value",1),this.addClass(i.SHOWLESS),this.setHTML(M.util.get_string("showless","form"))):(s.set("value",0),this.removeClass(i.SHOWLESS),this.setHTML(M.util.get_string("showmore","form")))}},{NAME:"moodle-form-showadvanced",ATTRS:o}),M.form=M.form||{},M.form.showadvanced=M.form.showadvanced||function(e){return new n(e)}},"@VERSION@",{requires:["node","base","selector-css3"]});
diff --git a/lib/form/yui/build/moodle-form-showadvanced/moodle-form-showadvanced.js b/lib/form/yui/build/moodle-form-showadvanced/moodle-form-showadvanced.js
deleted file mode 100644
index 6c2ee051be5..00000000000
--- a/lib/form/yui/build/moodle-form-showadvanced/moodle-form-showadvanced.js
+++ /dev/null
@@ -1,149 +0,0 @@
-YUI.add('moodle-form-showadvanced', function (Y, NAME) {
-
-/**
- * Provides the form showadvanced class.
- *
- * @module moodle-form-showadvanced
- */
-
-/**
- * A class to help show and hide advanced form content.
- *
- * @class M.form.showadvanced
- * @constructor
- * @extends Base
- */
-function SHOWADVANCED() {
- SHOWADVANCED.superclass.constructor.apply(this, arguments);
-}
-
-var SELECTORS = {
- FIELDSETCONTAINSADVANCED: 'fieldset.containsadvancedelements',
- DIVFITEMADVANCED: 'div.fitem.advanced',
- DIVFCONTAINER: 'div.fcontainer',
- MORELESSLINK: 'fieldset.containsadvancedelements .moreless-toggler'
- },
- CSS = {
- SHOW: 'show',
- MORELESSACTIONS: 'moreless-actions',
- MORELESSTOGGLER: 'moreless-toggler',
- SHOWLESS: 'moreless-less'
- },
- WRAPPERS = {
- FITEM: '',
- FELEMENT: ''
- },
- ATTRS = {};
-
-/**
- * The form ID attribute definition.
- *
- * @attribute formid
- * @type String
- * @default null
- * @writeOnce
- */
-ATTRS.formid = {
- value: null
-};
-
-Y.extend(SHOWADVANCED, Y.Base, {
- /**
- * The initializer for the showadvanced instance.
- *
- * @method initializer
- * @protected
- */
- initializer: function() {
- var form = Y.one('#' + this.get('formid')),
- fieldlist = form.all(SELECTORS.FIELDSETCONTAINSADVANCED);
-
- // Look through fieldset divs that contain advanced elements.
- fieldlist.each(this.processFieldset, this);
-
- // Subscribe more/less links to click event.
- form.delegate('click', this.switchState, SELECTORS.MORELESSLINK);
- form.delegate('key', this.switchState, 'down:enter,32', SELECTORS.MORELESSLINK);
- },
-
- /**
- * Process the supplied fieldset to add appropriate links, and ARIA roles.
- *
- * @method processFieldset
- * @param {Node} fieldset The Node relating to the fieldset to add collapsing to.
- * @chainable
- */
- processFieldset: function(fieldset) {
- var statuselement = Y.one('input[name=mform_showmore_' + fieldset.get('id') + ']');
- if (!statuselement) {
- return this;
- }
-
- var morelesslink = Y.Node.create('');
- morelesslink.addClass(CSS.MORELESSTOGGLER);
- if (statuselement.get('value') === '0') {
- morelesslink.setHTML(M.util.get_string('showmore', 'form'));
- } else {
- morelesslink.setHTML(M.util.get_string('showless', 'form'));
- morelesslink.addClass(CSS.SHOWLESS);
- fieldset.all(SELECTORS.DIVFITEMADVANCED).addClass(CSS.SHOW);
- }
-
- // Get list of IDs controlled by this button to set the aria-controls attribute.
- var idlist = [];
- fieldset.all(SELECTORS.DIVFITEMADVANCED).each(function(node) {
- idlist[idlist.length] = node.generateID();
- });
- morelesslink.setAttribute('role', 'button');
- morelesslink.setAttribute('aria-controls', idlist.join(' '));
-
- var fitem = Y.Node.create(WRAPPERS.FITEM);
- fitem.addClass(CSS.MORELESSACTIONS);
- var felement = Y.Node.create(WRAPPERS.FELEMENT);
- felement.append(morelesslink);
- fitem.append(felement);
-
- fieldset.one(SELECTORS.DIVFCONTAINER).append(fitem);
-
- return this;
- },
-
- /**
- * Toggle the state for the fieldset that was clicked.
- *
- * @method switchState
- * @param {EventFacade} e
- */
- switchState: function(e) {
- e.preventDefault();
- var fieldset = this.ancestor(SELECTORS.FIELDSETCONTAINSADVANCED);
-
- // Toggle collapsed class.
- fieldset.all(SELECTORS.DIVFITEMADVANCED).toggleClass(CSS.SHOW);
-
- // Get corresponding hidden variable.
- var statuselement = Y.one('input[name=mform_showmore_' + fieldset.get('id') + ']');
-
- // Invert it and change the link text.
- if (statuselement.get('value') === '0') {
- statuselement.set('value', 1);
- this.addClass(CSS.SHOWLESS);
- this.setHTML(M.util.get_string('showless', 'form'));
- } else {
- statuselement.set('value', 0);
- this.removeClass(CSS.SHOWLESS);
- this.setHTML(M.util.get_string('showmore', 'form'));
- }
- }
-}, {
- NAME: 'moodle-form-showadvanced',
- ATTRS: ATTRS
-});
-
-M.form = M.form || {};
-M.form.showadvanced = M.form.showadvanced || function(params) {
- return new SHOWADVANCED(params);
-};
-
-
-}, '@VERSION@', {"requires": ["node", "base", "selector-css3"]});
diff --git a/lib/form/yui/src/showadvanced/build.json b/lib/form/yui/src/showadvanced/build.json
deleted file mode 100644
index 2f817374d50..00000000000
--- a/lib/form/yui/src/showadvanced/build.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "name": "moodle-form-showadvanced",
- "builds": {
- "moodle-form-showadvanced": {
- "jsfiles": [
- "showadvanced.js"
- ]
- }
- }
-}
diff --git a/lib/form/yui/src/showadvanced/js/showadvanced.js b/lib/form/yui/src/showadvanced/js/showadvanced.js
deleted file mode 100644
index 564f86fd676..00000000000
--- a/lib/form/yui/src/showadvanced/js/showadvanced.js
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
- * Provides the form showadvanced class.
- *
- * @module moodle-form-showadvanced
- */
-
-/**
- * A class to help show and hide advanced form content.
- *
- * @class M.form.showadvanced
- * @constructor
- * @extends Base
- */
-function SHOWADVANCED() {
- SHOWADVANCED.superclass.constructor.apply(this, arguments);
-}
-
-var SELECTORS = {
- FIELDSETCONTAINSADVANCED: 'fieldset.containsadvancedelements',
- DIVFITEMADVANCED: 'div.fitem.advanced',
- DIVFCONTAINER: 'div.fcontainer',
- MORELESSLINK: 'fieldset.containsadvancedelements .moreless-toggler'
- },
- CSS = {
- SHOW: 'show',
- MORELESSACTIONS: 'moreless-actions',
- MORELESSTOGGLER: 'moreless-toggler',
- SHOWLESS: 'moreless-less'
- },
- WRAPPERS = {
- FITEM: '',
- FELEMENT: ''
- },
- ATTRS = {};
-
-/**
- * The form ID attribute definition.
- *
- * @attribute formid
- * @type String
- * @default null
- * @writeOnce
- */
-ATTRS.formid = {
- value: null
-};
-
-Y.extend(SHOWADVANCED, Y.Base, {
- /**
- * The initializer for the showadvanced instance.
- *
- * @method initializer
- * @protected
- */
- initializer: function() {
- var form = Y.one('#' + this.get('formid')),
- fieldlist = form.all(SELECTORS.FIELDSETCONTAINSADVANCED);
-
- // Look through fieldset divs that contain advanced elements.
- fieldlist.each(this.processFieldset, this);
-
- // Subscribe more/less links to click event.
- form.delegate('click', this.switchState, SELECTORS.MORELESSLINK);
- form.delegate('key', this.switchState, 'down:enter,32', SELECTORS.MORELESSLINK);
- },
-
- /**
- * Process the supplied fieldset to add appropriate links, and ARIA roles.
- *
- * @method processFieldset
- * @param {Node} fieldset The Node relating to the fieldset to add collapsing to.
- * @chainable
- */
- processFieldset: function(fieldset) {
- var statuselement = Y.one('input[name=mform_showmore_' + fieldset.get('id') + ']');
- if (!statuselement) {
- Y.log("M.form.showadvanced::processFieldset was called on an fieldset without a status field: '" +
- fieldset.get('id') + "'", 'debug', 'moodle-form-showadvanced');
- return this;
- }
-
- var morelesslink = Y.Node.create('');
- morelesslink.addClass(CSS.MORELESSTOGGLER);
- if (statuselement.get('value') === '0') {
- morelesslink.setHTML(M.util.get_string('showmore', 'form'));
- } else {
- morelesslink.setHTML(M.util.get_string('showless', 'form'));
- morelesslink.addClass(CSS.SHOWLESS);
- fieldset.all(SELECTORS.DIVFITEMADVANCED).addClass(CSS.SHOW);
- }
-
- // Get list of IDs controlled by this button to set the aria-controls attribute.
- var idlist = [];
- fieldset.all(SELECTORS.DIVFITEMADVANCED).each(function(node) {
- idlist[idlist.length] = node.generateID();
- });
- morelesslink.setAttribute('role', 'button');
- morelesslink.setAttribute('aria-controls', idlist.join(' '));
-
- var fitem = Y.Node.create(WRAPPERS.FITEM);
- fitem.addClass(CSS.MORELESSACTIONS);
- var felement = Y.Node.create(WRAPPERS.FELEMENT);
- felement.append(morelesslink);
- fitem.append(felement);
-
- fieldset.one(SELECTORS.DIVFCONTAINER).append(fitem);
-
- return this;
- },
-
- /**
- * Toggle the state for the fieldset that was clicked.
- *
- * @method switchState
- * @param {EventFacade} e
- */
- switchState: function(e) {
- e.preventDefault();
- var fieldset = this.ancestor(SELECTORS.FIELDSETCONTAINSADVANCED);
-
- // Toggle collapsed class.
- fieldset.all(SELECTORS.DIVFITEMADVANCED).toggleClass(CSS.SHOW);
-
- // Get corresponding hidden variable.
- var statuselement = Y.one('input[name=mform_showmore_' + fieldset.get('id') + ']');
-
- // Invert it and change the link text.
- if (statuselement.get('value') === '0') {
- statuselement.set('value', 1);
- this.addClass(CSS.SHOWLESS);
- this.setHTML(M.util.get_string('showless', 'form'));
- } else {
- statuselement.set('value', 0);
- this.removeClass(CSS.SHOWLESS);
- this.setHTML(M.util.get_string('showmore', 'form'));
- }
- }
-}, {
- NAME: 'moodle-form-showadvanced',
- ATTRS: ATTRS
-});
-
-M.form = M.form || {};
-M.form.showadvanced = M.form.showadvanced || function(params) {
- return new SHOWADVANCED(params);
-};
diff --git a/lib/form/yui/src/showadvanced/meta/showadvanced.json b/lib/form/yui/src/showadvanced/meta/showadvanced.json
deleted file mode 100644
index befdc2078fe..00000000000
--- a/lib/form/yui/src/showadvanced/meta/showadvanced.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "moodle-form-showadvanced": {
- "requires": [
- "node",
- "base",
- "selector-css3"
- ]
- }
-}
diff --git a/lib/formslib.php b/lib/formslib.php
index dadcade8528..dfa0dfc3548 100644
--- a/lib/formslib.php
+++ b/lib/formslib.php
@@ -2918,8 +2918,7 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{
$PAGE->requires->yui_module('moodle-form-shortforms', 'M.form.shortforms', array(array('formid' => $formid)));
}
if (!empty($this->_advancedElements)){
- $PAGE->requires->strings_for_js(array('showmore', 'showless'), 'form');
- $PAGE->requires->yui_module('moodle-form-showadvanced', 'M.form.showadvanced', array(array('formid' => $formid)));
+ $PAGE->requires->js_call_amd('core_form/showadvanced', 'init', [$formid]);
}
}