Browse Source

Merge pull request #89 from blink1073/replace-widgets

Reinstate widget demo
Dave Willmer 9 years ago
parent
commit
3ba3f78b7e
3 changed files with 38 additions and 1 deletions
  1. 13 1
      examples/lab/example.ipynb
  2. 1 0
      package.json
  3. 24 0
      src/notebook/plugin.ts

+ 13 - 1
examples/lab/example.ipynb

@@ -41,6 +41,18 @@
     "print('some more stdout text', flush=True)"
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "from ipywidgets import IntSlider\n",
+    "IntSlider() # slider appears at the top of the notebook"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -121,7 +133,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.4.4"
+   "version": "3.5.1"
   }
  },
  "nbformat": 4,

+ 1 - 0
package.json

@@ -14,6 +14,7 @@
     "jupyter-js-services": "^0.5.0",
     "jupyter-js-terminal": "^0.1.15",
     "jupyter-js-utils": "^0.3.0",
+    "jupyter-js-widgets": "0.0.14",
     "phosphide": "^0.9.0",
     "phosphor-codemirror": "^0.0.1",
     "phosphor-di": "^0.9.0",

+ 24 - 0
src/notebook/plugin.ts

@@ -40,6 +40,10 @@ import {
   JupyterServices
 } from '../services/plugin';
 
+import {    
+   WidgetManager    
+} from './widgetmanager';
+
 
 let runCellCommandId = 'notebook:run-selected-cell';
 let selectNextCellCommandId = 'notebook:select-next-cell';
@@ -117,6 +121,7 @@ class NotebookContainer extends Panel {
     this._model = new NotebookModel();
     this._model.stateChanged.connect(this._onModelChanged, this);
     let widgetarea = new Widget();
+    this._manager = new WidgetManager(widgetarea.node);
     let widget = new NotebookWidget(this._model);
 
     this.addChild(widgetarea);
@@ -149,6 +154,24 @@ class NotebookContainer extends Panel {
   setSession(value: INotebookSession) {
     this._session = value;
     this._model.session = value;
+
+    let commHandler = (comm: IComm, msg: IKernelMessage) => {    
+      console.log('comm message', msg);    
+    
+      let modelPromise = this._manager.handle_comm_open(comm, msg);    
+    
+      comm.onMsg = (msg) => {    
+        this._manager.handle_comm_open(comm, msg)    
+        // create the widget model and (if needed) the view    
+        console.log('comm widget message', msg);    
+      }    
+      comm.onClose = (msg) => {    
+        console.log('comm widget close', msg);    
+      }    
+    };    
+    
+    this._session.kernel.registerCommTarget('ipython.widget', commHandler)      
+    this._session.kernel.registerCommTarget('jupyter.widget', commHandler);
   }
 
   private _onModelChanged(model: INotebookModel, args: IChangedArgs<INotebookModel>): void {
@@ -163,6 +186,7 @@ class NotebookContainer extends Panel {
 
   private _model: INotebookModel = null;
   private _session: INotebookSession = null;
+  private _manager: WidgetManager = null;
 }