javascript MDL-20400 Addition of disabledif hide option, thanks Jonathan for the brilliant patch

This commit is contained in:
samhemelryk
2009-10-01 06:38:54 +00:00
parent 8c3185f763
commit 64792d5d0b
+43
View File
@@ -138,10 +138,43 @@ function set_form_element_disabled(form, name, disabled) {
}
}
/**
* Set the hidden state of the 'virtual form element' with a particular name.
* This abstracts away the difference between a normal form element, like a select
* which is a single HTML element with a .value property, and a set of radio
* buttons, which is several HTML elements.
*
* @param form a HTML form.
* @param master the name of an element in that form.
* @param hidden the hidden state to set.
*/
function set_form_element_hidden(form, name, hidden) {
var element = form[name];
if (!element) {
return;
}
if (element.tagName) {
var el = findParentNode(element, 'DIV', 'fitem', false);
if (el!=null) {
el.style.display = hidden ? 'none' : '';
el.style.visibility = hidden ? 'hidden' : '';
}
}
// Array of things, like radio buttons.
for (var j = 0; j < element.length; j++) {
var el = findParentNode(element[j], 'DIV', 'fitem', false);
if (el!=null) {
el.style.display = hidden ? 'none' : '';
el.style.visibility = hidden ? 'hidden' : '';
}
}
}
function lockoptionsall(formid) {
var form = document.forms[formid];
var dependons = eval(formid + 'items');
var tolock = [];
var tohide = [];
for (var dependon in dependons) {
// change for MooTools compatibility
if (!dependons.propertyIsEnumerable(dependon)) {
@@ -153,6 +186,7 @@ function lockoptionsall(formid) {
for (var condition in dependons[dependon]) {
for (var value in dependons[dependon][condition]) {
var lock;
var hide = false;
switch (condition) {
case 'notchecked':
lock = !form[dependon].checked; break;
@@ -162,11 +196,17 @@ function lockoptionsall(formid) {
lock = form[dependon].selectedIndex == -1; break;
case 'eq':
lock = get_form_element_value(form, dependon) == value; break;
case 'hide':
// hide as well as disable
hide = true; break;
default:
lock = get_form_element_value(form, dependon) != value; break;
}
for (var ei in dependons[dependon][condition][value]) {
var eltolock = dependons[dependon][condition][value][ei];
if (hide) {
tohide[eltolock] = true;
}
if (tolock[eltolock] != null) {
tolock[eltolock] = lock || tolock[eltolock];
} else {
@@ -182,7 +222,10 @@ function lockoptionsall(formid) {
continue;
}
set_form_element_disabled(form, el, tolock[el]);
if (tohide.propertyIsEnumerable(el)) {
set_form_element_hidden(form, el, tolock[el]);
}
}
return true;
}