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('operationEnd', function() {
 
  27             this.canvas.triggerSelectionChanged();
 
  30         wlxmlDocument.on('contentSet', function() {
 
  31             this.canvas.loadWlxmlDocument(wlxmlDocument);
 
  37 var _metadataEventHandler = function(event) {
 
  38     var element = utils.getElementForNode(event.meta.node);
 
  39     element.handle(event);
 
  44     nodeAttrChange: function(event) {
 
  45         var element = utils.getElementForNode(event.meta.node),
 
  47         if(event.meta.attr === 'class') {
 
  48             if(element.wlxmlNode.getClass() !== event.meta.attr) {
 
  49                 if(event.meta.node.isRoot()) {
 
  50                     this.canvas.reloadRoot();
 
  52                     newElement = this.canvas.createElement(event.meta.node);
 
  53                     element.dom.replaceWith(newElement.dom);
 
  58             element.handle(event);
 
  61     nodeAdded: function(event) {
 
  62         if(event.meta.node.isRoot()) {
 
  63             this.canvas.reloadRoot();
 
  67         var containingNode = event.meta.node.parent(),
 
  68             containingElement = utils.getElementForNode(containingNode);
 
  70         containingElement.handle(event);
 
  72     nodeMoved: function(event) {
 
  73         return handlers.nodeAdded.call(this, event); //
 
  76     nodeDetached: function(event) {
 
  77         var element = utils.getElementForDetachedNode(event.meta.node, event.meta.parent);
 
  78         element.handle(event);
 
  80     nodeTextChange: function(event) {
 
  81         var element = utils.getElementForTextNode(event.meta.node);
 
  82         element.handle(event);
 
  85     metadataChanged: _metadataEventHandler,
 
  86     metadataAdded: _metadataEventHandler,
 
  87     metadataRemoved: _metadataEventHandler
 
  91     create: function(canvas) {
 
  92         return new Listener(canvas);