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