Editor: Introducing requirejs
[fnpeditor.git] / modules / tabsManager.js
1 define(function() {\r
2 \r
3 return function(sandbox) {\r
4 \r
5     var $ = sandbox.$;\r
6     \r
7     var view = $(sandbox.getTemplate('main')());\r
8     var currentSlug;\r
9     var tabContent = {};\r
10     \r
11     function selectTab(slug) {\r
12         var tabBar = view.find('#rng-tabsManager-tabBar');\r
13         \r
14         var prevActive = tabBar.find('li.active');\r
15         var prevSlug;\r
16         if(prevActive.length)\r
17             prevSlug = prevActive.find('a').attr('href').substr(1);\r
18         \r
19         if(prevSlug == slug)\r
20             return;\r
21         if(prevSlug)\r
22             sandbox.publish('leaving', prevSlug);\r
23         \r
24         tabBar.find('li').removeClass('active');\r
25         tabBar.find('a[href=#' + slug + ']').parent().addClass('active');\r
26         \r
27         if(prevSlug)\r
28             tabContent[prevSlug].detach();\r
29         tabContent[slug].appendTo(view.find('#rng-tabsManager-content'));\r
30         currentSlug = slug;\r
31         sandbox.publish('showed', slug);\r
32     }\r
33        \r
34     \r
35     view.on('click', '#rng-tabsManager-tabBar li a', function(e) {\r
36         selectTab($(e.target).attr('href').substr(1));\r
37     });\r
38     \r
39     return {\r
40         start: function() {\r
41             sandbox.publish('ready');\r
42         },\r
43         \r
44         getView: function() {\r
45             return view;\r
46         },\r
47         \r
48         addTab: function(title, slug, contentView) {\r
49             tabContent[slug] = contentView;\r
50             view.find('#rng-tabsManager-tabBar').append(sandbox.getTemplate('tabHandle')({title: title, slug: slug}));\r
51             if(_.values(tabContent).length === 1)\r
52                 selectTab(slug);\r
53         },\r
54         getCurrentSlug: function() {\r
55             return currentSlug;\r
56         }\r
57     }\r
58 \r
59 };\r
60 \r
61 });