integration wip: handling nodeTextChange event
[fnpeditor.git] / src / editor / modules / sourceEditor / sourceEditor.js
index 2e2e6ab..0d7b12e 100644 (file)
@@ -4,7 +4,28 @@ define(function() {
 
 return function(sandbox) {
 
-    var view = $(sandbox.getTemplate('main')());
+    var view = $(sandbox.getTemplate('main')()),
+        documentIsDirty = true,
+        documentEditedHere = false,
+        wlxmlDocument;
+
+    view.onShow = function() {
+        if(documentIsDirty) {
+            editor.setValue(wlxmlDocument.toXML());
+            editor.gotoLine(0);
+            documentEditedHere = false;
+
+            sandbox.publish('documentSet');
+            documentIsDirty = false;
+        }
+    }
+
+    view.onHide = function() {
+        if(documentEditedHere) {
+            documentEditedHere = false;
+            wlxmlDocument.loadXML(editor.getValue());
+        }
+    }
     
     var editor = ace.edit(view.find('#rng-sourceEditor-editor')[0]),
         session = editor.getSession();
@@ -13,11 +34,11 @@ return function(sandbox) {
     session.setUseWrapMode(true);
     
     $('textarea', view).on('keyup', function() {
-        sandbox.publish('xmlChanged');
+        documentEditedHere = true;
     });
     
     editor.getSession().on('change', function() {
-        sandbox.publish('xmlChanged');
+        documentEditedHere = true;
     });
     return {
         start: function() {
@@ -27,9 +48,10 @@ return function(sandbox) {
             return view;
         },
         setDocument: function(document) {
-            editor.setValue(document.toXML());
-            editor.gotoLine(0);
-            sandbox.publish('documentSet');
+            wlxmlDocument = document;
+            wlxmlDocument.on('change', function() {
+                documentIsDirty = true;
+            });
         },
         getDocument: function() {
             return editor.getValue();