about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/html/dom.nim26
-rw-r--r--src/html/script.nim2
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