diff options
author | bptato <nincsnevem662@gmail.com> | 2025-02-01 17:00:37 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2025-02-01 17:13:26 +0100 |
commit | e56399f92d2323f9af95e001f86bd88798ccab2b (patch) | |
tree | 866d7fa1d14f58badc736ccc1472531ef7ace030 | |
parent | 065fe55a8803114f1886fcb7b42b6786b513112b (diff) | |
download | chawan-e56399f92d2323f9af95e001f86bd88798ccab2b.tar.gz |
dom: load inline module scripts too
-rw-r--r-- | src/html/dom.nim | 26 | ||||
-rw-r--r-- | src/html/script.nim | 2 |
2 files changed, 22 insertions, 6 deletions
diff --git a/src/html/dom.nim b/src/html/dom.nim index 41d79b66..e2083069 100644 --- a/src/html/dom.nim +++ b/src/html/dom.nim @@ -5173,6 +5173,17 @@ proc logException(window: Window; url: URL) = window.console.error("Exception in document", url.serialize(excludepassword = true), window.jsctx.getExceptionMsg()) +proc fetchInlineModuleGraph(element: HTMLScriptElement; sourceText: string; + url: URL; options: ScriptOptions; onComplete: OnCompleteProc) = + let window = element.document.window + let ctx = window.jsctx + let res = ctx.newJSModuleScript(sourceText, url, options) + if JS_IsException(res.script.record): + window.logException(res.script.baseURL) + element.onComplete(ScriptResult(t: srtNull)) + else: + element.fetchDescendantsAndLink(res.script, rdScript, onComplete) + proc fetchDescendantsAndLink(element: HTMLScriptElement; script: Script; destination: RequestDestination; onComplete: OnCompleteProc) = #TODO ummm... @@ -5192,8 +5203,6 @@ proc fetchDescendantsAndLink(element: HTMLScriptElement; script: Script; if JS_IsException(res): window.logException(script.baseURL) ) - else: - window.logException(script.baseURL) JS_FreeValue(ctx, res) #TODO settings object @@ -5393,12 +5402,19 @@ proc prepare*(element: HTMLScriptElement) = element.fetchExternalModuleGraph(url.get, options, markAsReady) else: let baseURL = element.document.baseURL - if element.ctype == stClassic: + case element.ctype + of stClassic: let ctx = element.document.window.jsctx let script = ctx.newClassicScript(sourceText, baseURL, options) element.markAsReady(script) - else: - #TODO stModule, stImportMap + of stModule: + element.delayingTheLoadEvent = true + if element.renderBlocking: + element.blockRendering() + options.renderBlocking = true + element.fetchInlineModuleGraph(sourceText, baseURL, options, markAsReady) + of stImportMap: + #TODO element.markAsReady(ScriptResult(t: srtNull)) if element.ctype == stClassic and element.attrb(satSrc) or element.ctype == stModule: diff --git a/src/html/script.nim b/src/html/script.nim index 84f6c553..65601d9c 100644 --- a/src/html/script.nim +++ b/src/html/script.nim @@ -16,7 +16,7 @@ type pmParserInserted, pmNotParserInserted ScriptType* = enum - stNone, stClassic, stModule, stImportMap + stClassic, stModule, stImportMap ScriptResultType* = enum srtNull, srtScript, srtImportMapParse, srtFetching |