mirror of
https://github.com/moodle/moodle.git
synced 2025-04-15 13:33:52 +02:00
MDL-16202 formslib show/hide advanced button does not work with strict XML headers
This commit is contained in:
parent
ba64f5cd8c
commit
cd350b538f
@ -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 {
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user