Show More
@@ -10,6 +10,31 b' define(["widgets/js/manager",' | |||
|
10 | 10 | ], function(widgetmanager, _, Backbone, $, utils, IPython){ |
|
11 | 11 | "use strict"; |
|
12 | 12 | |
|
13 | var unpack_models = function unpack_models(value, model) { | |
|
14 | /** | |
|
15 | * Replace model ids with models recursively. | |
|
16 | */ | |
|
17 | var unpacked; | |
|
18 | if ($.isArray(value)) { | |
|
19 | unpacked = []; | |
|
20 | _.each(value, function(sub_value, key) { | |
|
21 | unpacked.push(unpack_models(sub_value, model)); | |
|
22 | }); | |
|
23 | return Promise.all(unpacked); | |
|
24 | } else if (value instanceof Object) { | |
|
25 | unpacked = {}; | |
|
26 | _.each(value, function(sub_value, key) { | |
|
27 | unpacked[key] = unpack_models(sub_value, model); | |
|
28 | }); | |
|
29 | return utils.resolve_promises_dict(unpacked); | |
|
30 | } else if (typeof value === 'string' && value.slice(0,10) === "IPY_MODEL_") { | |
|
31 | // get_model returns a promise already | |
|
32 | return model.widget_manager.get_model(value.slice(10, value.length)); | |
|
33 | } else { | |
|
34 | return Promise.resolve(value); | |
|
35 | } | |
|
36 | }; | |
|
37 | ||
|
13 | 38 | var WidgetModel = Backbone.Model.extend({ |
|
14 | 39 | constructor: function (widget_manager, model_id, comm) { |
|
15 | 40 | /** |
@@ -767,6 +792,7 b' define(["widgets/js/manager",' | |||
|
767 | 792 | }); |
|
768 | 793 | |
|
769 | 794 | var widget = { |
|
795 | 'unpack_models': unpack_models, | |
|
770 | 796 | 'WidgetModel': WidgetModel, |
|
771 | 797 | 'WidgetView': WidgetView, |
|
772 | 798 | 'DOMWidgetView': DOMWidgetView, |
@@ -9,34 +9,10 b' define([' | |||
|
9 | 9 | "bootstrap", |
|
10 | 10 | ], function(widget, $, _, utils){ |
|
11 | 11 | "use strict"; |
|
12 | var unpack_models = function unpack_models(value, model) { | |
|
13 | /** | |
|
14 | * Replace model ids with models recursively. | |
|
15 | */ | |
|
16 | var unpacked; | |
|
17 | if ($.isArray(value)) { | |
|
18 | unpacked = []; | |
|
19 | _.each(value, function(sub_value, key) { | |
|
20 | unpacked.push(unpack_models(sub_value, model)); | |
|
21 | }); | |
|
22 | return Promise.all(unpacked); | |
|
23 | } else if (value instanceof Object) { | |
|
24 | unpacked = {}; | |
|
25 | _.each(value, function(sub_value, key) { | |
|
26 | unpacked[key] = unpack_models(sub_value, model); | |
|
27 | }); | |
|
28 | return utils.resolve_promises_dict(unpacked); | |
|
29 | } else if (typeof value === 'string' && value.slice(0,10) === "IPY_MODEL_") { | |
|
30 | // get_model returns a promise already | |
|
31 | return model.widget_manager.get_model(value.slice(10, value.length)); | |
|
32 | } else { | |
|
33 | return Promise.resolve(value); | |
|
34 | } | |
|
35 | }; | |
|
36 | 12 | |
|
37 | 13 | var BoxModel = widget.WidgetModel.extend({}, { |
|
38 | 14 | serializers: _.extend({ |
|
39 | children: {deserialize: unpack_models} | |
|
15 | children: {deserialize: widget.unpack_models} | |
|
40 | 16 | }, widget.WidgetModel.serializers) |
|
41 | 17 | }); |
|
42 | 18 | |
@@ -179,7 +155,6 b' define([' | |||
|
179 | 155 | }); |
|
180 | 156 | |
|
181 | 157 | return { |
|
182 | 'unpack_models': unpack_models, | |
|
183 | 158 | 'BoxModel': BoxModel, |
|
184 | 159 | 'BoxView': BoxView, |
|
185 | 160 | 'FlexBoxView': FlexBoxView, |
@@ -1,4 +1,4 b'' | |||
|
1 | from .widget import Widget, DOMWidget, CallbackDispatcher, register | |
|
1 | from .widget import Widget, DOMWidget, CallbackDispatcher, register, widget_serialization | |
|
2 | 2 | |
|
3 | 3 | from .trait_types import Color |
|
4 | 4 |
@@ -24,6 +24,33 b' from IPython.utils.traitlets import Unicode, Dict, Instance, Bool, List, \\' | |||
|
24 | 24 | from IPython.utils.py3compat import string_types |
|
25 | 25 | from .trait_types import Color |
|
26 | 26 | |
|
27 | ||
|
28 | def _widget_to_json(x): | |
|
29 | if isinstance(x, dict): | |
|
30 | return {k: _widget_to_json(v) for k, v in x.items()} | |
|
31 | elif isinstance(x, (list, tuple)): | |
|
32 | return [_widget_to_json(v) for v in x] | |
|
33 | elif isinstance(x, Widget): | |
|
34 | return "IPY_MODEL_" + x.model_id | |
|
35 | else: | |
|
36 | return x | |
|
37 | ||
|
38 | def _json_to_widget(x): | |
|
39 | if isinstance(x, dict): | |
|
40 | return {k: _json_to_widget(v) for k, v in x.items()} | |
|
41 | elif isinstance(x, (list, tuple)): | |
|
42 | return [_json_to_widget(v) for v in x] | |
|
43 | elif isinstance(x, string_types) and x.startswith('IPY_MODEL_') and x[10:] in Widget.widgets: | |
|
44 | return Widget.widgets[x[10:]] | |
|
45 | else: | |
|
46 | return x | |
|
47 | ||
|
48 | widget_serialization = { | |
|
49 | 'from_json': _json_to_widget, | |
|
50 | 'to_json': _widget_to_json | |
|
51 | } | |
|
52 | ||
|
53 | ||
|
27 | 54 | #----------------------------------------------------------------------------- |
|
28 | 55 | # Classes |
|
29 | 56 | #----------------------------------------------------------------------------- |
@@ -6,35 +6,10 b' Represents a container that can be used to group other widgets.' | |||
|
6 | 6 | # Copyright (c) IPython Development Team. |
|
7 | 7 | # Distributed under the terms of the Modified BSD License. |
|
8 | 8 | |
|
9 | from .widget import DOMWidget, Widget, register | |
|
9 | from .widget import DOMWidget, Widget, register, widget_serialization | |
|
10 | 10 | from IPython.utils.traitlets import Unicode, Tuple, TraitError, Int, CaselessStrEnum |
|
11 | 11 | from .deprecated import DeprecatedClass |
|
12 | 12 | |
|
13 | def _widget_to_json(x): | |
|
14 | if isinstance(x, dict): | |
|
15 | return {k: _widget_to_json(v) for k, v in x.items()} | |
|
16 | elif isinstance(x, (list, tuple)): | |
|
17 | return [_widget_to_json(v) for v in x] | |
|
18 | elif isinstance(x, Widget): | |
|
19 | return "IPY_MODEL_" + x.model_id | |
|
20 | else: | |
|
21 | return x | |
|
22 | ||
|
23 | def _json_to_widget(x): | |
|
24 | if isinstance(x, dict): | |
|
25 | return {k: _json_to_widget(v) for k, v in x.items()} | |
|
26 | elif isinstance(x, (list, tuple)): | |
|
27 | return [_json_to_widget(v) for v in x] | |
|
28 | elif isinstance(x, string_types) and x.startswith('IPY_MODEL_') and x[10:] in Widget.widgets: | |
|
29 | return Widget.widgets[x[10:]] | |
|
30 | else: | |
|
31 | return x | |
|
32 | ||
|
33 | widget_serialization = { | |
|
34 | 'from_json': _json_to_widget, | |
|
35 | 'to_json': _widget_to_json | |
|
36 | } | |
|
37 | ||
|
38 | 13 | |
|
39 | 14 | @register('IPython.Box') |
|
40 | 15 | class Box(DOMWidget): |
General Comments 0
You need to be logged in to leave comments.
Login now