wip: canvas publishes wlxmlNode as selected + handling in nodePane
[fnpeditor.git] / src / editor / modules / documentCanvas / canvas / canvas.js
index c0eeaf0..bf68ede 100644 (file)
@@ -19,6 +19,7 @@ var Canvas = function(wlxmlDocument, publisher) {
 $.extend(Canvas.prototype, {
 
     loadWlxmlDocument: function(wlxmlDocument) {
+        wlxmlDocument = wlxmlDocument || this.wlxmlDocument;
         if(!wlxmlDocument) {
             return false;
         }
@@ -28,24 +29,40 @@ $.extend(Canvas.prototype, {
         this.wrapper.append(canvasDOM);
         this.d = this.wrapper.children(0);
         this.setupEventHandling();
-    },
 
-    generateCanvasDOM: function(wlxmlNode) {
-        // var element = this.createNodeElement2({
-        //     tag: wlxmlNode.getTagName(),
-        //     klass: wlxmlNode.getClass(), //currentTag.attr('class'),
-        //     meta: wlxmlNode.getMetaAttributes(), //meta,
-        //     others: wlxmlNode.getOtherAttributes(), // ~ //others,
-        //     rawChildren: wlxmlNode.contents(),
-        //     prepopulateOnEmpty: true
-        // }); //->create2
+        var canvas = this;
 
-        var element = documentElement.DocumentNodeElement.create(wlxmlNode, this);
+        var findCanvasElement = function(node) {
+            if(node.nodeType === Node.ELEMENT_NODE) {
+                return node.getData('canvasElement');
+            }
+            if(node.nodeType === Node.TEXT_NODE) {
+                var parent = node.parent(),
+                    toret;
+
+                parent.children().forEach(function(child) {
+                    if(child.data('wlxmlNode').sameNode(node))
+                        toret = child;
+                });
+                if(toret)
+                    return toret;
+            }
+        }
 
+        if(this.wlxmlDocument !== wlxmlDocument) {
+            wlxmlDocument.on('change', function(event) {
+                var canvasNode = findCanvasElement(event.meta.node);
+                if(event.type === 'nodeAttrChange' && event.meta.attr === 'class') {
+                    canvasNode.setWlxmlClass(event.meta.newVal);
+                }
 
-        ['orig-before', 'orig-after', 'orig-begin', 'orig-end'].forEach(function(attr) {
-            element.data(attr, '');
-        });
+            });
+        }
+        this.wlxmlDocument = wlxmlDocument;
+    },
+
+    generateCanvasDOM: function(wlxmlNode) {
+        var element = documentElement.DocumentNodeElement.create(wlxmlNode, this);
         return element.dom();
     },
 
@@ -281,7 +298,7 @@ $.extend(Canvas.prototype, {
         if(!(currentNodeElement && currentNodeElement.sameNode(nodeElementToLand))) {
             _markAsCurrent(nodeElementToLand);
 
-            this.publisher('currentNodeElementSet', nodeElementToLand);
+            this.publisher('currentNodeElementSet', nodeElementToLand.data('wlxmlNode'));
         }
     },