6ea6f408ce8c427b45bed4fa2e1c2f39f8822628
[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         showed: function(slug) {\r
46             if(slug === 'visual')\r
47                 sandbox.getModule('visualEditor').onShowed();\r
48         }\r
49     };\r
50     \r
51     eventHandlers.sourceEditor = {\r
52         ready: function() {\r
53             addTab('Source', 'source',  sandbox.getModule('sourceEditor').getView());\r
54             sandbox.getModule('sourceEditor').setDocument(sandbox.getModule('data').getDocument());\r
55         }\r
56     };\r
57     \r
58     eventHandlers.visualEditor = {\r
59         ready: function() {\r
60             sandbox.getModule('visualEditor').setDocument(sandbox.getModule('data').getDocument());\r
61             addTab('Visual', 'visual', sandbox.getModule('visualEditor').getView());\r
62             \r
63         }\r
64     };\r
65     \r
66     eventHandlers.data = {\r
67         ready: function() {\r
68             sandbox.getModule('skelton').start();\r
69         },\r
70         documentChanged: function(document, reason) {\r
71             var slug = (reason === 'visual_edit' ? 'source' : 'visual');\r
72             sandbox.getModule(slug+'Editor').setDocument(document);\r
73         }\r
74     }\r
75     \r
76     \r
77     /* api */\r
78     \r
79     return {\r
80         start: function() {\r
81             sandbox.getModule('data').start();\r
82         },\r
83         handleEvent: function(moduleName, eventName, args) {\r
84             if(eventHandlers[moduleName] && eventHandlers[moduleName][eventName]) {\r
85                 eventHandlers[moduleName][eventName].apply(eventHandlers, args);\r
86             }\r
87         }\r
88     }\r
89 };