MDL-8157 improved hadling of conditions in disabledIf formslib method

This commit is contained in:
skodak
2007-01-12 09:38:02 +00:00
parent c517d8f07e
commit dd07bbac59
2 changed files with 81 additions and 74 deletions
+36 -20
View File
@@ -1170,34 +1170,39 @@ function validate_' . $this->_formName . '(frm) {
}
function getLockOptionEndScript(){
$iname = $this->getAttribute('id').'items';
$js = '<script type="text/javascript">'."\n";
$js .= '//<![CDATA['."\n";
$js .= "var ".$this->getAttribute('id')."items= {";
foreach ($this->_dependencies as $dependentOn => $elements){
$js .= "'$dependentOn'".' : {dependents :[';
foreach ($elements as $element){
$elementNames = $this->_getElNamesRecursive($element['dependent']);
foreach ($elementNames as $dependent){
if ($dependent != $dependentOn) {
$js.="'".$dependent."', ";
$js .= "var $iname = Array();\n";
foreach ($this->_dependencies as $dependentOn => $conditions){
$js .= "{$iname}['$dependentOn'] = Array();\n";
foreach ($conditions as $condition=>$values) {
$js .= "{$iname}['$dependentOn']['$condition'] = Array();\n";
foreach ($values as $value=>$dependents) {
$js .= "{$iname}['$dependentOn']['$condition']['$value'] = Array();\n";
$i = 0;
foreach ($dependents as $dependent) {
$elements = $this->_getElNamesRecursive($dependent);
foreach($elements as $element) {
if ($element == $dependentOn) {
continue;
}
$js .= "{$iname}['$dependentOn']['$condition']['$value'][$i]='$element';\n";
$i++;
}
}
}
}
$js=rtrim($js, ', ');
$js .= "],\n";
$js .= "condition : '{$element['condition']}',\n";
$js .= "value : '{$element['value']}'},\n";
};
$js=rtrim($js, ",\n");
$js .= '};'."\n";
}
$js .="lockoptionsallsetup('".$this->getAttribute('id')."');\n";
$js .='//]]>'."\n";
$js .='</script>'."\n";
return $js;
}
function _getElNamesRecursive(&$element, $group=null){
function _getElNamesRecursive($element, $group=null){
if ($group==null){
$el = $this->getElement($element);
} else {
@@ -1237,16 +1242,27 @@ function validate_' . $this->_formName . '(frm) {
* @param string $condition the condition to check
* @param mixed $value used in conjunction with condition.
*/
function disabledIf($elementName, $dependentOn, $condition = 'notchecked', $value=null){
$this->_dependencies[$dependentOn][] = array('dependent'=>$elementName,
'condition'=>$condition, 'value'=>$value);
function disabledIf($elementName, $dependentOn, $condition = 'notchecked', $value='1'){
if (!array_key_exists($dependentOn, $this->_dependencies)) {
$this->_dependencies[$dependentOn] = array();
}
if (!array_key_exists($condition, $this->_dependencies[$dependentOn])) {
$this->_dependencies[$dependentOn][$condition] = array();
}
if (!array_key_exists($value, $this->_dependencies[$dependentOn][$condition])) {
$this->_dependencies[$dependentOn][$condition][$value] = array();
}
$this->_dependencies[$dependentOn][$condition][$value][] = $elementName;
}
function registerNoSubmitButton($buttonname){
$this->_noSubmitButtons[]=$buttonname;
}
function isNoSubmitButton($buttonname){
return (array_search($buttonname, $this->_noSubmitButtons)!==FALSE);
}
function _registerCancelButton($addfieldsname){
$this->_cancelButtons[]=$addfieldsname;
}
+45 -54
View File
@@ -81,65 +81,56 @@ function unlockoption(form,item) {
eval("form.h"+item+".value=0");
}
}
function lockoptionsall(formid) {
var lock = new Object();
var items = eval(formid+'items');
var form = document.forms[formid];
for (var master in items){
var subitems=items[master].dependents;
var thislock;
if (items[master].condition=='notchecked'){
thislock=!form.elements[master].checked;
} else if (items[master].condition=='checked'){
thislock=form.elements[master].checked;
} else if (items[master].condition=='noitemselected'){
thislock=(form.elements[master].selectedIndex==-1);
} else if (items[master].condition=='eq'){
thislock=(form.elements[master].value==items[master].value);
} else {
thislock=(form.elements[master].value!=items[master].value);
}
for (var i=0; i<subitems.length; i++) {
if (lock[subitems[i]]!=null){
lock[subitems[i]] = thislock || lock[subitems[i]];
}else{
lock[subitems[i]] = thislock;
var form = document.forms[formid];
var dependons = eval(formid+'items');
for (var dependon in dependons) {
var master = form[dependon];
for (var condition in dependons[dependon]) {
for (var value in dependons[dependon][condition]) {
var lock;
switch (condition) {
case 'notchecked':
lock = !master.checked; break;
case 'checked':
lock = master.checked; break;
case 'noitemselected':
lock = master.selectedIndex==-1; break;
case 'eq':
lock = master.value==value; break;
default:
lock = master.value!=value; break;
}
for (var ei in dependons[dependon][condition][value]) {
var formelement = form[dependons[dependon][condition][value][ei]];
formelement.disabled = lock;
}
}
}
}
for (var item in lock) {
form.elements[item].disabled=lock[item];
}
}
return(true);
}
return true;
}
function lockoptionsallsetup(formid) {
var varname = formid.replace(/\-/g, '_');
var items=eval(varname+'items');
var form=document.forms[formid];
for (var i = 0; i < form.elements.length; i++){
var found=false;
var formelement = form.elements[i];
if (formelement.type=='reset'){
formelement.onclick = function(){this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
formelement.onblur = function(){this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
formelement.onchange = function(){this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
} else {
for (var master in items){
if (master==formelement.name){
formelement.onclick = function(){return lockoptionsall(this.form.getAttribute('id'));};
formelement.onblur = function(){return lockoptionsall(this.form.getAttribute('id'));};
formelement.onchange = function(){return lockoptionsall(this.form.getAttribute('id'));};
break;
}
}
}
}
return lockoptionsall(formid);
var form = document.forms[formid];
var dependons = eval(formid+'items');
for (var dependon in dependons) {
var master = form[dependon];
master.onclick = function() {return lockoptionsall(this.form.getAttribute('id'));};
master.onblur = function() {return lockoptionsall(this.form.getAttribute('id'));};
master.onchange = function() {return lockoptionsall(this.form.getAttribute('id'));};
}
for (var i = 0; i < form.elements.length; i++){
var formelement = form.elements[i];
if (formelement.type=='reset') {
formelement.onclick = function() {this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
formelement.onblur = function() {this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
formelement.onchange = function() {this.form.reset();return lockoptionsall(this.form.getAttribute('id'));};
}
}
return lockoptionsall(formid);
}