ustj/web/router.hoon

237 lines
7.6 KiB
Plaintext
Raw Normal View History

2024-06-01 08:45:45 +00:00
/- sur=forum, tp=post
2024-06-27 04:44:31 +00:00
/+ lib=forum, sr=sortug, rd=rudder, cons=constants
2024-06-01 08:45:45 +00:00
/+ server
::
/= layout /web/layout
2024-06-27 04:44:31 +00:00
/= navbar /web/components/navbar
2024-06-01 08:45:45 +00:00
/= index /web/pages/index
/= thread /web/pages/thread
2024-06-27 04:44:31 +00:00
/= comment-page /web/pages/comment
/= add-comment /web/pages/add-comment
/= add-thread /web/pages/add-thread
/= login-page /web/pages/login
/= user-page /web/pages/user
2024-06-01 08:45:45 +00:00
:: /* sw %noun /web/sw/js
:: /* manifest %noun /web/manifest/json
:: assets
/* css %css /web/assets/style/css
/* spinner %noun /web/assets/spinner/svg
/* favicon %noun /web/assets/favicon/ico
/* favicon1 %noun /web/assets/favicon-32x32/png
/* favicon2 %noun /web/assets/favicon-16x16/png
|%
+$ order [id=@ta req=inbound-request:eyre]
++ pbail
%- html-response:gen:server
%- manx-to-octs:server
manx-bail
++ manx-bail ^- manx ;div:"404"
2024-06-27 04:44:31 +00:00
++ manx-payload |= =manx ^- simple-payload:http
%- html-response:gen:server
%- manx-to-octs:server manx
++ redirect |= [eyre-id=@ta path=tape]
=/ url (crip "{base-url:cons}{path}")
=/ pl (redirect:gen:server url)
(give-simple-payload:app:server eyre-id pl)
:: main
++ router
|_ [=state:sur =bowl:gall]
++ eyre
|= =order ^- (list card:agent:gall)
=/ rl (parse-request-line:server url.request.req.order)
=. site.rl ?~ site.rl ~ t.site.rl
2024-06-01 08:45:45 +00:00
2024-06-27 04:44:31 +00:00
=/ met method.request.req.order
=/ fpath=(pole knot) [met site.rl]
|^
:: if file extension assume its asset
?. ?=(~ ext.rl) (eyre-give (serve-assets rl))
?+ fpath bail
[%'GET' rest=*] (eyre-manx (serve-get rl(site rest.fpath)))
[%'POST' rest=*] (serve-post id.order rl(site rest.fpath) body.request.req.order)
==
::
++ bail (eyre-give pbail)
++ eyre-give |= pl=simple-payload:http ^- (list card:agent:gall)
(give-simple-payload:app:server id.order pl)
++ eyre-manx |= =manx
=/ pl %- html-response:gen:server %- manx-to-octs:server manx
(eyre-give pl)
--
2024-06-01 08:45:45 +00:00
::
2024-06-27 04:44:31 +00:00
++ render
|= url=@t ^- simple-payload:http
=/ rl (parse-request-line:server url)
=. site.rl ?~ site.rl ~ t.site.rl
=/ =(pole knot) [%'GET' site.rl]
?. ?=(~ ext.rl) (serve-assets rl)
2024-06-01 08:45:45 +00:00
2024-06-27 04:44:31 +00:00
%- manx-payload ^- manx
?+ pole manx-bail
[%'GET' rest=*] (serve-get rl(site rest.pole))
:: [%'POST' rest=*] (serve-post rl(site rest.pole))
2024-06-01 08:45:45 +00:00
==
2024-06-27 04:44:31 +00:00
++ serve-assets
|= rl=request-line:server
:: ~& >> assets=rl
?+ [site ext]:rl pbail
[[%style ~] [~ %css]] (css-response:gen:server (as-octs:mimes:html css))
:: [[%spinner ~] [~ %svg]] [%full (serve-other:kaji %svg spinner)]
:: [[%sw ~] [~ %js]] [%mime /text/javascript sw]
:: [[%manifest ~] [~ %json]] [%mime /application/json manifest]
==
++ serve-get
|= rl=request-line:server ^- manx
=/ p=(pole knot) site.rl ::?. mob.rl pat.rl [%m pat.rl]
?: ?=([%f rest=*] p) (serve-fragment rest.p)
%- add-layout
?+ p manx-bail
~ (serve-index '1')
[~ ~] (serve-index '1')
[%p p=@t ~] (serve-index p.p)
[%ted ted=@t ~] (serve-thread ted.p)
[%com uid=@t ~] (serve-comment uid.p)
[%rep uid=@t ~] (reply-page uid.p)
[%usr p=@t ~] (serve-user p.p)
[%add ~] (add-thread bowl)
[%log ~] login-page
==
++ add-layout |= m=manx
%- layout :~
2024-06-28 19:14:46 +00:00
(navbar state bowl)
2024-06-27 04:44:31 +00:00
m
==
++ serve-fragment |= =(pole knot) ^- manx
?+ pole !!
[%sigil ~]
2024-06-28 19:14:46 +00:00
=/ navb ~(. navbar [state bowl])
2024-06-27 04:44:31 +00:00
=/ userdiv login:navb
userdiv
==
++ serve-user |= t=@t ^- manx
=/ patp (slaw %p t) ?~ patp manx-bail
=/ teds (get-user-teds:lib u.patp state)
=/ coms (get-user-coms:lib u.patp state)
=/ karma (get-user-karma:lib u.patp state)
(user-page u.patp teds coms karma)
++ serve-index |= t=@t ^- manx
=/ pag (slaw %ud t) ?~ pag manx-bail
=/ threads (get-thread-page:lib u.pag state)
2024-06-28 19:14:46 +00:00
2024-06-27 04:44:31 +00:00
(index [u.pag threads] state bowl)
++ serve-comment |= uidt=@t ^- manx
=/ uid (slaw:sr %uw uidt) ?~ uid manx-bail
=/ cued (cue u.uid)
=/ pid %- (soft pid:tp) cued
?~ pid manx-bail
=/ com (get-comment:lib u.pid state)
?~ com manx-bail
=/ ted (get-thread:lib thread.u.com state)
?~ ted manx-bail
=/ fn (node-to-full:lib u.com comments.state)
(comment-page u.ted fn bowl)
++ reply-page |= uidt=@t ^- manx
=/ uid (slaw:sr %uw uidt) ?~ uid manx-bail
=/ cued (cue u.uid)
=/ pid %- (soft pid:tp) cued
?~ pid manx-bail
=/ com (get-comment:lib u.pid state)
?~ com manx-bail
=/ ted (get-thread:lib thread.u.com state)
?~ ted manx-bail
(add-comment u.ted u.com bowl)
++ serve-thread |= uidt=@t ^- manx
=/ uid (slaw:sr %uw uidt) ?~ uid manx-bail
=/ cued (cue u.uid)
=/ pid %- (soft pid:tp) cued
?~ pid manx-bail
=/ ted (get-thread:lib u.pid state)
?~ ted manx-bail
=/ fg (get-comment-list:lib u.ted comments.state)
(thread u.ted fg bowl)
++ serve-post
|= [eyre-id=@ta rl=request-line:server body=(unit octs)]
|^
=/ p=(pole knot) site.rl
?+ p ~
[%reply ~] (handle-reply .n)
[%comment ~] (handle-reply .y)
[%new-thread ~] handle-thread
[%vote %ted uid=@t vote=@t ~] (handle-vote .y uid.p vote.p)
[%vote %com uid=@t vote=@t ~] (handle-vote .n uid.p vote.p)
2024-06-28 19:14:46 +00:00
:: admin
[%del-ted uid=@t ~] (del .y uid.p)
[%del-com uid=@t ~] (del .n uid.p)
2024-06-01 08:45:45 +00:00
==
2024-06-28 19:14:46 +00:00
++ del
|= [is-ted=? uidt=@t]
=/ uid (slaw:sr %uw uidt) ?~ uid ~
=/ cued (cue u.uid)
=/ pid %- (soft pid:tp) cued
?~ pid ~
?: is-ted
=/ ted (get-thread:lib u.pid state)
?~ ted ~
(self-poke [%ui src.bowl eyre-id %del is-ted u.ted])
::
=/ com (get-comment:lib u.pid state)
?~ com ~
(self-poke [%ui src.bowl eyre-id %del is-ted u.com])
2024-06-27 04:44:31 +00:00
++ handle-vote |= [is-ted=? uidt=@t vote=@t]
=/ vot=? .=(vote 'gud')
=/ uid (slaw:sr %uw uidt) ?~ uid ~
=/ cued (cue u.uid)
=/ pid %- (soft pid:tp) cued
?~ pid ~
2024-06-28 19:14:46 +00:00
(self-poke [%ui src.bowl eyre-id %vote is-ted u.pid vot])
2024-06-01 08:45:45 +00:00
2024-06-27 04:44:31 +00:00
++ handle-thread
?~ body ~
=/ bod (frisk:rd q.u.body)
~& bod=bod
=/ md (~(get by bod) 'text')
?~ md ~
=/ title (~(get by bod) 'title')
?~ title ~
=/ url (~(get by bod) 'url')
?~ url ~
2024-06-28 19:14:46 +00:00
(self-poke [%ui src.bowl eyre-id %submit-thread u.title u.url u.md])
2024-06-27 04:44:31 +00:00
++ handle-reply |= top=?
?~ body ~
=/ bod (frisk:rd q.u.body)
=/ pars (~(get by bod) 'parent')
?~ pars ~
=/ uid (slaw:sr %uw u.pars)
?~ uid ~
=/ cued (cue u.uid)
=/ pid %- (soft pid:tp) cued
?~ pid ~
=/ md (~(get by bod) 'text')
?~ md ~
?: top
=/ ted (get-thread:lib u.pid state)
?~ ted ~
2024-06-28 19:14:46 +00:00
(self-poke [%ui src.bowl eyre-id %submit-comment u.ted u.md])
2024-06-27 04:44:31 +00:00
::
=/ com (get-comment:lib u.pid state)
?~ com ~
2024-06-28 19:14:46 +00:00
(self-poke [%ui src.bowl eyre-id %submit-reply u.com u.md])
2024-06-27 04:44:31 +00:00
--
::
++ self-poke |= noun=*
=/ =card:agent:gall
[%pass /gib %agent [our.bowl dap.bowl] %poke %noun !>(noun)]
:~ card
==
2024-06-01 08:45:45 +00:00
--
--