Skip to content

Commit de9a493

Browse files
committed
add: web: implement window.open()
This is a veeery naive implementation. It doesn't implement your regular popup blocking safety nets (like the mandatory interaction prior to a successful open call) but it does work.
1 parent 4b70986 commit de9a493

File tree

3 files changed

+17
-4
lines changed

3 files changed

+17
-4
lines changed

src/components/js/process.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ proc jsExecBuffer*(js: var JSProcess, data: string) =
3333

3434
js.parser = newParser(data.buffer.decode())
3535
js.runtime = newRuntime(data.name.decode(), js.parser.parse())
36-
window.generateIR(js.runtime)
36+
window.generateIR(js.runtime, js.ipc)
3737
jsdoc.generateIR(js.runtime)
3838
jswebsocket.generateBindings(js.runtime, js.ipc)
3939
jsdoc.updateDocumentState(js.runtime, js.document)

src/components/master/master.nim

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,8 @@ proc packetHandler*(
448448
of feRendererGotoURL:
449449
let data = tryParseJson(data, RendererGotoURL)
450450

451-
if process.kind != Renderer:
451+
if process.kind notin {Renderer, JSRuntime}:
452+
# TODO: separate magic code for jsruntime
452453
master.server.reportBadMessage(
453454
process, "Non-renderer process attempted to use `feRendererGotoURL`!", High
454455
)

src/components/web/window.nim

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import std/[logging, tables]
2-
import bali/runtime/prelude
2+
import bali/runtime/prelude, bali/internal/sugar
33
import ../../components/build_utils
4+
import ../../components/ipc/client/prelude
5+
import ../../components/renderer/ipc
46
import pretty
57

68
type
@@ -13,7 +15,7 @@ type
1315

1416
JSWindow* = object
1517

16-
proc generateIR*(runtime: Runtime) =
18+
proc generateIR*(runtime: Runtime, ipc: var IPCClient) =
1719
debug "components/web/window: generating interfaces"
1820
runtime.registerType("navigator", JSNavigator)
1921
runtime.setProperty(JSNavigator, "appCodeName", str("Mozilla"))
@@ -23,3 +25,13 @@ proc generateIR*(runtime: Runtime) =
2325
runtime.setProperty(
2426
JSNavigator, "oscpu", str(hostOS & ' ' & getArchitectureUAString())
2527
)
28+
29+
var pIpc = addr(ipc)
30+
runtime.registerType("window", JSWindow)
31+
runtime.defineFn(
32+
JSWindow,
33+
"open",
34+
proc() =
35+
let url = runtime.ToString(&runtime.argument(1, required = true))
36+
pIpc[].send(RendererGotoURL(url: url)),
37+
)

0 commit comments

Comments
 (0)