]> git.mjollnir.org Git - moodle.git/commitdiff
*** empty log message ***
authorjamiesensei <jamiesensei>
Wed, 22 Nov 2006 08:53:35 +0000 (08:53 +0000)
committerjamiesensei <jamiesensei>
Wed, 22 Nov 2006 08:53:35 +0000 (08:53 +0000)
lib/formslib.php
lib/javascript-static.js

index 4a882c9826c06c747c8929f2df01495e740a899d..8a20466b1b484b6a1491b0e6842add08a06419ea 100644 (file)
@@ -793,8 +793,8 @@ function validate_' . $this->_attributes['id'] . '(frm) {
             }
         }
     }
-    function getLockOptionStartScript(){
 
+    function getLockOptionEndScript(){
         $js = '<script type="text/javascript" language="javascript">'."\n";
         $js .= "var ".$this->getAttribute('id')."items= {";
         foreach ($this->_dependencies as $dependentOn => $elements){
@@ -809,14 +809,33 @@ function validate_' . $this->_attributes['id'] . '(frm) {
         };
         $js=rtrim($js, ",\n");
         $js .= '};'."\n";
+        $js .="lockoptionsallsetup('".$this->getAttribute('id')."');\n";
         $js .='</script>'."\n";
         return $js;
     }
-    function getLockOptionEndScript(){
-        $js = '<script type="text/javascript" language="javascript">'."\n";
-        $js .="lockoptionsall('".$this->getAttribute('id')."');\n";
-        $js .='</script>'."\n";
-        return $js;
+
+    function _getElNamesRecursive(&$element, $group=null){
+        if ($group==null){
+            $el=$this->getElement($element);
+        } else {
+            $el=&$element;
+        }
+        if (is_a($el, 'HTML_QuickForm_group')){
+            $group=$el;
+            $elsInGroup=$group->getElements();
+            $elNames=array();
+            foreach ($elsInGroup as $elInGroup){
+                $elNames = array_merge($elNames, $this->_getElNamesRecursive($elInGroup, $group));
+            }
+        }else{
+            if ($group==null){
+                $elNames=array($el->getName());
+            } else {
+                $elNames=array($group->getElementName($el->getName()));
+            }
+        }
+        return $elNames;
+
     }
     /**
      * Adds a dependency for $elementName which will be disabled if $condition is met.
@@ -831,23 +850,11 @@ function validate_' . $this->_attributes['id'] . '(frm) {
      * @param string $condition the condition to check
      */
     function addDependency($elementName, $dependentOn, $condition='notchecked'){
-        $el=$this->getElement($elementName);
-        if (is_a($el, 'HTML_QuickForm_group')){
-            $group=$el;
-            $els=$group->getElements();
-            foreach (array_keys($els) as $elkey){
-                $dependentNames[]=array('dependent'=>$group->getElementName($elkey),
-                                    'condition'=>$condition);
-            }
-        }else{
-            $dependentNames=array(array('dependent'=>$el->getName(),
-                                    'condition'=>$condition));
-        }
-        foreach ($dependentNames as $dependentName){
-            $dependentOnEl=$this->getElement($dependentOn);
-            $name=$dependentOnEl->getName();
-            $dependentOnEl->updateAttributes(array('onClick'=>"return lockoptionsall('".$this->getAttribute('id')."');\n"));
-            $this->_dependencies[$name][]=$dependentName;
+        $dependents=$this->_getElNamesRecursive($elementName);
+        foreach ($dependents as $dependent){
+
+            $this->_dependencies[$dependentOn][]=array('dependent'=>$dependent,
+                                'condition'=>$condition);
         }
     }
 }
@@ -975,10 +982,7 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{
     }
     function finishForm(&$form){
         parent::finishForm($form);
-        // add a validation script
-        if ('' != ($script = $form->getLockOptionStartScript())) {
-            $this->_html = $script . "\n" . $this->_html;
-        }
+        // add a lockoptions script
         if ('' != ($script = $form->getLockOptionEndScript())) {
             $this->_html = $this->_html . "\n" . $script;
         }
index 2f8ed11951c64f8140ca76c0e42700a42cd3a467..ee9843819dd8df6c3458ecbfdfef5a91dc0a7122 100644 (file)
@@ -88,6 +88,20 @@ function lockoptionsall(formid) {
   return(true);
 }
 
+function lockoptionsallsetup(formid) {
+  var items=eval(formid+'items');
+  var form=document.forms[formid];
+  for (var master in items){
+      form.elements[master].oldonclick = ((form.elements[master].onclick) ? form.elements[master].onclick : function () {});
+      form.elements[master].oldonblur = ((form.elements[master].onblur) ? form.elements[master].onblur : function () {});
+      form.elements[master].oldonchange = ((form.elements[master].onchange) ? form.elements[master].onchange : function () {});
+      form.elements[master].oldonkeypress = ((form.elements[master].onkeypress) ? form.elements[master].onkeypress : function () {});
+      form.elements[master].onclick = function(){this.oldonclick(); return lockoptionsall(this.form.id);};
+      form.elements[master].onblur = function(){this.oldonblur(); return lockoptionsall(this.form.id);};
+      form.elements[master].onchange = function(){this.oldonchange(); return lockoptionsall(this.form.id);};
+  }
+  return lockoptionsall(formid);
+}
 
 function lockoption(form,item) {
   eval("document."+form+"."+item+".disabled=true");/* IE thing */