diff --git a/pkg/arvo/app/launch.hoon b/pkg/arvo/app/launch.hoon new file mode 100644 index 000000000..6c57c1326 --- /dev/null +++ b/pkg/arvo/app/launch.hoon @@ -0,0 +1,164 @@ +/- launch +/+ *server, default-agent +:: +/= index + /^ $-(marl manx) + /: /===/app/launch/index /!noun/ +/= script + /^ octs + /; as-octs:mimes:html + /: /===/app/launch/js/index + /| /js/ + /~ ~ + == +/= style + /^ octs + /; as-octs:mimes:html + /: /===/app/launch/css/index + /| /css/ + /~ ~ + == +/= launch-png + /^ (map knot @) + /: /===/app/launch/img /_ /png/ +:: +|% ++$ versioned-state + $% state-zero + == ++$ state-zero + $: %0 + tiles=(set tile:launch) + data=tile-data:launch + path-to-tile=(map path @tas) + == +:: ++$ card card:agent:gall +-- +:: +=| state-zero +=* state - +^- agent:gall +|_ bol=bowl:gall ++* this . + def ~(. (default-agent this %|) bol) +++ on-init + ^- (quip card _this) + :_ this + [%pass / %arvo %e %connect [~ /] %launch]~ +:: +++ on-save !>(state) +:: +++ on-load + |= old=vase + `this(state !<(state-zero old)) +:: +++ on-poke + |= [mar=mark vas=vase] + ^- (quip card _this) + ?+ mar (on-poke:def mar vas) + :: + %launch-action + =/ act !<(action:launch vas) + =/ beforedata (~(get by data) name.act) + =/ newdata + ?~ beforedata + (~(put by data) name.act [*json url.act]) + (~(put by data) name.act [jon.u.beforedata url.act]) + =/ new-tile `tile:launch`[`@tas`name.act `path`subscribe.act] + :- [%pass subscribe.act %agent [our.bol name.act] %watch subscribe.act]~ + %= this + tiles (~(put in tiles) new-tile) + data newdata + path-to-tile (~(put by path-to-tile) subscribe.act name.act) + == + :: + %handle-http-request + =+ !<([eyre-id=@ta =inbound-request:eyre] vas) + :_ this + %+ give-simple-payload:app eyre-id + %+ require-authorization:app inbound-request + |= =inbound-request:eyre + ^- simple-payload:http + =/ request-line (parse-request-line url.request.inbound-request) + =/ name=@t + =/ back-path (flop site.request-line) + ?~ back-path + '' + i.back-path + ?+ site.request-line + not-found:gen + :: + ~ + =/ hym=manx + %- index + ^- marl + %+ turn ~(tap by data) + |= [key=@tas [jon=json url=@t]] + ^- manx + ;script@"{(trip url)}"; + (manx-response:gen hym) + :: + [%'~launch' %css %index ~] :: styling + (css-response:gen style) + :: + [%'~launch' %js %index ~] :: javascript + (js-response:gen script) + :: + [%'~launch' %img *] :: images + =/ img=(unit @) (~(get by launch-png) `@ta`name) + ?~ img + not-found:gen + (png-response:gen (as-octs:mimes:html u.img)) + :: + [%'~modulo' %session ~] + =/ session-js + %- as-octt:mimes:html + ;: weld + "window.ship = '{+:(scow %p our.bol)}';" + "window.urb = new Channel();" + == + (js-response:gen session-js) + == + == +:: +++ on-watch + |= pax=path + ^- (quip card _this) + ?: ?=([%http-response *] pax) + [~ this] + ?. ?=([%main *] pax) + (on-watch:def pax) + =/ data=json + %- pairs:enjs:format + %+ turn ~(tap by data) + |= [key=@tas [jon=json url=@t]] + [key jon] + :_ this + [%give %fact ~ %json !>(data)]~ +:: +++ on-leave on-leave:def +++ on-peek on-peek:def +++ on-fail on-fail:def +++ on-agent + |= [wir=wire sin=sign:agent:gall] + ^- (quip card _this) + ?. ?=(%fact -.sin) + (on-agent:def wir sin) + ?. ?=(%json p.cage.sin) + (on-agent:def wir sin) + :: + =/ jon=json !<(json q.cage.sin) + =/ name=@tas (~(got by path-to-tile) wir) + =/ dat=(unit [json url=@t]) (~(get by data) name) + ?~ dat [~ this] + :_ this(data (~(put by data) name [jon url.u.dat])) + [%give %fact `/main %json !>((frond:enjs:format name jon))]~ +:: +++ on-arvo + |= [wir=wire sin=sign-arvo] + ^- (quip card:agent:gall _this) + ?. ?=(%bound +<.sin) + (on-arvo:def wir sin) + [~ this] +--