Skip to content

Commit b37e65e

Browse files
authored
Merge pull request #48 from ferus-web/window-open
Implement `window.open()`
2 parents 4b70986 + de9a493 commit b37e65e

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)