editor: fix - better handle node removal in various views
[fnpeditor.git] / src / editor / modules / nodeBreadCrumbs / nodeBreadCrumbs.js
index 00c6197..0540542 100644 (file)
@@ -8,7 +8,8 @@ define([
 
 return function(sandbox) {
     
 
 return function(sandbox) {
     
-    var template = _.template(templateSrc);
+    var template = _.template(templateSrc),
+        listens = false;
     
     var view = {
         dom: $('<div>' + template({node:null, parents: null}) + '</div>'),
     
     var view = {
         dom: $('<div>' + template({node:null, parents: null}) + '</div>'),
@@ -31,8 +32,12 @@ return function(sandbox) {
         setNodeElement: function(nodeElement) {
             this.dom.empty();
             this.currentNodeElement = nodeElement;
         setNodeElement: function(nodeElement) {
             this.dom.empty();
             this.currentNodeElement = nodeElement;
-            var parents = nodeElement.parents();
-            this.dom.html(template({node: nodeElement, parents: parents, tagNames: wlxmlUtils.wlxmlTagNames, classNames: wlxmlUtils.wlxmlClassNames}));
+            var parents;
+            if(nodeElement) {
+                parents = nodeElement.parents();
+            }
+
+            this.dom.html(template({node: nodeElement, parents: parents, utils: wlxmlUtils}));
 
             this.dom.find('li > a[href="#"]').each(function(idx, a) {
                 $(a).data('element', parents[parents.length - 1 - idx]);
 
             this.dom.find('li > a[href="#"]').each(function(idx, a) {
                 $(a).data('element', parents[parents.length - 1 - idx]);
@@ -54,6 +59,14 @@ return function(sandbox) {
         start: function() { sandbox.publish('ready'); },
         getView: function() { return view.dom; },
         setNodeElement: function(nodeElement) {
         start: function() { sandbox.publish('ready'); },
         getView: function() { return view.dom; },
         setNodeElement: function(nodeElement) {
+            if(!listens && nodeElement) {
+                nodeElement.document.on('change', function() {
+                    if(view.currentNodeElement && !view.currentNodeElement.isInDocument()) {
+                        view.setNodeElement(null);
+                    }
+                });
+                listens = true;
+            }
             view.setNodeElement(nodeElement);
         },
         highlightNode: function(id) { view.highlightNode(id); },
             view.setNodeElement(nodeElement);
         },
         highlightNode: function(id) { view.highlightNode(id); },