diff options
author | bptato <nincsnevem662@gmail.com> | 2024-06-09 01:59:08 +0200 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2024-06-09 01:59:08 +0200 |
commit | 3c20b253631fa194c84879da8f933fd7a8beae94 (patch) | |
tree | 9336924235258161859c3ad72093eabb894f819d | |
parent | 5df9ef4c810a1f1975f6e140f4c97aa602d37724 (diff) | |
download | chawan-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.nim | 22 | ||||
-rw-r--r-- | src/html/env.nim | 20 | ||||
-rw-r--r-- | src/local/client.nim | 5 |
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) |