Fixing dirty state management in source editor
[fnpeditor.git] / src / editor / modules / sourceEditor / sourceEditor.js
1 define(function() {
2
3 'use strict';
4
5 return function(sandbox) {
6
7     var view = $(sandbox.getTemplate('main')()),
8         documentIsDirty = true,
9         documentEditedHere = false,
10         wlxmlDocument;
11
12     view.onShow = function() {
13         if(documentIsDirty) {
14             editor.setValue(wlxmlDocument.toXML());
15             editor.gotoLine(0);
16             documentEditedHere = false;
17
18             sandbox.publish('documentSet');
19             documentIsDirty = false;
20         }
21     }
22
23     view.onHide = function() {
24         if(documentEditedHere) {
25             documentEditedHere = false;
26             wlxmlDocument.loadXML(editor.getValue());
27         }
28     }
29     
30     var editor = ace.edit(view.find('#rng-sourceEditor-editor')[0]),
31         session = editor.getSession();
32     editor.setTheme("ace/theme/chrome");
33     session.setMode("ace/mode/xml")
34     session.setUseWrapMode(true);
35     
36     $('textarea', view).on('keyup', function() {
37         documentEditedHere = true;
38     });
39     
40     editor.getSession().on('change', function() {
41         documentEditedHere = true;
42     });
43     return {
44         start: function() {
45             sandbox.publish('ready');
46         },
47         getView: function() {
48             return view;
49         },
50         setDocument: function(document) {
51             wlxmlDocument = document;
52             wlxmlDocument.on('change', function() {
53                 documentIsDirty = true;
54             });
55         },
56         getDocument: function() {
57             return editor.getValue();
58         }
59     };
60 };
61
62 });