From 95fb3bc30aa522ee9dfa90d70ac3ef3cca805ab3 Mon Sep 17 00:00:00 2001
From: Nicolas Dumazet <nicolas.dumazet@nexedi.com>
Date: Wed, 9 Jun 2010 07:01:10 +0000
Subject: [PATCH] toggle all children of a delegated node

This fixes display of DateTime fields, that have several inputs.


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@36122 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5Form/dtml/proxyFieldEdit.dtml  | 46 ++++++++++++----------
 product/ERP5Form/dtml/proxyFieldTales.dtml | 46 ++++++++++++----------
 2 files changed, 52 insertions(+), 40 deletions(-)

diff --git a/product/ERP5Form/dtml/proxyFieldEdit.dtml b/product/ERP5Form/dtml/proxyFieldEdit.dtml
index 9f1b5680bd..2c9bb36c00 100644
--- a/product/ERP5Form/dtml/proxyFieldEdit.dtml
+++ b/product/ERP5Form/dtml/proxyFieldEdit.dtml
@@ -160,13 +160,16 @@ function ignoreEvent() { return false; }
 
 var class_deletaged_list = GetElementsWithClassName('td','delegated');
 for(var i=0; i<class_deletaged_list.length; i++) {
-  element = class_deletaged_list[i].childNodes[1];
-  if (element.type == 'hidden'){
-    element = element.nextSibling;
-  }
-  element.readOnly = true;
-  if (element.type == 'checkbox'){
-    element.onclick = ignoreEvent;
+  var disable_children = class_deletaged_list[i].childNodes;
+  for (var j=0; j<disable_children.length; j++) {
+    var element = disable_children[j];
+    if (element.type == 'hidden'){
+      continue;
+    }
+    element.readOnly = true;
+    if (element.type == 'checkbox'){
+      element.onclick = ignoreEvent;
+    }
   }
 }
 
@@ -177,20 +180,23 @@ function toggleFieldState(evt) {
   allElements = tr_parent.childNodes;
   for (i=0; i<allElements.length; i++) {
     if (isClass(allElements[i], 'to_disable')) {
-      field = allElements[i].childNodes[1];
-      if (field.type == 'hidden'){
-        field = field.nextSibling;
-      }
-      if (field.readOnly){
-        field.readOnly = false;
-        if (field.type == 'checkbox'){
-          field.onclick = normalEvent;
+      var disable_children = allElements[i].childNodes;
+      for (var j=0; j<disable_children.length; j++) {
+        var field = disable_children[j];
+        if (field.type == 'hidden'){
+          continue;
         }
-      }
-      else{
-        field.readOnly = true;
-        if (field.type == 'checkbox'){
-          field.onclick = ignoreEvent;
+        if (field.readOnly){
+          field.readOnly = false;
+          if (field.type == 'checkbox'){
+            field.onclick = normalEvent;
+          }
+        }
+        else{
+          field.readOnly = true;
+          if (field.type == 'checkbox'){
+            field.onclick = ignoreEvent;
+          }
         }
       }
     }
diff --git a/product/ERP5Form/dtml/proxyFieldTales.dtml b/product/ERP5Form/dtml/proxyFieldTales.dtml
index 63d443c24e..c8518e649c 100644
--- a/product/ERP5Form/dtml/proxyFieldTales.dtml
+++ b/product/ERP5Form/dtml/proxyFieldTales.dtml
@@ -160,13 +160,16 @@ function ignoreEvent() { return false; }
 
 var class_deletaged_list = GetElementsWithClassName('td','delegated');
 for(var i=0; i<class_deletaged_list.length; i++) {
-  element = class_deletaged_list[i].childNodes[1];
-  if (element.type == 'hidden'){
-    element = element.nextSibling;
-  }
-  element.readOnly = true;
-  if (element.type == 'checkbox'){
-    element.onclick = ignoreEvent;
+  var disable_children = class_deletaged_list[i].childNodes;
+  for (var j=0; j<disable_children.length; j++) {
+    var element = disable_children[j];
+    if (element.type == 'hidden'){
+      continue;
+    }
+    element.readOnly = true;
+    if (element.type == 'checkbox'){
+      element.onclick = ignoreEvent;
+    }
   }
 }
 
@@ -177,20 +180,23 @@ function toggleFieldState(evt) {
   allElements = tr_parent.childNodes;
   for (i=0; i<allElements.length; i++) {
     if (isClass(allElements[i], 'to_disable')) {
-      field = allElements[i].childNodes[1];
-      if (field.type == 'hidden'){
-        field = field.nextSibling;
-      }
-      if (field.readOnly){
-        field.readOnly = false;
-        if (field.type == 'checkbox'){
-          field.onclick = normalEvent;
+      var disable_children = allElements[i].childNodes;
+      for (var j=0; j<disable_children.length; j++) {
+        var field = disable_children[j];
+        if (field.type == 'hidden'){
+          continue;
         }
-      }
-      else{
-        field.readOnly = true;
-        if (field.type == 'checkbox'){
-          field.onclick = ignoreEvent;
+        if (field.readOnly){
+          field.readOnly = false;
+          if (field.type == 'checkbox'){
+            field.onclick = normalEvent;
+          }
+        }
+        else{
+          field.readOnly = true;
+          if (field.type == 'checkbox'){
+            field.onclick = ignoreEvent;
+          }
         }
       }
     }
-- 
2.30.9