Show More
@@ -0,0 +1,1 b'' | |||
|
1 | from widget import SelectionWidget No newline at end of file |
@@ -0,0 +1,2 b'' | |||
|
1 | var SelectionWidgetModel = IPython.WidgetModel.extend({}); | |
|
2 | IPython.notebook.widget_manager.register_widget_model('SelectionWidgetModel', SelectionWidgetModel); |
@@ -0,0 +1,62 b'' | |||
|
1 | var DropdownView = IPython.WidgetView.extend({ | |
|
2 | ||
|
3 | // Called when view is rendered. | |
|
4 | render : function(){ | |
|
5 | ||
|
6 | this.$el | |
|
7 | .html('') | |
|
8 | .addClass(this.model.comm.comm_id); | |
|
9 | this.$buttongroup = $('<div />') | |
|
10 | .addClass('btn-group') | |
|
11 | .appendTo(this.$el); | |
|
12 | this.$droplabel = $('<button />') | |
|
13 | .addClass('btn') | |
|
14 | .appendTo(this.$buttongroup); | |
|
15 | this.$dropbutton = $('<button />') | |
|
16 | .addClass('btn') | |
|
17 | .addClass('dropdown-toggle') | |
|
18 | .attr('data-toggle', 'dropdown') | |
|
19 | .html('<span class="caret"></span>') | |
|
20 | .appendTo(this.$buttongroup); | |
|
21 | this.$droplist = $('<ul />') | |
|
22 | .addClass('dropdown-menu') | |
|
23 | .appendTo(this.$buttongroup); | |
|
24 | ||
|
25 | // Set defaults. | |
|
26 | this.update(); | |
|
27 | }, | |
|
28 | ||
|
29 | // Handles: Backend -> Frontend Sync | |
|
30 | // Frontent -> Frontend Sync | |
|
31 | update : function(){ | |
|
32 | this.$droplabel.html(this.model.get('value')); | |
|
33 | ||
|
34 | var items = this.model.get('values'); | |
|
35 | this.$droplist.html(''); | |
|
36 | for (var index in items) { | |
|
37 | var that = this; | |
|
38 | var item_button = $('<a href="#"/>') | |
|
39 | .html(items[index]) | |
|
40 | .on('click', function(e){ | |
|
41 | that.model.set('value', $(e.target).html(), this ); | |
|
42 | }) | |
|
43 | ||
|
44 | this.$droplist.append($('<li />').append(item_button)) | |
|
45 | } | |
|
46 | ||
|
47 | if (this.model.get('disabled')) { | |
|
48 | this.$buttongroup.attr('disabled','disabled'); | |
|
49 | this.$droplabel.attr('disabled','disabled'); | |
|
50 | this.$dropbutton.attr('disabled','disabled'); | |
|
51 | this.$droplist.attr('disabled','disabled'); | |
|
52 | } else { | |
|
53 | this.$buttongroup.removeAttr('disabled'); | |
|
54 | this.$droplabel.removeAttr('disabled'); | |
|
55 | this.$dropbutton.removeAttr('disabled'); | |
|
56 | this.$droplist.removeAttr('disabled'); | |
|
57 | } | |
|
58 | }, | |
|
59 | ||
|
60 | }); | |
|
61 | ||
|
62 | IPython.notebook.widget_manager.register_widget_view('DropdownView', DropdownView); |
@@ -0,0 +1,63 b'' | |||
|
1 | var RadioButtonView = IPython.WidgetView.extend({ | |
|
2 | ||
|
3 | // Called when view is rendered. | |
|
4 | render : function(){ | |
|
5 | this.$el | |
|
6 | .html('') | |
|
7 | .addClass(this.model.comm.comm_id); | |
|
8 | this.update(); | |
|
9 | }, | |
|
10 | ||
|
11 | // Handles: Backend -> Frontend Sync | |
|
12 | // Frontent -> Frontend Sync | |
|
13 | update : function(){ | |
|
14 | ||
|
15 | // Add missing items to the DOM. | |
|
16 | var items = this.model.get('values'); | |
|
17 | for (var index in items) { | |
|
18 | var item_query = ' :input[value="' + items[index] + '"]'; | |
|
19 | if (this.$el.find(item_query).length == 0) { | |
|
20 | var $label = $('<label />') | |
|
21 | .addClass('radio') | |
|
22 | .html(items[index]) | |
|
23 | .appendTo(this.$el); | |
|
24 | ||
|
25 | var that = this; | |
|
26 | $('<input />') | |
|
27 | .attr('type', 'radio') | |
|
28 | .addClass(this.model) | |
|
29 | .val(items[index]) | |
|
30 | .prependTo($label) | |
|
31 | .on('click', function(e){ | |
|
32 | that.model.set('value', $(e.target).val(), this); | |
|
33 | that.model.apply(); | |
|
34 | }); | |
|
35 | } | |
|
36 | ||
|
37 | if (this.model.get('value') == items[index]) { | |
|
38 | this.$el.find(item_query).prop('checked', true); | |
|
39 | } else { | |
|
40 | this.$el.find(item_query).prop('checked', false); | |
|
41 | } | |
|
42 | } | |
|
43 | ||
|
44 | // Remove items that no longer exist. | |
|
45 | this.$el.find('input').each(function(i, obj) { | |
|
46 | var value = $(obj).val(); | |
|
47 | var found = false; | |
|
48 | for (var index in items) { | |
|
49 | if (items[index] == value) { | |
|
50 | found = true; | |
|
51 | break; | |
|
52 | } | |
|
53 | } | |
|
54 | ||
|
55 | if (!found) { | |
|
56 | $(obj).parent().remove(); | |
|
57 | } | |
|
58 | }); | |
|
59 | }, | |
|
60 | ||
|
61 | }); | |
|
62 | ||
|
63 | IPython.notebook.widget_manager.register_widget_view('RadioButtonView', RadioButtonView); |
@@ -0,0 +1,15 b'' | |||
|
1 | import os | |
|
2 | ||
|
3 | from ..widget import Widget | |
|
4 | from IPython.utils.traitlets import Unicode, List, Bool | |
|
5 | from IPython.utils.javascript import display_all_js | |
|
6 | ||
|
7 | class SelectionWidget(Widget): | |
|
8 | target_name = Unicode('SelectionWidgetModel') | |
|
9 | default_view_name = Unicode('DropdownView') | |
|
10 | _keys = ['value', 'values', 'disabled'] | |
|
11 | ||
|
12 | value = Unicode() | |
|
13 | values = List() # List of values the user can select | |
|
14 | disabled = Bool(False) # Enable or disable user changes | |
|
15 | No newline at end of file |
General Comments 0
You need to be logged in to leave comments.
Login now