1
1
var widgets = require ( "@jupyter-widgets/base" ) ;
2
2
var _ = require ( "lodash" ) ;
3
- var idomClientReact = require ( "idom-client-react" ) ;
4
3
5
4
var IdomModel = widgets . DOMWidgetModel . extend ( {
6
5
defaults : _ . extend ( widgets . DOMWidgetModel . prototype . defaults ( ) , {
@@ -16,43 +15,63 @@ var IdomModel = widgets.DOMWidgetModel.extend({
16
15
17
16
var _nextViewID = { id : 0 } ;
18
17
18
+ const jupyterServerBaseUrl = ( ( ) => {
19
+ const jupyterConfig = document . getElementById ( "jupyter-config-data" ) ;
20
+ if ( jupyterConfig ) {
21
+ return JSON . parse ( jupyterConfig . text ) [ "baseUrl" ] ;
22
+ }
23
+ return document . getElementsByTagName ( "body" ) [ 0 ] . getAttribute ( "data-base-url" ) ;
24
+ } ) ( ) ;
25
+
19
26
class IdomView extends widgets . DOMWidgetView {
20
27
constructor ( options ) {
21
28
super ( options ) ;
22
29
this . render = this . render . bind ( this ) ;
23
30
this . remove = this . remove . bind ( this ) ;
31
+ this . clientModulePromise = eval (
32
+ `import('${
33
+ jupyterServerBaseUrl + this . model . attributes . _client_module_url
34
+ } ')`
35
+ ) ;
24
36
}
25
37
26
38
render ( ) {
27
39
this . viewID = _nextViewID . id ;
28
40
_nextViewID . id ++ ;
29
41
30
- var saveUpdateHook = ( updateHook ) => {
31
- this . model . on ( "msg:custom" , ( msg , buffers ) => {
32
- if ( msg . viewID == this . viewID ) {
33
- updateHook ( ...msg . data ) ;
34
- }
35
- } ) ;
36
- this . model . send ( {
37
- type : "client-ready" ,
38
- viewID : this . viewID ,
39
- data : null ,
40
- } ) ;
41
- } ;
42
+ this . clientModulePromise . then ( ( idomClientReact ) => {
43
+ var saveUpdateHook = ( updateHook ) => {
44
+ this . model . on ( "msg:custom" , ( msg , buffers ) => {
45
+ if ( msg . viewID == this . viewID ) {
46
+ updateHook ( ...msg . data ) ;
47
+ }
48
+ } ) ;
49
+ this . model . send ( {
50
+ type : "client-ready" ,
51
+ viewID : this . viewID ,
52
+ data : null ,
53
+ } ) ;
54
+ } ;
42
55
43
- var sendEvent = ( event ) => {
44
- this . model . send ( { type : "dom-event" , viewID : this . viewID , data : event } ) ;
45
- } ;
56
+ var sendEvent = ( event ) => {
57
+ this . model . send ( {
58
+ type : "dom-event" ,
59
+ viewID : this . viewID ,
60
+ data : event ,
61
+ } ) ;
62
+ } ;
46
63
47
- idomClientReact . mountLayout (
48
- this . el ,
49
- saveUpdateHook ,
50
- sendEvent ,
51
- concatAndResolveUrl (
52
- this . model . attributes . _jupyter_server_base_url || getJupyterServerBaseUrl ( ) ,
53
- "_idom_web_modules"
54
- ) ,
55
- ) ;
64
+ idomClientReact . mountLayout (
65
+ this . el ,
66
+ saveUpdateHook ,
67
+ sendEvent ,
68
+ concatAndResolveUrl (
69
+ this . model . attributes . _jupyter_server_base_url ||
70
+ jupyterServerBaseUrl ,
71
+ "_idom_web_modules"
72
+ )
73
+ ) ;
74
+ } ) ;
56
75
}
57
76
58
77
remove ( ) {
@@ -61,65 +80,32 @@ class IdomView extends widgets.DOMWidgetView {
61
80
}
62
81
}
63
82
64
- var _HackyClientHandshakeModel = widgets . DOMWidgetModel . extend ( {
65
- defaults : _ . extend ( widgets . DOMWidgetModel . prototype . defaults ( ) , {
66
- _model_name : "_HackyClientHandshakeModel" ,
67
- _view_name : "_HackyClientHandshakeView" ,
68
- _model_module : "idom-client-jupyter" ,
69
- _view_module : "idom-client-jupyter" ,
70
- _model_module_version : "0.4.0" ,
71
- _view_module_version : "0.4.0" ,
72
- } ) ,
73
- } ) ;
74
-
75
- class _HackyClientHandshakeView extends widgets . DOMWidgetView {
76
- constructor ( options ) {
77
- super ( options ) ;
78
- this . render = this . render . bind ( this ) ;
79
- }
80
-
81
- render ( ) {
82
- this . model . send ( { window_url : window . location . href } )
83
- this . remove ( ) ;
84
- }
85
- }
86
-
87
- function getJupyterServerBaseUrl ( ) {
88
- const jupyterConfig = document . getElementById ( "jupyter-config-data" ) ;
89
- if ( jupyterConfig ) {
90
- return JSON . parse ( jupyterConfig . text ) [ 'baseUrl' ] ;
91
- }
92
- return document . getElementsByTagName ( 'body' ) [ 0 ] . getAttribute ( 'data-base-url' )
93
- }
94
-
95
83
function concatAndResolveUrl ( url , concat ) {
96
- var url1 = ( url . endsWith ( "/" ) ? url . slice ( 0 , - 1 ) : url ) . split ( '/' ) ;
97
- var url2 = concat . split ( '/' ) ;
98
- var url3 = [ ] ;
99
- for ( var i = 0 , l = url1 . length ; i < l ; i ++ ) {
100
- if ( url1 [ i ] == '..' ) {
84
+ var url1 = ( url . endsWith ( "/" ) ? url . slice ( 0 , - 1 ) : url ) . split ( "/" ) ;
85
+ var url2 = concat . split ( "/" ) ;
86
+ var url3 = [ ] ;
87
+ for ( var i = 0 , l = url1 . length ; i < l ; i ++ ) {
88
+ if ( url1 [ i ] == ".." ) {
101
89
url3 . pop ( ) ;
102
- } else if ( url1 [ i ] == '.' ) {
90
+ } else if ( url1 [ i ] == "." ) {
103
91
continue ;
104
92
} else {
105
93
url3 . push ( url1 [ i ] ) ;
106
94
}
107
95
}
108
- for ( var i = 0 , l = url2 . length ; i < l ; i ++ ) {
109
- if ( url2 [ i ] == '..' ) {
96
+ for ( var i = 0 , l = url2 . length ; i < l ; i ++ ) {
97
+ if ( url2 [ i ] == ".." ) {
110
98
url3 . pop ( ) ;
111
- } else if ( url2 [ i ] == '.' ) {
99
+ } else if ( url2 [ i ] == "." ) {
112
100
continue ;
113
101
} else {
114
102
url3 . push ( url2 [ i ] ) ;
115
103
}
116
104
}
117
- return url3 . join ( '/' ) ;
105
+ return url3 . join ( "/" ) ;
118
106
}
119
107
120
108
module . exports = {
121
109
IdomModel : IdomModel ,
122
110
IdomView : IdomView ,
123
- _HackyClientHandshakeModel : _HackyClientHandshakeModel ,
124
- _HackyClientHandshakeView : _HackyClientHandshakeView ,
125
111
} ;
0 commit comments