X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/dcfd364712eefa84d96a477149f34a623cf7ddde..7e51aac084729ec15edc054e7c0bc3b07be05889:/modules/rng.js

diff --git a/modules/rng.js b/modules/rng.js
index e6f3c26..36bd2f8 100644
--- a/modules/rng.js
+++ b/modules/rng.js
@@ -11,6 +11,18 @@ rng.modules.rng = function(sandbox) {
     eventHandlers.skelton = {
         ready: function() {
             sandbox.getModule('tabsManager').start();
+        },
+        'cmd.save': function() {
+            var editorSlugs = ['visual', 'source'];
+            var slug = sandbox.getModule('tabsManager').getCurrentSlug();
+            if(_.contains(editorSlugs, slug)) {
+                var editor = sandbox.getModule(slug+'Editor');
+                if(editor.isDirty()) {
+                    sandbox.getModule('data').commitDocument(editor.getDocument(), slug + '_edit');
+                    editor.setDirty(false);
+                }
+            }
+            sandbox.getModule('data').saveDocument();
         }
     };
     
@@ -20,27 +32,61 @@ rng.modules.rng = function(sandbox) {
             _.each(['visualEditor', 'sourceEditor'], function(moduleName) {
                 sandbox.getModule(moduleName).start();
             });
+        },
+        leaving: function(slug) {
+            if(slug === 'source' || slug === 'visual') {
+                var editor = sandbox.getModule(slug+'Editor');
+                if(editor.isDirty()) {
+                    sandbox.getModule('data').commitDocument(editor.getDocument(), slug + '_edit');
+                    editor.setDirty(false);
+                }
+            }
+        },
+        showed: function(slug) {
+            if(slug === 'visual')
+                sandbox.getModule('visualEditor').onShowed();
         }
     };
     
     eventHandlers.sourceEditor = {
         ready: function() {
-            addTab('Source', 'source',  sandbox.getModule('sourceEditor').getView());
+            addTab(gettext('Source'), 'source',  sandbox.getModule('sourceEditor').getView());
+            sandbox.getModule('sourceEditor').setDocument(sandbox.getModule('data').getDocument());
         }
     };
     
     eventHandlers.visualEditor = {
         ready: function() {
-            addTab('Visual', 'visual', sandbox.getModule('visualEditor').getView());
+            sandbox.getModule('visualEditor').setDocument(sandbox.getModule('data').getDocument());
+            addTab(gettext('Visual'), 'visual', sandbox.getModule('visualEditor').getView());
+            
         }
     };
     
+    eventHandlers.data = {
+        ready: function() {
+            sandbox.getModule('skelton').start();
+        },
+        documentChanged: function(document, reason) {
+            var slug = (reason === 'visual_edit' ? 'source' : 'visual');
+            sandbox.getModule(slug+'Editor').setDocument(document);
+        },
+        savingStarted: function() {
+            sandbox.getModule('skelton').deactivateCommand('save');
+            sandbox.getModule('skelton').showMessage(gettext('Saving...'));
+        },
+        savingEnded: function(status) {
+            sandbox.getModule('skelton').activateCommand('save');
+            sandbox.getModule('skelton').clearMessage();
+        }
+    }
+    
     
     /* api */
     
     return {
         start: function() {
-            sandbox.getModule('skelton').start();
+            sandbox.getModule('data').start();
         },
         handleEvent: function(moduleName, eventName, args) {
             if(eventHandlers[moduleName] && eventHandlers[moduleName][eventName]) {