'libs/backbone',
'modules/documentCanvas/canvas/documentElement',
'modules/documentCanvas/canvas/keyboard',
-'modules/documentCanvas/canvas/utils'
-], function($, _, Backbone, documentElement, keyboard, utils) {
+'modules/documentCanvas/canvas/utils',
+'modules/documentCanvas/canvas/wlxmlListener'
+], function($, _, Backbone, documentElement, keyboard, utils, wlxmlListener) {
'use strict';
this.wrapper = $('<div>').addClass('canvas-wrapper').attr('contenteditable', true);
this.loadWlxmlDocument(wlxmlDocument);
this.publisher = publisher ? publisher : function() {};
+ this.wlxmlListener = wlxmlListener.create(this);
};
$.extend(Canvas.prototype, {
loadWlxmlDocument: function(wlxmlDocument) {
- wlxmlDocument = wlxmlDocument || this.wlxmlDocument;
if(!wlxmlDocument) {
return false;
}
+
var canvasDOM = this.generateCanvasDOM(wlxmlDocument.root);
this.wrapper.empty();
this.d = this.wrapper.children(0);
this.setupEventHandling();
- var canvas = this;
-
- if(this.wlxmlDocument !== wlxmlDocument) {
- wlxmlDocument.on('change', function(event) {
- var canvasNode = utils.findCanvasElement(event.meta.node);
- if(event.type === 'nodeAttrChange' && event.meta.attr === 'class') {
- canvasNode.setWlxmlClass(event.meta.newVal);
- }
-
- });
- }
- this.wlxmlDocument = wlxmlDocument;
+ this.wlxmlListener.listenTo(wlxmlDocument);
},
generateCanvasDOM: function(wlxmlNode) {
--- /dev/null
+define([
+'libs/jquery',
+'modules/documentCanvas/canvas/utils',
+], function($, utils) {
+
+'use strict';
+
+var Listener = function(canvas) {
+ this.canvas = canvas;
+};
+
+$.extend(Listener.prototype, {
+ listenTo: function(wlxmlDocument) {
+ if(wlxmlDocument === this.wlxmlDocument) {
+ return;
+ }
+
+ wlxmlDocument.on('change', function(event) {
+ var handler = handlers[event.type];
+ if(handler) {
+ handler.bind(this)(event);
+ }
+ }, this);
+ }
+});
+
+var handlers = {
+ nodeAttrChange: function(event) {
+ if(event.meta.attr === 'class') {
+ var canvasNode = utils.findCanvasElement(event.meta.node);
+ canvasNode.setWlxmlClass(event.meta.newVal);
+ }
+ }
+};
+
+return {
+ create: function(canvas) {
+ return new Listener(canvas);
+ }
+};
+
+});
\ No newline at end of file