Show More
@@ -1,319 +1,319 b'' | |||||
1 | Migrating Widgets to IPython 3 |
|
1 | Migrating Widgets to IPython 3 | |
2 | ============================== |
|
2 | ============================== | |
3 |
|
3 | |||
4 | Upgrading Notebooks |
|
4 | Upgrading Notebooks | |
5 | ------------------- |
|
5 | ------------------- | |
6 |
|
6 | |||
7 | 1. The first thing you'll notice when upgrading an IPython 2.0 widget |
|
7 | 1. The first thing you'll notice when upgrading an IPython 2.0 widget | |
8 | notebook to IPython 3.0 is the "Notebook converted" dialog. Click |
|
8 | notebook to IPython 3.0 is the "Notebook converted" dialog. Click | |
9 | "ok". |
|
9 | "ok". | |
10 | 2. All of the widgets distributed with IPython have been renamed. The |
|
10 | 2. All of the widgets distributed with IPython have been renamed. The | |
11 | "Widget" suffix was removed from the end of the class name. i.e. |
|
11 | "Widget" suffix was removed from the end of the class name. i.e. | |
12 | ``ButtonWidget`` is now ``Button``. |
|
12 | ``ButtonWidget`` is now ``Button``. | |
13 | 3. ``ContainerWidget`` was renamed to ``Box``. |
|
13 | 3. ``ContainerWidget`` was renamed to ``Box``. | |
14 | 4. ``PopupWidget`` was removed from IPython. If you use the |
|
14 | 4. ``PopupWidget`` was removed from IPython. If you use the | |
15 | ``PopupWidget``, try using a ``Box`` widget instead. If your notebook |
|
15 | ``PopupWidget``, try using a ``Box`` widget instead. If your notebook | |
16 | can't live without the popup functionality, subclass the ``Box`` |
|
16 | can't live without the popup functionality, subclass the ``Box`` | |
17 | widget (both in Python and JS) and use JQuery UI's ``draggable()`` |
|
17 | widget (both in Python and JS) and use JQuery UI's ``draggable()`` | |
18 | and ``resizable()`` methods to mimic the behavior. |
|
18 | and ``resizable()`` methods to mimic the behavior. | |
19 | 5. ``add_class`` and ``remove_class`` were removed. More often than not |
|
19 | 5. ``add_class`` and ``remove_class`` were removed. More often than not | |
20 | a new attribute exists on the widget that allows you to achieve the |
|
20 | a new attribute exists on the widget that allows you to achieve the | |
21 | same explicitly. i.e. the ``Button`` widget now has a |
|
21 | same explicitly. i.e. the ``Button`` widget now has a | |
22 | ``button_style`` attribute which you can set to 'primary', 'success', |
|
22 | ``button_style`` attribute which you can set to 'primary', 'success', | |
23 | 'info', 'warning', 'danger', or '' instead of using ``add_class`` to |
|
23 | 'info', 'warning', 'danger', or '' instead of using ``add_class`` to | |
24 | add the bootstrap class. ``VBox`` and ``HBox`` classes (flexible |
|
24 | add the bootstrap class. ``VBox`` and ``HBox`` classes (flexible | |
25 | ``Box`` subclasses) were added that allow you to avoid using |
|
25 | ``Box`` subclasses) were added that allow you to avoid using | |
26 | ``add_class`` and ``remove_class`` to make flexible box model |
|
26 | ``add_class`` and ``remove_class`` to make flexible box model | |
27 | layouts. As a last resort, if you can't find a built in attribute for |
|
27 | layouts. As a last resort, if you can't find a built in attribute for | |
28 | the class you want to use, a new ``_dom_classes`` list trait was |
|
28 | the class you want to use, a new ``_dom_classes`` list trait was | |
29 | added, which combines ``add_class`` and ``remove_class`` into one |
|
29 | added, which combines ``add_class`` and ``remove_class`` into one | |
30 | stateful list. |
|
30 | stateful list. | |
31 | 6. ``set_css`` and ``get_css`` were removed in favor of explicit style |
|
31 | 6. ``set_css`` and ``get_css`` were removed in favor of explicit style | |
32 | attributes - ``visible``, ``width``, ``height``, ``padding``, |
|
32 | attributes - ``visible``, ``width``, ``height``, ``padding``, | |
33 | ``margin``, ``color``, ``background_color``, ``border_color``, |
|
33 | ``margin``, ``color``, ``background_color``, ``border_color``, | |
34 | ``border_width``, ``border_radius``, ``border_style``, |
|
34 | ``border_width``, ``border_radius``, ``border_style``, | |
35 | ``font_style``, ``font_weight``, ``font_size``, and ``font_family`` |
|
35 | ``font_style``, ``font_weight``, ``font_size``, and ``font_family`` | |
36 | are a few. If you can't find a trait to see the css attribute you |
|
36 | are a few. If you can't find a trait to see the css attribute you | |
37 | need, you can, in order of preference, (A) subclass to create your |
|
37 | need, you can, in order of preference, (A) subclass to create your | |
38 | own custom widget, (B) use CSS and the ``_dom_classes`` trait to set |
|
38 | own custom widget, (B) use CSS and the ``_dom_classes`` trait to set | |
39 | ``_dom_classes``, or (C) use the ``_css`` dictionary to set CSS |
|
39 | ``_dom_classes``, or (C) use the ``_css`` dictionary to set CSS | |
40 | styling like ``set_css`` and ``get_css``. |
|
40 | styling like ``set_css`` and ``get_css``. | |
41 |
|
41 | |||
42 | Upgrading Custom Widgets |
|
42 | Upgrading Custom Widgets | |
43 | ------------------------ |
|
43 | ------------------------ | |
44 |
|
44 | |||
45 | Javascript |
|
45 | Javascript | |
46 | ~~~~~~~~~~ |
|
46 | ~~~~~~~~~~ | |
47 |
|
47 | |||
48 | 1. If you are distributing your widget and decide to use the deferred |
|
48 | 1. If you are distributing your widget and decide to use the deferred | |
49 | loading technique (preferred), you can remove all references to the |
|
49 | loading technique (preferred), you can remove all references to the | |
50 | WidgetManager and the register model/view calls (see the Python |
|
50 | WidgetManager and the register model/view calls (see the Python | |
51 | section below for more information). |
|
51 | section below for more information). | |
52 | 2. In 2.0 require.js was used incorrectly, that has been fixed and now |
|
52 | 2. In 2.0 require.js was used incorrectly, that has been fixed and now | |
53 | loading works more like Python's import. Requiring |
|
53 | loading works more like Python's import. Requiring | |
54 | ``widgets/js/widget`` doesn't import the ``WidgetManager`` class, |
|
54 | ``widgets/js/widget`` doesn't import the ``WidgetManager`` class, | |
55 | instead it imports a dictionary that exposes the classes within that |
|
55 | instead it imports a dictionary that exposes the classes within that | |
56 | module: |
|
56 | module: | |
57 |
|
57 | |||
58 | .. code:: javascript |
|
58 | .. code:: javascript | |
59 |
|
59 | |||
60 | { |
|
60 | { | |
61 | 'WidgetModel': WidgetModel, |
|
61 | 'WidgetModel': WidgetModel, | |
62 | 'WidgetView': WidgetView, |
|
62 | 'WidgetView': WidgetView, | |
63 | 'DOMWidgetView': DOMWidgetView, |
|
63 | 'DOMWidgetView': DOMWidgetView, | |
64 | 'ViewList': ViewList, |
|
64 | 'ViewList': ViewList, | |
65 | } |
|
65 | } | |
66 |
|
66 | |||
67 | If you decide to continue to use the widget registry (by registering |
|
67 | If you decide to continue to use the widget registry (by registering | |
68 | your widgets with the manager), you can import a dictionary with a |
|
68 | your widgets with the manager), you can import a dictionary with a | |
69 | handle to the WidgetManager class by requiring |
|
69 | handle to the WidgetManager class by requiring | |
70 | ``widgets/js/manager``. Doing so will import: |
|
70 | ``widgets/js/manager``. Doing so will import: | |
71 |
|
71 | |||
72 | .. code:: javascript |
|
72 | .. code:: javascript | |
73 |
|
73 | |||
74 | {'WidgetManager': WidgetManager} |
|
74 | {'WidgetManager': WidgetManager} | |
75 |
|
75 | |||
76 | 3. Don't rely on the ``IPython`` namespace for anything. To inherit from |
|
76 | 3. Don't rely on the ``IPython`` namespace for anything. To inherit from | |
77 | the DOMWidgetView, WidgetView, or WidgetModel, require |
|
77 | the DOMWidgetView, WidgetView, or WidgetModel, require | |
78 | ``widgets/js/widget`` as ``widget``. If you were inheriting from |
|
78 | ``widgets/js/widget`` as ``widget``. If you were inheriting from | |
79 | DOMWidgetView, and the code looked like this: |
|
79 | DOMWidgetView, and the code looked like this: | |
80 |
|
80 | |||
81 | .. code:: javascript |
|
81 | .. code:: javascript | |
82 |
|
82 | |||
83 | IPython.DOMWidgetView.extend({...}) |
|
83 | IPython.DOMWidgetView.extend({...}) | |
84 |
|
84 | |||
85 | It would become this: |
|
85 | It would become this: | |
86 |
|
86 | |||
87 | .. code:: javascript |
|
87 | .. code:: javascript | |
88 |
|
88 | |||
89 | widget.DOMWidgetView.extend({...}) |
|
89 | widget.DOMWidgetView.extend({...}) | |
90 |
|
90 | |||
91 | 4. Custom models are encouraged. When possible, it's recommended to move |
|
91 | 4. Custom models are encouraged. When possible, it's recommended to move | |
92 | your code into a custom model, so actions are performed 1 time, |
|
92 | your code into a custom model, so actions are performed 1 time, | |
93 | instead of N times where N is the number of displayed views. |
|
93 | instead of N times where N is the number of displayed views. | |
94 |
|
94 | |||
95 | Python |
|
95 | Python | |
96 | ~~~~~~ |
|
96 | ~~~~~~ | |
97 |
|
97 | |||
98 | Generally, custom widget Python code can remain unchanged. If you |
|
98 | Generally, custom widget Python code can remain unchanged. If you | |
99 | distribute your custom widget, you may be using ``display`` and |
|
99 | distribute your custom widget, you may be using ``display`` and | |
100 | ``Javascript`` to publish the widget's Javascript to the front-end. That |
|
100 | ``Javascript`` to publish the widget's Javascript to the front-end. That | |
101 | is no longer the recommended way of distributing widget Javascript. |
|
101 | is no longer the recommended way of distributing widget Javascript. | |
102 | Instead have the user install the Javascript to his/her nbextension |
|
102 | Instead have the user install the Javascript to his/her nbextension | |
103 | directory or their profile's static directory. Then use the new |
|
103 | directory or their profile's static directory. Then use the new | |
104 | ``_view_module`` and ``_model_module`` traitlets in combination with |
|
104 | ``_view_module`` and ``_model_module`` traitlets in combination with | |
105 | ``_view_name`` and ``_model_name`` to instruct require.js on how to load |
|
105 | ``_view_name`` and ``_model_name`` to instruct require.js on how to load | |
106 | the widget's Javascript. The Javascript is then loaded when the widget |
|
106 | the widget's Javascript. The Javascript is then loaded when the widget | |
107 | is used for the first time. |
|
107 | is used for the first time. | |
108 |
|
108 | |||
109 | Details |
|
109 | Details | |
110 | ------- |
|
110 | ------- | |
111 |
|
111 | |||
112 | Asynchronous |
|
112 | Asynchronous | |
113 | ~~~~~~~~~~~~ |
|
113 | ~~~~~~~~~~~~ | |
114 |
|
114 | |||
115 | In the IPython 2.x series the only way to register custom widget views |
|
115 | In the IPython 2.x series the only way to register custom widget views | |
116 | and models was to use the registry in the widget manager. Unfortunately, |
|
116 | and models was to use the registry in the widget manager. Unfortunately, | |
117 |
using this method made |
|
117 | using this method made distributing and running custom widgets difficult. The widget | |
118 | maintainer had to either use the rich display framework to push the |
|
118 | maintainer had to either use the rich display framework to push the | |
119 | widget's Javascript to the notebook or instruct the users to install the |
|
119 | widget's Javascript to the notebook or instruct the users to install the | |
120 | Javascript by hand in a custom profile. With the first method, the |
|
120 | Javascript by hand in a custom profile. With the first method, the | |
121 | maintainer would have to be careful about when the Javascript was pushed |
|
121 | maintainer would have to be careful about when the Javascript was pushed | |
122 | to the font-end. If the Javascript was pushed on Python widget |
|
122 | to the front-end. If the Javascript was pushed on Python widget | |
123 | ``import``, the widgets wouldn't work after page refresh. This is |
|
123 | ``import``, the widgets wouldn't work after page refresh. This is | |
124 | because refreshing the page does not restart the kernel, and the Python |
|
124 | because refreshing the page does not restart the kernel, and the Python | |
125 | ``import`` statement only runs once in a given kernel instance (unless |
|
125 | ``import`` statement only runs once in a given kernel instance (unless | |
126 | you reload the Python modules, which isn't straight forward). This meant |
|
126 | you reload the Python modules, which isn't straight forward). This meant | |
127 | the maintainer would have to have a separate ``push_js()`` method that |
|
127 | the maintainer would have to have a separate ``push_js()`` method that | |
128 | the user would have to call after importing the widget's Python code. |
|
128 | the user would have to call after importing the widget's Python code. | |
129 |
|
129 | |||
130 | Our solution was to add support for loading widget views and models |
|
130 | Our solution was to add support for loading widget views and models | |
131 | using require.js paths. Thus the comm and widget frameworks now support |
|
131 | using require.js paths. Thus the comm and widget frameworks now support | |
132 | lazy loading. To do so, everything had to be converted to asynchronous |
|
132 | lazy loading. To do so, everything had to be converted to asynchronous | |
133 | code. HTML5 promises are used to accomplish that |
|
133 | code. HTML5 promises are used to accomplish that | |
134 | (`#6818 <https://github.com/ipython/ipython/pull/6818>`__, |
|
134 | (`#6818 <https://github.com/ipython/ipython/pull/6818>`__, | |
135 | `#6914 <https://github.com/ipython/ipython/pull/6914>`__). |
|
135 | `#6914 <https://github.com/ipython/ipython/pull/6914>`__). | |
136 |
|
136 | |||
137 | Symmetry |
|
137 | Symmetry | |
138 | ~~~~~~~~ |
|
138 | ~~~~~~~~ | |
139 |
|
139 | |||
140 | In IPython 3.0, widgets can be instantiated from the front-end |
|
140 | In IPython 3.0, widgets can be instantiated from the front-end | |
141 | (`#6664 <https://github.com/ipython/ipython/pull/6664>`__). On top of |
|
141 | (`#6664 <https://github.com/ipython/ipython/pull/6664>`__). On top of | |
142 | this, a widget persistence API was added |
|
142 | this, a widget persistence API was added | |
143 | (`#7163 <https://github.com/ipython/ipython/pull/7163>`__, |
|
143 | (`#7163 <https://github.com/ipython/ipython/pull/7163>`__, | |
144 | `#7227 <https://github.com/ipython/ipython/pull/7227>`__). With the |
|
144 | `#7227 <https://github.com/ipython/ipython/pull/7227>`__). With the | |
145 | widget persistence API, you can persist your widget instances using |
|
145 | widget persistence API, you can persist your widget instances using | |
146 | Javascript. This makes it easy to persist your widgets to your notebook |
|
146 | Javascript. This makes it easy to persist your widgets to your notebook | |
147 | document (with a small amount of custom JS). By default, the widgets are |
|
147 | document (with a small amount of custom JS). By default, the widgets are | |
148 | persisted to your web browsers local storage which makes them reappear |
|
148 | persisted to your web browsers local storage which makes them reappear | |
149 | when your refresh the page. |
|
149 | when your refresh the page. | |
150 |
|
150 | |||
151 | Smaller Changes |
|
151 | Smaller Changes | |
152 | ~~~~~~~~~~~~~~~ |
|
152 | ~~~~~~~~~~~~~~~ | |
153 |
|
153 | |||
154 | - Latex math is supported in widget ``description``\ s |
|
154 | - Latex math is supported in widget ``description``\ s | |
155 | (`#5937 <https://github.com/ipython/ipython/pull/5937>`__). |
|
155 | (`#5937 <https://github.com/ipython/ipython/pull/5937>`__). | |
156 | - Widgets can be display more than once within a single container |
|
156 | - Widgets can be display more than once within a single container | |
157 | widget (`#5963 <https://github.com/ipython/ipython/pull/5963>`__, |
|
157 | widget (`#5963 <https://github.com/ipython/ipython/pull/5963>`__, | |
158 | `#6990 <https://github.com/ipython/ipython/pull/6990>`__). |
|
158 | `#6990 <https://github.com/ipython/ipython/pull/6990>`__). | |
159 | - ``FloatRangeSlider`` and ``IntRangeSlider`` were added |
|
159 | - ``FloatRangeSlider`` and ``IntRangeSlider`` were added | |
160 | (`#6050 <https://github.com/ipython/ipython/pull/6050>`__). |
|
160 | (`#6050 <https://github.com/ipython/ipython/pull/6050>`__). | |
161 | - "Widget" was removed from the ends of all of the widget class names |
|
161 | - "Widget" was removed from the ends of all of the widget class names | |
162 | (`#6125 <https://github.com/ipython/ipython/pull/6125>`__). |
|
162 | (`#6125 <https://github.com/ipython/ipython/pull/6125>`__). | |
163 | - ``ContainerWidget`` was renamed to ``Box`` |
|
163 | - ``ContainerWidget`` was renamed to ``Box`` | |
164 | (`#6125 <https://github.com/ipython/ipython/pull/6125>`__). |
|
164 | (`#6125 <https://github.com/ipython/ipython/pull/6125>`__). | |
165 | - ``HBox`` and ``VBox`` widgets were added |
|
165 | - ``HBox`` and ``VBox`` widgets were added | |
166 | (`#6125 <https://github.com/ipython/ipython/pull/6125>`__). |
|
166 | (`#6125 <https://github.com/ipython/ipython/pull/6125>`__). | |
167 | - ``add\_class`` and ``remove\_class`` were removed in favor of a |
|
167 | - ``add\_class`` and ``remove\_class`` were removed in favor of a | |
168 | ``_dom_classes`` list |
|
168 | ``_dom_classes`` list | |
169 | (`#6235 <https://github.com/ipython/ipython/pull/6235>`__). |
|
169 | (`#6235 <https://github.com/ipython/ipython/pull/6235>`__). | |
170 | - ``get\_css`` and ``set\_css`` were removed in favor of explicit |
|
170 | - ``get\_css`` and ``set\_css`` were removed in favor of explicit | |
171 | traits for widget styling |
|
171 | traits for widget styling | |
172 | (`#6235 <https://github.com/ipython/ipython/pull/6235>`__). |
|
172 | (`#6235 <https://github.com/ipython/ipython/pull/6235>`__). | |
173 | - ``jslink`` and ``jsdlink`` were added |
|
173 | - ``jslink`` and ``jsdlink`` were added | |
174 | (`#6454 <https://github.com/ipython/ipython/pull/6454>`__, |
|
174 | (`#6454 <https://github.com/ipython/ipython/pull/6454>`__, | |
175 | `#7468 <https://github.com/ipython/ipython/pull/7468>`__). |
|
175 | `#7468 <https://github.com/ipython/ipython/pull/7468>`__). | |
176 | - An ``Output`` widget was added, which allows you to ``print`` and |
|
176 | - An ``Output`` widget was added, which allows you to ``print`` and | |
177 | ``display`` within widgets |
|
177 | ``display`` within widgets | |
178 | (`#6670 <https://github.com/ipython/ipython/pull/6670>`__). |
|
178 | (`#6670 <https://github.com/ipython/ipython/pull/6670>`__). | |
179 | - ``PopupWidget`` was removed |
|
179 | - ``PopupWidget`` was removed | |
180 | (`#7341 <https://github.com/ipython/ipython/pull/7341>`__). |
|
180 | (`#7341 <https://github.com/ipython/ipython/pull/7341>`__). | |
181 | - A visual cue was added for widgets with 'dead' comms |
|
181 | - A visual cue was added for widgets with 'dead' comms | |
182 | (`#7227 <https://github.com/ipython/ipython/pull/7227>`__). |
|
182 | (`#7227 <https://github.com/ipython/ipython/pull/7227>`__). | |
183 | - A ``SelectMultiple`` widget was added (a ``Select`` widget that |
|
183 | - A ``SelectMultiple`` widget was added (a ``Select`` widget that | |
184 | allows multiple things to be selected at once) |
|
184 | allows multiple things to be selected at once) | |
185 | (`#6890 <https://github.com/ipython/ipython/pull/6890>`__). |
|
185 | (`#6890 <https://github.com/ipython/ipython/pull/6890>`__). | |
186 | - A class was added to help manage children views |
|
186 | - A class was added to help manage children views | |
187 | (`#6990 <https://github.com/ipython/ipython/pull/6990>`__). |
|
187 | (`#6990 <https://github.com/ipython/ipython/pull/6990>`__). | |
188 | - A warning was added that shows on widget import because it's expected |
|
188 | - A warning was added that shows on widget import because it's expected | |
189 | that the API will change again by IPython 4.0. This warning can be |
|
189 | that the API will change again by IPython 4.0. This warning can be | |
190 | supressed (`#7107 <https://github.com/ipython/ipython/pull/7107>`__, |
|
190 | supressed (`#7107 <https://github.com/ipython/ipython/pull/7107>`__, | |
191 | `#7200 <https://github.com/ipython/ipython/pull/7200>`__, |
|
191 | `#7200 <https://github.com/ipython/ipython/pull/7200>`__, | |
192 | `#7201 <https://github.com/ipython/ipython/pull/7201>`__, |
|
192 | `#7201 <https://github.com/ipython/ipython/pull/7201>`__, | |
193 | `#7204 <https://github.com/ipython/ipython/pull/7204>`__). |
|
193 | `#7204 <https://github.com/ipython/ipython/pull/7204>`__). | |
194 |
|
194 | |||
195 | Comm and Widget PR Index |
|
195 | Comm and Widget PR Index | |
196 | ------------------------ |
|
196 | ------------------------ | |
197 |
|
197 | |||
198 | Here is a chronological list of PRs affecting the widget and comm frameworks for IPython 3.0. Note that later PRs may revert changes |
|
198 | Here is a chronological list of PRs affecting the widget and comm frameworks for IPython 3.0. Note that later PRs may revert changes | |
199 | made in earlier PRs: |
|
199 | made in earlier PRs: | |
200 |
|
200 | |||
201 | - Add placeholder attribute to text widgets |
|
201 | - Add placeholder attribute to text widgets | |
202 | `#5652 <https://github.com/ipython/ipython/pull/5652>`__ |
|
202 | `#5652 <https://github.com/ipython/ipython/pull/5652>`__ | |
203 | - Add latex support in widget labels, |
|
203 | - Add latex support in widget labels, | |
204 | `#5937 <https://github.com/ipython/ipython/pull/5937>`__ |
|
204 | `#5937 <https://github.com/ipython/ipython/pull/5937>`__ | |
205 | - Allow widgets to display more than once within container widgets. |
|
205 | - Allow widgets to display more than once within container widgets. | |
206 | `#5963 <https://github.com/ipython/ipython/pull/5963>`__ |
|
206 | `#5963 <https://github.com/ipython/ipython/pull/5963>`__ | |
207 | - use require.js, |
|
207 | - use require.js, | |
208 | `#5980 <https://github.com/ipython/ipython/pull/5980>`__ |
|
208 | `#5980 <https://github.com/ipython/ipython/pull/5980>`__ | |
209 | - Range widgets |
|
209 | - Range widgets | |
210 | `#6050 <https://github.com/ipython/ipython/pull/6050>`__ |
|
210 | `#6050 <https://github.com/ipython/ipython/pull/6050>`__ | |
211 | - Interact on\_demand option |
|
211 | - Interact on\_demand option | |
212 | `#6051 <https://github.com/ipython/ipython/pull/6051>`__ |
|
212 | `#6051 <https://github.com/ipython/ipython/pull/6051>`__ | |
213 | - Allow text input on slider widgets |
|
213 | - Allow text input on slider widgets | |
214 | `#6106 <https://github.com/ipython/ipython/pull/6106>`__ |
|
214 | `#6106 <https://github.com/ipython/ipython/pull/6106>`__ | |
215 | - support binary buffers in comm messages |
|
215 | - support binary buffers in comm messages | |
216 | `#6110 <https://github.com/ipython/ipython/pull/6110>`__ |
|
216 | `#6110 <https://github.com/ipython/ipython/pull/6110>`__ | |
217 | - Embrace the flexible box model in the widgets |
|
217 | - Embrace the flexible box model in the widgets | |
218 | `#6125 <https://github.com/ipython/ipython/pull/6125>`__ |
|
218 | `#6125 <https://github.com/ipython/ipython/pull/6125>`__ | |
219 | - Widget trait serialization |
|
219 | - Widget trait serialization | |
220 | `#6128 <https://github.com/ipython/ipython/pull/6128>`__ |
|
220 | `#6128 <https://github.com/ipython/ipython/pull/6128>`__ | |
221 | - Make Container widgets take children as the first positional |
|
221 | - Make Container widgets take children as the first positional | |
222 | argument `#6153 <https://github.com/ipython/ipython/pull/6153>`__ |
|
222 | argument `#6153 <https://github.com/ipython/ipython/pull/6153>`__ | |
223 | - once-displayed |
|
223 | - once-displayed | |
224 | `#6168 <https://github.com/ipython/ipython/pull/6168>`__ |
|
224 | `#6168 <https://github.com/ipython/ipython/pull/6168>`__ | |
225 | - Validate slider value, when limits change |
|
225 | - Validate slider value, when limits change | |
226 | `#6171 <https://github.com/ipython/ipython/pull/6171>`__ |
|
226 | `#6171 <https://github.com/ipython/ipython/pull/6171>`__ | |
227 | - Unregistering comms in Comm Manager |
|
227 | - Unregistering comms in Comm Manager | |
228 | `#6216 <https://github.com/ipython/ipython/pull/6216>`__ |
|
228 | `#6216 <https://github.com/ipython/ipython/pull/6216>`__ | |
229 | - Add EventfulList and EventfulDict trait types. |
|
229 | - Add EventfulList and EventfulDict trait types. | |
230 | `#6228 <https://github.com/ipython/ipython/pull/6228>`__ |
|
230 | `#6228 <https://github.com/ipython/ipython/pull/6228>`__ | |
231 | - Remove add/remove\_class and set/get\_css. |
|
231 | - Remove add/remove\_class and set/get\_css. | |
232 | `#6235 <https://github.com/ipython/ipython/pull/6235>`__ |
|
232 | `#6235 <https://github.com/ipython/ipython/pull/6235>`__ | |
233 | - avoid unregistering widget model twice |
|
233 | - avoid unregistering widget model twice | |
234 | `#6250 <https://github.com/ipython/ipython/pull/6250>`__ |
|
234 | `#6250 <https://github.com/ipython/ipython/pull/6250>`__ | |
235 | - Widget property lock should compare json states, not python states |
|
235 | - Widget property lock should compare json states, not python states | |
236 | `#6332 <https://github.com/ipython/ipython/pull/6332>`__ |
|
236 | `#6332 <https://github.com/ipython/ipython/pull/6332>`__ | |
237 | - Strip the IPY\_MODEL\_ prefix from widget IDs before referencing |
|
237 | - Strip the IPY\_MODEL\_ prefix from widget IDs before referencing | |
238 | them. `#6377 <https://github.com/ipython/ipython/pull/6377>`__ |
|
238 | them. `#6377 <https://github.com/ipython/ipython/pull/6377>`__ | |
239 | - "event" is not defined error in Firefox |
|
239 | - "event" is not defined error in Firefox | |
240 | `#6437 <https://github.com/ipython/ipython/pull/6437>`__ |
|
240 | `#6437 <https://github.com/ipython/ipython/pull/6437>`__ | |
241 | - Javascript link |
|
241 | - Javascript link | |
242 | `#6454 <https://github.com/ipython/ipython/pull/6454>`__ |
|
242 | `#6454 <https://github.com/ipython/ipython/pull/6454>`__ | |
243 | - Bulk update of widget attributes |
|
243 | - Bulk update of widget attributes | |
244 | `#6463 <https://github.com/ipython/ipython/pull/6463>`__ |
|
244 | `#6463 <https://github.com/ipython/ipython/pull/6463>`__ | |
245 | - Creating a widget registry on the Python side. |
|
245 | - Creating a widget registry on the Python side. | |
246 | `#6493 <https://github.com/ipython/ipython/pull/6493>`__ |
|
246 | `#6493 <https://github.com/ipython/ipython/pull/6493>`__ | |
247 | - Allow widget views to be loaded from require modules |
|
247 | - Allow widget views to be loaded from require modules | |
248 | `#6494 <https://github.com/ipython/ipython/pull/6494>`__ |
|
248 | `#6494 <https://github.com/ipython/ipython/pull/6494>`__ | |
249 | - Fix Issue #6530 |
|
249 | - Fix Issue #6530 | |
250 | `#6532 <https://github.com/ipython/ipython/pull/6532>`__ |
|
250 | `#6532 <https://github.com/ipython/ipython/pull/6532>`__ | |
251 | - Make comm manager (mostly) independent of InteractiveShell |
|
251 | - Make comm manager (mostly) independent of InteractiveShell | |
252 | `#6540 <https://github.com/ipython/ipython/pull/6540>`__ |
|
252 | `#6540 <https://github.com/ipython/ipython/pull/6540>`__ | |
253 | - Add semantic classes to top-level containers for single widgets |
|
253 | - Add semantic classes to top-level containers for single widgets | |
254 | `#6609 <https://github.com/ipython/ipython/pull/6609>`__ |
|
254 | `#6609 <https://github.com/ipython/ipython/pull/6609>`__ | |
255 | - Selection Widgets: forcing 'value' to be in 'values' |
|
255 | - Selection Widgets: forcing 'value' to be in 'values' | |
256 | `#6617 <https://github.com/ipython/ipython/pull/6617>`__ |
|
256 | `#6617 <https://github.com/ipython/ipython/pull/6617>`__ | |
257 | - Allow widgets to be constructed from Javascript |
|
257 | - Allow widgets to be constructed from Javascript | |
258 | `#6664 <https://github.com/ipython/ipython/pull/6664>`__ |
|
258 | `#6664 <https://github.com/ipython/ipython/pull/6664>`__ | |
259 | - Output widget |
|
259 | - Output widget | |
260 | `#6670 <https://github.com/ipython/ipython/pull/6670>`__ |
|
260 | `#6670 <https://github.com/ipython/ipython/pull/6670>`__ | |
261 | - Minor change in widgets.less to fix alignment issue |
|
261 | - Minor change in widgets.less to fix alignment issue | |
262 | `#6681 <https://github.com/ipython/ipython/pull/6681>`__ |
|
262 | `#6681 <https://github.com/ipython/ipython/pull/6681>`__ | |
263 | - Make Selection widgets respect values order. |
|
263 | - Make Selection widgets respect values order. | |
264 | `#6747 <https://github.com/ipython/ipython/pull/6747>`__ |
|
264 | `#6747 <https://github.com/ipython/ipython/pull/6747>`__ | |
265 | - Widget persistence API |
|
265 | - Widget persistence API | |
266 | `#6789 <https://github.com/ipython/ipython/pull/6789>`__ |
|
266 | `#6789 <https://github.com/ipython/ipython/pull/6789>`__ | |
267 | - Add promises to the widget framework. |
|
267 | - Add promises to the widget framework. | |
268 | `#6818 <https://github.com/ipython/ipython/pull/6818>`__ |
|
268 | `#6818 <https://github.com/ipython/ipython/pull/6818>`__ | |
269 | - SelectMultiple widget |
|
269 | - SelectMultiple widget | |
270 | `#6890 <https://github.com/ipython/ipython/pull/6890>`__ |
|
270 | `#6890 <https://github.com/ipython/ipython/pull/6890>`__ | |
271 | - Tooltip on toggle button |
|
271 | - Tooltip on toggle button | |
272 | `#6923 <https://github.com/ipython/ipython/pull/6923>`__ |
|
272 | `#6923 <https://github.com/ipython/ipython/pull/6923>`__ | |
273 | - Allow empty text box \*while typing\* for numeric widgets |
|
273 | - Allow empty text box \*while typing\* for numeric widgets | |
274 | `#6943 <https://github.com/ipython/ipython/pull/6943>`__ |
|
274 | `#6943 <https://github.com/ipython/ipython/pull/6943>`__ | |
275 | - Ignore failure of widget MathJax typesetting |
|
275 | - Ignore failure of widget MathJax typesetting | |
276 | `#6948 <https://github.com/ipython/ipython/pull/6948>`__ |
|
276 | `#6948 <https://github.com/ipython/ipython/pull/6948>`__ | |
277 | - Refactor the do\_diff and manual child view lists into a separate |
|
277 | - Refactor the do\_diff and manual child view lists into a separate | |
278 | ViewList object |
|
278 | ViewList object | |
279 | `#6990 <https://github.com/ipython/ipython/pull/6990>`__ |
|
279 | `#6990 <https://github.com/ipython/ipython/pull/6990>`__ | |
280 | - Add warning to widget namespace import. |
|
280 | - Add warning to widget namespace import. | |
281 | `#7107 <https://github.com/ipython/ipython/pull/7107>`__ |
|
281 | `#7107 <https://github.com/ipython/ipython/pull/7107>`__ | |
282 | - lazy load widgets |
|
282 | - lazy load widgets | |
283 | `#7120 <https://github.com/ipython/ipython/pull/7120>`__ |
|
283 | `#7120 <https://github.com/ipython/ipython/pull/7120>`__ | |
284 | - Fix padding of widgets. |
|
284 | - Fix padding of widgets. | |
285 | `#7139 <https://github.com/ipython/ipython/pull/7139>`__ |
|
285 | `#7139 <https://github.com/ipython/ipython/pull/7139>`__ | |
286 | - Persist widgets across page refresh |
|
286 | - Persist widgets across page refresh | |
287 | `#7163 <https://github.com/ipython/ipython/pull/7163>`__ |
|
287 | `#7163 <https://github.com/ipython/ipython/pull/7163>`__ | |
288 | - Make the widget experimental error a real python warning |
|
288 | - Make the widget experimental error a real python warning | |
289 | `#7200 <https://github.com/ipython/ipython/pull/7200>`__ |
|
289 | `#7200 <https://github.com/ipython/ipython/pull/7200>`__ | |
290 | - Make the widget error message shorter and more understandable. |
|
290 | - Make the widget error message shorter and more understandable. | |
291 | `#7201 <https://github.com/ipython/ipython/pull/7201>`__ |
|
291 | `#7201 <https://github.com/ipython/ipython/pull/7201>`__ | |
292 | - Make the widget warning brief and easy to filter |
|
292 | - Make the widget warning brief and easy to filter | |
293 | `#7204 <https://github.com/ipython/ipython/pull/7204>`__ |
|
293 | `#7204 <https://github.com/ipython/ipython/pull/7204>`__ | |
294 | - Add visual cue for widgets with dead comms |
|
294 | - Add visual cue for widgets with dead comms | |
295 | `#7227 <https://github.com/ipython/ipython/pull/7227>`__ |
|
295 | `#7227 <https://github.com/ipython/ipython/pull/7227>`__ | |
296 | - Widget values as positional arguments |
|
296 | - Widget values as positional arguments | |
297 | `#7260 <https://github.com/ipython/ipython/pull/7260>`__ |
|
297 | `#7260 <https://github.com/ipython/ipython/pull/7260>`__ | |
298 | - Remove the popup widget |
|
298 | - Remove the popup widget | |
299 | `#7341 <https://github.com/ipython/ipython/pull/7341>`__ |
|
299 | `#7341 <https://github.com/ipython/ipython/pull/7341>`__ | |
300 | - document and validate link, dlink |
|
300 | - document and validate link, dlink | |
301 | `#7468 <https://github.com/ipython/ipython/pull/7468>`__ |
|
301 | `#7468 <https://github.com/ipython/ipython/pull/7468>`__ | |
302 | - Document interact 5637 |
|
302 | - Document interact 5637 | |
303 | `#7525 <https://github.com/ipython/ipython/pull/7525>`__ |
|
303 | `#7525 <https://github.com/ipython/ipython/pull/7525>`__ | |
304 | - Update some broken examples of using widgets |
|
304 | - Update some broken examples of using widgets | |
305 | `#7547 <https://github.com/ipython/ipython/pull/7547>`__ |
|
305 | `#7547 <https://github.com/ipython/ipython/pull/7547>`__ | |
306 | - Use Output widget with Interact |
|
306 | - Use Output widget with Interact | |
307 | `#7554 <https://github.com/ipython/ipython/pull/7554>`__ |
|
307 | `#7554 <https://github.com/ipython/ipython/pull/7554>`__ | |
308 | - don't send empty execute\_result messages |
|
308 | - don't send empty execute\_result messages | |
309 | `#7560 <https://github.com/ipython/ipython/pull/7560>`__ |
|
309 | `#7560 <https://github.com/ipython/ipython/pull/7560>`__ | |
310 | - Validation on the python side |
|
310 | - Validation on the python side | |
311 | `#7602 <https://github.com/ipython/ipython/pull/7602>`__ |
|
311 | `#7602 <https://github.com/ipython/ipython/pull/7602>`__ | |
312 | - only show prompt overlay if there's a prompt |
|
312 | - only show prompt overlay if there's a prompt | |
313 | `#7661 <https://github.com/ipython/ipython/pull/7661>`__ |
|
313 | `#7661 <https://github.com/ipython/ipython/pull/7661>`__ | |
314 | - Allow predictate to be used for comparison in selection widgets |
|
314 | - Allow predictate to be used for comparison in selection widgets | |
315 | `#7674 <https://github.com/ipython/ipython/pull/7674>`__ |
|
315 | `#7674 <https://github.com/ipython/ipython/pull/7674>`__ | |
316 | - Fix widget view persistence. |
|
316 | - Fix widget view persistence. | |
317 | `#7680 <https://github.com/ipython/ipython/pull/7680>`__ |
|
317 | `#7680 <https://github.com/ipython/ipython/pull/7680>`__ | |
318 | - Revert "Use Output widget with Interact" |
|
318 | - Revert "Use Output widget with Interact" | |
319 | `#7703 <https://github.com/ipython/ipython/pull/7703>`__ |
|
319 | `#7703 <https://github.com/ipython/ipython/pull/7703>`__ |
General Comments 0
You need to be logged in to leave comments.
Login now