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