about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2024-06-09 01:59:08 +0200
committerbptato <nincsnevem662@gmail.com>2024-06-09 01:59:08 +0200
commit3c20b253631fa194c84879da8f933fd7a8beae94 (patch)
tree9336924235258161859c3ad72093eabb894f819d
parent5df9ef4c810a1f1975f6e140f4c97aa602d37724 (diff)
downloadchawan-3c20b253631fa194c84879da8f933fd7a8beae94.tar.gz
dom: simplify window.loader
the Option setup hasn't made much sense for a long time now
-rw-r--r--src/html/dom.nim22
-rw-r--r--src/html/env.nim20
-rw-r--r--src/local/client.nim5
3 files changed, 18 insertions, 29 deletions
diff --git a/src/html/dom.nim b/src/html/dom.nim
index d09849c7..29a521c6 100644
--- a/src/html/dom.nim
+++ b/src/html/dom.nim
@@ -79,7 +79,7 @@ type
     navigator* {.jsget.}: Navigator
     screen* {.jsget.}: Screen
     settings*: EnvironmentSettings
-    internalLoader*: Option[FileLoader]
+    loader*: FileLoader
     location* {.jsget.}: Location
     jsrt*: JSRuntime
     jsctx*: JSContext
@@ -2824,9 +2824,6 @@ proc style*(element: Element): CSSStyleDeclaration {.jsfget.} =
 var appliesFwdDecl*: proc(mqlist: MediaQueryList; window: Window): bool
   {.nimcall, noSideEffect.}
 
-func loader*(window: Window): Option[FileLoader] {.inline.} =
-  return window.internalLoader
-
 func console(window: Window): Console =
   return window.internalConsole
 
@@ -2842,8 +2839,7 @@ proc loadResource(window: Window; link: HTMLLinkElement) =
   if href == "":
     return
   let url = parseURL(href, window.document.url.some)
-  if url.isSome and window.loader.isSome:
-    let loader = window.loader.get
+  if url.isSome:
     let url = url.get
     let media = link.media
     if media != "":
@@ -2851,7 +2847,7 @@ proc loadResource(window: Window; link: HTMLLinkElement) =
       let media = parseMediaQueryList(cvals)
       if not media.appliesFwdDecl(window):
         return
-    let p = loader.fetch(
+    let p = window.loader.fetch(
       newRequest(url)
     ).then(proc(res: JSResult[Response]): Promise[JSResult[string]] =
       if res.isSome:
@@ -2875,10 +2871,9 @@ proc loadResource(window: Window; image: HTMLImageElement) =
   if src == "":
     return
   let url = parseURL(src, window.document.url.some)
-  if url.isSome and window.loader.isSome:
+  if url.isSome:
     let url = url.get
-    let loader = window.loader.get
-    let p = loader.fetch(newRequest(url))
+    let p = window.loader.fetch(newRequest(url))
       .then(proc(res: JSResult[Response]): Promise[JSResult[Blob]] =
         if res.isNone:
           return
@@ -3583,14 +3578,13 @@ proc fetchClassicScript(element: HTMLScriptElement; url: URL;
     options: ScriptOptions; cors: CORSAttribute; cs: Charset;
     onComplete: OnCompleteProc) =
   let window = element.document.window
-  if not element.scriptingEnabled or window.loader.isNone:
+  if not element.scriptingEnabled:
     element.onComplete(ScriptResult(t: RESULT_NULL))
     return
-  let loader = window.loader.get
   let request = createPotentialCORSRequest(url, rdScript, cors)
   request.client = some(window.settings)
   #TODO make this non-blocking somehow
-  let response = loader.doRequest(request.request)
+  let response = window.loader.doRequest(request.request)
   if response.res != 0:
     element.onComplete(ScriptResult(t: RESULT_NULL))
     return
@@ -3613,7 +3607,7 @@ proc fetchSingleModule(element: HTMLScriptElement; url: URL;
 proc fetchExternalModuleGraph(element: HTMLScriptElement; url: URL;
     options: ScriptOptions; onComplete: OnCompleteProc) =
   let window = element.document.window
-  if not element.scriptingEnabled or window.loader.isNone:
+  if not element.scriptingEnabled:
     element.onComplete(ScriptResult(t: RESULT_NULL))
     return
   window.importMapsAllowed = false
diff --git a/src/html/env.nim b/src/html/env.nim
index fadcd52c..e8fbf4af 100644
--- a/src/html/env.nim
+++ b/src/html/env.nim
@@ -100,16 +100,14 @@ proc addNavigatorModule*(ctx: JSContext) =
 
 proc fetch[T: JSRequest|string](window: Window; input: T;
     init = none(RequestInit)): JSResult[FetchPromise] {.jsfunc.} =
-  if window.loader.isSome:
-    let input = ?newRequest(window.jsctx, input, init)
-    #TODO cors requests?
-    if not window.settings.origin.isSameOrigin(input.request.url.origin):
-      let promise = FetchPromise()
-      let err = newTypeError("NetworkError when attempting to fetch resource")
-      promise.resolve(JSResult[Response].err(err))
-      return ok(promise)
-    return ok(window.loader.get.fetch(input.request))
-  return ok(nil)
+  let input = ?newRequest(window.jsctx, input, init)
+  #TODO cors requests?
+  if not window.settings.origin.isSameOrigin(input.request.url.origin):
+    let promise = FetchPromise()
+    let err = newTypeError("NetworkError when attempting to fetch resource")
+    promise.resolve(JSResult[Response].err(err))
+    return ok(promise)
+  return ok(window.loader.fetch(input.request))
 
 proc setTimeout[T: JSValue|string](window: Window; handler: T;
     timeout = 0i32): int32 {.jsfunc.} =
@@ -244,7 +242,7 @@ proc newWindow*(scripting, images: bool; selector: Selector[int];
     attrs: attrs,
     internalConsole: newConsole(err),
     navigator: Navigator(),
-    internalLoader: some(loader),
+    loader: loader,
     images: images,
     settings: EnvironmentSettings(
       scripting: scripting,
diff --git a/src/local/client.nim b/src/local/client.nim
index 4b81f668..8e83892c 100644
--- a/src/local/client.nim
+++ b/src/local/client.nim
@@ -80,9 +80,6 @@ func console(client: Client): Console {.jsfget.} =
 template selector(client: Client): Selector[int] =
   client.pager.selector
 
-template loader(client: Client): FileLoader =
-  client.pager.loader
-
 template forkserver(client: Client): ForkServer =
   client.pager.forkserver
 
@@ -846,7 +843,7 @@ proc newClient*(config: Config; forkserver: ForkServer; jsctx: JSContext;
     exitCode: -1,
     alive: true,
     factory: newCAtomFactory(),
-    internalLoader: some(loader)
+    loader: loader
   )
   jsrt.setInterruptHandler(interruptHandler, cast[pointer](client))
   let global = JS_GetGlobalObject(jsctx)