wip: canvas listens for nodeAttrChange event
authorAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Thu, 10 Oct 2013 14:15:14 +0000 (16:15 +0200)
committerAleksander Łukasz <aleksander.lukasz@nowoczesnapolska.org.pl>
Mon, 2 Dec 2013 13:50:52 +0000 (14:50 +0100)
src/editor/modules/documentCanvas/canvas/canvas.js

index 2c7ddff..a589a20 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,13 +29,40 @@ $.extend(Canvas.prototype, {
         this.wrapper.append(canvasDOM);
         this.d = this.wrapper.children(0);
         this.setupEventHandling();
-    },
 
-    generateCanvasDOM: function(wlxmlNode) {
+        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);
+                }
 
+            });
+        }
+        this.wlxmlDocument = wlxmlDocument;
+    },
+
+    generateCanvasDOM: function(wlxmlNode) {
+        var element = documentElement.DocumentNodeElement.create(wlxmlNode, this);
         return element.dom();
     },