Show More
@@ -1,2 +1,17 | |||||
1 | var ContainerModel = IPython.WidgetModel.extend({}); |
|
1 | var ContainerModel = IPython.WidgetModel.extend({}); | |
2 | IPython.notebook.widget_manager.register_widget_model('container_widget', ContainerModel); |
|
2 | IPython.notebook.widget_manager.register_widget_model('container_widget', ContainerModel); | |
|
3 | ||||
|
4 | var ContainerView = IPython.WidgetView.extend({ | |||
|
5 | ||||
|
6 | render : function(){ | |||
|
7 | this.$el.html(''); | |||
|
8 | this.$container = $('<div />') | |||
|
9 | .addClass('container') | |||
|
10 | .addClass(this.model.comm.comm_id); | |||
|
11 | this.$el.append(this.$container); | |||
|
12 | }, | |||
|
13 | ||||
|
14 | update : function(){}, | |||
|
15 | }); | |||
|
16 | ||||
|
17 | IPython.notebook.widget_manager.register_widget_view('ContainerView', ContainerView); |
@@ -1,2 +1,119 | |||||
1 | var FloatRangeWidgetModel = IPython.WidgetModel.extend({}); |
|
1 | var FloatRangeWidgetModel = IPython.WidgetModel.extend({}); | |
2 | IPython.notebook.widget_manager.register_widget_model('FloatRangeWidgetModel', FloatRangeWidgetModel); |
|
2 | IPython.notebook.widget_manager.register_widget_model('FloatRangeWidgetModel', FloatRangeWidgetModel); | |
|
3 | ||||
|
4 | var FloatSliderView = IPython.WidgetView.extend({ | |||
|
5 | ||||
|
6 | // Called when view is rendered. | |||
|
7 | render : function(){ | |||
|
8 | this.$el | |||
|
9 | .html('') | |||
|
10 | .addClass(this.model.comm.comm_id); | |||
|
11 | this.$slider = $('<div />') | |||
|
12 | .slider({}) | |||
|
13 | .addClass('slider'); | |||
|
14 | ||||
|
15 | // Put the slider in a container | |||
|
16 | this.$slider_container = $('<div />') | |||
|
17 | .css('padding-top', '4px') | |||
|
18 | .css('padding-bottom', '4px') | |||
|
19 | .append(this.$slider); | |||
|
20 | this.$el.append(this.$slider_container); | |||
|
21 | ||||
|
22 | // Set defaults. | |||
|
23 | this.update(); | |||
|
24 | }, | |||
|
25 | ||||
|
26 | // Handles: Backend -> Frontend Sync | |||
|
27 | // Frontent -> Frontend Sync | |||
|
28 | update : function(){ | |||
|
29 | // Slider related keys. | |||
|
30 | var _keys = ['value', 'step', 'max', 'min', 'disabled', 'orientation']; | |||
|
31 | for (var index in _keys) { | |||
|
32 | var key = _keys[index]; | |||
|
33 | if (this.model.get(key) != undefined) { | |||
|
34 | this.$slider.slider("option", key, this.model.get(key)); | |||
|
35 | } | |||
|
36 | } | |||
|
37 | }, | |||
|
38 | ||||
|
39 | // Handles: User input | |||
|
40 | events: { "slide" : "handleSliderChange" }, | |||
|
41 | handleSliderChange: function(e, ui) { | |||
|
42 | this.model.set('value', ui.value); | |||
|
43 | this.model.apply(this); | |||
|
44 | }, | |||
|
45 | }); | |||
|
46 | ||||
|
47 | IPython.notebook.widget_manager.register_widget_view('FloatSliderView', FloatSliderView); | |||
|
48 | ||||
|
49 | ||||
|
50 | var FloatTextView = IPython.WidgetView.extend({ | |||
|
51 | ||||
|
52 | // Called when view is rendered. | |||
|
53 | render : function(){ | |||
|
54 | this.$el | |||
|
55 | .html('') | |||
|
56 | .addClass(this.model.comm.comm_id); | |||
|
57 | this.$textbox = $('<input type="text" />') | |||
|
58 | .addClass('input') | |||
|
59 | .appendTo(this.$el); | |||
|
60 | this.update(); // Set defaults. | |||
|
61 | }, | |||
|
62 | ||||
|
63 | // Handles: Backend -> Frontend Sync | |||
|
64 | // Frontent -> Frontend Sync | |||
|
65 | update : function(){ | |||
|
66 | var value = this.model.get('value'); | |||
|
67 | if (!this.changing && parseFloat(this.$textbox.val()) != value) { | |||
|
68 | this.$textbox.val(value); | |||
|
69 | } | |||
|
70 | ||||
|
71 | if (this.model.get('disabled')) { | |||
|
72 | this.$textbox.attr('disabled','disabled'); | |||
|
73 | } else { | |||
|
74 | this.$textbox.removeAttr('disabled'); | |||
|
75 | } | |||
|
76 | }, | |||
|
77 | ||||
|
78 | ||||
|
79 | events: {"keyup input" : "handleChanging", | |||
|
80 | "paste input" : "handleChanging", | |||
|
81 | "cut input" : "handleChanging", | |||
|
82 | "change input" : "handleChanged"}, // Fires only when control is validated or looses focus. | |||
|
83 | ||||
|
84 | // Handles and validates user input. | |||
|
85 | handleChanging: function(e) { | |||
|
86 | ||||
|
87 | // Try to parse value as a float. | |||
|
88 | var numericalValue = 0.0; | |||
|
89 | if (e.target.value != '') { | |||
|
90 | numericalValue = parseFloat(e.target.value); | |||
|
91 | } | |||
|
92 | ||||
|
93 | // If parse failed, reset value to value stored in model. | |||
|
94 | if (isNaN(numericalValue)) { | |||
|
95 | e.target.value = this.model.get('value'); | |||
|
96 | } else if (!isNaN(numericalValue)) { | |||
|
97 | numericalValue = Math.min(this.model.get('max'), numericalValue); | |||
|
98 | numericalValue = Math.max(this.model.get('min'), numericalValue); | |||
|
99 | ||||
|
100 | // Apply the value if it has changed. | |||
|
101 | if (numericalValue != this.model.get('value')) { | |||
|
102 | this.changing = true; | |||
|
103 | this.model.set('value', numericalValue); | |||
|
104 | this.model.apply(this); | |||
|
105 | this.changing = false; | |||
|
106 | } | |||
|
107 | } | |||
|
108 | }, | |||
|
109 | ||||
|
110 | // Applies validated input. | |||
|
111 | handleChanged: function(e) { | |||
|
112 | // Update the textbox | |||
|
113 | if (this.model.get('value') != e.target.value) { | |||
|
114 | e.target.value = this.model.get('value'); | |||
|
115 | } | |||
|
116 | } | |||
|
117 | }); | |||
|
118 | ||||
|
119 | IPython.notebook.widget_manager.register_widget_view('FloatTextView', FloatTextView); |
@@ -1,2 +1,117 | |||||
1 | var IntRangeWidgetModel = IPython.WidgetModel.extend({}); |
|
1 | var IntRangeWidgetModel = IPython.WidgetModel.extend({}); | |
2 | IPython.notebook.widget_manager.register_widget_model('IntRangeWidgetModel', IntRangeWidgetModel); |
|
2 | IPython.notebook.widget_manager.register_widget_model('IntRangeWidgetModel', IntRangeWidgetModel); | |
|
3 | ||||
|
4 | var IntSliderView = IPython.WidgetView.extend({ | |||
|
5 | ||||
|
6 | // Called when view is rendered. | |||
|
7 | render : function(){ | |||
|
8 | this.$el.html(''); | |||
|
9 | this.$slider = $('<div />') | |||
|
10 | .slider({}) | |||
|
11 | .addClass('slider'); | |||
|
12 | ||||
|
13 | // Put the slider in a container | |||
|
14 | this.$slider_container = $('<div />') | |||
|
15 | .css('padding-top', '4px') | |||
|
16 | .css('padding-bottom', '4px') | |||
|
17 | .addClass(this.model.comm.comm_id) | |||
|
18 | .append(this.$slider); | |||
|
19 | this.$el.append(this.$slider_container); | |||
|
20 | ||||
|
21 | // Set defaults. | |||
|
22 | this.update(); | |||
|
23 | }, | |||
|
24 | ||||
|
25 | // Handles: Backend -> Frontend Sync | |||
|
26 | // Frontent -> Frontend Sync | |||
|
27 | update : function(){ | |||
|
28 | // Slider related keys. | |||
|
29 | var _keys = ['value', 'step', 'max', 'min', 'disabled', 'orientation']; | |||
|
30 | for (var index in _keys) { | |||
|
31 | var key = _keys[index]; | |||
|
32 | if (this.model.get(key) != undefined) { | |||
|
33 | this.$slider.slider("option", key, this.model.get(key)); | |||
|
34 | } | |||
|
35 | } | |||
|
36 | }, | |||
|
37 | ||||
|
38 | // Handles: User input | |||
|
39 | events: { "slide" : "handleSliderChange" }, | |||
|
40 | handleSliderChange: function(e, ui) { | |||
|
41 | this.model.set('value', ~~ui.value); // Double bit-wise not to truncate decimel | |||
|
42 | this.model.apply(this); | |||
|
43 | }, | |||
|
44 | }); | |||
|
45 | ||||
|
46 | IPython.notebook.widget_manager.register_widget_view('IntSliderView', IntSliderView); | |||
|
47 | ||||
|
48 | var IntTextView = IPython.WidgetView.extend({ | |||
|
49 | ||||
|
50 | // Called when view is rendered. | |||
|
51 | render : function(){ | |||
|
52 | this.$el | |||
|
53 | .html('') | |||
|
54 | .addClass(this.model.comm.comm_id); | |||
|
55 | this.$textbox = $('<input type="text" />') | |||
|
56 | .addClass('input') | |||
|
57 | .appendTo(this.$el); | |||
|
58 | this.update(); // Set defaults. | |||
|
59 | }, | |||
|
60 | ||||
|
61 | // Handles: Backend -> Frontend Sync | |||
|
62 | // Frontent -> Frontend Sync | |||
|
63 | update : function(){ | |||
|
64 | var value = this.model.get('value'); | |||
|
65 | if (!this.changing && parseInt(this.$textbox.val()) != value) { | |||
|
66 | this.$textbox.val(value); | |||
|
67 | } | |||
|
68 | ||||
|
69 | if (this.model.get('disabled')) { | |||
|
70 | this.$textbox.attr('disabled','disabled'); | |||
|
71 | } else { | |||
|
72 | this.$textbox.removeAttr('disabled'); | |||
|
73 | } | |||
|
74 | }, | |||
|
75 | ||||
|
76 | ||||
|
77 | events: {"keyup input" : "handleChanging", | |||
|
78 | "paste input" : "handleChanging", | |||
|
79 | "cut input" : "handleChanging", | |||
|
80 | "change input" : "handleChanged"}, // Fires only when control is validated or looses focus. | |||
|
81 | ||||
|
82 | // Handles and validates user input. | |||
|
83 | handleChanging: function(e) { | |||
|
84 | ||||
|
85 | // Try to parse value as a float. | |||
|
86 | var numericalValue = 0; | |||
|
87 | if (e.target.value != '') { | |||
|
88 | numericalValue = parseInt(e.target.value); | |||
|
89 | } | |||
|
90 | ||||
|
91 | // If parse failed, reset value to value stored in model. | |||
|
92 | if (isNaN(numericalValue)) { | |||
|
93 | e.target.value = this.model.get('value'); | |||
|
94 | } else if (!isNaN(numericalValue)) { | |||
|
95 | numericalValue = Math.min(this.model.get('max'), numericalValue); | |||
|
96 | numericalValue = Math.max(this.model.get('min'), numericalValue); | |||
|
97 | ||||
|
98 | // Apply the value if it has changed. | |||
|
99 | if (numericalValue != this.model.get('value')) { | |||
|
100 | this.changing = true; | |||
|
101 | this.model.set('value', numericalValue); | |||
|
102 | this.model.apply(this); | |||
|
103 | this.changing = false; | |||
|
104 | } | |||
|
105 | } | |||
|
106 | }, | |||
|
107 | ||||
|
108 | // Applies validated input. | |||
|
109 | handleChanged: function(e) { | |||
|
110 | // Update the textbox | |||
|
111 | if (this.model.get('value') != e.target.value) { | |||
|
112 | e.target.value = this.model.get('value'); | |||
|
113 | } | |||
|
114 | } | |||
|
115 | }); | |||
|
116 | ||||
|
117 | IPython.notebook.widget_manager.register_widget_view('IntTextView', IntTextView); |
@@ -1,2 +1,128 | |||||
1 | var SelectionWidgetModel = IPython.WidgetModel.extend({}); |
|
1 | var SelectionWidgetModel = IPython.WidgetModel.extend({}); | |
2 | IPython.notebook.widget_manager.register_widget_model('SelectionWidgetModel', SelectionWidgetModel); |
|
2 | IPython.notebook.widget_manager.register_widget_model('SelectionWidgetModel', SelectionWidgetModel); | |
|
3 | ||||
|
4 | var DropdownView = IPython.WidgetView.extend({ | |||
|
5 | ||||
|
6 | // Called when view is rendered. | |||
|
7 | render : function(){ | |||
|
8 | ||||
|
9 | this.$el | |||
|
10 | .html('') | |||
|
11 | .addClass(this.model.comm.comm_id); | |||
|
12 | this.$buttongroup = $('<div />') | |||
|
13 | .addClass('btn-group') | |||
|
14 | .appendTo(this.$el); | |||
|
15 | this.$droplabel = $('<button />') | |||
|
16 | .addClass('btn') | |||
|
17 | .appendTo(this.$buttongroup); | |||
|
18 | this.$dropbutton = $('<button />') | |||
|
19 | .addClass('btn') | |||
|
20 | .addClass('dropdown-toggle') | |||
|
21 | .attr('data-toggle', 'dropdown') | |||
|
22 | .html('<span class="caret"></span>') | |||
|
23 | .appendTo(this.$buttongroup); | |||
|
24 | this.$droplist = $('<ul />') | |||
|
25 | .addClass('dropdown-menu') | |||
|
26 | .appendTo(this.$buttongroup); | |||
|
27 | ||||
|
28 | // Set defaults. | |||
|
29 | this.update(); | |||
|
30 | }, | |||
|
31 | ||||
|
32 | // Handles: Backend -> Frontend Sync | |||
|
33 | // Frontent -> Frontend Sync | |||
|
34 | update : function(){ | |||
|
35 | this.$droplabel.html(this.model.get('value')); | |||
|
36 | ||||
|
37 | var items = this.model.get('values'); | |||
|
38 | this.$droplist.html(''); | |||
|
39 | for (var index in items) { | |||
|
40 | var that = this; | |||
|
41 | var item_button = $('<a href="#"/>') | |||
|
42 | .html(items[index]) | |||
|
43 | .on('click', function(e){ | |||
|
44 | that.model.set('value', $(e.target).html(), this ); | |||
|
45 | }) | |||
|
46 | ||||
|
47 | this.$droplist.append($('<li />').append(item_button)) | |||
|
48 | } | |||
|
49 | ||||
|
50 | if (this.model.get('disabled')) { | |||
|
51 | this.$buttongroup.attr('disabled','disabled'); | |||
|
52 | this.$droplabel.attr('disabled','disabled'); | |||
|
53 | this.$dropbutton.attr('disabled','disabled'); | |||
|
54 | this.$droplist.attr('disabled','disabled'); | |||
|
55 | } else { | |||
|
56 | this.$buttongroup.removeAttr('disabled'); | |||
|
57 | this.$droplabel.removeAttr('disabled'); | |||
|
58 | this.$dropbutton.removeAttr('disabled'); | |||
|
59 | this.$droplist.removeAttr('disabled'); | |||
|
60 | } | |||
|
61 | }, | |||
|
62 | ||||
|
63 | }); | |||
|
64 | ||||
|
65 | IPython.notebook.widget_manager.register_widget_view('DropdownView', DropdownView); | |||
|
66 | var RadioButtonView = IPython.WidgetView.extend({ | |||
|
67 | ||||
|
68 | // Called when view is rendered. | |||
|
69 | render : function(){ | |||
|
70 | this.$el | |||
|
71 | .html('') | |||
|
72 | .addClass(this.model.comm.comm_id); | |||
|
73 | this.update(); | |||
|
74 | }, | |||
|
75 | ||||
|
76 | // Handles: Backend -> Frontend Sync | |||
|
77 | // Frontent -> Frontend Sync | |||
|
78 | update : function(){ | |||
|
79 | ||||
|
80 | // Add missing items to the DOM. | |||
|
81 | var items = this.model.get('values'); | |||
|
82 | for (var index in items) { | |||
|
83 | var item_query = ' :input[value="' + items[index] + '"]'; | |||
|
84 | if (this.$el.find(item_query).length == 0) { | |||
|
85 | var $label = $('<label />') | |||
|
86 | .addClass('radio') | |||
|
87 | .html(items[index]) | |||
|
88 | .appendTo(this.$el); | |||
|
89 | ||||
|
90 | var that = this; | |||
|
91 | $('<input />') | |||
|
92 | .attr('type', 'radio') | |||
|
93 | .addClass(this.model) | |||
|
94 | .val(items[index]) | |||
|
95 | .prependTo($label) | |||
|
96 | .on('click', function(e){ | |||
|
97 | that.model.set('value', $(e.target).val(), this); | |||
|
98 | that.model.apply(); | |||
|
99 | }); | |||
|
100 | } | |||
|
101 | ||||
|
102 | if (this.model.get('value') == items[index]) { | |||
|
103 | this.$el.find(item_query).prop('checked', true); | |||
|
104 | } else { | |||
|
105 | this.$el.find(item_query).prop('checked', false); | |||
|
106 | } | |||
|
107 | } | |||
|
108 | ||||
|
109 | // Remove items that no longer exist. | |||
|
110 | this.$el.find('input').each(function(i, obj) { | |||
|
111 | var value = $(obj).val(); | |||
|
112 | var found = false; | |||
|
113 | for (var index in items) { | |||
|
114 | if (items[index] == value) { | |||
|
115 | found = true; | |||
|
116 | break; | |||
|
117 | } | |||
|
118 | } | |||
|
119 | ||||
|
120 | if (!found) { | |||
|
121 | $(obj).parent().remove(); | |||
|
122 | } | |||
|
123 | }); | |||
|
124 | }, | |||
|
125 | ||||
|
126 | }); | |||
|
127 | ||||
|
128 | IPython.notebook.widget_manager.register_widget_view('RadioButtonView', RadioButtonView); |
@@ -1,2 +1,74 | |||||
1 | var StringWidgetModel = IPython.WidgetModel.extend({}); |
|
1 | var StringWidgetModel = IPython.WidgetModel.extend({}); | |
2 | IPython.notebook.widget_manager.register_widget_model('StringWidgetModel', StringWidgetModel); |
|
2 | IPython.notebook.widget_manager.register_widget_model('StringWidgetModel', StringWidgetModel); | |
|
3 | ||||
|
4 | var TextareaView = IPython.WidgetView.extend({ | |||
|
5 | ||||
|
6 | // Called when view is rendered. | |||
|
7 | render : function(){ | |||
|
8 | this.$el | |||
|
9 | .html('') | |||
|
10 | .addClass(this.model.comm.comm_id); | |||
|
11 | this.$textbox = $('<textarea />') | |||
|
12 | .attr('rows', 5) | |||
|
13 | .appendTo(this.$el); | |||
|
14 | this.update(); // Set defaults. | |||
|
15 | }, | |||
|
16 | ||||
|
17 | // Handles: Backend -> Frontend Sync | |||
|
18 | // Frontent -> Frontend Sync | |||
|
19 | update : function(){ | |||
|
20 | if (!this.user_invoked_update) { | |||
|
21 | this.$textbox.val(this.model.get('value')); | |||
|
22 | } | |||
|
23 | }, | |||
|
24 | ||||
|
25 | events: {"keyup textarea" : "handleChanging", | |||
|
26 | "paste textarea" : "handleChanging", | |||
|
27 | "cut textarea" : "handleChanging"}, | |||
|
28 | ||||
|
29 | // Handles and validates user input. | |||
|
30 | handleChanging: function(e) { | |||
|
31 | this.user_invoked_update = true; | |||
|
32 | this.model.set('value', e.target.value); | |||
|
33 | this.model.apply(this); | |||
|
34 | this.user_invoked_update = false; | |||
|
35 | }, | |||
|
36 | }); | |||
|
37 | ||||
|
38 | IPython.notebook.widget_manager.register_widget_view('TextareaView', TextareaView); | |||
|
39 | ||||
|
40 | var TextboxView = IPython.WidgetView.extend({ | |||
|
41 | ||||
|
42 | // Called when view is rendered. | |||
|
43 | render : function(){ | |||
|
44 | this.$el | |||
|
45 | .html('') | |||
|
46 | .addClass(this.model.comm.comm_id); | |||
|
47 | this.$textbox = $('<input type="text" />') | |||
|
48 | .addClass('input') | |||
|
49 | .appendTo(this.$el); | |||
|
50 | this.update(); // Set defaults. | |||
|
51 | }, | |||
|
52 | ||||
|
53 | // Handles: Backend -> Frontend Sync | |||
|
54 | // Frontent -> Frontend Sync | |||
|
55 | update : function(){ | |||
|
56 | if (!this.user_invoked_update) { | |||
|
57 | this.$textbox.val(this.model.get('value')); | |||
|
58 | } | |||
|
59 | }, | |||
|
60 | ||||
|
61 | events: {"keyup input" : "handleChanging", | |||
|
62 | "paste input" : "handleChanging", | |||
|
63 | "cut input" : "handleChanging"}, | |||
|
64 | ||||
|
65 | // Handles and validates user input. | |||
|
66 | handleChanging: function(e) { | |||
|
67 | this.user_invoked_update = true; | |||
|
68 | this.model.set('value', e.target.value); | |||
|
69 | this.model.apply(this); | |||
|
70 | this.user_invoked_update = false; | |||
|
71 | }, | |||
|
72 | }); | |||
|
73 | ||||
|
74 | IPython.notebook.widget_manager.register_widget_view('TextboxView', TextboxView); |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
1 | NO CONTENT: file was removed |
|
NO CONTENT: file was removed |
General Comments 0
You need to be logged in to leave comments.
Login now