X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/e3d38a12c37e706077d9a42194fb80eb05e12658..f63769e206281f306f6c2cb937358837da450185:/src/editor/modules/sourceEditor/sourceEditor.js diff --git a/src/editor/modules/sourceEditor/sourceEditor.js b/src/editor/modules/sourceEditor/sourceEditor.js index 2e2e6ab..12536ac 100644 --- a/src/editor/modules/sourceEditor/sourceEditor.js +++ b/src/editor/modules/sourceEditor/sourceEditor.js @@ -1,23 +1,44 @@ -define(function() { +define(['libs/jquery', 'libs/text!./template.html'], function($, template) { 'use strict'; return function(sandbox) { - var view = $(sandbox.getTemplate('main')()); + var view = $(template), + documentIsDirty = true, + documentEditedHere = false, + wlxmlDocument; + + view.onShow = function() { + if(documentIsDirty) { + editor.setValue(wlxmlDocument.toXML()); + editor.gotoLine(0); + documentEditedHere = false; + + documentIsDirty = false; + } + }; + + view.onHide = function() { + if(documentEditedHere) { + commitDocument(); + } + }; + + var commitDocument = function() { + documentEditedHere = false; + wlxmlDocument.loadXML(editor.getValue()); + }; + /* globals ace */ var editor = ace.edit(view.find('#rng-sourceEditor-editor')[0]), session = editor.getSession(); - editor.setTheme("ace/theme/chrome"); - session.setMode("ace/mode/xml") + editor.setTheme('ace/theme/chrome'); + session.setMode('ace/mode/xml'); session.setUseWrapMode(true); - $('textarea', view).on('keyup', function() { - sandbox.publish('xmlChanged'); - }); - editor.getSession().on('change', function() { - sandbox.publish('xmlChanged'); + documentEditedHere = true; }); return { start: function() { @@ -27,10 +48,18 @@ 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; + }); + wlxmlDocument.on('contentSet', function() { + documentIsDirty = true; + }); + }, + changesCommited: function() { + return !documentEditedHere; }, + commitChanges: commitDocument, getDocument: function() { return editor.getValue(); }