Author: jmorliaguet
Date: Sat Feb 11 22:58:41 2006
New Revision: 2364

Modified:
   cpsskins/branches/jmo-perspectives/ui/framework/ctal.js
   
cpsskins/branches/jmo-perspectives/ui/framework/tests/unit/cpsskins_ctal_test.html
Log:

- we do a deep copy of the data structure traversed by the ctal:repeat loop
  and we restore afterwards otherwise the original data structure gets
  corrupted.

- test updates.



Modified: cpsskins/branches/jmo-perspectives/ui/framework/ctal.js
==============================================================================
--- cpsskins/branches/jmo-perspectives/ui/framework/ctal.js     (original)
+++ cpsskins/branches/jmo-perspectives/ui/framework/ctal.js     Sat Feb 11 
22:58:41 2006
@@ -156,12 +156,26 @@
   if (!parent) return;
   var marker = tmpl.nextSibling;
   parent.removeChild(tmpl);
+
+  var current_data, saved_data;
   for (var i=0; i<datas.length; i++) {
+    // do a deep copy of the data structure traversed by the repeat loop
+    // to avoid corrupting it.
+    var saved_data = null;
+    var current_data = data[nmx[0]];
+    if (current_data) {
+      saved_data = ctal.deepcopy(current_data);
+    }
     data[nmx[0]] = datas[i];
+
     var newnode = tmpl.cloneNode(true);
     ctal.node_insertbefore(parent, newnode, marker);
     // recurse
     ctal.process_ctal(newnode, data);
+    // restore the original data structure
+    if (saved_data) {
+      data = ctal.deepcopy(saved_data);
+    }
   }
 }
 
@@ -246,6 +260,18 @@
   return text.replace(/^\s+|\s+$/g, "");
 }
 
+ctal.deepcopy = function(obj) {
+  var clone = new obj.constructor();
+  for (var i in obj) {
+    if (typeof obj[i] == "object") {
+      clone[i] = ctal.deepcopy(obj[i]);
+    } else {
+      clone[i] = obj[i];
+    }
+  }
+  return clone;
+}
+
 ctal.isTrue = function(cond) {
   return cond && (cond != "")
 }

Modified: 
cpsskins/branches/jmo-perspectives/ui/framework/tests/unit/cpsskins_ctal_test.html
==============================================================================
--- 
cpsskins/branches/jmo-perspectives/ui/framework/tests/unit/cpsskins_ctal_test.html
  (original)
+++ 
cpsskins/branches/jmo-perspectives/ui/framework/tests/unit/cpsskins_ctal_test.html
  Sat Feb 11 22:58:41 2006
@@ -329,15 +329,15 @@
     },
 
     testDataStructure: function() { with(this) {
-      assertEqual(data['a'], 1);
-      assertEqual(data['b'], 2);
-      assertEqual(data['c']['d'], 3);
-      assertEqual(data['c']['e'], 4);
-      assertEqual($A(data['f']).inspect(), $A([4, 5, 6]).inspect());
-      assertEqual($H(data['g'][0]).inspect(), $H({h: 7, i: 8, j: 
9}).inspect());
-      assertEqual(data['k']['l']['m'], 10);
-      assertEqual(data['ctrue'], 1);
-      assertEqual(data['cfalse'], 0);
+      assertEqual(1, data['a']);
+      assertEqual(2, data['b']);
+      assertEqual(3, data['c']['d']);
+      assertEqual(4, data['c']['e']);
+      assertEqual($A([4, 5, 6]).inspect(), $A(data['f']).inspect());
+      assertEqual($H({h: 7, i: 8, j: 9}).inspect(), 
$H(data['g'][0]).inspect());
+      assertEqual(10, data['k']['l']['m']);
+      assertEqual(1, data['ctrue']);
+      assertEqual(0, data['cfalse']);
     }},
 
     testPrivateAPI: function() { with(this) {
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to