WIP: Refactoring canvas api - canvas, canvasNode + tests
[fnpeditor.git] / modules / nodeBreadCrumbs / nodeBreadCrumbs.js
index 4a787f4..517f45b 100644 (file)
@@ -12,31 +12,40 @@ return function(sandbox) {
     var view = {\r
         dom: $('<div>' + template({node:null, parents: null}) + '</div>'),\r
         setup: function() {\r
+            var view = this;\r
             this.dom.on('mouseenter', 'a', function(e) {\r
                 var target = $(e.target);\r
-                sandbox.publish('nodeHighlighted', target.attr('data-id'));\r
+                sandbox.publish('nodeHighlighted', view.nodes[target.attr('data-id')]);\r
             });\r
             this.dom.on('mouseleave', 'a', function(e) {\r
                 var target = $(e.target);\r
-                sandbox.publish('nodeDimmed', target.attr('data-id'));\r
+                sandbox.publish('nodeDimmed', view.nodes[target.attr('data-id')]);\r
             });\r
             this.dom.on('click', 'a', function(e) {\r
                 e.preventDefault();\r
                 var target = $(e.target);\r
-                sandbox.publish('nodeSelected', target.attr('data-id'));\r
+                sandbox.publish('nodeSelected', view.nodes[target.attr('data-id')]);\r
             });\r
         },\r
         \r
         setNode: function(node) {\r
             this.dom.empty();\r
-            this.dom.html(template({node: node, parents: node.parents('[wlxml-tag]')}));\r
+            var nodes = this.nodes = {};\r
+            this.currentNode = node;\r
+            this.nodes[node.id] = node;\r
+            var parents = node.parents();\r
+            parents.each(function() {\r
+                var parent = this;\r
+                nodes[parent.id] = parent;\r
+            });\r
+            this.dom.html(template({node: node, parents: parents}));\r
         },\r
         \r
-        highlightNode: function(id) {\r
-            this.dom.find('a[data-id="'+id+'"]').addClass('rng-common-hoveredNode');\r
+        highlightNode: function(node) {\r
+            this.dom.find('a[data-id="'+node.id+'"]').addClass('rng-common-hoveredNode');\r
         },\r
-        dimNode: function(id) {\r
-            this.dom.find('a[data-id="' +id+'"]').removeClass('rng-common-hoveredNode');\r
+        dimNode: function(node) {\r
+            this.dom.find('a[data-id="'+node.id+'"]').removeClass('rng-common-hoveredNode');\r
         }\r
     }\r
     \r
@@ -45,7 +54,11 @@ return function(sandbox) {
     return {\r
         start: function() { sandbox.publish('ready'); },\r
         getView: function() { return view.dom; },\r
-        setNode: function(node) { view.setNode(node); },\r
+        setNode: function(wlxmlNode) {\r
+            if(!wlxmlNode.is(view.currentNode)) {\r
+                view.setNode(wlxmlNode);\r
+            }\r
+        },\r
         highlightNode: function(id) { view.highlightNode(id); },\r
         dimNode: function(id) { view.dimNode(id); }\r
     }\r