Merge branch 'develop' into bm/diary

This commit is contained in:
bonbud-macryg 2024-06-05 18:59:50 +01:00 committed by GitHub
commit 444644412f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
39 changed files with 1155 additions and 1277 deletions

View File

@ -15,7 +15,7 @@
/* txt-ford-text %hoon /neo/cod/std/src/imp/ford-text/hoon
=>
|%
++ dev &
++ dev |
++ mute
?: dev same
|* *
@ -76,7 +76,7 @@
=* state -
=<
%- mute
%+ libverb &
%+ libverb |
%- agent:dbug
^- agent:gall
|_ =bowl:gall
@ -197,13 +197,13 @@
++ do-ack
|= =ack:neo
^- (list card)
?: =(p.p.ack sys-pith)
?: =(p.ack sys-pith)
%. *(list card)
?~ q.ack
same
?- -.u.q.ack
%goof (mean leaf/"goof on sys" tang.u.q.ack)
%gone (mean leaf/"no dependency {<term.u.q.ack>}" ~)
%goof (slog leaf/"goof on sys" tang.u.q.ack)
%gone (slog leaf/"no dependency {<term.u.q.ack>}" ~)
==
=/ src=name:neo (de-pith:name:neo p.p.ack)
=/ =wire nack/(pout p.p.ack)
@ -272,6 +272,7 @@
++ on-move
|= =move:neo
^+ run
%- (slog leaf/"{(en-tape:pith:neo p.move)} -> {(en-tape:pith:neo p.q.move)}: {<-.q.q.move>}" ~)
=/ src=name:neo (de-pith:name:neo p.move)
=/ dst=name:neo (de-pith:name:neo p.q.move)
?> =(src.bowl ship.src)
@ -280,13 +281,17 @@
(on-move:sys p.move q.move(p t.pith.dst))
++ on-ack
|= =ack:neo
%. run
?~ q.ack
same
?- -.u.q.ack
%gone (slog leaf/"Missing dep: {<term.u.q.ack>}" ~)
%goof (slog leaf/"nacked on flow {<p.ack>}" tang.u.q.ack)
==
=/ dst=name:neo (de-pith:name:neo p.p.ack)
?> =(src.bowl ship.dst)
?: =(sys-pith p.p.ack)
%. run
?~ q.ack
same
?- -.u.q.ack
%gone (slog leaf/"Missing dep: {<term.u.q.ack>}" ~)
%goof (slog leaf/"nacked on flow {<p.ack>}" tang.u.q.ack)
==
(on-move q.p.ack p.p.ack %poke ack/!>(q.ack))
::
++ on-dirt-card
|= =card:dirt:neo
@ -998,9 +1003,10 @@
^- form:neo
|_ [=bowl:neo =saga:neo]
++ poke
|= [s=stud:neo vax=^vase]
|= =pail:neo
^- (quip card:neo pail:neo)
`q.saga
?> =(p.pail stud)
`pail
++ init
|= pal=(unit pail:neo)
^- (quip card:neo pail:neo)
@ -1286,6 +1292,11 @@
[%update pax]
=/ =file:ford:neo
~| parsing/pax
=; res=(each file:ford:neo tang)
?: ?=(%& -.res)
p.res
(mean p.res)
%- mule |.
(scan (trip src) (rein:ford:neo [our.bowl (pave:neo (snip pax))]))
~& [lib=lib pro=pro]:file
=/ has-imports=?
@ -1353,7 +1364,7 @@
(welp #/cod/grab (stud-to-pith:neo i.pos))
?: !=(~ (~(peek plow:aux loam) p/our.bowl pat))
$(pos t.pos)
=. run (on-dirt-card (do-grow-our pat vase/=>(..zuse !>(|=(~ *vase)))))
=. run (on-dirt-card (do-grow-our pat vase/=>(..zuse !>(|=(* *vase)))))
$(pos t.pos)
::
++ build-fars
@ -1515,6 +1526,8 @@
~| wer
=; =vase
(make-riff wer vase)
%- need
%- mole |.
=+ vaz=(vang & (pout wer))
%+ slap reef
(scan (trip txt) (full (ifix [gay gay] tall:vaz)))
@ -1577,7 +1590,7 @@
|= [par=pith:neo child=pith:neo car=?(%y %z)]
^- ?
?: =(%y car)
=(par (~(parent of:neo tide) child))
=(`par (~(parent of:neo tide) child))
!=(~ (dif:pith:neo par child))
::
:: +abduct: check capture
@ -1585,21 +1598,26 @@
|= [par=pith:neo child=pith:neo]
^- ?
?~ wav=(~(get of:neo tide) par)
::~& bailing-no-wave/[par child]
|
?~ kids.dock.u.wav
::~& bailing-no-kids/[par child]
|
(seize par child p.u.kids.dock.u.wav)
:: +adopt: produce all capturing parents
::
++ adopt
=| here=pith:neo
=| res=(set pith:neo)
=| here=pith:neo
|= =pith:neo
=. pith (tail pith)
::~& adopting/pith
|- ^+ res
=? res (abduct here pith)
(~(put in res) here)
(~(put in res) [p/our.bowl here])
=/ nex (dif:pith:neo here pith)
?~ nex
::~& adopted/res
res
$(here (snoc here i.nex))
::
@ -1631,10 +1649,14 @@
=. run (add:stop move)
arvo
|%
++ can-ack
^- ?
!?=([%poke %ack *] q.q.init-move)
++ abet
^+ run
?: =([~ ~] block)
=. run (emil `(list card)`(do-ack [p p.q]:init-move err.block))
=? run can-ack
(emil `(list card)`(do-ack [p p.q]:init-move err.block))
=. run (emil (turn up do-move))
(dial smut)
:: %+ turn ~(tap by change)
@ -1644,13 +1666,17 @@
~& >>> init
=. state old :: XX: is apex only state that is touched?
?. =(~ get.block)
~& >>> %block
(fresh:stop get.block init-move)
?> ?=(^ err.block)
:: %- (slog u.err.block)
%- (slog (print-quit:neo u.err.block))
?: ?=([%poke %rely *] q.q.move)
~& >>> rely-nack/[src dst]:init
run
(emil (do-ack [p p.q]:init-move err.block))
?: can-ack
(emil (do-ack [p p.q]:init-move err.block))
~& ack-nack/u.err.block
run
::
++ arvo .
++ emit |=(=move:neo arvo(down [move down]))
@ -1674,13 +1700,14 @@
%+ roll grit
|= [=dust:neo by-parent=(jug pith:neo dust:neo)]
%- ~(gas ju by-parent)
=/ adoptees (adopt pith.dust)
(turn ~(tap in (adopt pith.dust)) |=(=pith:neo [pith [(dif:pith:neo pith pith.dust) +.dust]]))
:: XX: assert gifts empty
=. gifts
%+ turn (sort ~(tap in ~(key by by-parent)) sort:pith:neo)
|= =pith:neo
^- [pith:neo gift:neo]
[pith (gas-gift ~(tap in (~(get ju by-parent) pith)))]
[(tail pith) (gas-gift ~(tap in (~(get ju by-parent) pith)))]
=. smut (welp smut grit)
=. grit ~
give
@ -1885,6 +1912,7 @@
=/ =wave:neo (~(got of:neo tide) here)
=| cards=(list card:neo)
=/ =kook:neo ~(kook husk code.wave)
=. dock.wave ~(dock husk code.wave)
|%
++ su-core .
++ su-emil |=(caz=(list card:neo) su-core(cards (welp cards caz)))
@ -1950,7 +1978,8 @@
++ su-grow
|= =pail:neo
^+ su-core
:: ?>(check-pail) XX: TODO
?. (blow state:kook p.pail)
(mean leaf/"Returned bad state stud, wanted {<state.kook>}, have {<p.pail>}" ~)
=. arvo (grow pail)
su-core
::
@ -1963,6 +1992,15 @@
::
++ su-poke
|= =pail:neo
^+ su-core
?. (~(has in poke.dock.wave) p.pail)
?: ?=(%ack p.pail)
%. su-core
=+ !<(ack=(unit quit:neo) q.pail)
?~ ack
same
(slog (print-quit:neo u.ack))
(mean leaf/"no support for {<p.pail>}" ~)
=/ [caz=(list card:neo) new=pail:neo]
(poke:su-form pail)
=. su-core (su-emil caz)
@ -2186,6 +2224,7 @@
|= [src=pith:neo dst=pith:neo =note:neo]
?> ?=(%poke -.note) :: XX: all shanes should be virtualised and hand deliver acks
?+ p.pail.note ~|(bad-eyre-call/p.pail.note !!)
%ack run
%eyre-req (on-eyre-req !<(req:eyre:neo q.pail.note))
%eyre-sign (on-eyre-sign src !<(sign:eyre:neo q.pail.note))
==
@ -2269,6 +2308,14 @@
:: |util: utilties
+| %util
++ blow
|= [need=curb:neo have=stud:neo]
^- ?
?+ -.need ~|(curb-not-supported/-.need !!)
%any &
%or (lien p.need |=(curb:neo (blow +< have)))
?(%pro %only) =(p.need have)
==
++ puff
|= [want=stud:neo role=(unit stud:neo) have=saga:neo]
^- (unit idea:neo)
@ -2284,9 +2331,15 @@
=/ rol=stud:neo
(fall role %$)
?~ can=(~(get by con.dive) [p.q.have rol want])
~& missing-can/[p.q.have rol want]
~
=/ conv run:~(do con u.can)
`[want (slam conv q.q.have)]
~| dead-horse/[p.q.have rol want u.can]
:+ ~ want
%+ slam conv
?: =(p.q.have %vase)
!>(q.q.have)
q.q.have
::
++ plag
=| rol=(unit stud:neo)
@ -2311,15 +2364,19 @@
`[have ~ q.have]
::
%not
=/ r rol
?. =(~ loop(want p.want))
~
=. rol r
loop(want q.want)
::
%or
|-
?~ p.want
~
=/ r rol
=/ nex loop(want i.p.want)
=. rol r
?^ nex
`u.nex
$(p.want t.p.want)
@ -2334,7 +2391,6 @@
++ scion
|= [want=lads:neo =pith:neo =saga:neo]
^- (unit idea:neo)
?~ pis=(find:peon:neo pith ~(key by want))
~
=/ =lash:neo (~(got by want) u.pis)
@ -2348,24 +2404,25 @@
?: ?=($@(~ [~ ~]) pic)
~& lost-moor/name
~
=; [fail=? res=(list (pair pith:neo idea:neo))]
?: fail
~
=; [fail=(set pith:neo) res=(list (pair pith:neo idea:neo))]
:: ?. =(~ fail)
:: ~& fail-moor/fail
:: ~
~? !=(~ fail)
fail/fail
`(gas-lore res)
%+ roll ~(tap by ~(tar of:neo u.u.pic))
|= [[=pith:neo =saga:neo] [fail=_| res=(list (pair pith:neo idea:neo))]]
|= [[=pith:neo =saga:neo] [fail=(set pith:neo) res=(list (pair pith:neo idea:neo))]]
^+ +<+
?: fail
[fail ~]
?: =(pith ~)
?~ rot=(plag state.p.want saga)
&/~
|/:_(res [*pith:neo u.rot])
[(~(put in fail) pith) res]
[fail :_(res [*pith:neo u.rot])]
?~ q.want
|/res
[(~(put in fail) pith) res]
?~ ion=(scion q.u.q.want pith saga)
&/~
|/:_(res [pith u.ion])
[(~(put in fail) pith) res]
[fail :_(res [pith u.ion])]
::
++ gas-leaf
=| =leaf:neo

View File

@ -532,4 +532,3 @@
:: !! :: ``[q.u.u.pom ever q.p.u.u.pom]
--
--

View File

@ -44,7 +44,7 @@
;button.br1.border.b1.hover
=style "padding: 4px 8px;"
=type "button"
=pith "/{(scow %p our.bowl)}{(en-tape:pith:neo here.bowl)}"
=pith "{(en-tape:pith:neo here.bowl)}"
=onclick "navigator.clipboard.writeText(this.getAttribute('pith'));"
; copy path
==

View File

@ -0,0 +1,168 @@
/@ accel-conf
/@ htmx
:- [%accel-conf %$ %htmx]
|= conf=accel-conf
|= =bowl:neo
|^ ^- manx
::
;div.fc.trans-root.grow
;form.fc.grow
=hx-post "/neo/hawk{(en-tape:pith:neo here.bowl)}?stud=hoon"
=hx-trigger "input changed delay:0.4s from:[name='text'], input changed delay:0.4s from:[name='a']"
=hx-swap "none"
=hx-target "#code-spinner .loading"
=hx-target-400 "#error-code-{id}"
=hx-indicator "#code-spinner"
=row (scow %ud +:x)
=col (scow %ud +:y)
;div.fc.border.grow.basis-half.wf
;+ code-input
;+ (spinner "code")
==
==
;div.fc.border
;+ conf-header
;div.fr
;div.fc.p2
;form.fr.js.hf
=hx-post "/neo/hawk{(en-tape:pith:neo here.bowl)}?stud=add-poke"
=hx-swap "none"
=hx-indicator "#code-spinner"
=hx-target "#code-spinner .loading"
;input
=type "text"
=placeholder "/{(scow %p our.bowl)}/shrub/to/poke"
=name "pith"
=autocomplete "off"
=oninput "this.setAttribute('value', this.value);"
;
==
;input
=type "text"
=placeholder "%some-type"
=name "stud"
=autocomplete "off"
=oninput "this.setAttribute('value', this.value);"
;
==
;button
=type "submit"
; Route poke
==
==
==
;div.fc.p2
::
;+ deps
;form.fr.js.hf
=hx-post "/neo/hawk{(en-tape:pith:neo here.bowl)}?stud=add-dep"
=hx-swap "none"
=hx-target "#conf-spinner .loading"
=hx-target-400 "#error-add-{id}"
=hx-indicator "#conf-spinner"
=row (scow %ud +:x)
=col (scow %ud +:y)
;div.fc.grow.basis-half.wf
;div.fr
;input
=type "text"
=placeholder "name"
=autocomplete "off"
=oninput "this.setAttribute('value', this.value);"
=name "name"
;
==
;input
=type "text"
=placeholder "/{(scow %p our.bowl)}/demo/cell/5"
=autocomplete "off"
=oninput "this.setAttribute('value', this.value);"
=name "pith"
;
==
==
;button
=type "submit"
; Add dep
==
;+ (spinner "conf")
==
==
==
==
==
==
++ id
^- tape
%- zing
%+ turn (pout (tail here.bowl))
|= smeg=@ta
%+ weld "--"
(trip smeg)
::
++ x (rear (snip (snip here.bowl)))
++ y (rear (snip here.bowl))
++ spinner
|= =tape
;div.b1.loader.p1.s-2.f2
=id (welp tape "-spinner")
;span.loaded: saved
;span.loading: ---
==
++ conf-header
=/ pit=tape (en-tape:pith:neo (snoc (snip here.bowl) %out))
;div.b1.border.fr.jb
;span.p1.mono.s-1: {pit}
;button.br1.border.b1.hover
=style "padding: 4px 8px;"
=type "button"
=pith pit
=onclick "navigator.clipboard.writeText(this.getAttribute('pith'));"
; copy path
==
==
++ code-input
;textarea#input.wf.p2.pre.mono.grow
=name "text"
=placeholder "code"
=spellcheck "false"
=value (trip hoon.conf)
=oninput "this.setAttribute('value', this.value);"
; {(trip hoon.conf)}
==
++ deps
^- manx
?: =(~ crew.conf)
;div.fr: No dependencies
;div.fc
;div.s1.p1: Dependencies
;*
%+ turn ~(tap by crew.conf)
|= [=term =pith:neo]
=/ tap (trip term)
;label.fr.p1
;div.border.wf
=name "name"
; {tap}
==
;label.border.wf: {(en-tape:pith:neo pith)}
;button.border
=hx-post "/neo/sky{(en-tape:pith:neo here.bowl)}?stud=del-dep"
; Delete
;label.hidden
=name "name"
=value tap
;
==
==
==
==
++ error
|= =tang
;div.pre.mono.p2
;*
%+ turn (scag 25 tang)
|= =tank
;span: {(of-wall:format (~(win re tank) 0 80))}
==
--

View File

@ -1,5 +1,7 @@
/@ accel
/@ accel-cell
/@ accel-conf
/@ htmx
:- [%accel %$ %htmx]
|= =accel
|= =bowl:neo
@ -13,7 +15,7 @@
++ id
^- tape
%- zing
%+ turn (pout here.bowl)
%+ turn (pout (tail here.bowl))
|= smeg=@ta
%+ weld "--"
(trip smeg)
@ -38,29 +40,34 @@
;*
%+ turn (gulf 1 10)
|= y=@
=/ val=(unit pail:neo) ~::(~(get by kids.bowl) ~[ud/x ud/y])
=/ vaf (fall val [%accel-cell !>(*accel-cell)])
^- manx
=/ pax=pith:neo #/[ud/x]/[ud/y]
=/ kid=bowl:neo bowl
=. kids.kid [~ ~]
=. here.kid :(welp here.bowl pax)
=. deps.kid ~
=/ in=manx
?~ res=(~(get of:neo kids.bowl) (snoc pax %in))
*manx
=. here.kid (snoc here.kid %in)
(!<(htmx q.pail.u.res) kid)
=/ out=manx
?~ res=(~(get of:neo kids.bowl) (snoc pax %out))
*manx
=. here.kid (snoc here.kid %out)
(!<(htmx q.pail.u.res) kid)
;td.border
;+
=/ cell !<(accel-cell +:vaf)
;button.b1.scroll-none.hover.cell-btn.p2.wf.hf
=id "cell-{id}-{<x>}-{<y>}"
=hx-get "/neo/hawk{(en-tape:pith:neo here.bowl)}/{<x>}/{<y>}"
=hx-get "/neo/hawk{(en-tape:pith:neo here.bowl)}/{<x>}/{<y>}/in"
=hx-target "#dashboard-{id}"
=hx-select ".trans-root"
=hx-swap "innerHTML"
=morph-retain "class"
=onclick "$('.cell-btn').removeClass('toggled');$(this).addClass('toggled');"
;+
?~ result.cell ;/("")
=/ res (need result.cell)
?- -.res
%.y
;div.mono
;+
;/ (of-wall:format (~(win re (sell +.res)) 0 80))
==
%.n
;span: ERROR
;div.mono
;+ out
==
==
==
@ -69,8 +76,7 @@
==
==
++ dashboard-stub
;div.b0.fc
=style "grid-area: dashboard;"
;div.b0.fr
=id "dashboard-{id}"
;
==
@ -91,6 +97,7 @@
border-collapse: collapse;
width: 100%;
grid-area: table;
overflow-y: auto;
}
.scroll-none {
overflow-x: auto;
@ -102,7 +109,7 @@
}
.accel-top {
display: grid;
grid-template-rows: 1fr min(auto, 300px);
grid-template-rows: 1fr 1fr;
grid-template-columns: 1fr;
grid-template-areas:
"table"

View File

@ -15,12 +15,15 @@
:: manxes
++ friends-list
^- manx
;div.fc.g2
;div.fc.g2
;*
%+ turn
%+ turn
%+ murn
~ ::~(tap in ~(key by kids.bowl))
|= =pith ((soft ship) ->:pith)
~(tap in ~(key by ~(tar of:neo kids.bowl)))
|= =road:neo
?. ?=([[%p ship=@] *] road)
~
`ship.road
|= =ship
^- manx
;div.border.p2.mono.fr.jb

View File

@ -14,19 +14,22 @@
:: <div class="p2" label="Diary">
;div.p2
=label "Diary"
:: <div class="ma fc g2" style="max-width: 650px">
;div.ma.fc.g2
=style "max-width: 650px;"
:: <div class="ma fc g2 mw-page">
;div.ma.fc.g2.mw-page
:: render the text input for new entries
;+ form-put-entry
:: compose several link-entry elements generated
:: by the +turn gate into one HTMX node
;*
%+ turn
~
:: %+ sort ~(tap of:neo kids.bowl)
:: |= [a=[=pith *] b=[=pith *]]
:: (gth ->.pith.a ->.pith.b)
%+ sort
%+ murn
~(tap of:neo kids.bowl)
|= [=pith =idea:neo]
?~ pith ~
`[pith idea]
|= [a=[=pith *] b=[=pith *]]
(gth ->.pith.a ->.pith.b)
link-entry
== :: </div>
== :: </div>
@ -37,17 +40,17 @@
:: class="fc g2"
:: style="margin-bottom: 30px"
:: head="put-entry"
:: hx-post="{(en-tape:pith:neo :(weld /neo/hawk here.bowl))}?stud=diary-diff"
:: hx-post="/neo/hawk{(en-tape:pith:neo here.bowl)}?stud=diary-diff"
:: hx-on-submit="this.reset()"
:: hx-target="this"
:: hx-swap="afterend"
:: hx-target="find .loading"
:: hx-swap="outerHTML"
:: >
;form.fc.g2
=style "margin-bottom: 30px;"
=hx-post "{(en-tape:pith:neo :(weld /neo/hawk here.bowl))}?stud=diary-diff"
=hx-post "/neo/hawk{(en-tape:pith:neo here.bowl)}?stud=diary-diff"
=hx-on-submit "this.reset()"
=hx-target "this"
=hx-swap "afterend"
=hx-target "find .loading"
=hx-swap "outerHTML"
=head "put-entry"
:: <date-now name="id" />
;date-now(name "id");
@ -82,9 +85,9 @@
::
:: entry box
++ link-entry
|= [pax=pith =pail:neo]
|= [pax=pith =idea:neo]
:: extract information from the given pith and pail:neo
=/ tape (trip !<(@t q.pail))
=/ tape (trip !<(@t q.pail.idea))
=/ subject-end (fall (find [10]~ tape) 56)
=/ subject (scag subject-end tape)
=/ id (trip (snag 0 (pout pax)))

View File

@ -1,13 +0,0 @@
/@ folder-diff
/- feather-icons
:- [%folder-diff %$ %htmx]
|= =folder-diff
|= =bowl:neo
;div.loading
=hx-get "/neo/hawk{(en-tape:pith:neo here.bowl)}"
=hx-target "closest .hawk"
=hx-indicator "closest .loader"
=hx-swap "innerHTML"
=hx-trigger "load"
;+ loading.feather-icons
==

View File

@ -1,686 +0,0 @@
:- [%vase %$ %htmx]
=/ debug |
|= v=vase
|= =bowl:neo
^- manx
=< apex
|%
++ dprint
=>
:: dprint-types
|%
:: $overview: an overview of all named things in the type.
::
:: each element in the overview list is either a documentation for a sublist
:: or an association betwen a term and documentation for it
+$ overview (list overview-item)
::
:: $overview-item: an element of an overview
+$ overview-item
$% [%header doc=what children=overview]
[%item name=tape doc=what]
==
::
:: $item: the part of a type being inspected
+$ item
$%
:: overview of a type
::
[%view items=overview]
:: inspecting a full core
$: %core
name=tape :: arm that built it
docs=what ::
sut=type :: [%core *]
children=(unit item) :: compiled against
==
:: inspecting a single arm on a core
$: %arm
name=tape :: arm name
adoc=what :: arm doc
pdoc=what :: product doc
cdoc=what :: $ arm/prod doc
gen=hoon :: arm hoon AST
sut=type :: subject of arm
==
:: inspecting a face and what's behind it
$: %face
name=tape :: name of face
docs=what ::
children=(unit item) :: face referent
==
:: inspecting a single chapter on a core
$: %chapter
name=tape :: name of chapter
docs=what ::
sut=type :: [%core *]
tom=tome :: tome of chapter
==
==
::
--
:: dprint
::
:: core containing doccords search and printing utilities
|%
:: contains arms used for looking for docs inside of a type
::
:: the entrypoint for finding docs within a type is +find-item-in-type.
+| %searching
:: +find-item-in-type: returns the item to print while searching through topic
::
:: this gate is a thin wrapper around _hunt for usability, since the only entry
:: point most users should care about is find-item:hunt
::
++ find-item-in-type
|= [topics=(list term) sut=type]
?~ topics !!
=/ top=(lest term) topics
~(find-item hunt [top sut])
::
:: +hunt: door used for refining the type while searching for doccords
::
++ hunt
=| gil=(set type)
|_ [topics=(lest term) sut=type]
+* this .
::
+| %find
::
++ find-item
~? >> debug %find-item
^- (unit item)
?- sut
%noun ~
%void ~
[%atom *] ~
[%cell *] find-cell
[%core *] find-core
[%face *] find-face
[%fork *] find-fork
[%hint *] find-hint
[%hold *] find-item:this(sut (~(play ut p.sut) q.sut))
==
::
++ find-cell
~? >> debug %find-cell
^- (unit item)
?> ?=([%cell *] sut)
=/ lhs find-item:this(sut p.sut)
?~ lhs
find-item:this(sut q.sut)
lhs
::
++ find-core
~? >> debug %find-core
^- (unit item)
?> ?=([%core *] sut)
?: check-arm
?: check-search
?: check-arm-core
return-arm-core
return-arm
recurse-arm-core
?: check-chap
?: check-search
return-chap
recurse-chap
recurse-core
::
++ find-face
~? >> debug %find-face
^- (unit item)
?> ?=([%face *] sut)
?. ?=(term p.sut)
::TODO: handle $tune case
find-item:this(sut q.sut)
?. =(i.topics p.sut)
~
?~ t.topics
return-face
find-item:this(sut q.sut, topics t.topics)
::
++ find-fork
~? >> debug %find-fork
^- (unit item)
?> ?=([%fork *] sut)
=/ types=(list type) ~(tap in p.sut)
|-
?~ types ~
=+ res=find-item:this(sut i.types)
?~ res
$(types t.types)
res
::
++ find-hint
~? >> debug %find-hint
^- (unit item)
|^
?> ?=([%hint *] sut)
?. ?=([%help *] q.p.sut)
find-item:this(sut q.sut)
?+ q.sut ~
[%cell *] find-cell:this(sut q.sut)
[%core *] find-hint-core
[%face *] find-hint-face
[%fork *] find-fork:this(sut q.sut)
[%hint *] find-hint:this(sut q.sut)
[%hold *] find-hint:this(q.sut (~(play ut p.q.sut) q.q.sut))
==
::
++ find-hint-core
~? >> debug %find-hint-core
^- (unit item)
?> &(?=([%hint *] sut) ?=([%help *] q.p.sut) ?=([%core *] q.sut))
::
?. ?& ((sane %tas) summary.crib.p.q.p.sut)
=(summary.crib.p.q.p.sut i.topics)
==
find-core:this(sut q.sut)
?~ t.topics
return-hint-core
find-item:this(sut q.sut, topics t.topics)
::
++ find-hint-face
~? >> debug %find-hint-face
^- (unit item)
?> &(?=([%hint *] sut) ?=([%help *] q.p.sut) ?=([%face *] q.sut))
?: check-face:this(sut q.sut)
?~ t.topics
return-hint-face
find-item:this(sut q.q.sut, topics t.topics)
find-item:this(sut q.q.sut)
--
::
::+| %recurse
++ recurse-core
~? >> debug %recurse-core
^- (unit item)
?> ?=([%core *] sut)
find-item:this(sut p.sut)
++ recurse-chap
~? >> debug %recurse-chap
^- (unit item)
?> ?=([%core *] sut)
?~ t.topics !!
find-item:this(topics t.topics)
++ recurse-arm-core
~? >> debug %recurse-arm-core
^- (unit item)
?> ?=([%core *] sut)
?~ t.topics !!
find-item:this(sut arm-type, topics t.topics)
::
+| %check
::
++ check-arm
~? >> debug %recurse-core
^- ?
!=(~ (find ~[i.topics] (sloe sut)))
++ check-chap
~? >> debug %check-chap
^- ?
?> ?=([%core *] sut)
(~(has by q.r.q.sut) i.topics)
++ check-face
~? >> debug %check-face
^- ?
?> ?=([%face *] sut)
?. ?=(term p.sut)
::TODO: handle $tune case
%.n
=(p.sut i.topics)
++ check-search
~? >> debug %check-search
^- ?
=(~ t.topics)
++ check-arm-core
~? >> debug %check-arm-core
^- ?
=+ arm-list=(sloe (~(play ut sut) arm-hoon))
&(!=(arm-list ~) !=(arm-list ~[%$]) ?=([%core *] arm-type))
::
+| %return
::
++ return-cell
~? >>> debug %return-cell
^- (unit item)
?> ?=([%cell *] sut)
(join-items return-item:this(sut p.sut) return-item:this(sut q.sut))
::
++ return-core
~? >>> debug %return-core
^- (unit item)
?> ?=([%core *] sut)
=* compiled-against return-item:this(sut p.sut)
`[%core (trip i.topics) *what sut compiled-against]
::
++ return-face
~? >>> debug %return-face
^- (unit item)
?> ?=([%face *] sut)
:: TODO: handle tune case
?. ?=(term p.sut)
return-item:this(sut q.sut)
=* compiled-against return-item:this(sut q.sut)
`[%face (trip p.sut) *what compiled-against]
::
++ return-fork
~? >>> debug %return-fork
^- (unit item)
?> ?=([%fork *] sut)
=* types ~(tap in p.sut)
=* items (turn types |=(a=type return-item:this(sut a)))
(roll items join-items)
::
++ return-hint
~? >>> debug %return-hint
^- (unit item)
?> ?=([%hint *] sut)
=* res return-item:this(sut q.sut)
?. ?=([%help *] q.p.sut)
~
?: ?=([%core *] q.sut)
return-hint-core
?: ?=([%face *] q.sut)
return-hint-face
`[%view [%header `crib.p.q.p.sut (item-as-overview res)]~]
::
++ return-arm
~? >>> debug %return-arm
^- (unit item)
?> ?=([%core *] sut)
=+ [adoc pdoc cdoc]=(arm-docs i.topics sut)
::TODO: should this p.sut be sut? or the compiled type of the arm?
`[%arm (trip i.topics) adoc pdoc cdoc arm-hoon sut]
::
++ return-chap
~? >>> debug %return-chap
^- (unit item)
?> ?=([%core *] sut)
=/ tom=tome (~(got by q.r.q.sut) i.topics)
`[%chapter (trip i.topics) p.tom sut (~(got by q.r.q.sut) i.topics)]
::
++ return-arm-core
~? >>> debug %return-arm-core
^- (unit item)
?> ?=([%core *] sut)
=+ [adoc pdoc cdoc]=(arm-docs i.topics sut)
=/ dox=what ?~(adoc ?~(pdoc ~ pdoc) adoc)
=/ at arm-type
?> ?=([%core *] at)
=* compiled-against return-item:this(sut p.sut)
`[%core (trip i.topics) dox at compiled-against]
::
++ return-item
~? >>> debug %return-item
^- (unit item)
?- sut
%noun ~
%void ~
[%atom *] ~
[%cell *] return-cell
[%core *] return-core
[%face *] return-face
[%fork *] return-fork
[%hint *] return-hint
[%hold *]
?: (~(has in gil) sut)
~
=< return-item
%= this
gil (~(put in gil) sut)
sut (~(play ut p.sut) q.sut)
==
==
::
++ return-hint-core
~? >>> debug %return-hint-core
^- (unit item)
?> &(?=([%hint *] sut) ?=([%core *] q.sut))
(apply-hint return-core:this(sut q.sut))
::
++ return-hint-face
~? >>> debug %return-hint-face
^- (unit item)
?> &(?=([%hint *] sut) ?=([%face *] q.sut))
(apply-hint return-face:this(sut q.sut))
::
++ apply-hint
~? >> debug %apply-hint
|= uit=(unit item)
^- (unit item)
?~ uit ~
?> &(?=([%hint *] sut) ?=([%help *] q.p.sut))
?+ u.uit ~
?([%core *] [%face *]) (some u.uit(docs `crib.p.q.p.sut))
==
::
+| %misc
++ arm-hoon
^- hoon
?> ?=([%core *] sut)
(^arm-hoon i.topics sut)
::
++ arm-type
^- type
?> ?=([%core *] sut)
(^arm-type i.topics sut)
--
::
:: +arm-hoon: looks for an arm in a core type and returns its hoon
++ arm-hoon
|= [nom=term sut=type]
^- hoon
?> ?=([%core *] sut)
=/ tomes=(list [p=term q=tome]) ~(tap by q.r.q.sut)
|-
?~ tomes !!
=+ gen=(~(get by q.q.i.tomes) nom)
?~ gen
$(tomes t.tomes)
u.gen
::
:: +arm-type: looks for an arm in a core type and returns its type
++ arm-type
|= [nom=term sut=type]
^- type
?> ?=([%core *] sut)
(~(play ut sut) (arm-hoon nom sut))
::
:: +hint-doc: returns docs if type is %help $hint w/ matching cuff
++ hint-doc
|= [=cuff sut=type]
^- what
?. &(?=([%hint *] sut) ?=([%help *] q.p.sut) =(cuff cuff.p.q.p.sut))
~
`crib.p.q.p.sut
::
:: +arm-doc: returns arm doc of an arm
::
:: we just check if the $cuff is from a ++ or +$ arm but this will
:: probably need to be revisited once more sophisticated cuffs are used
++ arm-doc
|= [nom=term sut=type]
^- what
?~ (hint-doc [%funk nom]~ sut)
(hint-doc [%plan nom]~ sut)
(hint-doc [%funk nom]~ sut)
::
:: +prod-doc: wrapper for +hint-doc with empty cuff
++ prod-doc
|= sut=type
^- what
(hint-doc ~ sut)
::
:: +buc-doc: checks if type is core and returns docs on $ arm if it exists
++ buc-doc
|= sut=type
^- what
?. ?=([%core *] sut)
~
?~ (find [%$]~ (sloe sut))
~
=/ sat=type (arm-type %$ sut)
?~ (arm-doc %$ sat)
(prod-doc sat)
(arm-doc %$ sat)
::
:: +arm-docs: grabs the docs for an arm.
::
:: there are three possible places with relevant docs for an arm:
:: docs for the arm itself, docs for the product of the arm, and
:: if the arm builds a core, docs for the default arm of that core.
::
:: .adoc: docs written above the the arm
:: .pdoc: docs for the product of the arm
:: .cdoc: docs for the default arm of the core produced by the arm
++ arm-docs
|= [nom=term sut=type]
^- [what what what]
?> ?=([%core *] sut)
=/ sat=type (~(play ut sut) (arm-hoon nom sut))
=/ adoc=what (arm-doc nom sat)
=/ pdoc=what
?~ adoc
(prod-doc sat)
?> ?=([%hint *] sat)
(prod-doc q.sat)
=/ cdoc=what
?~ adoc
?~ pdoc
(buc-doc sat)
?> ?=([%hint *] sat)
(buc-doc q.sat)
?~ pdoc
?> ?=([%hint *] sat)
(buc-doc q.sat)
?> &(?=([%hint *] sat) ?=([%hint *] q.sat))
(buc-doc q.q.sat)
[adoc pdoc cdoc]
::
:: +arm-and-chapter-overviews: returns an overview of a core's contents
::
:: returns an overview for arms which are part of unnamed chapters, and
:: an overview of the named chapters
::
++ arm-and-chapter-overviews
|= =item
^- [overview overview]
?> &(?=([%core *] item) ?=([%core *] sut.item))
=| [adocs=overview cdocs=overview]
=/ tomes ~(tap by q.r.q.sut.item)
|-
?~ tomes
[(sort-overview adocs) (sort-overview cdocs)]
?~ p.i.tomes
:: chapter has no name. add documentation for its arms to arm-docs
=. adocs (weld adocs (tome-as-overview q.i.tomes sut.item))
$(tomes t.tomes)
:: chapter has a name. add to list of chapters
=. cdocs
%+ weld cdocs
^- overview
[%item :(weld "^" name.item "|" (trip -.i.tomes)) p.q.i.tomes]~
$(tomes t.tomes)
::
:: +arms-in-chapter: returns an overview of the arms in a specific chapter
++ arms-in-chapter
|= [sut=type tom=tome]
^- overview
(sort-overview (tome-as-overview tom sut))
::
:: +sort-overview: sort items in an overview in alphabetical order
++ sort-overview
|= ovr=overview
^- overview
%+ sort ovr
|= [lhs=overview-item rhs=overview-item]
(aor (get-overview-name lhs) (get-overview-name rhs))
::
:: +get-overview-name: returns the name of an overview
++ get-overview-name
|= ovr=overview-item
?- ovr
[%header *] ""
[%item *] name.ovr
==
::
:: +tome-as-overview: translate a tome into an overview
++ tome-as-overview
|= [tom=tome sut=type]
^- overview
%+ turn ~(tap by q.tom)
|= ar=(pair term hoon)
:* %item
::TODO make this distinguish between ++ and +$ arms
(weld "+" (trip p.ar))
=/ adoc (arm-doc p.ar (~(play ut sut) q.ar))
=/ pdoc (prod-doc (~(play ut sut) q.ar))
?~ adoc
pdoc
adoc
==
::
:: +item-as-overview: changes an item into an overview
++ item-as-overview
|= uit=(unit item)
~? >> debug %item-as-overview
^- overview
?~ uit ~
=+ itm=(need uit)
?- itm
[%view *] items.itm
::
[%core *]
?~ name.itm
(item-as-overview children.itm)
:- [%item (weld "^" name.itm) docs.itm]
(item-as-overview children.itm)
::
[%arm *]
:_ ~
::TODO make this distinguish between ++ and +$ arms
:* %item (weld "+" name.itm)
?~ adoc.itm
?~ pdoc.itm
cdoc.itm
pdoc.itm
adoc.itm
==
::
[%chapter *]
[%item (weld "|" name.itm) docs.itm]~
::
[%face *]
?~ name.itm
~
[%item (weld "." name.itm) docs.itm]~
==
::
:: +join-items: combines two (unit items) together
++ join-items
|= [lhs=(unit item) rhs=(unit item)]
^- (unit item)
?~ lhs rhs
?~ rhs lhs
`[%view (weld (item-as-overview lhs) (item-as-overview rhs))]
--
:: XX: non-std
++ post-href
|= =post:neo
^- path
?> ?=(@ q.post)
=/ dsk
/neo/hawk/out/std
%+ welp dsk
/[p.post]/[q.post]
::
++ apex
;div
;+
(have v)
==
++ empty
;h4: No build result here
++ fallback
|= vax=vase
;div
;*
=/ arms (sloe p.vax)
%+ turn arms
|= a=term
^- manx
(desc-arm a p.vax)
==
++ over-to-manx
|= ove=overview:dprint
^- manx
;div
;*
%+ turn ove
|= tem=overview-item:dprint
^- manx
(over-item-to-manx tem)
==
++ what-to-manx
|= wat=what
^- manx
?~ wat
;div: Nothing here
;div.what
;h6: {(trip p.u.wat)}
;div
;* ^- (list manx)
%- zing
^- (list (list manx))
%+ turn q.u.wat
|= sec=sect
^- (list manx)
%+ turn sec
|= pic=pica
^- manx
?: p.pic
;div: {(trip q.pic)}
;code.pre: {(trip q.pic)}
==
==
++ over-item-to-manx
|= tem=overview-item:dprint
^- manx
?- -.tem
%header
;div.over-item-head
;+ (what-to-manx doc.tem)
;+ (over-to-manx children.tem)
==
::
%item
;div.over-item-item
;h6: {name.tem}
;+ (what-to-manx doc.tem)
==
==
++ desc-arm
|= [arm=term sut=type]
^- manx
=/ tem (find-item-in-type:dprint ~[arm] sut)
~& tem/tem
(over-to-manx (item-as-overview:dprint tem))
++ have
|= vax=vase
=/ fim=(unit kook:neo)
(mole |.(!<(kook:neo vax)))
?> ?=(^ fim)
;div.p2.fc.g2
;h4: Shrub implementation
;h5: State
;div.frw.g2
;*
%+ turn ~(tap in (curt:neo state:u.fim))
|= =post:neo
^- manx
;button.p2.br1.b1.hover
=hx-get (spud (post-href post))
=hx-target "closest .hawk"
=hx-swap "innerHTML"
; {<p.post>} {<q.post>}
==
==
;h5: Pokes
;div.frw.g2
;*
%+ turn ~(tap in poke:u.fim)
|= =stud:neo
^- manx
;button.p2.br1.b1.hover
=hx-get (spud (post-href %pro stud))
=hx-target "closest .hawk"
=hx-swap "innerHTML"
; {<stud>}
==
==
==
--

View File

@ -13,7 +13,7 @@
++ id
^- tape
%- zing
%+ turn (pout here.bowl)
%+ turn (pout (slag 1 here.bowl))
|= smeg=@ta
%+ weld "--"
(trip smeg)
@ -28,7 +28,7 @@
;
==
;a.p2.b1.hover.loader.br2.bd1.fr.jc.ac.f3
=href "/neo/hawk/sky/settings"
=href "/neo/hawk/{<our.bowl>}/sky/settings"
;span.loaded
;+ settings.feather-icons
==

View File

@ -19,8 +19,7 @@
=type "text"
=name "text"
=value url
=is "atom-input"
=oninput "this.parentNode.nextElementSibling.src = this.value;"
=oninput "$(this).attr('value', this.value); this.parentNode.nextElementSibling.src = this.value;"
;
==
;button.p2.b1

View File

@ -0,0 +1,13 @@
/@ node
/@ add-dep
/- manx-utils
:- [%node %$ %add-dep]
|= nod=node
^- add-dep
=/ mu ~(. manx-utils nod)
::
=/ =pith:neo (pave:neo (rash (vol:mu "pith") stap))
=/ name=term (vol:mu "name")
?> ((sane %tas) name)
[name pith]

View File

@ -0,0 +1,12 @@
/@ node
/@ add-poke
/- manx-utils
:- [%node %$ %add-poke]
|= nod=node
~& nod/nod
^- add-poke
=/ mu ~(. manx-utils nod)
:- (pave:neo (rash (vol:mu "pith") stap))
`@tas`(rash (vol:mu "stud") ;~(pfix cen sym)) :: XX fix

View File

@ -6,4 +6,6 @@
^- circle-diff
=/ s
(slav %p (~(vol manx-utils nod) "ship"))
[%add (malt `(list [ship made:neo])`~[[s [%sig ~ ~]]])]
=/ =made:neo
[%sig `sig/!>(~) ~]
[%add (~(gas by *(map ship made:neo)) [s made] ~)]

View File

@ -0,0 +1,11 @@
/@ node
/@ del-dep
/- manx-utils
:- [%node %$ %del-dep]
|= nod=node
^- del-dep
=/ mu ~(. manx-utils nod)
=/ name=term (vol:mu "name")
?> ((sane %tas) name)
name

View File

@ -8,8 +8,9 @@
=/ mu ~(. manx-utils nod)
=/ code
=/ raw=tape (need (val:mu "code"))
?: =((rear raw) '\0a') (crip (snip raw))
(crip raw)
?: =(0 (lent raw)) (crip raw)
?. =((rear raw) '\0a') (crip raw)
(crip (snip raw))
=/ class (vol:mu "classes")
[code class `(render-udon code)]
++ render-udon

View File

@ -124,7 +124,7 @@
=class "fr ac br1 {color}"
;button
=class "loader p2 tl br1 hover grow {color}"
=hx-post "/neo/hawk/sky?stud=sky-diff"
=hx-post "/neo/hawk/{<our.bowl>}/sky?stud=sky-diff"
=hx-target "find .loading"
=hx-swap "outerHTML"
=head "maximize"
@ -136,7 +136,7 @@
==
;button
=class "loader p2 tl br1 hover {color}"
=hx-post "/neo/hawk/sky?stud=sky-diff"
=hx-post "/neo/hawk/{<our.bowl>}/sky?stud=sky-diff"
=hx-target "find .loading"
=hx-swap "outerHTML"
=head "close"
@ -152,7 +152,7 @@
==
++ new-tab
;button.loader.b2.p2.tc.br1.hover.wfc.s-1
=hx-post "/neo/hawk/sky?stud=sky-diff"
=hx-post "/neo/hawk/{<our.bowl>}/sky?stud=sky-diff"
=hx-target "find .loading"
=hx-swap "outerHTML"
=type "button"

View File

@ -0,0 +1,14 @@
/@ htmx
:- [%tang %$ %htmx]
|= tan=tang
|= =bowl:neo
=/ =wall (zing (turn tan |=(t=tank (~(win re t) [0 80]))))
=/ =tape (zing (join "\0a" wall))
;textarea#input.wf.p2.pre.mono.grow
=name "text"
=placeholder "code"
=spellcheck "false"
=value tape
=oninput "this.setAttribute('value', this.value);"
; {tape}
==

View File

@ -0,0 +1,7 @@
:- [%vase %$ %htmx]
|= vax=vase
|= =bowl:neo
;div.pre.mono.p2
;+
;/ (of-wall:format (~(win re (sell vax)) 0 80))
==

View File

@ -0,0 +1,108 @@
/@ accel-conf
=>
|%
++ card card:neo
++ build
|= [=bowl:neo conf=accel-conf]
^- (quip card pail:neo)
:_ accel-conf/!>(conf)
=/ =term
`@tas`(cat 3 'accel-' (scot %t (spat (pout (snip here.bowl)))))
=/ =pith:neo
#/[p/our.bowl]/cod/std/out/imp/[term]
=; =vase
[pith %make %ford-riff `vase/vase ~]^~
=- !>(-)
=> [..zuse neo=neo og=bowl conf=conf]
=>
|%
++ lift-lore
|= =lore:neo
^- vase
q.pail:(~(got of:neo lore) ~)
::
++ get-prelude
|= =bowl:neo
^- vase
%+ with-faces:ford:neo (slop !>(neo) !>(..zuse))
:- bowl/!>(bowl)
%+ turn ~(tap by deps.bowl)
|= [=term =pith:neo =lore:neo]
^- [^term vase]
[term (lift-lore lore)]
::
++ produce
|= =bowl:neo
^- pail:neo
=/ res=(each vase tang)
(mule |.((slap (get-prelude bowl) (ream hoon.conf))))
?: ?=(%& -.res)
vase/p.res
tang/!>(p.res)
--
^- kook:neo
|%
++ state any/~
++ poke (sy %rely ~)
++ kids *kids:neo
++ deps
%- ~(gas by *band:neo)
%+ turn ~(tap in ~(key by crew.conf))
|= =term
^- [_term fief:neo]
[term req=& [any/~ ~] ~]
++ form
^- form:neo
|_ [=bowl:neo =aeon:neo =pail:neo]
++ poke
|= [=stud:neo vax=vase]
^- (quip card:neo pail:neo)
=/ new=pail:neo (produce bowl)
?: =(new pail)
`pail
:_ pail
%+ turn ~(tap by poke.conf)
|= [=pith:neo =stud:neo]
[pith %poke [stud q.pail]]
::
++ init
|= pal=(unit pail:neo)
`(produce bowl)
--
--
--
^- kook:neo
|%
++ state pro/%accel-conf
++ poke (sy %hoon %add-dep %del-dep %accel-conf %ack %add-poke %del-poke ~)
++ kids *kids:neo
++ deps *deps:neo
++ form
^- form:neo
|_ [=bowl:neo =aeon:neo =pail:neo]
+* sta !<(conf=accel-conf q.pail)
++ poke
|= [=stud:neo vax=vase]
^- (quip card:neo pail:neo)
=+ !<(conf=accel-conf q.pail)
%- (slog leaf/"have {<stud>}," (sell vax) ~)
=. conf
?+ stud !!
%hoon conf(ready |, hoon !<(@t vax))
%add-dep conf(ready |, crew (~(put by crew.conf) !<([term pith] vax)))
%del-dep conf(ready |, crew (~(del by crew.conf) !<(term vax)))
%del-poke conf(ready |, poke (~(del by poke.conf) !<(pith:neo vax)))
%add-poke conf(ready |, poke (~(put by poke.conf) !<([pith:neo stud:neo] vax)))
%accel-conf !<(accel-conf vax)
%ack conf(ready &)
==
?: ready.conf
`accel-conf/!>(conf)
(build bowl conf)
++ init
|= old=(unit pail:neo)
^- (quip card:neo pail:neo)
=+ !<(conf=accel-conf q:(need old))
(build bowl conf)
--
--

View File

@ -1,34 +1,58 @@
/@ accel
/@ accel-diff
/@ accel-conf
::
=>
|%
+$ kind ?(%in %out %both)
++ make-cells
|= [=bowl:neo colstart=@ud colend=@ud rowstart=@ud rowend=@ud]
|= [=bowl:neo colstart=@ud colend=@ud rowstart=@ud rowend=@ud =kind]
^- (list card:neo)
%- zing
%+ turn (gulf colstart colend)
|= col=@ud
^- (list card:neo)
%- zing
%+ turn (gulf rowstart rowend)
|= row=@ud
[(welp here.bowl #/[ud/col]/[ud/row]) %make %accel-cell `accel-cell/!>(['~' ~ ~ ~ ~]) ~]
^- (list card:neo)
(make-cell bowl row col *accel-conf kind)
::
++ make-cell
|= [=bowl:neo row=@ud col=@ud conf=accel-conf =kind]
^- (list card:neo)
=/ =pith:neo (welp here.bowl #/[ud/col]/[ud/row])
=/ =stud:neo
`@tas`(cat 3 'accel-' (scot %t (spat (pout pith))))
=; caz=(list card:neo)
?- kind
%in (snag 0 caz)^~
%out (snag 1 caz)^~
%both caz
==
:~ [`pith:neo`(snoc pith `@tas`%in) %make %accel-conf `accel-conf/!>(conf) ~]
[`pith:neo`(snoc pith `@tas`%out) %make stud ~ crew.conf]
==
--
::
^- kook:neo
|%
++ state pro/%accel
++ poke (sy %accel-diff ~)
++ poke (sy %accel-diff %gift ~)
++ kids
:- ~
:- %y
%- ~(gas by *lads:neo)
:~ :- [|/%ud |/%ud |]
[pro/%accel-cell (sy %sig ~)]
:~ :- [|/%ud |/%ud &/%in |]
[pro/%accel-conf ~]
::
:- [|/%ud |/%ud &/%out |]
[any/~ ~]
==
++ deps *deps:neo
++ form
^- form:neo
::|_ [=bowl:neo =ever:neo sta=vase *]
|_ [=bowl:neo =aeon:neo =pail:neo]
++ init
|= old=(unit pail:neo)
@ -36,44 +60,54 @@
=/ width 10
=/ height 10
:_ accel/!>([width height])
(make-cells bowl 1 width 1 height)
(make-cells bowl 1 width 1 height %in)
::
++ poke
|= [=stud:neo vax=vase]
^- (quip card:neo pail:neo)
?> =(%accel-diff stud)
=/ state !<(accel q.pail)
=/ poke !<(accel-diff vax)
?> =(our ship.src):bowl
?- -.poke
%inc-width
=/ new (add 1 width.state)
:_ accel/!>([new height.state])
(make-cells bowl new new 1 height.state)
::
%inc-height
=/ new (add 1 height.state)
:_ accel/!>([width.state new])
(make-cells bowl 1 width.state new new)
::
%new
:_ accel/q.pail
=; conf
:~ :- (welp here.bowl ~[[ud/row.poke] [ud/column.poke]])
:* %make
%accel-cell
`accel-cell/!>([text.poke ~ refa.poke refb.poke target.poke])
conf
==
==
:: there has to be a more elegant way to do this
?~ refa.poke
?~ refb.poke
~
(malt ~[[%b u.refb.poke]])
?~ refb.poke
(malt ~[[%a u.refa.poke]])
(malt `(list [term pith])`~[[%a u.refa.poke] [%b u.refb.poke]])
==
|^ ^- (quip card:neo pail:neo)
=^ cards=(list card:neo) state
?+ stud !!
%accel-diff (on-diff !<(accel-diff vax))
%gift (on-gift !<(gift:neo vax))
==
[cards accel/!>(state)]
++ on-diff
|= poke=accel-diff
?> =(our ship.src):bowl
?+ -.poke !!
%inc-width
=/ new (add 1 width.state)
=. width.state +(width.state)
:_ state
=, state
(make-cells bowl width width 1 height %in)
::
%inc-height
=/ new (add 1 height.state)
=. height.state +(height.state)
:_ state
=, state
(make-cells bowl 1 width new new %in)
==
++ on-gift
|= =gift:neo
^- (quip card:neo _state)
:_ state
=/ changes ~(tap by ~(tar of:neo gift))
%- zing
%+ turn changes
|= [=road:neo =loot:neo]
^- (list card:neo)
?. ?=([[%ud col=@] [%ud row=@ud] %in ~] road)
~
?. (~(has of:neo kids.bowl) road)
~
=+ !<(conf=accel-conf q.pail:(~(got of:neo kids.bowl) road))
?. ready.conf
~
(make-cell bowl row.road col.road conf %out)
--
--
--

View File

@ -2,9 +2,9 @@
/@ diff=circle-diff
^- kook:neo
|%
++ state pro/%sig
++ state pro/%circle
++ poke (sy %circle-diff ~)
++ kids
++ kids
:+ ~ %y
%- ~(gas by *lads:neo)
:~ [[|/%p |] pro/%sig ~]
@ -19,7 +19,7 @@
=+ !<(=diff vax)
:_ pail
?- -.diff
%add
%add
%+ turn ~(tap by p.diff)
|= [=ship =made:neo]
[(snoc here.bowl p/ship) %make made]
@ -31,6 +31,6 @@
==
++ init
|= pal=(unit pail:neo)
`sig/!>(~)
`circle/!>(~)
--
--

View File

@ -1,5 +1,16 @@
/@ folder
/@ folder-diff
=>
|%
++ default-pails
%- malt
^- (list [stud:neo pail:neo])
:~
[%iframe iframe/!>('')]
[%txt txt/!>('')]
[%sail sail/!>(['' '' ~])]
==
--
^- kook:neo
|%
++ state pro/%folder
@ -26,7 +37,7 @@
?- -.poke
%make
:_ folder/!>([name.poke this])
:~ [(snoc here.bowl name.poke) %make stud.poke ~ ~]
:~ [(snoc here.bowl name.poke) %make stud.poke (~(get by default-pails) stud.poke) ~]
==
::
%tomb

View File

@ -1,174 +1,189 @@
/@ htmx
/@ htmx-type=htmx
/- feather-icons
/- serv=server
/- serv=sky-server
/> htmx
/< node
=>
|%
++ main
^- curb:neo
[%or rol/[%ui-main pro/%htmx] pro/%htmx ~]
:: rol/[%ui-main pro/%htmx]
++ kids-curb
^- curb:neo
any/~
:: rol/[%ui-list pro/%htmx]
++ manx-to-octs
|= man=manx
(as-octt:mimes:html (en-xml:html man))
::
++ render
|= [main=manx kids=marl]
;div
;+ main
|%
++ manx-to-octs
|= man=manx
(as-octt:mimes:html (en-xml:html man))
++ eyre-cards
|= [eyre-id=@ta =bowl:neo status=@ud =manx]
^- (list card:neo)
=/ =pith:neo #/[p/our.bowl]/$/eyre
=/ head=sign:eyre:neo [eyre-id %head [status [['content-type' 'text/html'] ~]]]
=/ data=sign:eyre:neo [eyre-id %data `(manx-to-octs manx)]
=/ done=sign:eyre:neo [eyre-id %done ~]
:~ [pith %poke eyre-sign/!>(head)]
[pith %poke eyre-sign/!>(data)]
[pith %poke eyre-sign/!>(done)]
[here.bowl %cull ~]
==
++ default-refresher
|= =pith
=/ tath (en-tape:pith:neo pith)
;div
=hx-get "/neo/hawk{tath}"
=hx-target "closest .hawk"
=hx-select ".hawk"
=hx-trigger "load once"
=hx-swap "outerHTML"
;
==
++ hawk
|_ [here=pith main=manx raw=manx has-app=?]
++ id *@da
++ our-tape
=/ f (snag 0 here)
?@(f (trip f) (scow f))
++ idt `tape`(zing (scan +:(scow %da id) (most dot (star ;~(less dot prn)))))
++ slot 0 :: XX fix sky positional saving
++ lift
^- manx
;div.hawk.fc.wf.hf
=id "hawk-{idt}"
=hx-params "id,slot"
=hx-vals "\{\"id\": \"{<id>}\", \"slot\": \"{<slot>}\"}"
;+ header
;div
;* kids
=class "raw p-page wf hf b0 scroll-y scroll-x {(trip ?:(has-app 'hidden' ''))}"
;+ raw
==
;div
=class "rendered wf hf b0 scroll-y scroll-x {(trip ?:(has-app '' 'hidden'))}"
=id "hawk-rendered-{idt}"
=morph-retain "class"
;+ main
==
==
++ hawk
|_ [here=pith main=manx raw=manx]
++ id *@da
++ idt `tape`(zing (scan +:(scow %da id) (most dot (star ;~(less dot prn)))))
++ has-app %.y :: XX : switch on it. make it real. etc
++ lift
;div.hawk.fc.wf.hf
=id "hawk-{idt}"
=hx-params "id,slot"
=hx-vals "\{\"id\": \"{<id>}\", \"slot\": \"{<0>}\"}"
;+ header
::;+ raw
;div
=class "rendered wf hf b0 scroll-y scroll-x {(trip ?:(has-app '' 'hidden'))}"
=id "hawk-rendered-{idt}"
=morph-retain "class"
;+ main
==
++ header
;header.b2.p1.frw.g1.ac
=id "hawk-header-{idt}"
=style "border: 2px solid var(--b2);"
;button
=class "p1 hover b2 br1 bd0 {(trip ?:(has-app '' 'toggled'))}"
=onclick
"""
$(this).toggleClass('toggled');
$(this).closest('.hawk').find('.raw').toggleClass('hidden');
$(this).closest('.hawk').find('.rendered').toggleClass('hidden');
$(this).closest('header').children('.hawk-tog').toggleClass('hidden');
"""
;+ outline:feather-icons
==
++ header
;header.b2.p1.frw.g1.ac
=id "hawk-header-{idt}"
=style "border: 2px solid var(--b2);"
;button
=class "p1 hover b2 br1 bd0 {(trip ?:(has-app '' 'toggled'))}"
=onclick
"""
$(this).toggleClass('toggled');
$(this).closest('.hawk').find('.raw').toggleClass('hidden');
$(this).closest('.hawk').find('.rendered').toggleClass('hidden');
$(this).closest('header').children('.hawk-tog').toggleClass('hidden');
"""
;+ outline:feather-icons
==
;div
=class "hawk-tog frw g1 ac grow {(trip ?:(has-app '' 'hidden'))}"
;*
=< p
%^ spin here
0
|= [=iota a=@]
:_ +(a)
;div.fr.ac.g1
;div
=class "hawk-tog frw g1 ac grow {(trip ?:(has-app '' 'hidden'))}"
;*
=< p
%^ spin here
0
|= [=iota a=@]
:_ +(a)
;div.fr.ac.g1
=style "height: 2rem;"
;div.f4.s-1: >
;a.hover.b2.br1.p-1.s0.loader.fc.ac.jc
=style "height: 2rem;"
;div.f4.s-1: >
;a.hover.b2.br1.p-1.s0.loader.fc.ac.jc
=style "height: 2rem;"
=hx-vals "\{\"id\": \"{<id>}\", \"slot\": \"{<slot>}\"}"
=href "/neo/hawk{(en-tape:pith:neo (scag +(a) here))}"
;span.loaded
;+ ;/
?: =(a 0) "/"
(trip ?@(iota iota (scot iota)))
==
;span.loading
;+ loading.feather-icons
==
=hx-vals "\{\"id\": \"{<id>}\", \"slot\": \"{<slot>}\"}"
=href "/neo/hawk{(en-tape:pith:neo (scag +(a) here))}"
;span.loaded
;+ ;/
?: =(a 0) "/"
(trip ?@(iota iota (scot iota)))
==
==
;div.grow;
==
;form
=class "hawk-tog grow fr m0 relative {(trip ?:(has-app 'hidden' ''))}"
=style "height: 2rem;"
=hx-get "/neo/hawk"
=hx-target "closest .hawk"
;div.absolute
=style "top: 0.5rem; right: 0.5rem;"
;div.loader
;div.loaded(style "opacity: 0"): ---
;div.loading
;+ loading:feather-icons
;span.loading
;+ loading.feather-icons
==
==
==
;input.p-1.br1.b1.wf.s0.loaded.grow.bd0
=style "margin-left: 5px;"
=type "text"
=value (en-tape:pith:neo here)
=oninput
"""
$(this).attr('value', this.value);
$(this).parent().attr('hx-get', '/neo/hawk'+this.value);
htmx.process(document.body);
"""
;
;div.grow;
==
;form
=class "hawk-tog grow fr m0 relative {(trip ?:(has-app 'hidden' ''))}"
=style "height: 2rem;"
=hx-get "/neo/hawk"
=hx-target "closest .hawk"
;div.absolute
=style "top: 0.5rem; right: 0.5rem;"
;div.loader
;div.loaded(style "opacity: 0"): ---
;div.loading
;+ loading:feather-icons
==
==
==
;div.fr.ac.jc.g1.hawk-actions
=id "hawk-actions-{idt}"
;button.p1.hover.b2.br1.loader.s-1
=id "hawk-slide-up-{idt}"
=hx-post "/neo/hawk/sky?stud=sky-diff"
=hx-target "find .loading"
=hx-swap "outerHTML"
=head "slide-up"
=hawk-slot "{<slot>}"
;span.loaded
;+ chevron-left:feather-icons
==
;span.loading
;+ loading.feather-icons
==
==
;button.p1.hover.b2.br1.loader.s-1
=id "hawk-slide-down-{idt}"
=hx-post "/neo/hawk/sky?stud=sky-diff"
=hx-target "find .loading"
=hx-swap "outerHTML"
=head "slide-down"
=hawk-slot "{<slot>}"
;span.loaded
;+ chevron-right:feather-icons
==
;span.loading
;+ loading.feather-icons
==
==
;button.p1.hover.b2.br1.loader.s-1
=id "hawk-close-{idt}"
=hx-post "/neo/hawk/sky?stud=sky-diff"
=hx-target "find .loading"
=hx-swap "outerHTML"
=head "minimize"
=hawk-slot "{<slot>}"
;span.loaded
;+ minimize:feather-icons
==
;span.loading
;+ loading.feather-icons
==
==
;style
;+ ;/ %- trip
'''
@media(max-width: 900px) {
.hawk-actions {
display: none !important;
}
}
'''
==
;input.p-1.br1.b1.wf.s0.loaded.grow.bd0
=style "margin-left: 5px;"
=type "text"
=value (en-tape:pith:neo here)
=oninput
"""
$(this).attr('value', this.value);
$(this).parent().attr('hx-get', '/neo/hawk'+this.value);
htmx.process(document.body);
"""
;
==
==
--
;div.fr.ac.jc.g1.hawk-actions
=id "hawk-actions-{idt}"
;button.p1.hover.b2.br1.loader.s-1
=id "hawk-slide-up-{idt}"
=hx-post "/neo/hawk/{our-tape}/sky?stud=sky-diff"
=hx-target "find .loading"
=hx-swap "outerHTML"
=head "slide-up"
=hawk-slot "{<slot>}"
;span.loaded
;+ chevron-left:feather-icons
==
;span.loading
;+ loading.feather-icons
==
==
;button.p1.hover.b2.br1.loader.s-1
=id "hawk-slide-down-{idt}"
=hx-post "/neo/hawk/{our-tape}/sky?stud=sky-diff"
=hx-target "find .loading"
=hx-swap "outerHTML"
=head "slide-down"
=hawk-slot "{<slot>}"
;span.loaded
;+ chevron-right:feather-icons
==
;span.loading
;+ loading.feather-icons
==
==
;button.p1.hover.b2.br1.loader.s-1
=id "hawk-close-{idt}"
=hx-post "/neo/hawk/{our-tape}/sky?stud=sky-diff"
=hx-target "find .loading"
=hx-swap "outerHTML"
=head "minimize"
=hawk-slot "{<slot>}"
;span.loaded
;+ minimize:feather-icons
==
;span.loading
;+ loading.feather-icons
==
==
;style
;+ ;/ %- trip
'''
@media(max-width: 900px) {
.hawk-actions {
display: none !important;
}
}
'''
==
==
==
--
--
^- kook:neo
|%
++ state pro/%eyre-task
@ -183,12 +198,12 @@
^- fief:neo
:- req=|
^- quay:neo
:- [main ~]
:- [[%or rol/[%ui-main pro/%htmx] pro/%htmx ~] ~]
^- (unit port:neo)
:+ ~ %y
%- ~(gas by *lads:neo)
:~ :- &
`lash:neo`[kids-curb ~]
`lash:neo`[[%or pro/%htmx any/~ ~] ~]
==
==
::
@ -200,33 +215,99 @@
`pail
++ init
|= pal=(unit pail:neo)
^- (quip card:neo pail:neo)
=/ [=stud:neo =vase] (need pal)
=+ !<([eyre-id=@ta req=inbound-request:eyre] vase)
:_ [stud vase]
=/ =pith:neo #/[p/our.bowl]/$/eyre
=; =manx
=/ head=sign:eyre:neo [eyre-id %head [200 [['content-type' 'text/html'] ~]]]
=/ data=sign:eyre:neo [eyre-id %data `(manx-to-octs manx)]
=/ done=sign:eyre:neo [eyre-id %done ~]
:~ [pith %poke eyre-sign/!>(head)]
[pith %poke eyre-sign/!>(data)]
[pith %poke eyre-sign/!>(done)]
[here.bowl %cull ~]
==
::XX revive when auth
::?. authenticated.req
:: %: eyre-cards
:: eyre-id
:: bowl
:: 403
:: ;div: 403
:: ==
?~ src=(~(get by deps.bowl) %src)
;div: 404
=/ root=idea:neo (~(got of:neo q.u.src) /)
?> =(%htmx p.pail.root)
=/ bol *bowl:neo
=. here.bol p.u.src
=. our.bol our.bowl
=. now.bol now.bowl
=. eny.bol eny.bowl
=. kids.bol q.u.src
:: XX src.bowl
=/ main (!<(htmx q.pail.root) bol)
=/ raw *manx
~(lift hawk here.bol main raw)
=/ main=manx
;div.wf.hf.fc.jc.ac: nothing here
=/ raw
;div.wf.hf.fc.jc.ac: raw view
%: eyre-cards
eyre-id
bowl
200
~(lift hawk #/[p/our.bowl] main raw |)
==
=/ here p.u.src
^- (list card:neo)
?+ method.request.req ~|(%unsupported-http-method !!)
%'GET'
=/ root=idea:neo (~(got of:neo q.u.src) /)
?> =(%htmx p.pail.root)
=/ bol *bowl:neo
=. here.bol here
=. our.bol our.bowl
=. now.bol now.bowl
=. eny.bol eny.bowl
=. kids.bol q.u.src
:: XX src.bowl
=/ main (!<(htmx-type q.pail.root) bol)
=/ raw
;div.wf.hf.fc.jc.ac: raw view
%: eyre-cards
eyre-id
bowl
200
~(lift hawk here.bol main raw &)
==
::
%'POST'
=/ purl (parse-url:serv request.req)
=/ body (parse-body:serv request.req)
=/ poke-stud
^- stud:neo
~| %no-stud-specified
(~(got by pam.purl) 'stud')
=/ mul (mule |.((node [poke-stud body])))
?- -.mul
%.n
%: eyre-cards
eyre-id
bowl
400
;div
;*
%+ turn (tang p.mul)
|= =tank
;div: {(of-wall:format (~(win re tank) 0 55))}
==
==
::
%.y
=/ =pail:neo [poke-stud p.mul]
=/ bol *bowl:neo
=. here.bol here
=. our.bol our.bowl
=. now.bol now.bowl
=. eny.bol eny.bowl
=/ =manx
?~ converter=(mole |.((htmx pail)))
(default-refresher here)
=/ mul
%- mule
|.((u.converter bol))
?- -.mul
%.y p.mul
%.n ;div: error
==
:- [here %poke pail]
%: eyre-cards
eyre-id
bowl
200
manx
==
==
==
--
--

View File

@ -1,8 +1,8 @@
/@ eyre-reqs
/- serv=server
/- serv=sky-server
^- kook:neo
|%
++ state pro/%eyre-reqs
++ state pro/%sig
++ poke (sy %eyre-task ~)
++ kids
:+ ~ %y
@ -21,25 +21,12 @@
%eyre-task
=+ !<(=task:eyre:neo vax)
=/ [eyre-id=@ta req=inbound-request:eyre] task
=/ lin (parse-request-line:serv url.request.req)
=/ inner=pith:neo (pave:neo (slag 2 site.lin))
?. ?=([[%p @] *] inner)
=/ =manx
;div: 400
=/ =pith:neo #/[p/our.bowl]/$/eyre
=/ head=sign:eyre:neo [eyre-id %head [200 [['content-type' 'text/html'] ~]]]
=/ data=sign:eyre:neo [eyre-id %data `(manx-to-octs:serv manx)]
=/ done=sign:eyre:neo [eyre-id %done ~]
:_ sig/!>(~)
:~ [pith %poke eyre-sign/!>(head)]
[pith %poke eyre-sign/!>(data)]
[pith %poke eyre-sign/!>(done)]
[here.bowl %cull ~]
==
=/ args (~(gas by *(map @t @t)) args.lin)
=/ purl (parse-url:serv request.req)
=/ inner=pith:neo (pave:neo pax.purl)
=/ =crew:neo (~(gas by *crew:neo) src/inner ~)
=/ =made:neo [%hawk-eyre-handler `[stud vax] crew]
:_ sig/!>(~)
:~ [(welp here.bowl #/[uv/eny.bowl]) %make %hawk-eyre-handler `[stud vax] crew]
:~ [(welp here.bowl #/[uv/eny.bowl]) %make made]
==
==
++ init
@ -52,4 +39,3 @@
==
--
--

View File

@ -16,7 +16,6 @@
[#/[p/our.bowl]/home/tasks %make %task `task/!>(['' | ~]) ~]
[#/[p/our.bowl]/home/sail %make %sail `sail/!>(['' 'prose p3' ~]) ~]
[#/[p/our.bowl]/home/accel %make %accel ~ ~]
[#/[p/our.bowl]/home/iframes/wiki %make %iframe `iframe/!>('https://docs.urbit.org') ~]
[#/[p/our.bowl]/home/circle %make %circle ~ ~]
[#/[p/our.bowl]/home/files %make %folder ~ ~]
[#/[p/our.bowl]/home/planner %make %planner ~ ~]

View File

@ -1,9 +1,6 @@
/@ htmx
/- serv=server
/- feather-icons
/* date-now
/* atom-input
/* multiline-input
/* a-i-r
/* feather
/* reset
@ -12,245 +9,245 @@
/* htmx-js
/* htmx-response-targets
/* htmx-idiomorph
=>
=<
^- kook:neo
|%
++ main
^- curb:neo
[%or rol/[%ui-main pro/%htmx] pro/%htmx ~]
:: rol/[%ui-main pro/%htmx]
++ kids-curb
^- curb:neo
any/~
:: rol/[%ui-list pro/%htmx]
++ manx-to-octs
|= man=manx
%- as-octt:mimes:html
%+ welp "<!DOCTYPE html>"
(en-xml:html man)
++ state pro/%eyre-task
++ poke *(set stud:neo)
++ kids
:+ ~ %y
%- ~(gas by *lads:neo)
~
++ deps
%- ~(gas by *band:neo)
:~ :- %src
^- fief:neo
:- req=|
^- quay:neo
:- [pro/%htmx ~]
^- (unit port:neo)
:+ ~ %y
%- ~(gas by *lads:neo)
:~ :- &
`lash:neo`[any/~ ~]
==
==
::
++ render
|= [main=manx kids=marl]
;div
;+ main
;div
;* kids
==
==
++ icon-url
^~
%- trip
%^ cat
3
'data:image/png;base64,'
%- ~(en base64:mimes:html & |)
(as-octs:mimes:html hawk-icon)
++ favicon
^~
=; m m(a.g [[%href icon-url] a.g.m])
^- manx
;link
=rel "icon"
=type "image/png"
;
==
++ manifest-url
^~
%- trip
%^ cat
3
'data:application/json;utf-8,'
%- en:json:html
%- pairs:enjs:format
:~
['name' s+'sky']
['description' s+'an urbit namespace viewer']
['start_url' s+'http://localhost/neo/sky'] :: XX
['display' s+'standalone']
['background_color' s+'black']
:+ 'icons' %a
:~
%- pairs:enjs:format
:~
['src' s+(crip icon-url)]
['sizes' s+'196x196']
['type' s+'image/png']
++ form
|_ [=bowl:neo =aeon:neo =pail:neo]
++ poke
|= [=stud:neo vax=vase]
^- (quip card:neo pail:neo)
`pail
++ init
|= pal=(unit pail:neo)
=/ [=stud:neo =vase] (need pal)
=+ !<([eyre-id=@ta req=inbound-request:eyre] vase)
:_ [stud vase]
=/ =pith:neo #/[p/our.bowl]/$/eyre
=; =manx
=/ head=sign:eyre:neo [eyre-id %head [200 [['content-type' 'text/html'] ~]]]
=/ data=sign:eyre:neo [eyre-id %data `(manx-to-octs manx)]
=/ done=sign:eyre:neo [eyre-id %done ~]
:~ [pith %poke eyre-sign/!>(head)]
[pith %poke eyre-sign/!>(data)]
[pith %poke eyre-sign/!>(done)]
[here.bowl %cull ~]
==
==
==
++ manifest
^~
=; m m(a.g [[%href manifest-url] a.g.m])
^- manx
;link
=rel "manifest"
;
==
++ htmx-extensions
:: htmx extension which encodes the request
:: as the serialized HTML of the calling element
%- trip
'''
htmx.defineExtension('html-enc', {
onEvent: function (name, evt) {
if (name === "htmx:configRequest") {
evt.detail.headers['Content-Type'] = "text/html";
}
},
encodeParameters : function(xhr, parameters, elt) {
xhr.overrideMimeType('text/html');
let xmls = new XMLSerializer();
return (xmls.serializeToString(elt));
}
});
Idiomorph.defaults.ignoreActive = true;
Idiomorph.defaults.callbacks.beforeAttributeUpdated = (name, node, type) => {
if (node.hasAttribute('morph-retain')) {
let ribs = node.getAttribute('morph-retain').split(',').map(t => t.trim());
if (ribs.includes(name)) {
return false;
}
}
}
Idiomorph.defaults.callbacks.beforeNodeMorphed = (oldNode, newNode) => {
if (oldNode?.nodeName !== "#text") {
if (oldNode.hasAttribute('morph-no-swap') && oldNode.id === newNode.id) {
return false;
}
else if (
newNode.hasAttribute('morph-if-class') &&
!oldNode.classList.contains(newNode.getAttribute('morph-if-class'))
) {
return false;
}
}
}
'''
::
++ lift
|= in=manx
^- manx
;html
;head
;meta(charset "UTF-8");
;title: s k y
;script: {(trip jquery)}
;script: {(trip htmx-js)}
;script: {(trip htmx-response-targets)}
;script: {(trip htmx-idiomorph)}
;script: {htmx-extensions}
;meta
=name "viewport"
=content
"""
width=device-width,
initial-scale=1.0,
maximum-scale=1.0
"""
;
==
;meta
=name "htmx-config"
=content (trip '{"ignoreTitle":"true"}')
;
==
::;style
:: ;+ ;/ %- trip
:: '''
:: @font-face {
:: font-family: 'Urbit Sans';
:: src: url("https://media.urbit.org/fonts/UrbitSans/UrbitSansVFWeb-Regular.woff2") format("woff2");
:: font-style: normal;
:: font-weight: 100 700;
:: }
:: '''
::==
;style: {(trip reset)}
;style: {(trip feather)}
;script
;+ ;/
"""
window.log=function()\{if(this.console)\{console.log(Array.prototype.slice.call(arguments));}};
jQuery.fn.log=function (msg)\{console.log(msg, this); return this;};
jQuery.fn.emit=function (name)\{(this[0]).dispatchEvent(new Event(name, \{ bubbles: true, cancelable: true, composed: true })); return this;};
"""
==
;script: {(trip a-i-r)}
;+ favicon
;+ manifest
==
;body
=hx-ext "html-enc,response-targets,morph"
=hx-swap "innerHTML"
=hx-boost "true"
=hx-history "false"
=hx-replace-url "/neo/sky"
=hx-target "closest .hawk"
=style
"""
background-color: var(--b1);
background-image: var(--sky-bg-url);
background-size: var(--sky-bg-size);
background-repeat: var(--sky-bg-repeat);
"""
;+ in
==
==
?~ src=(~(get by deps.bowl) %src)
;div: 404
=/ root=idea:neo (~(got of:neo q.u.src) /)
?> =(%htmx p.pail.root)
=/ bol *bowl:neo
=. here.bol p.u.src
=. our.bol our.bowl
=. now.bol now.bowl
=. eny.bol eny.bowl
=. kids.bol q.u.src
:: XX src.bowl
(lift (!<(htmx q.pail.root) bol))
--
--
^- kook:neo
|%
++ state pro/%eyre-task
++ poke *(set stud:neo)
++ kids
:+ ~ %y
%- ~(gas by *lads:neo)
~
++ deps
%- ~(gas by *band:neo)
:~ :- %src
^- fief:neo
:- req=|
^- quay:neo
:- [main ~]
^- (unit port:neo)
:+ ~ %y
%- ~(gas by *lads:neo)
:~ :- &
`lash:neo`[kids-curb ~]
==
==
++ manx-to-octs
|= man=manx
%- as-octt:mimes:html
%+ welp "<!DOCTYPE html>"
(en-xml:html man)
::
++ form
|_ [=bowl:neo =aeon:neo =pail:neo]
++ poke
|= [=stud:neo vax=vase]
^- (quip card:neo pail:neo)
`pail
++ init
|= pal=(unit pail:neo)
=/ [=stud:neo =vase] (need pal)
=+ !<([eyre-id=@ta req=inbound-request:eyre] vase)
:_ [stud vase]
=/ =pith:neo #/[p/our.bowl]/$/eyre
=; =manx
=/ head=sign:eyre:neo [eyre-id %head [200 [['content-type' 'text/html'] ~]]]
=/ data=sign:eyre:neo [eyre-id %data `(manx-to-octs manx)]
=/ done=sign:eyre:neo [eyre-id %done ~]
:~ [pith %poke eyre-sign/!>(head)]
[pith %poke eyre-sign/!>(data)]
[pith %poke eyre-sign/!>(done)]
[here.bowl %cull ~]
++ icon-url
^~
%- trip
%^ cat
3
'data:image/png;base64,'
%- ~(en base64:mimes:html & |)
(as-octs:mimes:html hawk-icon)
++ favicon
^~
=; m m(a.g [[%href icon-url] a.g.m])
^- manx
;link
=rel "icon"
=type "image/png"
;
==
++ manifest-url
^~
%- trip
%^ cat
3
'data:application/json;utf-8,'
%- en:json:html
%- pairs:enjs:format
:~
['name' s+'sky']
['description' s+'an urbit namespace viewer']
['start_url' s+'http://localhost/neo/sky'] :: XX
['display' s+'standalone']
['background_color' s+'black']
:+ 'icons' %a
:~
%- pairs:enjs:format
:~
['src' s+(crip icon-url)]
['sizes' s+'196x196']
['type' s+'image/png']
==
?~ src=(~(get by deps.bowl) %src)
;div: 404
=/ root=idea:neo (~(got of:neo q.u.src) /)
?> =(%htmx p.pail.root)
=/ bol *bowl:neo
=. here.bol p.u.src
=. our.bol our.bowl
=. now.bol now.bowl
=. eny.bol eny.bowl
=. kids.bol q.u.src
:: XX src.bowl
(lift (!<(htmx q.pail.root) bol))
--
==
==
++ manifest
^~
=; m m(a.g [[%href manifest-url] a.g.m])
^- manx
;link
=rel "manifest"
;
==
++ htmx-extensions
:: htmx extension which encodes the request
:: as the serialized HTML of the calling element
%- trip
'''
htmx.defineExtension('html-enc', {
onEvent: function (name, evt) {
if (name === "htmx:configRequest") {
evt.detail.headers['Content-Type'] = "text/html";
}
},
encodeParameters : function(xhr, parameters, elt) {
xhr.overrideMimeType('text/html');
let xmls = new XMLSerializer();
return (xmls.serializeToString(elt));
}
});
Idiomorph.defaults.ignoreActive = true;
Idiomorph.defaults.callbacks.beforeAttributeUpdated = (name, node, type) => {
if (node.hasAttribute('morph-retain')) {
let ribs = node.getAttribute('morph-retain').split(',').map(t => t.trim());
if (ribs.includes(name)) {
return false;
}
}
}
Idiomorph.defaults.callbacks.beforeNodeMorphed = (oldNode, newNode) => {
if (oldNode?.nodeName !== "#text") {
if (oldNode.hasAttribute('morph-no-swap') && oldNode.id === newNode.id) {
return false;
}
else if (
newNode.hasAttribute('morph-if-class') &&
!oldNode.classList.contains(newNode.getAttribute('morph-if-class'))
) {
return false;
}
}
}
'''
::
++ lift
|= in=manx
^- manx
;html
;head
;meta(charset "UTF-8");
;title: s k y
;script: {(trip jquery)}
;script: {(trip htmx-js)}
;script: {(trip htmx-response-targets)}
;script: {(trip htmx-idiomorph)}
;script: {htmx-extensions}
;meta
=name "viewport"
=content
"""
width=device-width,
initial-scale=1.0,
maximum-scale=1.0
"""
;
==
;meta
=name "htmx-config"
=content (trip '{"ignoreTitle":"true"}')
;
==
::;style
:: ;+ ;/ %- trip
:: '''
:: @font-face {
:: font-family: 'Urbit Sans';
:: src: url("https://media.urbit.org/fonts/UrbitSans/UrbitSansVFWeb-Regular.woff2") format("woff2");
:: font-style: normal;
:: font-weight: 100 700;
:: }
:: '''
::==
;style: {(trip reset)}
;style: {(trip feather)}
;script
;+ ;/ %- trip
'''
window.log = function() {
if (this.console) {
console.log(Array.prototype.slice.call(arguments));
}
};
jQuery.fn.log = function (msg) {
console.log(msg, this);
return this;
};
jQuery.fn.emit = function (name) {
(this[0]).dispatchEvent(
new Event(
name,
{ bubbles: true, cancelable: true, composed: true }
)
);
return this;
};
'''
==
;script: {(trip a-i-r)}
;script: {(trip date-now)}
;+ favicon
;+ manifest
==
;body
=hx-ext "html-enc,response-targets,morph"
=hx-swap "innerHTML"
=hx-boost "true"
=hx-history "false"
=hx-replace-url "/neo/sky"
=hx-target "closest .hawk"
=style
"""
background-color: var(--b1);
background-image: var(--sky-bg-url);
background-size: var(--sky-bg-size);
background-repeat: var(--sky-bg-repeat);
"""
;+ in
==
==
--

View File

@ -2,13 +2,13 @@
/- serv=server
^- kook:neo
|%
++ state pro/%eyre-reqs
++ state pro/%sig
++ poke (sy %eyre-task ~)
++ kids
:+ ~ %y
%- ~(gas by *lads:neo)
~
++ deps
++ deps
%- ~(gas by *band:neo)
~
::
@ -21,12 +21,11 @@
%eyre-task
=+ !<(=task:eyre:neo vax)
=/ [eyre-id=@ta req=inbound-request:eyre] task
=/ lin (parse-request-line:serv url.request.req)
=/ inner=pith:neo #/[p/our.bowl]/sky
=/ args (~(gas by *(map @t @t)) args.lin)
=/ =crew:neo (~(gas by *crew:neo) src/inner ~)
=/ =made:neo [%sky-eyre-handler `[stud vax] crew]
:_ sig/!>(~)
:~ [(welp here.bowl #/[uv/eny.bowl]) %make %sky-eyre-handler `[stud vax] crew]
:~ [(welp here.bowl #/[uv/eny.bowl]) %make made]
==
==
++ init
@ -39,4 +38,3 @@
==
--
--

View File

@ -25,7 +25,7 @@
?+ -.poke !!
%new-tab
:- ~
=. hawks.this [[now.bowl /home] hawks.this]
=. hawks.this [[now.bowl #/[p/our.bowl]/home] hawks.this]
=. open.this (min 4 +(open.this))
sky/!>(this)
%move-tab
@ -42,6 +42,7 @@
==
=. open.this (dec open.this)
sky/!>(this)
::
%maximize
:- ~
=. hawks.this

View File

@ -165,4 +165,18 @@
^- simple-payload:http
[[307 ['location' redirect]~] ~]
--
++ neo
|_ eyre=pith:^neo
++ respond
|= [eyre-id=@ta pay=simple-payload:http]
^- (list card:^neo)
=/ head=sign:eyre:^neo [eyre-id %head response-header.pay]
=/ data=sign:eyre:^neo [eyre-id %data data.pay]
=/ done=sign:eyre:^neo [eyre-id %done ~]
:~ [eyre %poke eyre-sign/!>(head)]
[eyre %poke eyre-sign/!>(data)]
[eyre %poke eyre-sign/!>(done)]
==
--
--

View File

@ -0,0 +1,20 @@
|%
++ parse-url
|= =request:http
^- [pax=path pam=(map @t @t)]
=/ parsed
%+ rash url.request
;~ plug
;~(pfix fas (more fas smeg:de-purl:html))
yque:de-purl:html
==
:: strip first 2 segments (/neo/hawk)
:- (slag 2 -.parsed)
(malt +.parsed)
++ parse-body
|= =request:http
^- manx
%+ fall
(de-xml:html q:(fall body.request [p=0 q='']))
*manx
--

View File

@ -0,0 +1,5 @@
$: hoon=_'~'
=crew:neo
ready=_|
poke=(map pith:neo stud:neo)
==

View File

@ -0,0 +1 @@
,[=term =pith:neo]

View File

@ -0,0 +1 @@
,[=pith:neo =stud:neo]

View File

@ -0,0 +1 @@
,term

View File

@ -0,0 +1 @@
,pith:neo

View File

@ -0,0 +1,9 @@
/@ node
/@ del-poke
/- manx-utils
:- [%node %$ %del-poke]
|= nod=node
^- del-poke
=/ mu ~(. manx-utils nod)
(pave:neo (rash (vol:mu "pith") stap))

View File

@ -0,0 +1 @@
tang

View File

@ -877,6 +877,13 @@
$% [%gone =term] :: injected a bad dependency
[%goof =tang] :: crash
==
++ print-quit
|= q=quit
^- tang
?- -.q
%goof tang.q
%gone ~[leaf/"No dependency at {<term>}"]
==
+$ ack (pair flow (unit quit))
::
:: $flow: Call direction
@ -1416,7 +1423,8 @@
|- ^+ a
?~ a b
?~ b a
?> =(i.a i.b)
?. =(i.a i.b)
a
$(a t.a, b t.b)
++ sub
|= [from=$ del=$]
@ -2018,6 +2026,11 @@
+$ dare ?(%y %z)
+$ port (pair dare lads)
+$ kids (unit port)
+$ tear
$% [%only wan=curb hav=stud]
[%not not=curb hav=stud]
==
:: $dude: virtual namespace binding
::
+$ dude