X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/e1f340cca43eafb33256f439cac74689d783f292..75d2183aafd4b2d3e94c17f6c3c8ee0d8a4738e4:/src/editor/modules/documentCanvas/canvas/canvas.js?ds=sidebyside
diff --git a/src/editor/modules/documentCanvas/canvas/canvas.js b/src/editor/modules/documentCanvas/canvas/canvas.js
index 05dfbad..d13e2ea 100644
--- a/src/editor/modules/documentCanvas/canvas/canvas.js
+++ b/src/editor/modules/documentCanvas/canvas/canvas.js
@@ -10,12 +10,49 @@ define([
'use strict';
+var TextHandler = function(canvas) {this.canvas = canvas; this.buffer = null};
+$.extend(TextHandler.prototype, {
+ handle: function(node, text) {
+ //console.log('canvas text handler: ' + text);
+ this.setText(text, node);
+ return;
+ if(!this.node) {
+ this.node = node;
+ }
+ if(this.node.sameNode(node)) {
+ this._ping(text);
+ } else {
+ this.flush();
+ this.node = node;
+ this._ping(text);
+ }
+ },
+ _ping: _.throttle(function(text) {
+ this.buffer = text;
+ this.flush();
+ }, 1000),
+ flush: function() {
+ if(this.buffer != null) {
+ this.setText(this.buffer, this.node);
+ this.buffer = null;
+ }
+ },
+ setText: function(text, node) {
+ //this.canvas.wlxmlDocument.transform('setText', {node:node, text: text});
+ node.transform('smartxml.setText', {text: text});
+
+ }
+
+});
+
+
var Canvas = function(wlxmlDocument, publisher) {
this.eventBus = _.extend({}, Backbone.Events);
this.wrapper = $('
').addClass('canvas-wrapper').attr('contenteditable', true);
this.wlxmlListener = wlxmlListener.create(this);
this.loadWlxmlDocument(wlxmlDocument);
this.publisher = publisher ? publisher : function() {};
+ this.textHandler = new TextHandler(this);
};
$.extend(Canvas.prototype, {
@@ -56,6 +93,8 @@ $.extend(Canvas.prototype, {
canvas.setCurrentElement(canvas.getDocumentElement(e.currentTarget), {caretTo: false});
});
+
+
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if(documentElement.DocumentTextElement.isContentContainer(mutation.target)) {
@@ -66,18 +105,22 @@ $.extend(Canvas.prototype, {
mutation.target.data = mutation.target.data.replace(utils.unicode.ZWS, '');
canvas._moveCaretToTextElement(canvas.getDocumentElement(mutation.target), 'end');
}
- observer.observe(canvas.d[0], config);
+ observer.observe(canvas.wrapper[0], config);
canvas.publisher('contentChanged');
var textElement = canvas.getDocumentElement(mutation.target),
toSet = mutation.target.data !== utils.unicode.ZWS ? mutation.target.data : '';
- textElement.data('wlxmlNode').setText(toSet);
+ //textElement.data('wlxmlNode').setText(toSet);
+ //textElement.data('wlxmlNode').document.transform('setText', {node: textElement.data('wlxmlNode'), text: toSet});
+ if(textElement.data('wlxmlNode').getText() != toSet) {
+ canvas.textHandler.handle(textElement.data('wlxmlNode'), toSet);
+ }
}
});
});
var config = { attributes: false, childList: false, characterData: true, subtree: true, characterDataOldValue: true};
- observer.observe(this.d[0], config);
+ observer.observe(this.wrapper[0], config);
this.wrapper.on('mouseover', '[document-node-element], [document-text-element]', function(e) {