diff options
Diffstat (limited to 'src')
-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 |