diff --git a/lib/formslib.php b/lib/formslib.php
index 84523254e99..8418293c4cd 100644
--- a/lib/formslib.php
+++ b/lib/formslib.php
@@ -1419,7 +1419,7 @@ function validate_' . $this->_formName . '_' . $elementName . '(element) {
var _qfGroups = {};
var _qfMsg = \'\';
var frm = element.parentNode;
- while (frm && frm.nodeName != "FORM") {
+ while (frm && frm.nodeName.toUpperCase() != "FORM") {
frm = frm.parentNode;
}
' . join("\n", $jsArr) . '
@@ -1925,19 +1925,17 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{
}
if (isset($this->_advancedElements[$name])){
+ require_js(array('yui_yahoo', 'yui_event'));
// this is tricky - the first submit button on form is "clicked" if user presses enter
// we do not want to "submit" using advanced button if javascript active
- $showtext="'".get_string('showadvanced', 'form')."'";
- $hidetext="'".get_string('hideadvanced', 'form')."'";
- //onclick returns false so if js is on then page is not submitted.
- $onclick = 'return showAdvancedOnClick(this, '.$hidetext.', '.$showtext.');';
- $button_js = '';
$button_nojs = '';
- $button = ''; // the extra div should fix xhtml validation
+
+ $buttonlabel = addslashes_js($buttonlabel);
+ $showtext = addslashes_js(get_string('showadvanced', 'form'));
+ $hidetext = addslashes_js(get_string('hideadvanced', 'form'));
+ $button = ''; // the extra div should fix xhtml validation
$header_html = str_replace('{button}', $button, $header_html);
} else {
diff --git a/lib/javascript-static.js b/lib/javascript-static.js
index cdc283a2456..1728c58c0de 100644
--- a/lib/javascript-static.js
+++ b/lib/javascript-static.js
@@ -285,16 +285,32 @@ function elementShowAdvanced(elements, show) {
}
}
-function showAdvancedOnClick(button, hidetext, showtext){
+function showAdvancedInit(addBefore, nameAttr, buttonLabel, hideText, showText) {
+ var showHideButton = document.createElement("input");
+ showHideButton.type = 'button';
+ showHideButton.value = buttonLabel;
+ showHideButton.name = nameAttr;
+ showHideButton.moodle = {
+ hideLabel: hideText,
+ showLabel: showText
+ };
+ YAHOO.util.Event.addListener(showHideButton, 'click', showAdvancedOnClick);
+ el = document.getElementById(addBefore);
+ el.parentNode.insertBefore(showHideButton, el);
+}
+
+function showAdvancedOnClick(e) {
+ var button = e.target ? e.target : e.srcElement;
+
var toSet=findChildNodes(button.form, null, 'advanced');
var buttontext = '';
if (button.form.elements['mform_showadvanced_last'].value == '0' || button.form.elements['mform_showadvanced_last'].value == '' ) {
elementShowAdvanced(toSet, true);
- buttontext = hidetext;
+ buttontext = button.moodle.hideLabel;
button.form.elements['mform_showadvanced_last'].value = '1';
} else {
elementShowAdvanced(toSet, false);
- buttontext = showtext;
+ buttontext = button.moodle.showLabel;
button.form.elements['mform_showadvanced_last'].value = '0';
}
var formelements = button.form.elements;