X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/c42b6d572516798821f2295114ca2a62013d9506..62785e07d962daae8e0a84283ac5da8e2a019595:/src/editor/modules/rng/rng.js diff --git a/src/editor/modules/rng/rng.js b/src/editor/modules/rng/rng.js index 4a01b7b..05e0620 100644 --- a/src/editor/modules/rng/rng.js +++ b/src/editor/modules/rng/rng.js @@ -43,6 +43,7 @@ return function(sandbox) { sandbox.getModule('nodeFamilyTree').setElement(nodeElement); sandbox.getModule('nodeBreadCrumbs').setNodeElement(nodeElement); sandbox.getModule('documentToolbar').setNodeElement(nodeElement); + sandbox.getModule('metadataEditor').setNodeElement(nodeElement); }, updateCurrentTextElement: function(textElement) { sandbox.getModule('nodeFamilyTree').setElement(textElement); @@ -68,6 +69,7 @@ return function(sandbox) { views.visualEditingSidebar.addTab({icon: 'pencil'}, 'edit', views.currentNodePaneLayout.getAsView()); + var wlxmlDocument, documentIsDirty; /* Events handling */ @@ -87,15 +89,33 @@ return function(sandbox) { _.each(['sourceEditor', 'documentCanvas', 'documentToolbar', 'nodePane', 'metadataEditor', 'nodeFamilyTree', 'nodeBreadCrumbs', 'mainBar', 'indicator', 'documentHistory', 'diffViewer'], function(moduleName) { sandbox.getModule(moduleName).start(); }); + + wlxmlDocument = sandbox.getModule('data').getDocument(); + documentIsDirty = false; + wlxmlDocument.on('change', function() { + documentIsDirty = true; + }); + wlxmlDocument.on('contentSet', function() { + documentIsDirty = true; + }); }, - savingStarted: function() { + savingStarted: function(what) { + var msg = { + remote: gettext('Saving document'), + local: gettext('Saving local copy') + }; sandbox.getModule('mainBar').setCommandEnabled('save', false); - sandbox.getModule('indicator').showMessage(gettext('Saving...')); + sandbox.getModule('indicator').showMessage(msg[what] + '...'); }, - savingEnded: function(status, current_version) { + savingEnded: function(status, what, current_version) { void(status); + var msg = { + remote: gettext('Document saved'), + local: gettext('Local copy saved') + }; + documentIsDirty = false; sandbox.getModule('mainBar').setCommandEnabled('save', true); - sandbox.getModule('indicator').clearMessage({message:'Dokument zapisany'}); + sandbox.getModule('indicator').clearMessage({message: msg[what]}); sandbox.getModule('mainBar').setVersion(current_version); }, restoringStarted: function(event) { @@ -109,6 +129,7 @@ return function(sandbox) { sandbox.getModule('diffViewer').setDiff(diff); }, documentReverted: function(version) { + documentIsDirty = false; sandbox.getModule('mainBar').setCommandEnabled('save', true); sandbox.getModule('indicator').clearMessage({message:'Wersja ' + version + ' przywrócona'}); sandbox.getModule('mainBar').setVersion(version); @@ -121,6 +142,10 @@ return function(sandbox) { views.mainLayout.setView('topPanel', sandbox.getModule('mainBar').getView()); }, 'cmd.save': function() { + var sourceEditor = sandbox.getModule('sourceEditor'); + if(!sourceEditor.changesCommited()) { + sourceEditor.commitChanges(); + } sandbox.getModule('data').saveDocument(); } }; @@ -238,6 +263,15 @@ return function(sandbox) { views.diffLayout.setView('right', sandbox.getModule('diffViewer').getView()); } }; + + window.addEventListener('beforeunload', function(event) { + var txt = gettext('Do you really want to exit?'); + if(documentIsDirty) { + txt += ' ' + gettext('Document contains unsaved changes!'); + } + event.returnValue = txt; // FF + return txt; // Chrome + }); /* api */