36bd2f88a85c1e309045d347cc684cbe3423471f
[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(gettext('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(gettext('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         savingStarted: function() {\r
75             sandbox.getModule('skelton').deactivateCommand('save');\r
76             sandbox.getModule('skelton').showMessage(gettext('Saving...'));\r
77         },\r
78         savingEnded: function(status) {\r
79             sandbox.getModule('skelton').activateCommand('save');\r
80             sandbox.getModule('skelton').clearMessage();\r
81         }\r
82     }\r
83     \r
84     \r
85     /* api */\r
86     \r
87     return {\r
88         start: function() {\r
89             sandbox.getModule('data').start();\r
90         },\r
91         handleEvent: function(moduleName, eventName, args) {\r
92             if(eventHandlers[moduleName] && eventHandlers[moduleName][eventName]) {\r
93                 eventHandlers[moduleName][eventName].apply(eventHandlers, args);\r
94             }\r
95         }\r
96     }\r
97 };