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
- sandbox.publish('nodeSelected', target.attr('data-id'));\r
+ var target = $(e.target);\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.getId()] = node;\r
+ var parents = node.parents();\r
+ parents.each(function() {\r
+ var parent = this;\r
+ nodes[parent.getId()] = 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
return {\r
start: function() { sandbox.publish('ready'); },\r
getView: function() { return view.dom; },\r
- setNode: function(node) { view.setNode(node); },\r
+ setNode: function(canvasNode) {\r
+ if(!canvasNode.isSame(view.currentNode)) {\r
+ view.setNode(canvasNode);\r
+ }\r
+ },\r
highlightNode: function(id) { view.highlightNode(id); },\r
dimNode: function(id) { view.dimNode(id); }\r
}\r