editor: handle undefined action state
[fnpeditor.git] / src / editor / modules / sourceEditor / sourceEditor.js
1 define(['libs/jquery', 'libs/text!./template.html'], function($, template) {
2
3 'use strict';
4
5 return function(sandbox) {
6
7     var view = $(template),
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             documentIsDirty = false;
19         }
20     };
21
22     view.onHide = function() {
23         if(documentEditedHere) {
24             commitDocument();
25         }
26     };
27
28     var commitDocument = function() {
29         documentEditedHere = false;
30         wlxmlDocument.loadXML(editor.getValue());
31     };
32     
33     /* globals ace */
34     var editor = ace.edit(view.find('#rng-sourceEditor-editor')[0]),
35         session = editor.getSession();
36     editor.setTheme('ace/theme/chrome');
37     session.setMode('ace/mode/xml');
38     session.setUseWrapMode(true);
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             wlxmlDocument.on('contentSet', function() {
56                 documentIsDirty = true;
57             });
58         },
59         changesCommited: function() {
60             return !documentEditedHere;
61         },
62         commitChanges: commitDocument,
63         getDocument: function() {
64             return editor.getValue();
65         }
66     };
67 };
68
69 });