3 'modules/documentCanvas/canvas/utils',
 
   4 ], function($, utils) {
 
   8 var Listener = function(canvas) {
 
  12 $.extend(Listener.prototype, {
 
  13     listenTo: function(wlxmlDocument) {
 
  14         if(wlxmlDocument === this.wlxmlDocument) {
 
  17         this.wlxmlDocument = wlxmlDocument;
 
  19         wlxmlDocument.on('change', function(event) {
 
  20             var handler = handlers[event.type];
 
  22                 handler.bind(this)(event);
 
  26         wlxmlDocument.on('contentSet', function() {
 
  27             this.canvas.loadWlxmlDocument(wlxmlDocument);
 
  33 var _metadataEventHandler = function(event) {
 
  34     var canvasNode = utils.findCanvasElement(event.meta.node);
 
  35     canvasNode.exec('updateMetadata');
 
  39     nodeAttrChange: function(event) {
 
  40         if(event.meta.attr === 'class') {
 
  41             var canvasNode = utils.findCanvasElement(event.meta.node);
 
  42             canvasNode.setWlxmlClass(event.meta.newVal);
 
  45     nodeTagChange: function(event) {
 
  46         var canvasNode = utils.findCanvasElement(event.meta.node);
 
  47         canvasNode.setWlxmlTag(event.meta.newTagName);
 
  48         canvasNode.data('wlxmlNode', event.meta.node);
 
  50     nodeAdded: function(event, checkForExistence) {
 
  51         if(event.meta.node.isRoot()) {
 
  52             this.canvas.reloadRoot();
 
  55         var parentElement = utils.findCanvasElement(event.meta.node.parent()),
 
  56             nodeIndex = event.meta.node.getIndex(),
 
  57             referenceElement, referenceAction, actionArg;
 
  60             referenceElement = parentElement;
 
  61             referenceAction = 'prepend';
 
  63             referenceElement = parentElement.children()[nodeIndex-1];
 
  64             referenceAction = 'after';
 
  67         actionArg = (checkForExistence && utils.findCanvasElement(event.meta.node, event.meta.parent)) || event.meta.node;
 
  68         referenceElement[referenceAction](actionArg);
 
  70     nodeMoved: function(event) {
 
  71         return handlers.nodeAdded(event, true);
 
  73     nodeDetached: function(event) {
 
  74         var canvasNode = utils.findCanvasElementInParent(event.meta.node, event.meta.parent);
 
  77     nodeTextChange: function(event) {
 
  78         //console.log('wlxmlListener: ' + event.meta.node.getText());
 
  79         var canvasElement = utils.findCanvasElement(event.meta.node),
 
  80             toSet = event.meta.node.getText();
 
  82             toSet = utils.unicode.ZWS;
 
  84         if(toSet !== canvasElement.getText()) {
 
  85             canvasElement.setText(toSet);
 
  89     metadataChanged: _metadataEventHandler,
 
  90     metadataAdded: _metadataEventHandler,
 
  91     metadataRemoved: _metadataEventHandler
 
  95     create: function(canvas) {
 
  96         return new Listener(canvas);