MDL-49783 forms: Collapsed form section is opened on error
authorMartin Mastny <mastnym@vscht.cz>
Wed, 22 Apr 2015 05:35:10 +0000 (13:35 +0800)
committerMartin Mastny <mastnym@vscht.cz>
Thu, 7 May 2015 00:57:30 +0000 (08:57 +0800)
lib/form/yui/build/moodle-form-shortforms/moodle-form-shortforms-debug.js
lib/form/yui/build/moodle-form-shortforms/moodle-form-shortforms-min.js
lib/form/yui/build/moodle-form-shortforms/moodle-form-shortforms.js
lib/form/yui/src/shortforms/js/shortforms.js
lib/form/yui/src/shortforms/meta/shortforms.json
lib/formslib.php
lib/yui/build/moodle-core-event/moodle-core-event-debug.js
lib/yui/build/moodle-core-event/moodle-core-event-min.js
lib/yui/build/moodle-core-event/moodle-core-event.js
lib/yui/src/event/js/event.js

index ec41c73..316e90e 100644 (file)
Binary files a/lib/form/yui/build/moodle-form-shortforms/moodle-form-shortforms-debug.js and b/lib/form/yui/build/moodle-form-shortforms/moodle-form-shortforms-debug.js differ
index b7d0861..b6075a9 100644 (file)
Binary files a/lib/form/yui/build/moodle-form-shortforms/moodle-form-shortforms-min.js and b/lib/form/yui/build/moodle-form-shortforms/moodle-form-shortforms-min.js differ
index e7e138f..2b81057 100644 (file)
Binary files a/lib/form/yui/build/moodle-form-shortforms/moodle-form-shortforms.js and b/lib/form/yui/build/moodle-form-shortforms/moodle-form-shortforms.js differ
index 14181ca..f532a41 100644 (file)
@@ -79,6 +79,9 @@ Y.extend(SHORTFORMS, Y.Base, {
         form.delegate('click', this.switch_state, SELECTORS.FIELDSETLEGENDLINK, this);
         form.delegate('key', this.switch_state, 'down:enter,32', SELECTORS.FIELDSETLEGENDLINK, this);
 
+        // Handle event, when there's an error in collapsed section.
+        Y.Global.on(M.core.globalEvents.FORM_ERROR, this.expand_fieldset, this);
+
         // Make the collapse/expand a link.
         btn = form.one(SELECTORS.COLLAPSEEXPAND);
         if (btn) {
@@ -230,7 +233,24 @@ Y.extend(SHORTFORMS, Y.Base, {
         }
 
         return this;
-    }
+    },
+    /**
+     * Expand the fieldset, which contains an error.
+     *
+     * @method expand_fieldset
+     * @param {EventFacade} e
+     */
+    expand_fieldset: function(e) {
+        e.stopPropagation();
+        var formid = e.formid;
+        if (formid === this.form.getAttribute('id')) {
+            var errorfieldset = Y.one('#' + e.elementid).ancestor('fieldset');
+            if (errorfieldset) {
+                this.set_state(errorfieldset, false);
+            }
+
+        }
+   }
 }, {
     NAME: 'moodle-form-shortforms',
     ATTRS: ATTRS
index 7d6bb01..768ab28 100644 (file)
@@ -3,7 +3,8 @@
         "requires": [
             "node",
             "base",
-            "selector-css3"
+            "selector-css3",
+            "moodle-core-event"
         ]
     }
 }
index 88564a7..31f32d7 100644 (file)
@@ -2229,6 +2229,8 @@ function validate_' . $this->_formName . '_' . $escapedElementName . '(element)
   ret = validate_' . $this->_formName . '_' . $escapedElementName.'(frm.elements[\''.$elementName.'\']) && ret;
   if (!ret && !first_focus) {
     first_focus = true;
+    Y.Global.fire(M.core.globalEvents.FORM_ERROR, {formid: \''. $this->_attributes['id'] .'\',
+                                                   elementid: \'id_error_'.$elementName.'\'});
     document.getElementById(\'id_error_'.$elementName.'\').focus();
   }
 ';
index 9bb3479..cbf3e39 100644 (file)
Binary files a/lib/yui/build/moodle-core-event/moodle-core-event-debug.js and b/lib/yui/build/moodle-core-event/moodle-core-event-debug.js differ
index b016868..426af2f 100644 (file)
Binary files a/lib/yui/build/moodle-core-event/moodle-core-event-min.js and b/lib/yui/build/moodle-core-event/moodle-core-event-min.js differ
index d2c481f..2a9e776 100644 (file)
Binary files a/lib/yui/build/moodle-core-event/moodle-core-event.js and b/lib/yui/build/moodle-core-event/moodle-core-event.js differ
index 39fe4f6..6f6a28a 100644 (file)
@@ -42,6 +42,17 @@ M.core.event = {
     FILTER_CONTENT_UPDATED: "filter-content-updated"
 };
 
+M.core.globalEvents = {
+    /**
+     * This event is triggered when form has an error
+     *
+     * @event "form_error"
+     * @param formid {string} Id of form with error.
+     * @param elementid {string} Id of element with error.
+     */
+    FORM_ERROR: "form_error"
+};
+
 
 var eventDefaultConfig = {
     emitFacade: true,
@@ -56,6 +67,8 @@ var eventDefaultConfig = {
     }
 };
 
+// Publish events with a custom config here.
+
 // Publish all the events with a standard config.
 var key;
 for (key in M.core.event) {
@@ -64,4 +77,9 @@ for (key in M.core.event) {
     }
 }
 
-// Publish events with a custom config here.
+//Publish all the global events.
+for (key in M.core.globalEvents) {
+    if (M.core.globalEvents.hasOwnProperty(key)) {
+        Y.Global.publish(M.core.globalEvents[key], Y.merge(eventDefaultConfig, {broadcast: 2}));
+    }
+}