##// END OF EJS Templates
Added ability to set container page titles for widget multicontainer
Jonathan Frederic -
Show More
@@ -1,60 +1,56 b''
1 1 require(["notebook/js/widget"], function(){
2 2 var MulticontainerModel = IPython.WidgetModel.extend({});
3 3 IPython.notebook.widget_manager.register_widget_model('MulticontainerWidgetModel', MulticontainerModel);
4 4
5 5 var AccordionView = IPython.WidgetView.extend({
6 6
7 7 render: function(){
8 8 this.$el = $('<div />', {id: IPython.utils.uuid()})
9 9 .addClass('accordion');
10 10 this.containers = [];
11 11 },
12 12
13 13 update: function() {
14 // TODO: Set tab titles
15
16 // // Apply flexible box model properties by adding and removing
17 // // corrosponding CSS classes.
18 // // Defined in IPython/html/static/base/less/flexbox.less
19 // var flex_properties = ['vbox', 'hbox', 'center', 'end', 'center'];
20 // for (var index in flex_properties) {
21 // if (this.model.get('_' + flex_properties[index])) {
22 // this.$el.addClass(flex_properties[index]);
23 // } else {
24 // this.$el.removeClass(flex_properties[index]);
25 // }
26 // }
14 // Set tab titles
15 var titles = this.model.get('_titles');
16 for (var page_index in titles) {
17 var accordian_toggle = this.containers[page_index]
18 .find('.accordion-heading')
19 .find('.accordion-toggle');
20 accordian_toggle.html(titles[page_index]);
21 }
22
27 23 return IPython.WidgetView.prototype.update.call(this);
28 24 },
29 25
30 26 display_child: function(view) {
31 27
32 28 var index = this.containers.length;
33 29 var uuid = IPython.utils.uuid();
34 30 var accordion_group = $('<div />')
35 31 .addClass('accordion-group')
36 32 .appendTo(this.$el);
37 33 var accordion_heading = $('<div />')
38 34 .addClass('accordion-heading')
39 35 .appendTo(accordion_group);
40 36 var accordion_toggle = $('<a />')
41 37 .addClass('accordion-toggle')
42 38 .attr('data-toggle', 'collapse')
43 39 .attr('data-parent', '#' + this.$el.attr('id'))
44 40 .attr('href', '#' + uuid)
45 41 .html('Page ' + index)
46 42 .appendTo(accordion_heading);
47 43 var accordion_body = $('<div />', {id: uuid})
48 .addClass('accordion-body collapse in')
44 .addClass('accordion-body collapse')
49 45 .appendTo(accordion_group);
50 46 var accordion_inner = $('<div />')
51 47 .addClass('accordion-inner')
52 48 .appendTo(accordion_body);
53 49 this.containers.push(accordion_group);
54 50
55 51 accordion_inner.append(view.$el);
56 52 },
57 53 });
58 54
59 55 IPython.notebook.widget_manager.register_widget_view('AccordionView', AccordionView);
60 56 }); No newline at end of file
@@ -1,25 +1,55 b''
1 1 """MulticontainerWidget class.
2 2
3 3 Represents a multipage container that can be used to group other widgets into
4 4 pages.
5 5 """
6 6 #-----------------------------------------------------------------------------
7 7 # Copyright (c) 2013, the IPython Development Team.
8 8 #
9 9 # Distributed under the terms of the Modified BSD License.
10 10 #
11 11 # The full license is in the file COPYING.txt, distributed with this software.
12 12 #-----------------------------------------------------------------------------
13 13
14 14 #-----------------------------------------------------------------------------
15 15 # Imports
16 16 #-----------------------------------------------------------------------------
17 17 from widget import Widget
18 from IPython.utils.traitlets import Unicode
18 from IPython.utils.traitlets import Unicode, Dict
19 19
20 20 #-----------------------------------------------------------------------------
21 21 # Classes
22 22 #-----------------------------------------------------------------------------
23 23 class MulticontainerWidget(Widget):
24 24 target_name = Unicode('MulticontainerWidgetModel')
25 25 default_view_name = Unicode('AccordionView')
26
27 # Keys
28 _keys = ['_titles']
29 _titles = Dict(help="Titles of the pages")
30
31 # Public methods
32 def set_title(self, index, title):
33 """Sets the title of a container pages
34
35 Parameters
36 ----------
37 index : int
38 Index of the container page
39 title : unicode
40 New title"""
41 self._titles[index] = title
42 self.send_state('_titles')
43
44
45 def get_title(self, index):
46 """Gets the title of a container pages
47
48 Parameters
49 ----------
50 index : int
51 Index of the container page"""
52 if index in self._titles:
53 return self._titles[index]
54 else:
55 return None
General Comments 0
You need to be logged in to leave comments. Login now