Skip to content
This repository was archived by the owner on Apr 28, 2020. It is now read-only.

Commit 3a40670

Browse files
authored
Merge pull request #123 from cdr/button
Add rebuild button and command
2 parents e75ab79 + 10bf740 commit 3a40670

File tree

2 files changed

+57
-31
lines changed

2 files changed

+57
-31
lines changed

sail.js

Lines changed: 56 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,52 @@
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+
}
1622
}
17-
}
1823

19-
function stopReloadUI() {
20-
removeElementsByClass("msgbox-overlay")
21-
}
24+
function stopReloadUI() {
25+
removeElementsByClass("msgbox-overlay")
26+
}
2227

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) {
2732
return
2833
}
34+
rebuilding = true
2935

30-
const srv = window.ide.workbench.terminalService
36+
const tsrv = window.ide.workbench.terminalService
3137

3238
if (tty == null) {
33-
tty = srv.createTerminal({
39+
tty = tsrv.createTerminal({
3440
name: "sail",
3541
isRendererOnly: true,
3642
}, false)
3743
} else {
3844
tty.clear()
3945
}
40-
let oldTTY = srv.getActiveInstance()
41-
srv.setActiveInstance(tty)
46+
let oldTTY = tsrv.getActiveInstance()
47+
tsrv.setActiveInstance(tty)
4248
// Show the panel and focus it to prevent the user from editing the Dockerfile.
43-
srv.showPanel(true)
49+
tsrv.showPanel(true)
4450

4551
startReloadUI()
4652

@@ -52,11 +58,31 @@ window.addEventListener("ide-ready", () => {
5258
}
5359
ws.onclose = (ev) => {
5460
if (ev.code === 1000) {
55-
srv.setActiveInstance(oldTTY)
61+
tsrv.setActiveInstance(oldTTY)
5662
} else {
5763
alert("reload failed; please see logs in sail terminal")
5864
}
5965
stopReloadUI()
66+
rebuilding = false
6067
}
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)
6187
})
62-
})
88+
}())

sail.js.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
package main
22

33
//go:generate go run sail.js_gen.go
4-
const sailJS = "function startReloadUI() {\n const div = document.createElement(\"div\")\n div.className = \"msgbox-overlay\"\n div.style.opacity = 1\n div.style.textAlign = \"center\"\n div.innerHTML = `<div class=\"msgbox\">\n<div class=\"msg\">Reloading container</div>\n</div>`\n document.querySelector(\".monaco-workbench\").appendChild(div)\n}\n\nfunction removeElementsByClass(className) {\n let elements = document.getElementsByClassName(className);\n for (let e of elements) {\n e.parentNode.removeChild(e)\n }\n}\n\nfunction stopReloadUI() {\n removeElementsByClass(\"msgbox-overlay\")\n}\n\nlet tty\nwindow.addEventListener(\"ide-ready\", () => {\n window.ide.workbench.onFileSaved((ev) => {\n if (!ev.endsWith(\".sail/Dockerfile\")) {\n return\n }\n\n const srv = window.ide.workbench.terminalService\n\n if (tty == null) {\n tty = srv.createTerminal({\n name: \"sail\",\n isRendererOnly: true,\n }, false)\n } else {\n tty.clear()\n }\n let oldTTY = srv.getActiveInstance()\n srv.setActiveInstance(tty)\n // Show the panel and focus it to prevent the user from editing the Dockerfile.\n srv.showPanel(true)\n\n startReloadUI()\n\n const ws = new WebSocket(\"ws://\" + location.host + \"/sail/api/v1/reload\")\n ws.onmessage = (ev) => {\n const msg = JSON.parse(ev.data)\n const out = atob(msg.v).replace(/\\n/g, \"\\n\\r\")\n tty.write(out)\n }\n ws.onclose = (ev) => {\n if (ev.code === 1000) {\n srv.setActiveInstance(oldTTY)\n } else {\n alert(\"reload failed; please see logs in sail terminal\")\n }\n stopReloadUI()\n }\n })\n})\n"
4+
const sailJS = "(function() {\n function startReloadUI() {\n const div = document.createElement(\"div\")\n div.className = \"msgbox-overlay\"\n div.style.opacity = 1\n div.style.textAlign = \"center\"\n div.innerHTML = `<div class=\"msgbox\">\n <div class=\"msg\">Rebuilding container</div>\n </div>`\n // Prevent keypresses.\n document.body.onkeydown = ev => {\n ev.stopPropagation()\n }\n document.querySelector(\".monaco-workbench\").appendChild(div)\n }\n\n function removeElementsByClass(className) {\n let elements = document.getElementsByClassName(className);\n for (let e of elements) {\n e.parentNode.removeChild(e)\n }\n }\n\n function stopReloadUI() {\n removeElementsByClass(\"msgbox-overlay\")\n }\n\n let tty\n let rebuilding\n function rebuild() {\n if (rebuilding) {\n return\n }\n rebuilding = true\n\n const tsrv = window.ide.workbench.terminalService\n\n if (tty == null) {\n tty = tsrv.createTerminal({\n name: \"sail\",\n isRendererOnly: true,\n }, false)\n } else {\n tty.clear()\n }\n let oldTTY = tsrv.getActiveInstance()\n tsrv.setActiveInstance(tty)\n // Show the panel and focus it to prevent the user from editing the Dockerfile.\n tsrv.showPanel(true)\n\n startReloadUI()\n\n const ws = new WebSocket(\"ws://\" + location.host + \"/sail/api/v1/reload\")\n ws.onmessage = (ev) => {\n const msg = JSON.parse(ev.data)\n const out = atob(msg.v).replace(/\\n/g, \"\\n\\r\")\n tty.write(out)\n }\n ws.onclose = (ev) => {\n if (ev.code === 1000) {\n tsrv.setActiveInstance(oldTTY)\n } else {\n alert(\"reload failed; please see logs in sail terminal\")\n }\n stopReloadUI()\n rebuilding = false\n }\n }\n\n window.addEventListener(\"ide-ready\", () => {\n class rebuildAction extends window.ide.workbench.action {\n run() {\n rebuild()\n }\n }\n\n window.ide.workbench.actionsRegistry.registerWorkbenchAction(new window.ide.workbench.syncActionDescriptor(rebuildAction, \"sail.rebuild\", \"Rebuild container\", {\n primary: ((1 << 11) >>> 0) | 48 // That's cmd + R. See vscode source for the magic numbers.\n }), \"sail: Rebuild container\", \"sail\");\n\n const statusBarService = window.ide.workbench.statusbarService\n statusBarService.addEntry({\n text: \"rebuild\",\n tooltip: \"Rebuild sail container\",\n command: \"sail.rebuild\"\n }, 0)\n })\n}())\n"

0 commit comments

Comments
 (0)