Basic communication between source and visual editors; data module
[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     };\r
16     \r
17     eventHandlers.tabsManager = {\r
18         ready: function() {\r
19             sandbox.getModule('skelton').setMainView(sandbox.getModule('tabsManager').getView());\r
20             _.each(['visualEditor', 'sourceEditor'], function(moduleName) {\r
21                 sandbox.getModule(moduleName).start();\r
22             });\r
23         },\r
24         leaving: function(slug) {\r
25             if(slug === 'source' || slug === 'visual') {\r
26                 var editor = sandbox.getModule(slug+'Editor');\r
27                 if(editor.isDirty()) {\r
28                     sandbox.getModule('data').commitDocument(editor.getDocument(), slug + '_edit');\r
29                     editor.setDirty(false);\r
30                 }\r
31             }\r
32         }\r
33     };\r
34     \r
35     eventHandlers.sourceEditor = {\r
36         ready: function() {\r
37             addTab('Source', 'source',  sandbox.getModule('sourceEditor').getView());\r
38             sandbox.getModule('sourceEditor').setDocument(sandbox.getModule('data').getDocument());\r
39         }\r
40     };\r
41     \r
42     eventHandlers.visualEditor = {\r
43         ready: function() {\r
44             addTab('Visual', 'visual', sandbox.getModule('visualEditor').getView());\r
45             sandbox.getModule('visualEditor').setDocument(sandbox.getModule('data').getDocument());\r
46         }\r
47     };\r
48     \r
49     eventHandlers.data = {\r
50         ready: function() {\r
51             sandbox.getModule('skelton').start();\r
52         },\r
53         documentChanged: function(document, reason) {\r
54             var slug = (reason === 'visual_edit' ? 'source' : 'visual');\r
55             sandbox.getModule(slug+'Editor').setDocument(document);\r
56         }\r
57     }\r
58     \r
59     \r
60     /* api */\r
61     \r
62     return {\r
63         start: function() {\r
64             sandbox.getModule('data').start();\r
65         },\r
66         handleEvent: function(moduleName, eventName, args) {\r
67             if(eventHandlers[moduleName] && eventHandlers[moduleName][eventName]) {\r
68                 eventHandlers[moduleName][eventName].apply(eventHandlers, args);\r
69             }\r
70         }\r
71     }\r
72 };