X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/038583a188bfecdf9cae22d139116b6a57f7a14d..74635b9e0dd3069953072eab9de946b77d1b313e:/src/editor/modules/documentCanvas/canvas/wlxmlListener.js diff --git a/src/editor/modules/documentCanvas/canvas/wlxmlListener.js b/src/editor/modules/documentCanvas/canvas/wlxmlListener.js index fb6a2de..8667560 100644 --- a/src/editor/modules/documentCanvas/canvas/wlxmlListener.js +++ b/src/editor/modules/documentCanvas/canvas/wlxmlListener.js @@ -14,6 +14,7 @@ $.extend(Listener.prototype, { if(wlxmlDocument === this.wlxmlDocument) { return; } + this.wlxmlDocument = wlxmlDocument; wlxmlDocument.on('change', function(event) { var handler = handlers[event.type]; @@ -21,16 +22,69 @@ $.extend(Listener.prototype, { handler.bind(this)(event); } }, this); + + wlxmlDocument.on('operationEnd', function() { + this.canvas.triggerSelectionChanged(); + }, this); + + wlxmlDocument.on('contentSet', function() { + this.canvas.loadWlxmlDocument(wlxmlDocument); + }, this); } }); + +var _metadataEventHandler = function(event) { + var element = utils.getElementForNode(event.meta.node); + element.handle(event); +}; + + var handlers = { nodeAttrChange: function(event) { + var element = utils.getElementForNode(event.meta.node), + newElement; if(event.meta.attr === 'class') { - var canvasNode = utils.findCanvasElement(event.meta.node); - canvasNode.setWlxmlClass(event.meta.newVal); + if(element.wlxmlNode.getClass() !== event.meta.attr) { + if(event.meta.node.isRoot()) { + this.canvas.reloadRoot(); + } else { + newElement = this.canvas.createElement(event.meta.node); + element.dom.replaceWith(newElement.dom); + } + } + + } else { + element.handle(event); } - } + }, + nodeAdded: function(event) { + if(event.meta.node.isRoot()) { + this.canvas.reloadRoot(); + return; + } + + var containingNode = event.meta.node.parent(), + containingElement = utils.getElementForNode(containingNode); + + containingElement.handle(event); + }, + nodeMoved: function(event) { + return handlers.nodeAdded.call(this, event, true); // + // + }, + nodeDetached: function(event) { + var element = utils.getElementForDetachedNode(event.meta.node, event.meta.parent); + element.handle(event); + }, + nodeTextChange: function(event) { + var element = utils.getElementForNode(event.meta.node.parent()); + element.handle(event); + }, + + metadataChanged: _metadataEventHandler, + metadataAdded: _metadataEventHandler, + metadataRemoved: _metadataEventHandler }; return {