1
- function startReloadUI ( ) {
2
- const div = document . createElement ( "div" )
3
- div . className = "msgbox-overlay"
4
- div . style . opacity = 1
5
- div . style . textAlign = "center"
6
- div . innerHTML = `<div class="msgbox">
7
- <div class="msg">Reloading container</div>
8
- </div>`
9
- document . querySelector ( ".monaco-workbench" ) . appendChild ( div )
10
- }
11
-
12
- function removeElementsByClass ( className ) {
13
- let elements = document . getElementsByClassName ( className ) ;
14
- for ( let e of elements ) {
15
- e . parentNode . removeChild ( e )
1
+ ( function ( ) {
2
+ function startReloadUI ( ) {
3
+ const div = document . createElement ( "div" )
4
+ div . className = "msgbox-overlay"
5
+ div . style . opacity = 1
6
+ div . style . textAlign = "center"
7
+ div . innerHTML = `<div class="msgbox">
8
+ <div class="msg">Rebuilding container</div>
9
+ </div>`
10
+ // Prevent keypresses.
11
+ document . body . onkeydown = ev => {
12
+ ev . stopPropagation ( )
13
+ }
14
+ document . querySelector ( ".monaco-workbench" ) . appendChild ( div )
15
+ }
16
+
17
+ function removeElementsByClass ( className ) {
18
+ let elements = document . getElementsByClassName ( className ) ;
19
+ for ( let e of elements ) {
20
+ e . parentNode . removeChild ( e )
21
+ }
16
22
}
17
- }
18
23
19
- function stopReloadUI ( ) {
20
- removeElementsByClass ( "msgbox-overlay" )
21
- }
24
+ function stopReloadUI ( ) {
25
+ removeElementsByClass ( "msgbox-overlay" )
26
+ }
22
27
23
- let tty
24
- window . addEventListener ( "ide-ready" , ( ) => {
25
- window . ide . workbench . onFileSaved ( ( ev ) => {
26
- if ( ! ev . endsWith ( ".sail/Dockerfile" ) ) {
28
+ let tty
29
+ let rebuilding
30
+ function rebuild ( ) {
31
+ if ( rebuilding ) {
27
32
return
28
33
}
34
+ rebuilding = true
29
35
30
- const srv = window . ide . workbench . terminalService
36
+ const tsrv = window . ide . workbench . terminalService
31
37
32
38
if ( tty == null ) {
33
- tty = srv . createTerminal ( {
39
+ tty = tsrv . createTerminal ( {
34
40
name : "sail" ,
35
41
isRendererOnly : true ,
36
42
} , false )
37
43
} else {
38
44
tty . clear ( )
39
45
}
40
- let oldTTY = srv . getActiveInstance ( )
41
- srv . setActiveInstance ( tty )
46
+ let oldTTY = tsrv . getActiveInstance ( )
47
+ tsrv . setActiveInstance ( tty )
42
48
// Show the panel and focus it to prevent the user from editing the Dockerfile.
43
- srv . showPanel ( true )
49
+ tsrv . showPanel ( true )
44
50
45
51
startReloadUI ( )
46
52
@@ -52,11 +58,31 @@ window.addEventListener("ide-ready", () => {
52
58
}
53
59
ws . onclose = ( ev ) => {
54
60
if ( ev . code === 1000 ) {
55
- srv . setActiveInstance ( oldTTY )
61
+ tsrv . setActiveInstance ( oldTTY )
56
62
} else {
57
63
alert ( "reload failed; please see logs in sail terminal" )
58
64
}
59
65
stopReloadUI ( )
66
+ rebuilding = false
60
67
}
68
+ }
69
+
70
+ window . addEventListener ( "ide-ready" , ( ) => {
71
+ class rebuildAction extends window . ide . workbench . action {
72
+ run ( ) {
73
+ rebuild ( )
74
+ }
75
+ }
76
+
77
+ window . ide . workbench . actionsRegistry . registerWorkbenchAction ( new window . ide . workbench . syncActionDescriptor ( rebuildAction , "sail.rebuild" , "Rebuild container" , {
78
+ primary : ( ( 1 << 11 ) >>> 0 ) | 48 // That's cmd + R. See vscode source for the magic numbers.
79
+ } ) , "sail: Rebuild container" , "sail" ) ;
80
+
81
+ const statusBarService = window . ide . workbench . statusbarService
82
+ statusBarService . addEntry ( {
83
+ text : "rebuild" ,
84
+ tooltip : "Rebuild sail container" ,
85
+ command : "sail.rebuild"
86
+ } , 0 )
61
87
} )
62
- } )
88
+ } ( ) )
0 commit comments