From 2e28098c53653f9b87e72915124b3d7fe1aa584b Mon Sep 17 00:00:00 2001 From: Brad Nelson Date: Sun, 18 Jun 2023 20:24:37 -0700 Subject: [PATCH] More session state with web. --- web/platform.fs | 10 ++++++++++ web/utils.fs | 39 ++++++++++++++++++++++++++++++++------- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/web/platform.fs b/web/platform.fs index 87a93ee..1780e04 100644 --- a/web/platform.fs +++ b/web/platform.fs @@ -899,6 +899,16 @@ JSWORD: upload-success? { -- f } return context.filepick_result; ~ +JSWORD: raw-download { data data_n mime mime_n filename filename_n -- } + var anchor = document.createElement('a'); + var blob = new Blob([u8.slice(data, data + data_n)], + {type: context.GetRawString(u8, mime, mime_n)}); + var url = URL.createObjectURL(blob); + anchor.setAttribute('href', url); + anchor.setAttribute('download', context.GetRawString(u8, filename, filename_n)); + anchor.click(); +~ + JSWORD: log { a n -- } console.log(GetString(a, n)); ~ diff --git a/web/utils.fs b/web/utils.fs index d00f27d..de03a20 100644 --- a/web/utils.fs +++ b/web/utils.fs @@ -22,6 +22,8 @@ web definitions ' web-key? is key? ' web-terminate is terminate +0 value session? + : upload-file ( a n -- ) upload-start begin yield upload-done? until @@ -31,17 +33,40 @@ web definitions : upload ( "filename" ) bl parse dup assert upload-file ; : include-file { a n -- } - 0 0 a n 0 getItem { len } + 0 0 a n session? getItem { len } here { buf } len allot - buf len a n 0 getItem len = assert - a n 0 removeItem + buf len a n session? getItem len = assert buf len evaluate -; +; -: ls 0 keyCount 0 do pad 80 i 0 getKey pad swap type cr loop ; -: rm bl parse 0 removeItem ; +: cat ( "filename" ) + bl parse { name name# } + 0 0 name name# session? getItem { len } + here len name name# session? getItem len = assert + here len type +; -: import s" _temp.fs" 2dup upload-file include-file ; +: download ( "filename" ) + bl parse { name name# } + 0 0 name name# session? getItem { len } + here len name name# session? getItem len = assert + here len s" application/octet-stream" + name name# raw-download +; + +: ls + session? keyCount 0 ?do + pad 80 i session? getKey pad swap type cr + loop +; + +: rm bl parse session? removeItem ; + +: import + s" _temp.fs" 2dup upload-file + 2dup >r >r include-file + r> r> session? removeItem +; : yielding begin 50 ms yield again ; ' yielding 10 10 task yielding-task