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

Reply via email to