-
Notifications
You must be signed in to change notification settings - Fork 949
/
htmlmanager.ts
97 lines (87 loc) · 3.34 KB
/
htmlmanager.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// Copyright (c) Jupyter Development Team.
// Distributed under the terms of the Modified BSD License.
import * as widgets from '@jupyter-widgets/controls';
import * as base from '@jupyter-widgets/base';
import * as outputWidgets from './output';
import * as PhosphorWidget from '@phosphor/widgets';
import { RenderMimeRegistry, standardRendererFactories } from '@jupyterlab/rendermime';
import { OutputModel, OutputView } from './output';
import { WidgetRenderer, WIDGET_MIMETYPE } from './output_renderers';
export
class HTMLManager extends base.ManagerBase<HTMLElement> {
constructor(options?: {loader?: (moduleName: string, moduleVersion: string) => Promise<any>}) {
super();
this.loader = options && options.loader;
this.renderMime = new RenderMimeRegistry({
initialFactories: standardRendererFactories
});
this.renderMime.addFactory({
safe: false,
mimeTypes: [WIDGET_MIMETYPE],
createRenderer: (options) => new WidgetRenderer(options, this)
}, 0);
}
/**
* Display the specified view. Element where the view is displayed
* is specified in the `options.el` argument.
*/
display_view(msg, view, options) {
return Promise.resolve(view).then((view) => {
PhosphorWidget.Widget.attach(view.pWidget, options.el);
view.on('remove', () => {
console.log('View removed', view);
});
return view;
});
}
/**
* Placeholder implementation for _get_comm_info.
*/
_get_comm_info() {
return Promise.resolve({});
}
/**
* Placeholder implementation for _create_comm.
*/
_create_comm(comm_target_name: string, model_id: string, data?: any, metadata?: any, buffers?: ArrayBuffer[] | ArrayBufferView[]): Promise<any> {
return Promise.resolve({
on_close: () => { return; },
on_msg: () => { return; },
close: () => { return; }
});
}
/**
* Load a class and return a promise to the loaded object.
*/
protected loadClass(className: string, moduleName: string, moduleVersion: string) {
return new Promise((resolve, reject) => {
if (moduleName === '@jupyter-widgets/base') {
resolve(base);
} else if (moduleName === '@jupyter-widgets/controls') {
resolve(widgets);
} else if (moduleName === '@jupyter-widgets/output') {
resolve(outputWidgets);
} else if (this.loader !== undefined) {
resolve(this.loader(moduleName, moduleVersion));
} else {
reject(`Could not load module ${moduleName}@${moduleVersion}`);
}
}).then((module) => {
if (module[className]) {
return module[className];
} else {
return Promise.reject(`Class ${className} not found in module ${moduleName}@${moduleVersion}`);
}
});
}
/**
* Renderers for contents of the output widgets
*
* Defines how outputs in the output widget should be rendered.
*/
renderMime: RenderMimeRegistry;
/**
* A loader for a given module name and module version, and returns a promise to a module
*/
loader: (moduleName: string, moduleVersion: string) => Promise<any>;
}