From: tjhunt Date: Thu, 28 Aug 2008 07:52:09 +0000 (+0000) Subject: MDL-16202 formslib show/hide advanced button does not work with strict XML headers X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=cd350b538f669d002ea2d5ddb5dca71fc6079756;p=moodle.git MDL-16202 formslib show/hide advanced button does not work with strict XML headers --- diff --git a/lib/formslib.php b/lib/formslib.php index 84523254e9..8418293c4c 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 cdc283a245..1728c58c0d 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;