From ef5919e2b50ed8ee69500f801cff14ca771151a8 2014-01-16 10:55:59 From: Jonathan Frederic <jdfreder@calpoly.edu> Date: 2014-01-16 10:55:59 Subject: [PATCH] Added boolean widget --- diff --git a/IPython/html/static/notebook/js/widgets/bool.js b/IPython/html/static/notebook/js/widgets/bool.js new file mode 100644 index 0000000..405a721 --- /dev/null +++ b/IPython/html/static/notebook/js/widgets/bool.js @@ -0,0 +1,48 @@ + +require(["notebook/js/widget"], function(){ + + var BoolWidgetModel = IPython.WidgetModel.extend({}); + IPython.notebook.widget_manager.register_widget_model('BoolWidgetModel', BoolWidgetModel); + + var CheckboxView = IPython.WidgetView.extend({ + + // Called when view is rendered. + render : function(){ + this.$el + .html('') + .addClass(this.model.comm.comm_id); + + var $label = $('<label />') + .addClass('checkbox') + .appendTo(this.$el); + this.$checkbox = $('<input />') + .attr('type', 'checkbox') + .appendTo($label); + this.$checkbox_label = $('<div />') + .appendTo($label); + + this.update(); // Set defaults. + }, + + // Handles: Backend -> Frontend Sync + // Frontent -> Frontend Sync + update : function(){ + if (!this.user_invoked_update) { + this.$checkbox.prop('checked', this.model.get('value')); + this.$checkbox_label.html(this.model.get('description')); + } + }, + + events: {"change input" : "handleChanged"}, + + // Handles and validates user input. + handleChanged: function(e) { + this.user_invoked_update = true; + this.model.set('value', $(e.target).prop('checked')); + this.model.apply(this); + this.user_invoked_update = false; + }, + }); + + IPython.notebook.widget_manager.register_widget_view('CheckboxView', CheckboxView); +}); diff --git a/IPython/html/widgets/bool.py b/IPython/html/widgets/bool.py new file mode 100644 index 0000000..e032281 --- /dev/null +++ b/IPython/html/widgets/bool.py @@ -0,0 +1,15 @@ +import os + +from base import Widget +from IPython.utils.traitlets import Unicode, Bool, List + +class BoolWidget(Widget): + target_name = Unicode('BoolWidgetModel') + default_view_name = Unicode('CheckboxView') + js_requirements = List(["static/notebook/js/widgets/bool.js"]) + _keys = ['value', 'description', 'disabled'] + + value = Bool(False) + description = Unicode('') # Description of the boolean (label). + disabled = Bool(False) # Enable or disable user changes + \ No newline at end of file