##// END OF EJS Templates
Fix formatting in list of widget PRs and issues
Thomas Kluyver -
Show More
@@ -1,318 +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 packing custom widgets difficult. The widget
117 using this method made packing 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 font-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 - Add placeholder attribute to text widgets
200
201 - Add placeholder attribute to text widgets
201 `#5652 <https://github.com/ipython/ipython/pull/5652>`__
202 `#5652 <https://github.com/ipython/ipython/pull/5652>`__
202 - Add latex support in widget labels,
203 - Add latex support in widget labels,
203 `#5937 <https://github.com/ipython/ipython/pull/5937>`__
204 `#5937 <https://github.com/ipython/ipython/pull/5937>`__
204 - Allow widgets to display more than once within container widgets.
205 - Allow widgets to display more than once within container widgets.
205 `#5963 <https://github.com/ipython/ipython/pull/5963>`__
206 `#5963 <https://github.com/ipython/ipython/pull/5963>`__
206 - use require.js,
207 - use require.js,
207 `#5980 <https://github.com/ipython/ipython/pull/5980>`__
208 `#5980 <https://github.com/ipython/ipython/pull/5980>`__
208 - Range widgets
209 - Range widgets
209 `#6050 <https://github.com/ipython/ipython/pull/6050>`__
210 `#6050 <https://github.com/ipython/ipython/pull/6050>`__
210 - Interact on\_demand option
211 - Interact on\_demand option
211 `#6051 <https://github.com/ipython/ipython/pull/6051>`__
212 `#6051 <https://github.com/ipython/ipython/pull/6051>`__
212 - Allow text input on slider widgets
213 - Allow text input on slider widgets
213 `#6106 <https://github.com/ipython/ipython/pull/6106>`__
214 `#6106 <https://github.com/ipython/ipython/pull/6106>`__
214 - support binary buffers in comm messages
215 - support binary buffers in comm messages
215 `#6110 <https://github.com/ipython/ipython/pull/6110>`__
216 `#6110 <https://github.com/ipython/ipython/pull/6110>`__
216 - Embrace the flexible box model in the widgets
217 - Embrace the flexible box model in the widgets
217 `#6125 <https://github.com/ipython/ipython/pull/6125>`__
218 `#6125 <https://github.com/ipython/ipython/pull/6125>`__
218 - Widget trait serialization
219 - Widget trait serialization
219 `#6128 <https://github.com/ipython/ipython/pull/6128>`__
220 `#6128 <https://github.com/ipython/ipython/pull/6128>`__
220 - Make Container widgets take children as the first positional
221 - Make Container widgets take children as the first positional
221 argument `#6153 <https://github.com/ipython/ipython/pull/6153>`__
222 argument `#6153 <https://github.com/ipython/ipython/pull/6153>`__
222 - once-displayed
223 - once-displayed
223 `#6168 <https://github.com/ipython/ipython/pull/6168>`__
224 `#6168 <https://github.com/ipython/ipython/pull/6168>`__
224 - Validate slider value, when limits change
225 - Validate slider value, when limits change
225 `#6171 <https://github.com/ipython/ipython/pull/6171>`__
226 `#6171 <https://github.com/ipython/ipython/pull/6171>`__
226 - Unregistering comms in Comm Manager
227 - Unregistering comms in Comm Manager
227 `#6216 <https://github.com/ipython/ipython/pull/6216>`__
228 `#6216 <https://github.com/ipython/ipython/pull/6216>`__
228 - Add EventfulList and EventfulDict trait types.
229 - Add EventfulList and EventfulDict trait types.
229 `#6228 <https://github.com/ipython/ipython/pull/6228>`__
230 `#6228 <https://github.com/ipython/ipython/pull/6228>`__
230 - Remove add/remove\_class and set/get\_css.
231 - Remove add/remove\_class and set/get\_css.
231 `#6235 <https://github.com/ipython/ipython/pull/6235>`__
232 `#6235 <https://github.com/ipython/ipython/pull/6235>`__
232 - avoid unregistering widget model twice
233 - avoid unregistering widget model twice
233 `#6250 <https://github.com/ipython/ipython/pull/6250>`__
234 `#6250 <https://github.com/ipython/ipython/pull/6250>`__
234 - Widget property lock should compare json states, not python states
235 - Widget property lock should compare json states, not python states
235 `#6332 <https://github.com/ipython/ipython/pull/6332>`__
236 `#6332 <https://github.com/ipython/ipython/pull/6332>`__
236 - Strip the IPY\_MODEL\_ prefix from widget IDs before referencing
237 - Strip the IPY\_MODEL\_ prefix from widget IDs before referencing
237 them. `#6377 <https://github.com/ipython/ipython/pull/6377>`__
238 them. `#6377 <https://github.com/ipython/ipython/pull/6377>`__
238 - "event" is not defined error in Firefox
239 - "event" is not defined error in Firefox
239 `#6437 <https://github.com/ipython/ipython/pull/6437>`__
240 `#6437 <https://github.com/ipython/ipython/pull/6437>`__
240 - Javascript link
241 - Javascript link
241 `#6454 <https://github.com/ipython/ipython/pull/6454>`__
242 `#6454 <https://github.com/ipython/ipython/pull/6454>`__
242 - Bulk update of widget attributes
243 - Bulk update of widget attributes
243 `#6463 <https://github.com/ipython/ipython/pull/6463>`__
244 `#6463 <https://github.com/ipython/ipython/pull/6463>`__
244 - Creating a widget registry on the Python side.
245 - Creating a widget registry on the Python side.
245 `#6493 <https://github.com/ipython/ipython/pull/6493>`__
246 `#6493 <https://github.com/ipython/ipython/pull/6493>`__
246 - Allow widget views to be loaded from require modules
247 - Allow widget views to be loaded from require modules
247 `#6494 <https://github.com/ipython/ipython/pull/6494>`__
248 `#6494 <https://github.com/ipython/ipython/pull/6494>`__
248 - Fix Issue #6530
249 - Fix Issue #6530
249 `#6532 <https://github.com/ipython/ipython/pull/6532>`__
250 `#6532 <https://github.com/ipython/ipython/pull/6532>`__
250 - Make comm manager (mostly) independent of InteractiveShell
251 - Make comm manager (mostly) independent of InteractiveShell
251 `#6540 <https://github.com/ipython/ipython/pull/6540>`__
252 `#6540 <https://github.com/ipython/ipython/pull/6540>`__
252 - Add semantic classes to top-level containers for single widgets
253 - Add semantic classes to top-level containers for single widgets
253 `#6609 <https://github.com/ipython/ipython/pull/6609>`__
254 `#6609 <https://github.com/ipython/ipython/pull/6609>`__
254 - Selection Widgets: forcing 'value' to be in 'values'
255 - Selection Widgets: forcing 'value' to be in 'values'
255 `#6617 <https://github.com/ipython/ipython/pull/6617>`__
256 `#6617 <https://github.com/ipython/ipython/pull/6617>`__
256 - Allow widgets to be constructed from Javascript
257 - Allow widgets to be constructed from Javascript
257 `#6664 <https://github.com/ipython/ipython/pull/6664>`__
258 `#6664 <https://github.com/ipython/ipython/pull/6664>`__
258 - Output widget
259 - Output widget
259 `#6670 <https://github.com/ipython/ipython/pull/6670>`__
260 `#6670 <https://github.com/ipython/ipython/pull/6670>`__
260 - Minor change in widgets.less to fix alignment issue
261 - Minor change in widgets.less to fix alignment issue
261 `#6681 <https://github.com/ipython/ipython/pull/6681>`__
262 `#6681 <https://github.com/ipython/ipython/pull/6681>`__
262 - Make Selection widgets respect values order.
263 - Make Selection widgets respect values order.
263 `#6747 <https://github.com/ipython/ipython/pull/6747>`__
264 `#6747 <https://github.com/ipython/ipython/pull/6747>`__
264 - Widget persistence API
265 - Widget persistence API
265 `#6789 <https://github.com/ipython/ipython/pull/6789>`__
266 `#6789 <https://github.com/ipython/ipython/pull/6789>`__
266 - Add promises to the widget framework.
267 - Add promises to the widget framework.
267 `#6818 <https://github.com/ipython/ipython/pull/6818>`__
268 `#6818 <https://github.com/ipython/ipython/pull/6818>`__
268 - SelectMultiple widget
269 - SelectMultiple widget
269 `#6890 <https://github.com/ipython/ipython/pull/6890>`__
270 `#6890 <https://github.com/ipython/ipython/pull/6890>`__
270 - Tooltip on toggle button
271 - Tooltip on toggle button
271 `#6923 <https://github.com/ipython/ipython/pull/6923>`__
272 `#6923 <https://github.com/ipython/ipython/pull/6923>`__
272 - Allow empty text box \*while typing\* for numeric widgets
273 - Allow empty text box \*while typing\* for numeric widgets
273 `#6943 <https://github.com/ipython/ipython/pull/6943>`__
274 `#6943 <https://github.com/ipython/ipython/pull/6943>`__
274 - Ignore failure of widget MathJax typesetting
275 - Ignore failure of widget MathJax typesetting
275 `#6948 <https://github.com/ipython/ipython/pull/6948>`__
276 `#6948 <https://github.com/ipython/ipython/pull/6948>`__
276 - 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
277 ViewList object
278 ViewList object
278 `#6990 <https://github.com/ipython/ipython/pull/6990>`__
279 `#6990 <https://github.com/ipython/ipython/pull/6990>`__
279 - Add warning to widget namespace import.
280 - Add warning to widget namespace import.
280 `#7107 <https://github.com/ipython/ipython/pull/7107>`__
281 `#7107 <https://github.com/ipython/ipython/pull/7107>`__
281 - lazy load widgets
282 - lazy load widgets
282 `#7120 <https://github.com/ipython/ipython/pull/7120>`__
283 `#7120 <https://github.com/ipython/ipython/pull/7120>`__
283 - Fix padding of widgets.
284 - Fix padding of widgets.
284 `#7139 <https://github.com/ipython/ipython/pull/7139>`__
285 `#7139 <https://github.com/ipython/ipython/pull/7139>`__
285 - Persist widgets across page refresh
286 - Persist widgets across page refresh
286 `#7163 <https://github.com/ipython/ipython/pull/7163>`__
287 `#7163 <https://github.com/ipython/ipython/pull/7163>`__
287 - Make the widget experimental error a real python warning
288 - Make the widget experimental error a real python warning
288 `#7200 <https://github.com/ipython/ipython/pull/7200>`__
289 `#7200 <https://github.com/ipython/ipython/pull/7200>`__
289 - Make the widget error message shorter and more understandable.
290 - Make the widget error message shorter and more understandable.
290 `#7201 <https://github.com/ipython/ipython/pull/7201>`__
291 `#7201 <https://github.com/ipython/ipython/pull/7201>`__
291 - Make the widget warning brief and easy to filter
292 - Make the widget warning brief and easy to filter
292 `#7204 <https://github.com/ipython/ipython/pull/7204>`__
293 `#7204 <https://github.com/ipython/ipython/pull/7204>`__
293 - Add visual cue for widgets with dead comms
294 - Add visual cue for widgets with dead comms
294 `#7227 <https://github.com/ipython/ipython/pull/7227>`__
295 `#7227 <https://github.com/ipython/ipython/pull/7227>`__
295 - Widget values as positional arguments
296 - Widget values as positional arguments
296 `#7260 <https://github.com/ipython/ipython/pull/7260>`__
297 `#7260 <https://github.com/ipython/ipython/pull/7260>`__
297 - Remove the popup widget
298 - Remove the popup widget
298 `#7341 <https://github.com/ipython/ipython/pull/7341>`__
299 `#7341 <https://github.com/ipython/ipython/pull/7341>`__
299 - document and validate link, dlink
300 - document and validate link, dlink
300 `#7468 <https://github.com/ipython/ipython/pull/7468>`__
301 `#7468 <https://github.com/ipython/ipython/pull/7468>`__
301 - Document interact 5637
302 - Document interact 5637
302 `#7525 <https://github.com/ipython/ipython/pull/7525>`__
303 `#7525 <https://github.com/ipython/ipython/pull/7525>`__
303 - Update some broken examples of using widgets
304 - Update some broken examples of using widgets
304 `#7547 <https://github.com/ipython/ipython/pull/7547>`__
305 `#7547 <https://github.com/ipython/ipython/pull/7547>`__
305 - Use Output widget with Interact
306 - Use Output widget with Interact
306 `#7554 <https://github.com/ipython/ipython/pull/7554>`__
307 `#7554 <https://github.com/ipython/ipython/pull/7554>`__
307 - don't send empty execute\_result messages
308 - don't send empty execute\_result messages
308 `#7560 <https://github.com/ipython/ipython/pull/7560>`__
309 `#7560 <https://github.com/ipython/ipython/pull/7560>`__
309 - Validation on the python side
310 - Validation on the python side
310 `#7602 <https://github.com/ipython/ipython/pull/7602>`__
311 `#7602 <https://github.com/ipython/ipython/pull/7602>`__
311 - only show prompt overlay if there's a prompt
312 - only show prompt overlay if there's a prompt
312 `#7661 <https://github.com/ipython/ipython/pull/7661>`__
313 `#7661 <https://github.com/ipython/ipython/pull/7661>`__
313 - Allow predictate to be used for comparison in selection widgets
314 - Allow predictate to be used for comparison in selection widgets
314 `#7674 <https://github.com/ipython/ipython/pull/7674>`__
315 `#7674 <https://github.com/ipython/ipython/pull/7674>`__
315 - Fix widget view persistence.
316 - Fix widget view persistence.
316 `#7680 <https://github.com/ipython/ipython/pull/7680>`__
317 `#7680 <https://github.com/ipython/ipython/pull/7680>`__
317 - Revert "Use Output widget with Interact"
318 - Revert "Use Output widget with Interact"
318 `#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