From 78b21abe697a7c0b1f0e8ca887961b9faf8f0c3c Mon Sep 17 00:00:00 2001
From: Nicolas Dumazet <nicolas.dumazet@nexedi.com>
Date: Wed, 9 Jun 2010 08:44:59 +0000
Subject: [PATCH] completely inhibit selects when on readonly mode: listing the
 values is possible, but when selecting a value, the previous value is
 restored and the save is not visible

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

diff --git a/product/ERP5Form/dtml/proxyFieldEdit.dtml b/product/ERP5Form/dtml/proxyFieldEdit.dtml
index 2c9bb36c00..1b272fb62d 100644
--- a/product/ERP5Form/dtml/proxyFieldEdit.dtml
+++ b/product/ERP5Form/dtml/proxyFieldEdit.dtml
@@ -158,6 +158,14 @@ function GetElementsWithClassName(elementName,className) {
 function normalEvent() { return true; }
 function ignoreEvent() { return false; }
 
+var last_selected;
+function registerSelection() {
+  last_selected = this.selectedIndex;
+}
+function dontChangeSelection() {
+  this.selectedIndex = last_selected;
+}
+
 var class_deletaged_list = GetElementsWithClassName('td','delegated');
 for(var i=0; i<class_deletaged_list.length; i++) {
   var disable_children = class_deletaged_list[i].childNodes;
@@ -169,6 +177,9 @@ for(var i=0; i<class_deletaged_list.length; i++) {
     element.readOnly = true;
     if (element.type == 'checkbox'){
       element.onclick = ignoreEvent;
+    } else if (element.tagName == 'SELECT') {
+      element.onfocus = registerSelection;
+      element.onchange = dontChangeSelection;
     }
   }
 }
@@ -190,12 +201,17 @@ function toggleFieldState(evt) {
           field.readOnly = false;
           if (field.type == 'checkbox'){
             field.onclick = normalEvent;
+          } else if (field.tagName == 'SELECT') {
+            field.onchange = normalEvent;
           }
         }
         else{
           field.readOnly = true;
           if (field.type == 'checkbox'){
             field.onclick = ignoreEvent;
+          } else if (field.tagName == 'SELECT') {
+            field.onfocus = registerSelection;
+            field.onchange = dontChangeSelection;
           }
         }
       }
diff --git a/product/ERP5Form/dtml/proxyFieldTales.dtml b/product/ERP5Form/dtml/proxyFieldTales.dtml
index c8518e649c..42bb87192f 100644
--- a/product/ERP5Form/dtml/proxyFieldTales.dtml
+++ b/product/ERP5Form/dtml/proxyFieldTales.dtml
@@ -158,6 +158,14 @@ function GetElementsWithClassName(elementName,className) {
 function normalEvent() { return true; }
 function ignoreEvent() { return false; }
 
+var last_selected;
+function registerSelection() {
+  last_selected = this.selectedIndex;
+}
+function dontChangeSelection() {
+  this.selectedIndex = last_selected;
+}
+
 var class_deletaged_list = GetElementsWithClassName('td','delegated');
 for(var i=0; i<class_deletaged_list.length; i++) {
   var disable_children = class_deletaged_list[i].childNodes;
@@ -169,6 +177,9 @@ for(var i=0; i<class_deletaged_list.length; i++) {
     element.readOnly = true;
     if (element.type == 'checkbox'){
       element.onclick = ignoreEvent;
+    } else if (element.tagName == 'SELECT') {
+      element.onfocus = registerSelection;
+      element.onchange = dontChangeSelection;
     }
   }
 }
@@ -190,12 +201,17 @@ function toggleFieldState(evt) {
           field.readOnly = false;
           if (field.type == 'checkbox'){
             field.onclick = normalEvent;
+          } else if (field.tagName == 'SELECT') {
+            field.onchange = normalEvent;
           }
         }
         else{
           field.readOnly = true;
           if (field.type == 'checkbox'){
             field.onclick = ignoreEvent;
+          } else if (field.tagName == 'SELECT') {
+            field.onfocus = registerSelection;
+            field.onchange = dontChangeSelection;
           }
         }
       }
-- 
2.30.9