##// END OF EJS Templates
Added selected_index property to TabView
Jonathan Frederic -
Show More
@@ -1,126 +1,139 b''
1 require(["notebook/js/widget"], function(){
1 require(["notebook/js/widget"], function(){
2 var MulticontainerModel = IPython.WidgetModel.extend({});
2 var MulticontainerModel = IPython.WidgetModel.extend({});
3 IPython.notebook.widget_manager.register_widget_model('MulticontainerWidgetModel', MulticontainerModel);
3 IPython.notebook.widget_manager.register_widget_model('MulticontainerWidgetModel', MulticontainerModel);
4
4
5 var AccordionView = IPython.WidgetView.extend({
5 var AccordionView = IPython.WidgetView.extend({
6
6
7 render: function(){
7 render: function(){
8 this.$el = $('<div />', {id: IPython.utils.uuid()})
8 this.$el = $('<div />', {id: IPython.utils.uuid()})
9 .addClass('accordion');
9 .addClass('accordion');
10 this.containers = [];
10 this.containers = [];
11 },
11 },
12
12
13 update: function() {
13 update: function() {
14 // Set tab titles
14 // Set tab titles
15 var titles = this.model.get('_titles');
15 var titles = this.model.get('_titles');
16 for (var page_index in titles) {
16 for (var page_index in titles) {
17
17
18 var accordian = this.containers[page_index]
18 var accordian = this.containers[page_index]
19 if (accordian != undefined) {
19 if (accordian != undefined) {
20 accordian
20 accordian
21 .find('.accordion-heading')
21 .find('.accordion-heading')
22 .find('.accordion-toggle')
22 .find('.accordion-toggle')
23 .html(titles[page_index]);
23 .html(titles[page_index]);
24 }
24 }
25 }
25 }
26
26
27 return IPython.WidgetView.prototype.update.call(this);
27 return IPython.WidgetView.prototype.update.call(this);
28 },
28 },
29
29
30 display_child: function(view) {
30 display_child: function(view) {
31
31
32 var index = this.containers.length;
32 var index = this.containers.length;
33 var uuid = IPython.utils.uuid();
33 var uuid = IPython.utils.uuid();
34 var accordion_group = $('<div />')
34 var accordion_group = $('<div />')
35 .addClass('accordion-group')
35 .addClass('accordion-group')
36 .appendTo(this.$el);
36 .appendTo(this.$el);
37 var accordion_heading = $('<div />')
37 var accordion_heading = $('<div />')
38 .addClass('accordion-heading')
38 .addClass('accordion-heading')
39 .appendTo(accordion_group);
39 .appendTo(accordion_group);
40 var accordion_toggle = $('<a />')
40 var accordion_toggle = $('<a />')
41 .addClass('accordion-toggle')
41 .addClass('accordion-toggle')
42 .attr('data-toggle', 'collapse')
42 .attr('data-toggle', 'collapse')
43 .attr('data-parent', '#' + this.$el.attr('id'))
43 .attr('data-parent', '#' + this.$el.attr('id'))
44 .attr('href', '#' + uuid)
44 .attr('href', '#' + uuid)
45 .html('Page ' + index)
45 .html('Page ' + index)
46 .appendTo(accordion_heading);
46 .appendTo(accordion_heading);
47 var accordion_body = $('<div />', {id: uuid})
47 var accordion_body = $('<div />', {id: uuid})
48 .addClass('accordion-body collapse')
48 .addClass('accordion-body collapse')
49 .appendTo(accordion_group);
49 .appendTo(accordion_group);
50 var accordion_inner = $('<div />')
50 var accordion_inner = $('<div />')
51 .addClass('accordion-inner')
51 .addClass('accordion-inner')
52 .appendTo(accordion_body);
52 .appendTo(accordion_body);
53 this.containers.push(accordion_group);
53 this.containers.push(accordion_group);
54
54
55 accordion_inner.append(view.$el);
55 accordion_inner.append(view.$el);
56 this.update();
56 this.update();
57 },
57 },
58 });
58 });
59
59
60 IPython.notebook.widget_manager.register_widget_view('AccordionView', AccordionView);
60 IPython.notebook.widget_manager.register_widget_view('AccordionView', AccordionView);
61
61
62 var TabView = IPython.WidgetView.extend({
62 var TabView = IPython.WidgetView.extend({
63
63
64 render: function(){
64 render: function(){
65 this.$el = $('<div />');
65 this.$el = $('<div />');
66 var uuid = IPython.utils.uuid();
66 var uuid = IPython.utils.uuid();
67 var that = this;
67 this.$tabs = $('<div />', {id: uuid})
68 this.$tabs = $('<div />', {id: uuid})
68 .addClass('nav')
69 .addClass('nav')
69 .addClass('nav-tabs')
70 .addClass('nav-tabs')
70 .appendTo(this.$el);
71 .appendTo(this.$el);
71 this.$tab_contents = $('<div />', {id: uuid + 'Content'})
72 this.$tab_contents = $('<div />', {id: uuid + 'Content'})
72 .addClass('tab-content')
73 .addClass('tab-content')
73 .appendTo(this.$el);
74 .appendTo(this.$el);
74
75
75 this.containers = [];
76 this.containers = [];
76 },
77 },
77
78
78 update: function() {
79 update: function() {
79 // Set tab titles
80 // Set tab titles
80 var titles = this.model.get('_titles');
81 var titles = this.model.get('_titles');
81 for (var page_index in titles) {
82 for (var page_index in titles) {
82 var tab_text = this.containers[page_index]
83 var tab_text = this.containers[page_index]
83 if (tab_text != undefined) {
84 if (tab_text != undefined) {
84 tab_text.html(titles[page_index]);
85 tab_text.html(titles[page_index]);
85 }
86 }
86 }
87 }
87
88
89 var selected_index = this.model.get('selected_index');
90 if (0 <= selected_index && selected_index < this.containers.length) {
91 this.select_page(selected_index);
92 }
93
88 return IPython.WidgetView.prototype.update.call(this);
94 return IPython.WidgetView.prototype.update.call(this);
89 },
95 },
90
96
91 display_child: function(view) {
97 display_child: function(view) {
92
98
93 var index = this.containers.length;
99 var index = this.containers.length;
94 var uuid = IPython.utils.uuid();
100 var uuid = IPython.utils.uuid();
95
101
96 var that = this;
102 var that = this;
97 var tab = $('<li />')
103 var tab = $('<li />')
98 .css('list-style-type', 'none')
104 .css('list-style-type', 'none')
99 .appendTo(this.$tabs);
105 .appendTo(this.$tabs);
100 var tab_text = $('<a />')
106 var tab_text = $('<a />')
101 .attr('href', '#' + uuid)
107 .attr('href', '#' + uuid)
102 .attr('data-toggle', 'tab')
108 .attr('data-toggle', 'tab')
103 .html('Page ' + index)
109 .html('Page ' + index)
104 .appendTo(tab)
110 .appendTo(tab)
105 .click(function (e) {
111 .click(function (e) {
106 that.$tabs.find('li')
112 that.model.set("selected_index", index);
107 .removeClass('active');
113 that.model.update_other_views(that);
114 that.select_page(index);
108 });
115 });
109 this.containers.push(tab_text);
116 this.containers.push(tab_text);
110
117
111 var contents_div = $('<div />', {id: uuid})
118 var contents_div = $('<div />', {id: uuid})
112 .addClass('tab-pane')
119 .addClass('tab-pane')
113 .addClass('fade')
120 .addClass('fade')
114 .append(view.$el)
121 .append(view.$el)
115 .appendTo(this.$tab_contents);
122 .appendTo(this.$tab_contents);
116
123
117 if (index==0) {
124 if (index==0) {
118 tab_text.tab('show');
125 tab_text.tab('show');
119 }
126 }
120 this.update();
127 this.update();
121 },
128 },
129
130 select_page: function(index) {
131 this.$tabs.find('li')
132 .removeClass('active');
133 this.containers[index].tab('show');
134 },
122 });
135 });
123
136
124 IPython.notebook.widget_manager.register_widget_view('TabView', TabView);
137 IPython.notebook.widget_manager.register_widget_view('TabView', TabView);
125
138
126 });
139 });
@@ -1,55 +1,56 b''
1 """MulticontainerWidget class.
1 """MulticontainerWidget class.
2
2
3 Represents a multipage container that can be used to group other widgets into
3 Represents a multipage container that can be used to group other widgets into
4 pages.
4 pages.
5 """
5 """
6 #-----------------------------------------------------------------------------
6 #-----------------------------------------------------------------------------
7 # Copyright (c) 2013, the IPython Development Team.
7 # Copyright (c) 2013, the IPython Development Team.
8 #
8 #
9 # Distributed under the terms of the Modified BSD License.
9 # Distributed under the terms of the Modified BSD License.
10 #
10 #
11 # The full license is in the file COPYING.txt, distributed with this software.
11 # The full license is in the file COPYING.txt, distributed with this software.
12 #-----------------------------------------------------------------------------
12 #-----------------------------------------------------------------------------
13
13
14 #-----------------------------------------------------------------------------
14 #-----------------------------------------------------------------------------
15 # Imports
15 # Imports
16 #-----------------------------------------------------------------------------
16 #-----------------------------------------------------------------------------
17 from widget import Widget
17 from widget import Widget
18 from IPython.utils.traitlets import Unicode, Dict
18 from IPython.utils.traitlets import Unicode, Dict, Int
19
19
20 #-----------------------------------------------------------------------------
20 #-----------------------------------------------------------------------------
21 # Classes
21 # Classes
22 #-----------------------------------------------------------------------------
22 #-----------------------------------------------------------------------------
23 class MulticontainerWidget(Widget):
23 class MulticontainerWidget(Widget):
24 target_name = Unicode('MulticontainerWidgetModel')
24 target_name = Unicode('MulticontainerWidgetModel')
25 default_view_name = Unicode('TabView')
25 default_view_name = Unicode('TabView')
26
26
27 # Keys
27 # Keys
28 _keys = ['_titles']
28 _keys = ['_titles', 'selected_index']
29 _titles = Dict(help="Titles of the pages")
29 _titles = Dict(help="Titles of the pages")
30 selected_index = Int(0)
30
31
31 # Public methods
32 # Public methods
32 def set_title(self, index, title):
33 def set_title(self, index, title):
33 """Sets the title of a container pages
34 """Sets the title of a container pages
34
35
35 Parameters
36 Parameters
36 ----------
37 ----------
37 index : int
38 index : int
38 Index of the container page
39 Index of the container page
39 title : unicode
40 title : unicode
40 New title"""
41 New title"""
41 self._titles[index] = title
42 self._titles[index] = title
42 self.send_state('_titles')
43 self.send_state('_titles')
43
44
44
45
45 def get_title(self, index):
46 def get_title(self, index):
46 """Gets the title of a container pages
47 """Gets the title of a container pages
47
48
48 Parameters
49 Parameters
49 ----------
50 ----------
50 index : int
51 index : int
51 Index of the container page"""
52 Index of the container page"""
52 if index in self._titles:
53 if index in self._titles:
53 return self._titles[index]
54 return self._titles[index]
54 else:
55 else:
55 return None
56 return None
General Comments 0
You need to be logged in to leave comments. Login now