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