MDL-16202 formslib show/hide advanced button does not work with strict XML headers

This commit is contained in:
tjhunt 2008-08-28 07:52:09 +00:00
parent ba64f5cd8c
commit cd350b538f
2 changed files with 28 additions and 14 deletions

View File

@ -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 = '<input name="'.$elementName.'" value="'.$buttonlabel.'" type="button" onclick="'.$onclick.'" />';
$button_nojs = '<input name="'.$elementName.'" value="'.$buttonlabel.'" type="submit" />';
$button = '<script type="text/javascript">
//<![CDATA[
document.write("'.addslashes_js($button_js).'")
//]]>
</script><noscript><div style="display:inline">'.$button_nojs.'</div></noscript>'; // 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 = '<script id="' . $name . '_script" type="text/javascript">' . "
showAdvancedInit('{$name}_script', '$elementName', '$buttonlabel', '$hidetext', '$showtext');
" . '</script><noscript><div style="display:inline">'.$button_nojs.'</div></noscript>'; // the extra div should fix xhtml validation
$header_html = str_replace('{button}', $button, $header_html);
} else {

View File

@ -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;