X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/21f5b21a44641ccd96582e0e5ebaddd2d657c867..d1effc78cd6e71573f29f7901c598cabc3c2aaf8:/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 cbb582d..0b23021 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,9 +22,19 @@ $.extend(Listener.prototype, { handler.bind(this)(event); } }, this); + + wlxmlDocument.on('contentSet', function() { + this.canvas.loadWlxmlDocument(wlxmlDocument); + }, this); } }); + +var _metadataEventHandler = function(event) { + var canvasNode = utils.findCanvasElement(event.meta.node); + canvasNode.exec('updateMetadata'); +}; + var handlers = { nodeAttrChange: function(event) { if(event.meta.attr === 'class') { @@ -34,7 +45,50 @@ var handlers = { nodeTagChange: function(event) { var canvasNode = utils.findCanvasElement(event.meta.node); canvasNode.setWlxmlTag(event.meta.newTagName); - } + canvasNode.data('wlxmlNode', event.meta.node); + }, + nodeAdded: function(event, checkForExistence) { + if(event.meta.node.isRoot()) { + this.canvas.reloadRoot(); + return; + } + var parentElement = utils.findCanvasElement(event.meta.node.parent()), + nodeIndex = event.meta.node.getIndex(), + referenceElement, referenceAction, actionArg; + + if(nodeIndex === 0) { + referenceElement = parentElement; + referenceAction = 'prepend'; + } else { + referenceElement = parentElement.children()[nodeIndex-1]; + referenceAction = 'after'; + } + + actionArg = (checkForExistence && utils.findCanvasElement(event.meta.node)) || event.meta.node; + referenceElement[referenceAction](actionArg); + }, + nodeMoved: function(event) { + return handlers.nodeAdded(event, true); + }, + nodeDetached: function(event) { + var canvasNode = utils.findCanvasElementInParent(event.meta.node, event.meta.parent); + canvasNode.detach(); + }, + nodeTextChange: function(event) { + //console.log('wlxmlListener: ' + event.meta.node.getText()); + var canvasElement = utils.findCanvasElement(event.meta.node), + toSet = event.meta.node.getText(); + if(toSet === '') { + toSet = utils.unicode.ZWS; + } + if(toSet !== canvasElement.getText()) { + canvasElement.setText(toSet); + } + }, + + metadataChanged: _metadataEventHandler, + metadataAdded: _metadataEventHandler, + metadataRemoved: _metadataEventHandler }; return {