##// END OF EJS Templates
Updates to widget.py...
Jonathan Frederic -
Show More
@@ -1,18 +1,31 b''
1
1
2 from copy import copy
2 from copy import copy
3 from glob import glob
3 import uuid
4 import uuid
4 import sys
5 import sys
6 import os
5
7
8 import IPython
6 from IPython.kernel.comm import Comm
9 from IPython.kernel.comm import Comm
7 from IPython.config import LoggingConfigurable
10 from IPython.config import LoggingConfigurable
8 from IPython.utils.traitlets import Unicode, Dict
11 from IPython.utils.traitlets import Unicode, Dict
9 from IPython.display import Javascript, display
12 from IPython.display import Javascript, display
13 from IPython.utils.py3compat import string_types
14 from IPython.utils.javascript import display_all_js
15
16 def init_widget_js(cls):
17 path = os.path.split(os.path.abspath( __file__ ))[0]
18 display_all_js(path)
19 for root, dirs, files in os.walk(path):
20 for sub_directory in dirs:
21 display_all_js(os.path.join(path, sub_directory))
22
23
24 class Widget(LoggingConfigurable):
10
25
11 class Widget(Comm):
12
13 ### Public declarations
26 ### Public declarations
14 target_name = Unicode('widget')
27 target_name = Unicode('widget')
15 view_name = Unicode()
28 default_view_name = Unicode()
16
29
17
30
18 ### Private/protected declarations
31 ### Private/protected declarations
@@ -31,20 +44,11 b' class Widget(Comm):'
31 if parent is not None:
44 if parent is not None:
32 parent._children.append(self)
45 parent._children.append(self)
33 self._parent = parent
46 self._parent = parent
34
47 self.comm = None
35 # Send frontend type code.
36 display(Javascript(data=self._get_backbone_js()))
37
38 # Create a comm.
39 self.comm = Comm(target_name=self.target_name)
40 self.comm.on_msg(self._handle_msg)
41
48
42 # Register after init to allow default values to be specified
49 # Register after init to allow default values to be specified
43 self.on_trait_change(self._handle_property_changed, self.keys)
50 self.on_trait_change(self._handle_property_changed, self.keys)
44
51
45 # Set initial properties on client model.
46 self.send_state()
47
48
52
49 def __del__(self):
53 def __del__(self):
50 self.close()
54 self.close()
@@ -115,14 +119,23 b' class Widget(Comm):'
115 # TODO: Validate properties.
119 # TODO: Validate properties.
116 # Send new state to frontend
120 # Send new state to frontend
117 self.send_state()
121 self.send_state()
122
123
124 def _handle_close(self):
125 self.comm = None
118
126
119
127
120 ### Public methods
128 ### Public methods
121 def _repr_widget_(self):
129 def _repr_widget_(self, view_name=None):
122 view_name = self.view_name
123 if not view_name:
130 if not view_name:
124 view_name = self.target_name
131 view_name = self.default_view_name
125
132
133 # Create a comm.
134 if self.comm is None:
135 self.comm = Comm(target_name=self.target_name)
136 self.comm.on_msg(self._handle_msg)
137 self.comm.on_close(self._handle_close)
138
126 # Make sure model is syncronized
139 # Make sure model is syncronized
127 self.send_state()
140 self.send_state()
128
141
@@ -137,9 +150,9 b' class Widget(Comm):'
137 # Now show children if any.
150 # Now show children if any.
138 for child in self.children:
151 for child in self.children:
139 child._repr_widget_()
152 child._repr_widget_()
140 return self._get_backbone_js
153 return None
141
154
142
155
143 def send_state(self):
156 def send_state(self):
144 state = {}
157 state = {}
145 for key in self.keys:
158 for key in self.keys:
@@ -148,8 +161,5 b' class Widget(Comm):'
148 except Exception as e:
161 except Exception as e:
149 pass # Eat errors, nom nom nom
162 pass # Eat errors, nom nom nom
150 self.comm.send({"method": "update",
163 self.comm.send({"method": "update",
151 "state": state})
164 "state": state})
152
165 No newline at end of file
153 ### Private methods
154 def _get_backbone_js(self):
155 return 'alert("woohoo!");'
General Comments 0
You need to be logged in to leave comments. Login now