From f7d07beaf44527111731603b73e82924ed119666 Mon Sep 17 00:00:00 2001
From: Fabien Morin <fabien@nexedi.com>
Date: Thu, 20 May 2010 13:58:39 +0000
Subject: [PATCH] In Proxy Field, Widget properties show parent values. Here,
 even if delegated was checked on, the UI looked modifiable, and there was no
 difference in whether it was possible or not. And, when you changed a value
 which was delegated, the UI reports that the change was successful, but in
 reality the change was discarded. This interface was horribly confusing. In
 this commit, I use javascript to add the attribute readonly in case the
 checkbox is checked. This makes not possible to modify a field if the
 checkbox is checked, in this way, we should be able to avoid mistakes like
 before.

I try it on browser with javascript disable and the behaviour is exacly like
before, so this improvement benefit only to those who have javascript enable on
their web browsers.


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@35493 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5Form/dtml/proxyFieldEdit.dtml | 64 +++++++++++++++++++++--
 1 file changed, 59 insertions(+), 5 deletions(-)

diff --git a/product/ERP5Form/dtml/proxyFieldEdit.dtml b/product/ERP5Form/dtml/proxyFieldEdit.dtml
index 2346c1c50a..2a67c3eef4 100644
--- a/product/ERP5Form/dtml/proxyFieldEdit.dtml
+++ b/product/ERP5Form/dtml/proxyFieldEdit.dtml
@@ -78,9 +78,11 @@ Surcharge <dtml-var meta_type> properties here.
                 <dtml-if "proxy_field.is_delegated(field_id)">
                   <input type="checkbox" 
                          name="<dtml-var checkbox_key>" 
+                         onclick="toggleFieldState(event)"
                          checked="checked" />
                 <dtml-else >
                   <input type="checkbox" 
+                         onclick="toggleFieldState(event)"
                          name="<dtml-var checkbox_key>" />
                 </dtml-if >
               </dtml-let >
@@ -96,9 +98,15 @@ Surcharge <dtml-var meta_type> properties here.
               </dtml-if>
             </div>
             </td>
-            <td align="left" valign="top">
-            <dtml-var "field.render(value)">
-            </td>
+            <dtml-if "proxy_field.is_delegated(field_id)">
+              <td align="left" valign="top" class="to_disable delegated">
+              <dtml-var "field.render(value)">
+              </td>
+            <dtml-else >
+              <td align="left" valign="top" class="to_disable">
+              <dtml-var "field.render(value)">
+              </td>
+            </dtml-if>
             <td><div class="form-element">
             <dtml-var "field.meta_type">
             </div></td>
@@ -130,6 +138,52 @@ Surcharge <dtml-var meta_type> properties here.
 </table>
 </form>
 
-
-
+<script type="text/javascript">
+function isClass(object, className) {
+        if (object.className != undefined){
+        return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+        }
+        return false;
+}
+function GetElementsWithClassName(elementName,className) {
+        var allElements = document.getElementsByTagName(elementName);
+        var elemColl = new Array();
+        for (i = 0; i< allElements.length; i++) {
+                if (isClass(allElements[i], className)) {
+                        elemColl[elemColl.length] = allElements[i];
+                }
+        }
+        return elemColl;
+}
+var class_deletaged_list = GetElementsWithClassName('*','delegated');
+for(var i=0; i<class_deletaged_list.length; i++) {
+  element = class_deletaged_list[i].childNodes[1];
+  if (element.type == 'hidden'){
+    element = class_deletaged_list[i].childNodes[2];
+  }
+  element.readOnly = true;
+}
+
+function toggleFieldState(evt) {
+  evt=(evt)?evt:event;
+  var target=(evt.target)?evt.target:evt.srcElement;
+  tr_parent = target.parentNode.parentNode;
+  allElements = tr_parent.childNodes;
+  console.log(allElements);
+  for (i=0; i<allElements.length; i++) {
+    if (isClass(allElements[i], 'to_disable')) {
+      field = allElements[i].childNodes[1];
+      if (field.type == 'hidden'){
+        field = allElements[i].childNodes[2];
+      }
+      if (field.readOnly){
+        field.readOnly = false;
+      }
+      else{
+        field.readOnly = true;
+      }
+    }
+  }
+}
+</script>
 <dtml-var manage_page_footer>
-- 
2.30.9