Introducing Ace as the source editor
[fnpeditor.git] / modules / rng.js
1 rng.modules.rng = function(sandbox) {\r
2 \r
3     function addTab(title, slug, view) {\r
4         sandbox.getModule('tabsManager').addTab(title, slug, view);\r
5     }\r
6     \r
7     /* Events handling */\r
8     \r
9     eventHandlers = {};\r
10     \r
11     eventHandlers.skelton = {\r
12         ready: function() {\r
13             sandbox.getModule('tabsManager').start();\r
14         },\r
15         'cmd.save': function() {\r
16             var editorSlugs = ['visual', 'source'];\r
17             var slug = sandbox.getModule('tabsManager').getCurrentSlug();\r
18             if(_.contains(editorSlugs, slug)) {\r
19                 var editor = sandbox.getModule(slug+'Editor');\r
20                 if(editor.isDirty()) {\r
21                     sandbox.getModule('data').commitDocument(editor.getDocument(), slug + '_edit');\r
22                     editor.setDirty(false);\r
23                 }\r
24             }\r
25             sandbox.getModule('data').saveDocument();\r
26         }\r
27     };\r
28     \r
29     eventHandlers.tabsManager = {\r
30         ready: function() {\r
31             sandbox.getModule('skelton').setMainView(sandbox.getModule('tabsManager').getView());\r
32             _.each(['visualEditor', 'sourceEditor'], function(moduleName) {\r
33                 sandbox.getModule(moduleName).start();\r
34             });\r
35         },\r
36         leaving: function(slug) {\r
37             if(slug === 'source' || slug === 'visual') {\r
38                 var editor = sandbox.getModule(slug+'Editor');\r
39                 if(editor.isDirty()) {\r
40                     sandbox.getModule('data').commitDocument(editor.getDocument(), slug + '_edit');\r
41                     editor.setDirty(false);\r
42                 }\r
43             }\r
44         }\r
45     };\r
46     \r
47     eventHandlers.sourceEditor = {\r
48         ready: function() {\r
49             addTab('Source', 'source',  sandbox.getModule('sourceEditor').getView());\r
50             sandbox.getModule('sourceEditor').setDocument(sandbox.getModule('data').getDocument());\r
51         }\r
52     };\r
53     \r
54     eventHandlers.visualEditor = {\r
55         ready: function() {\r
56             addTab('Visual', 'visual', sandbox.getModule('visualEditor').getView());\r
57             sandbox.getModule('visualEditor').setDocument(sandbox.getModule('data').getDocument());\r
58         }\r
59     };\r
60     \r
61     eventHandlers.data = {\r
62         ready: function() {\r
63             sandbox.getModule('skelton').start();\r
64         },\r
65         documentChanged: function(document, reason) {\r
66             var slug = (reason === 'visual_edit' ? 'source' : 'visual');\r
67             sandbox.getModule(slug+'Editor').setDocument(document);\r
68         }\r
69     }\r
70     \r
71     \r
72     /* api */\r
73     \r
74     return {\r
75         start: function() {\r
76             sandbox.getModule('data').start();\r
77         },\r
78         handleEvent: function(moduleName, eventName, args) {\r
79             if(eventHandlers[moduleName] && eventHandlers[moduleName][eventName]) {\r
80                 eventHandlers[moduleName][eventName].apply(eventHandlers, args);\r
81             }\r
82         }\r
83     }\r
84 };