nodeBreadCrumbs module
[fnpeditor.git] / modules / nodeBreadCrumbs / nodeBreadCrumbs.js
diff --git a/modules/nodeBreadCrumbs/nodeBreadCrumbs.js b/modules/nodeBreadCrumbs/nodeBreadCrumbs.js
new file mode 100644 (file)
index 0000000..99143bc
--- /dev/null
@@ -0,0 +1,51 @@
+define([\r
+'libs/jquery-1.9.1.min',\r
+'libs/underscore-min',\r
+'libs/text!./template.html'], function($, _, templateSrc) {\r
+\r
+'use strict';\r
+\r
+return function(sandbox) {\r
+    \r
+    var template = _.template(templateSrc);\r
+    \r
+    var view = {\r
+        dom: $('<div>' + template({node:null, parents: null}) + '</div>'),\r
+        setup: function() {\r
+            this.dom.on('mouseenter', 'a', function(e) {\r
+                var target = $(e.target);\r
+                sandbox.publish('nodeHighlighted', 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
+            });\r
+            this.dom.on('click', 'a', function(e) {\r
+                e.preventDefault();\r
+                sandbox.publish('nodeSelected', 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
+        },\r
+        \r
+        highlightNode: function(id) {\r
+            this.dom.find('a[data-id="'+id+'"]').addClass('rng-common-hoveredNode');\r
+        },\r
+        dimNode: function(id) {\r
+            this.dom.find('a[data-id="' +id+'"]').removeClass('rng-common-hoveredNode');\r
+        }\r
+    }\r
+    \r
+    view.setup();\r
+    \r
+    return {\r
+        start: function() { sandbox.publish('ready'); },\r
+        getView: function() { return view.dom; },\r
+        setNode: function(node) { view.setNode(node); }\r
+    }\r
+}\r
+\r
+});
\ No newline at end of file