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. |
|
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 |
|
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