Author: jmorliaguet Date: Sat Jan 7 23:32:14 2006 New Revision: 2186 Modified: cpsskins/branches/jmo-perspectives/ui/framework/cpsskins.js cpsskins/branches/jmo-perspectives/ui/framework/tests/functional/cpsskins_observer_test.html cpsskins/branches/jmo-perspectives/ui/framework/tests/unit/cpsskins_test.html Log:
- added a cache for identifiable elements Modified: cpsskins/branches/jmo-perspectives/ui/framework/cpsskins.js ============================================================================== --- cpsskins/branches/jmo-perspectives/ui/framework/cpsskins.js (original) +++ cpsskins/branches/jmo-perspectives/ui/framework/cpsskins.js Sat Jan 7 23:32:14 2006 @@ -25,6 +25,8 @@ Perspectives: $H({}), + Cache: $H({}), + CurrentPerspective: "", PreviousPerspective: "", @@ -276,28 +278,46 @@ return null; }, - getNodeData: function(element) { - var comment = this._getCommentNode(element); + getNodeData: function(node) { + var node = $(node); + var node_id = Identifiable.isIdentifiable(node) ? + node.getAttribute("id") : null; + if (node_id && node_id in CPSSkins.Cache) { + return CPSSkins.Cache[node_id]; + } + + var data = null; + var comment = this._getCommentNode(node); if (comment) { comment = comment.nodeValue.replace(this.json_regexp, ""); try { - return JSON.parse(comment); + data = JSON.parse(comment); } catch(e) { /* catch the parse exception */ } } - return null; + if (node_id) { + CPSSkins.Cache[node_id] = data; + } + return data; }, - setNodeData: function(element, data) { - var node = $(element); - var comment = " model: " + JSON.stringify(data); - comment = document.createComment(comment); - var old = this._getCommentNode(element); - if (old) { - node.parentNode.removeChild(old); - } - node.parentNode.insertBefore(comment, node); + setNodeData: function(node, data) { + var node = $(node); + var node_id = Identifiable.isIdentifiable(node) ? + node.getAttribute("id") : null; + + if (node_id) { + CPSSkins.Cache[node_id] = data; + } else { + var comment = " model: " + JSON.stringify(data); + comment = document.createComment(comment); + var old = this._getCommentNode(node); + if (old) { + node.parentNode.removeChild(old); + } + node.parentNode.insertBefore(comment, node); + } // Update the views and controllers that are registered as observers // TODO: use notify() instead Modified: cpsskins/branches/jmo-perspectives/ui/framework/tests/functional/cpsskins_observer_test.html ============================================================================== --- cpsskins/branches/jmo-perspectives/ui/framework/tests/functional/cpsskins_observer_test.html (original) +++ cpsskins/branches/jmo-perspectives/ui/framework/tests/functional/cpsskins_observer_test.html Sat Jan 7 23:32:14 2006 @@ -55,7 +55,7 @@ function start() { if (timer) return; - timer = setInterval("updateModel()", 250); + timer = setInterval("updateModel()", 100); } function stop() { Modified: cpsskins/branches/jmo-perspectives/ui/framework/tests/unit/cpsskins_test.html ============================================================================== --- cpsskins/branches/jmo-perspectives/ui/framework/tests/unit/cpsskins_test.html (original) +++ cpsskins/branches/jmo-perspectives/ui/framework/tests/unit/cpsskins_test.html Sat Jan 7 23:32:14 2006 @@ -140,10 +140,20 @@ }}, testGetNodeData: function() { with(this) { + // test twice to get the cached data assertEqual(Canvas.getNodeData(e1), null); + assertEqual(Canvas.getNodeData(e1), null); + + assertEqual($H(Canvas.getNodeData(e2)).inspect(), + $H({a:"1", b:"2"}).inspect()); assertEqual($H(Canvas.getNodeData(e2)).inspect(), $H({a:"1", b:"2"}).inspect()); + + assertEqual(Canvas.getNodeData(e5), null); assertEqual(Canvas.getNodeData(e5), null); + + assertEqual($H(Canvas.getNodeData(e6)).inspect(), + $H({"a":["1","2","3"],"b":{"c":1,"d":2},"c":[[1],[2],[3]]}).inspect()); assertEqual($H(Canvas.getNodeData(e6)).inspect(), $H({"a":["1","2","3"],"b":{"c":1,"d":2},"c":[[1],[2],[3]]}).inspect()); }}, @@ -301,5 +311,8 @@ // ]]> </script> + +<div id="message"></div> + </body> </html> -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins