Merge remote-tracking branch 'origin/tree-view' into pre-beta

This commit is contained in:
Will Hanlen 2024-07-26 09:16:46 -05:00
commit b008d6b20b
21 changed files with 777 additions and 49 deletions

3
bin/shrub.pill Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b761d725f2a1787bc6cb31f44ca27111ef433e72e622c849f9d57a2b500f3085
size 8534289

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c2ab6607450382e0ec80c7264dad2c72d69672eaf861eb1c24cde5a76921c6a3
size 9972490
oid sha256:007c8611fa1445f70f12d3434f3141292309515e566c1c5d059e8aa1c50f6a40
size 8501804

View File

@ -1565,6 +1565,8 @@
(emit (do-card #/[p/our.bowl]/srv/tree %make %tree-eyre ~ ~))
=. run
(emit (do-card #/[p/our.bowl]/srv/sky %make %sky-eyre ~ ~))
=. run
(emit (do-card #/[p/our.bowl]/srv/tree %make %tree-eyre ~ ~))
run
++ pess |=(=post:neo (~(pith press post) %out))
++ clay-beak ^- path

View File

@ -273,7 +273,7 @@
=/ [iot=iota lo=loam:dirt:neo] i.kids
=/ pit=pith:neo (snoc pith iot)
=/ [loot=(list loot:neo) lom=loam:dirt:neo]
(make(loam lo) [[+(case) *oath:neo] ~])
(make(loam lo) [[+(~(case plow lo)) *oath:neo] ~])
=. grit (welp grit (turn loot (lead pit)))
=. kid.l (~(put by kid.l) iot lom)
$(kids t.kids) ::

View File

@ -43,6 +43,8 @@
(error p.fool)
::
%.y
~& >>> far-fool/far.p.fool
~& >>> fal-fool/fal.p.fool
;div.frw.g2.p1.wfc
;*
%+ turn pro.p.fool

View File

@ -0,0 +1,73 @@
/@ http-request
/@ tree-diff
/- serv=sky-server
:- [%http-request %$ %tree-diff]
|= =http-request
^- tree-diff
=/ pam (~(uni by pam:(parse-url:serv http-request)) (parse-form-body:serv http-request))
=/ bod ~(. by pam)
=<
=/ head (@tas (got:bod 'head'))
?+ head ~| [%unknown-head head] !!
::
%send-make
=/ =path
%+ scan
%+ welp
%- trip (got:bod 'here')
%- trip find-pith
stap
=/ =stud:neo (to-stud find-stud)
=/ pail-head=stud:neo (to-stud (got:bod 'head-pail'))
=/ mule-vax=(each vase tang)
%- mule
|.
(to-hoon (got:bod 'vase'))
?: ?=(%| -.mule-vax) [%req-parsing-err p.mule-vax]
=/ vax=vase p.mule-vax
=/ mule-conf=(each conf:neo tang)
%- mule
|.
!< conf:neo (to-hoon (got:bod 'conf'))
?: ?=(%| -.mule-conf) [%req-parsing-err p.mule-conf]
=/ =conf:neo p.mule-conf
[head (pave:neo path) stud [(some [pail-head vax]) conf]]
::
%send-poke
=/ =stud:neo (to-stud find-stud)
=/ mule-vax=(each vase tang)
%- mule
|.
(to-hoon (got:bod 'vase'))
?: ?=(%| -.mule-vax) [%req-parsing-err p.mule-vax]
=/ vax=vase p.mule-vax
[head stud vax]
::
%send-cull
[head ~]
==
|%
++ bod-to-pith
^- pith:neo
%- pave:neo
%- stab find-pith
::
++ find-pith
%- got:bod 'pith'
::
++ find-stud
%- got:bod 'stud'
::
++ to-stud
|= =cord
^- stud:neo
!< @tas
%+ slap !>(~)
%- ream cord
::
++ to-hoon
|= hoon=cord
^- vase
%+ slap (slop !>(..zuse) !>(neo))
%- ream hoon
--

View File

@ -47,9 +47,10 @@
::
++ make-chat
=/ oninput
"""
this.setAttribute("value", this.value); this.nextElementSibling.nextElementSibling.setAttribute('hx-get', '/neo/hawk{(pith-tape here.bowl)}/dms/' + this.value); htmx.process(document.body);
"""
:: """
:: this.setAttribute("value", this.value); this.nextElementSibling.nextElementSibling.setAttribute('hx-get', '/neo/hawk{(pith-tape here.bowl)}/dms/' + this.value); htmx.process(document.body);
:: """
(trip 'this.setAttribute("value", this.value); if (this.value.includes(" ~")){this.parentNode.setAttribute("head", "new-groupchat"); this.nextElementSibling.classList.remove("hidden");}else{this.parentNode.setAttribute("head", "new-dm"); this.nextElementSibling.classList.add("hidden");}')
;form.fr.jc.g1.w70
=hx-post "/neo/hawk{(pith-tape here.bowl)}?stud=messenger-diff"
=head "new-dm"

View File

@ -292,7 +292,7 @@ For instance:
- `/~sampel/path/to/counter/one` would be represented as `~[[%p ~sampel] %path %to %counter %one]`.
- `/~sampel/path/to/counter/1` would be represented as `~[[%p ~sampel] %path %to %counter [%ud 1]]`.
(You might also see a `pith` written in this irregular form `#/[p/our.bowl]/path/to/counter/one`.)
You will also see `pith`s written in this irregular form `#/[p/our.bowl]/path/to/counter/one`.
A `note` is one of the four types of command any shrub will accept.
@ -308,18 +308,16 @@ A `note` is one of the four types of command any shrub will accept.
Lets `%make` a shrub at an arbitrary path `/path/to/counter` from the Dojo, giving it an initial state of `0`. Well explain the structure of the `%make` note in more detail in the Diary tutorial.
```
:neo &neo-card [~[[%p our] %path %to %counter] [%make %counter `[%number !>(0)] ~]]
:neo &neo-card [#/[p/our]/path/to/counter [%make %counter `[%number !>(0)] ~]]
```
You should see `>> /~zod/~/sys -> /~zod/path/to/counter: make` in the Dojo if successful.
Now we can now send a `%poke` to the counter shrub at this path.
```
:neo &neo-card [~[[%p our] %path %to %counter] [%poke [%counter-diff !>([%inc ~])]]]
:neo &neo-card [#/[p/our]/path/to/counter [%poke [%counter-diff !>([%inc ~])]]]
```
You'll know the poke worked if you see `>> /~zod/~/sys -> /~zod/counter: %poke %counter-diff` in the Dojo. In the next section, we'll build a simple frontend that will enable us to view and modify the state of the shrub.
How do we know these worked? There's currently no feedback in the Dojo, and no way to inspect the state of a shrub from the Dojo. In the next section, we'll build a simple frontend that will enable us to view the state of the shrub, and modify its state through the UI.
## Counter frontend in Sky
@ -426,7 +424,7 @@ This is a more straightforward conversion from a dynamic XML node (in this case,
The Sky homepage shows you one tile for all of the shrubs who are the immediate children of your `/home` shurb, which was made for you upon booting `%neo` for the first time. You wont see a Counter tile there because there is no `/counter` shrub beneath `/home`, so lets make one.
```
:neo &neo-card [~[[%p our] %home %counter] [%make %counter `[%number !>(0)] ~]]
:neo &neo-card [#/[p/our]/home/counter [%make %counter `[%number !>(0)] ~]]
```
If you refresh your browser you should now see a tile labelled “counter”. Click there to see the Counter frontend from the `/con` file and increment the state of the `/counter` shrub.

View File

@ -10,7 +10,7 @@
++ state pro/%eyre-task
++ poke *(set stud:neo)
++ kids *kids:neo
++ deps
++ deps
%- ~(gas by *band:neo)
:~ :- %src
^- fief:neo

View File

@ -58,6 +58,15 @@
=/ this !<(task state-vase)
?+ stud !!
%gift
::check if %del case from tree view
=/ =gift:neo !<(gift:neo vax)
=/ gift-card=[=pith:neo =loot:neo]
%+ snag 0
~(tap of:neo gift)
?: =(mode.loot.gift-card %del)
=/ i (find [pith.gift-card ~] order.this)
?~ i [~ task/!>(this)]
[~ task/!>(this(order (oust [(need i) 1] order.this)))]
::check if all kid tasks are done
=/ dun (check-kids bowl)
[~ task/!>(this(done dun, kids-done dun))]
@ -93,7 +102,8 @@
=/ i (find [pith.diff ~] order.this)
?~ i `task/!>(this)
:_ task/!>(this(order (oust [(need i) 1] order.this)))
:~ [(welp here.bowl pith.diff) [%tomb ~]]
:~ [(welp here.bowl pith.diff) [%cull ~]]
[(welp here.bowl pith.diff) [%tomb ~]]
==
::
%reorder

View File

@ -0,0 +1,642 @@
/@ htmx-type=htmx
/@ tree-diff
/- serv=sky-server
/* feather
/* reset
/* jquery
/* htmx-js
/* htmx-response-targets
/* htmx-idiomorph
/> htmx
/< node
/< http-request
=<
^- kook:neo
|%
++ state pro/%eyre-task
++ poke (sy %tree-diff %ack ~)
++ kids *kids:neo
++ deps
%- ~(gas by *band:neo)
:~ :- %src
^- fief:neo
:- req=|
^- quay:neo
:- [[%or pro/%htmx any/~ ~] ~]
^- (unit port:neo)
:+ ~ %z
%- ~(gas by *lads:neo)
:~ :- &
`lash:neo`[[%or pro/%htmx any/~ ~] ~]
==
==
++ form
|_ [=bowl:neo =aeon:neo =pail:neo]
++ poke
|= [=stud:neo =vase]
^- (quip card:neo pail:neo)
~& > stud/stud
:_ eyre-task/q.pail
?~ src=(~(get by deps.bowl) %src) ~
?~ (~(get of:neo q.u.src) /) ~
=/ here p.u.src
?+ stud !!
::
%ack
?~ !<((unit quit:neo) vase)
?: =(*pail:neo pail) ~
=/ this !<([eyre-id=@ta req=inbound-request:eyre] q.pail)
%: eyre-cards
eyre-id.this
bowl
200
:~
'content-type'^'text/html'
'HX-Refresh'^'true'
==
*manx
==
=/ =quit:neo (need !<((unit quit:neo) vase))
?+ -.quit ~
%goof
=/ this !<([eyre-id=@ta req=inbound-request:eyre] q.pail)
%: eyre-cards
eyre-id.this
bowl
200
['content-type' 'text/html']~
(err-trace-manx +.quit)
==
==
::
%tree-diff
=/ this !<([eyre-id=@ta req=inbound-request:eyre] q.pail)
=/ eyre-id eyre-id.this
=/ diff !<(tree-diff vase)
~& >>> diff-tree-imp/diff
=, diff
?- -.diff
::
%send-make
:~
[pith %make stud init conf]
==
::
%send-poke
=/ vax vase.diff
:~
[here %poke [stud vax]]
==
::
%send-cull
~& >>> pith-cull/here
:~
[here %cull ~]
:: [here %tomb ~]
==
::
%req-parsing-err ~
==
==
++ 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]
?~ src=(~(get by deps.bowl) %src)
%:(empty-view-cards eyre-id bowl 404)
?~ (~(get of:neo q.u.src) /)
%:(empty-view-cards eyre-id bowl 200)
=/ here p.u.src
=/ bol *bowl:neo
=. here.bol here
=. our.bol our.bowl
=. kids.bol q.u.src
^- (list card:neo)
?+ method.request.req ~|(%unsupported-http-method !!)
::
%'GET'
%: eyre-cards
eyre-id
bowl
200
['content-type' 'text/html']~
(view bol)
==
::
%'POST'
=/ purl (parse-url:serv request.req)
=/ poke-stud
^- stud:neo
~| %no-stud-specified
(~(got by pam.purl) 'stud')
=/ diff-vase
(http-request [poke-stud `request:http`request.req])
=/ diff-type !<(tree-diff diff-vase)
~& >> diff-type/diff-type
?- -.diff-type
::
%send-make
:: %make cards don't have error(%goof) %acks yet
:: sending eyre response here for now
%+ welp
:~ (poke-tree-card here.bowl diff-vase)
==
%: eyre-cards
eyre-id
bowl
200
:~
'content-type'^'text/html'
'HX-Refresh'^'true'
==
*manx
==
::
%send-poke
:~ (poke-tree-card here.bowl diff-vase)
==
::
%send-cull
=/ poke-card=(list card:neo) ~[(poke-tree-card here.bowl diff-vase)]
=/ location
%- crip
%+ weld "/neo/tree"
(en-tape:pith:neo (snip here))
;: welp
poke-card
%: eyre-cards
eyre-id
bowl
200
:~
'content-type'^'text/html'
'HX-Redirect'^location
==
*manx
==
==
::
%req-parsing-err
%: eyre-cards
eyre-id
bowl
200
['content-type' 'text/html']~
(err-trace-manx tang.diff-type)
==
==
==
--
--
::
|%
++ manx-to-octs
|= man=manx
(as-octt:mimes:html (en-xml:html man))
::
++ eyre-cards
|= [eyre-id=@ta =bowl:neo status=@ud =header-list:http =manx]
^- (list card:neo)
=/ =pith:neo #/[p/our.bowl]/$/eyre
=/ headers
%+ welp
header-list
['last-tree-location'^(en-cord:pith:neo /home) ~]
=/ head=sign:eyre:neo [eyre-id %head [status headers]]
=/ 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 ~]
[here.bowl %tomb ~]
==
::
++ empty-view-cards
|= [eyre-id=@ta =bowl:neo status=@ud]
=/ empty-view=manx
;div
;h1: nothing here
==
%: eyre-cards
eyre-id
bowl
status
['content-type' 'text/html']~
empty-view
==
::
++ poke-tree-card
|= [here=pith:neo vax=vase]
^- card:neo
[here %poke %tree-diff vax]
::
++ err-trace-manx
|= =tang
^- manx
;div.p2
;* %+ turn tang
|= =tank
^- manx
;div.wf.fr.js.p1.error.monospace
; {~(ram re tank)}
==
==
::
++ del-manx
^- manx
;div
=style "grid-column: 3 ; grid-row: 1; justify-self: end;"
;p: deleted
==
::
++ view
|= =bowl:neo
^- manx
;html
;head
;meta(charset "UTF-8");
;title: tree
;script: {(trip jquery)}
;script: {(trip htmx-js)}
;script: {(trip htmx-response-targets)}
;script: {(trip htmx-idiomorph)}
;link
=rel "stylesheet"
=href "https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.15.1/cdn/themes/light.css"
;
==
;script
=type "module"
=src "https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.15.1/cdn/shoelace.js"
;
==
;style: {(trip reset)}
;style: {(trip feather)}
;style: {tree-style}
==
;body
;+ (body-view bowl)
==
==
::
++ tree-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: 600;
}
body{
font-family: 'Urbit Sans';
font-size: 15px;
}
input{
font-family: 'monospace', monospace;
font-size: 13px;
}
.monospace{
font-family: 'monospace', monospace;
font-size: 13px;
}
.red-hover:hover{
background-color: #FF0000;
color: white;
border-radius: 6px;
}
.pointer{
cursor: pointer;
}
.bd.bd2{
border: 0.8px solid black;
}
.error{
color: #FF0000;
}
.bg-white{
background: white;
}
.hover-grey:hover{
background: #dbdbdb;
}
'''
::
++ body-view
|= =bowl:neo
^- manx
;div.wf
;+
?~ node=(~(get of:neo kids.bowl) /)
;div: no kids
=/ =pail:neo q.saga.u.node
;div.fc.js.p2.g2
;+ (shrub-view bowl pail)
;+ (kids-view bowl)
==
==
::
++ shrub-view
|= [=bowl:neo =pail:neo]
^- manx
;div
;div.fc.g2.bd.bd2.br2.p2
;div.top.fr.jb.g2
;p.p2.hfc.wf.grow: {(en-tape:pith:neo here.bowl)}
;+ buttons
==
;div.fr.jb.g2
;+ ?. =(p.pail %hoon)
(state-print pail)
;div.hidden
;
==
;div.fr.je.grow.g2
;+ (pro-files pail bowl)
;a.loader.p2.bd.bd2.br2.hover-grey
=href "/neo/tree/{(scow %p our.bowl)}/cod/std/src/pro/{(trip ?@(p.pail p.pail mark.p.pail))}"
;span.loaded.hf: {<p.pail>}
;span.loading.hf: loading
==
==
==
;+ (forms bowl)
;+ ?: =(p.pail %hoon)
(state-print pail)
;div.hidden
;
==
==
==
++ kids-view
|= =bowl:neo
^- manx
;div.fc.g2
;*
%+ turn
%+ sort ~(tap of:neo kids.bowl)
aor
|= [=pith:neo =idea:neo]
^- manx
?~ pith
;div.hidden
; nothing
==
;a.fr.jb.g1.bd.bd2.br2.hover-grey
=href "/neo/tree{(en-tape:pith:neo (welp here.bowl pith))}"
;div.p2.hfc.p2.hover
; {(en-tape:pith:neo pith)}
==
::for some reason broken when trying to jam vase that's too large
::
::(preview-state q.saga.idea)
==
==
::
++ state-print
|= =pail:neo
^- manx
?: =(p.pail %hoon)
=/ wain=(list @t) (to-wain:format !<(@t q.pail))
;div.fc.g1.p2.grow.monospace
;*
%+ turn wain
|= lin=@t
;p.monospace: {(trip lin)}\0a
==
;div.fr.js.p2.monospace
;+ ;/
=/ size (met 3 (jam q.q.pail))
?: (gth size 750) "vase too large to print: {<size>}"
~(ram re (sell q.pail))
==
::
:: ++ preview-state
:: |= =pail:neo
:: ^- manx
:: ;div.fr.js.p2
:: ;+ ;/
:: =/ size (met 3 (jam q.q.pail))
:: ?: (gth size 300) "too-large"
:: =/ state-tape ~(ram re (sell q.pail))
:: ::=/ length (lent state-tape)
:: ::?: (gth length 140)
:: ::(weld (oust [140 (sub length 140)] state-tape) "...")
:: state-tape
:: ==
::
++ pro-files
|= [=pail:neo =bowl:neo]
^- manx
?. =(p.pail %hoon)
;div.hidden
;
==
=/ =name:neo [our here]:bowl
=/ fool=(each file:ford:neo tang)
%- mule
|.
(scan (trip !<(@t q.pail)) (rein:ford:neo name))
?: ?=(%| -.fool)
;div.hidden
;
==
;div.fr.g2
;* %+ turn pro.p.fool
|= =pro:ford:neo
~& >>> -:!>(stud.pro)
^- manx
;a.loader.bd.bd2.br2.p2.hover-grey
=href "/neo/tree/{(scow %p our.bowl)}/cod/std/src/pro/{(trip ?@(stud.pro stud.pro mark.stud.pro))}"
;span.loaded.hfc: {<stud.pro>}
;span.loading.hfc: loading
==
==
::
++ buttons
^- manx
;div.buttons.fr.g2
;button.make.p2.bd.bd2.br2.hover-grey.b-3.bg-white
=onclick
"""
$(this).toggleClass('toggled');
$(this).parent().find('.poke').removeClass('toggled');
$(this).parent().find('.cull').removeClass('toggled');
$(this).parent().parent().parent().find('.make-form').toggleClass('hidden');
$(this).parent().parent().parent().find('.cull-form').addClass('hidden');
$(this).parent().parent().parent().find('.poke-form').addClass('hidden');
$(this).parent().parent().parent().find('.error-box').html('')
"""
;span: make
==
;button.poke.p2.bd.bd2.br2.hover-grey.bg-white
=onclick
"""
$(this).toggleClass('toggled');
$(this).parent().find('.make').removeClass('toggled');
$(this).parent().find('.cull').removeClass('toggled');
$(this).parent().parent().parent().find('.poke-form').toggleClass('hidden');
$(this).parent().parent().parent().find('.make-form').addClass('hidden');
$(this).parent().parent().parent().find('.cull-form').addClass('hidden');
$(this).parent().parent().parent().find('.error-box').html('')
"""
;span: poke
==
;button.cull.p2.bd.bd2.br2.hover-grey.bg-white
=onclick
"""
$(this).toggleClass('toggled');
$(this).parent().find('.make').removeClass('toggled');
$(this).parent().find('.poke').removeClass('toggled');
$(this).parent().parent().parent().find('.cull-form').toggleClass('hidden');
$(this).parent().parent().parent().find('.make-form').addClass('hidden');
$(this).parent().parent().parent().find('.poke-form').addClass('hidden');
$(this).parent().parent().parent().find('.error-box').html('')
"""
;span: cull
==
==
::
++ forms
|= =bowl:neo
^- manx
;div.forms.fc.as.g2.wf
;div.error-box
;
==
;+ (make-form bowl)
;+ (poke-form bowl)
;+ (cull-form bowl)
==
::
++ make-form
|= =bowl:neo
^- manx
;form.make-form.hidden.bd.bd2.br2.fc.g2.p2.wf.hfc :: .bg-white
=hx-post "/neo/tree{(en-tape:pith:neo here.bowl)}?stud=tree-diff&head=send-make"
=hx-swap "innerHTML"
=hx-target ".error-box"
;div.fr.g2
;input.hidden
=type "text"
=name "here"
=value (en-tape:pith:neo here.bowl)
;
==
;input.bd.bd2.br2.p2.grow
=type "text"
=name "pith"
=oninput "this.setAttribute('value', this.value);"
=placeholder "/some/pith"
=required ""
;
==
;input.bd.bd2.br2.p2
=type "text"
=name "stud"
=oninput "this.setAttribute('value', this.value);"
=placeholder "%shrub-type"
=required ""
;
==
;input.bd.bd2.br2.p2
=type "text"
=name "head-pail"
=oninput "this.setAttribute('value', this.value);"
=placeholder "%state-type"
=required ""
;
==
==
;div.fr.g2
;input.bd.bd2.br2.p2.grow
=type "text"
=name "vase"
=oninput "this.setAttribute('value', this.value);"
=placeholder "state value"
=required ""
;
==
;input.bd.bd2.br2.p2.grow
=type "text"
=name "conf"
=oninput "this.setAttribute('value', this.value);"
=placeholder "(map term pith:neo)"
=required ""
;
==
;button.bd.bd2.br2.p2.loader
:: =onclick
:: """
:: $(this).parent().toggleClass('hidden');
:: $(this).parent().next().toggleClass('bg-white');
:: $(this).parent().next().find('.open').toggleClass('hidden');
:: $(this).parent().next().find('.close').toggleClass('hidden');
:: """
;span.loaded: make
;span.loading: loading
==
==
==
::
++ poke-form
|= =bowl:neo
^- manx
;form.poke-form.hidden.bd.bd2.br2.fr.jb.g2.p2.wf
=hx-post "/neo/tree{(en-tape:pith:neo here.bowl)}?stud=tree-diff&head=send-poke"
=hx-swap "outterHTML"
=hx-target ".error-box"
;input.p2.bd.bd2.br2
=type "text"
=name "stud"
=oninput "this.setAttribute('value', this.value);"
=autocomplete "off"
=placeholder "%diff-type"
=required ""
;
==
;input.p2.bd.bd2.br2.grow
=type "text"
=name "vase"
=oninput "this.setAttribute('value', this.value);"
=autocomplete "off"
=placeholder "diff value"
=required ""
;
==
;button.loader.bd.bd2.br2
;span.loaded: poke
;span.loading: loading
==
==
::
++ cull-form
|= =bowl:neo
=/ warning "Are you sure you want to delete this shrub and all their kids?"
^- manx
;form.cull-form.hidden.bd.bd2.br2.p2.wf
=style "border: 2px solid #FF0000; border-radius: 6px;"
=hx-post "/neo/tree{(en-tape:pith:neo here.bowl)}?stud=tree-diff&head=send-cull"
;div.fc.ac
;p: {warning}
==
;div.fr.jc.g8.p2
;button.cull-trigger.hfc.p2.red-hover
;span: yes
==
;span.hfc.p2.red-hover.pointer
=onclick
"""
$(this).parent().parent().addClass('hidden');
$(this).parent().parent().parent().parent().find('.top').find('.buttons').find('.cull').toggleClass('toggled');
"""
;span: no
==
==
==
::
--

View File

@ -1,49 +1,32 @@
/@ eyre-reqs
/- serv=server
/- serv=sky-server
/- srv=server
^- kook:neo
|%
++ state pro/%sig
++ poke (sy %eyre-task ~)
++ kids
:+ ~ %y
%- ~(gas by *lads:neo)
~
++ deps
%- ~(gas by *band:neo)
~
::
++ kids *kids:neo
++ deps *deps:neo
++ form
|_ [=bowl:neo =aeon:neo =pail:neo]
++ poke
|= [=stud:neo vax=vase]
|= [=stud:neo =vase]
^- (quip card:neo pail:neo)
?+ stud ~|(bad-stud/stud !!)
?+ stud ~|(bad-stud/stud !!)
%eyre-task
=+ !<(=task:eyre:neo vax)
=+ !<(=task:eyre:neo vase)
=/ [eyre-id=@ta req=inbound-request:eyre] task
?. authenticated.req
=/ eyre=pith:neo #/[p/our.bowl]/$/eyre
:_ pail
%+ ~(respond neo:srv eyre) eyre-id
(login-redirect:gen:srv request.req)
=/ purl (parse-url:serv request.req)
=/ inner=pith:neo (pave:neo pax.purl)
=/ =crew:neo (~(gas by *crew:neo) src/inner ~)
=/ =made:neo [%tree-eyre-handler `[stud vase] crew]
:_ sig/!>(~)
=/ doc
%+ weld "<!DOCTYPE html>"
%- en-xml:html
;html
;body
;style
;+ ;/ %- trip
'''
body {
color: red;
}
'''
==
;h1: tree stub: {(trip url.request.req)}
==
==
=/ head=sign:eyre:neo [eyre-id %head [200 ~]]
=/ data=sign:eyre:neo [eyre-id %data `(as-octt:mimes:html doc)]
=/ done=sign:eyre:neo [eyre-id %done ~]
:~ [#/[p/our.bowl]/$/eyre %poke eyre-sign/!>(head)]
[#/[p/our.bowl]/$/eyre %poke eyre-sign/!>(data)]
[#/[p/our.bowl]/$/eyre %poke eyre-sign/!>(done)]
:~ [(welp here.bowl #/[uv/(end 3^4 eny.bowl)]) %make made]
==
==
++ init

View File

@ -0,0 +1,6 @@
$%
[%send-make =pith:neo =stud:neo init=(unit pail:neo) =conf:neo]
[%send-poke =stud:neo =vase]
[%send-cull ~]
[%req-parsing-err =tang]
==

1
pkg/shrub/mar/neo Symbolic link
View File

@ -0,0 +1 @@
../../arvo/mar/neo

1
pkg/shrub/mar/neo-ack.hoon Symbolic link
View File

@ -0,0 +1 @@
../../arvo/mar/neo-ack.hoon

1
pkg/shrub/mar/neo-feat.hoon Symbolic link
View File

@ -0,0 +1 @@
../../arvo/mar/neo-feat.hoon

1
pkg/shrub/mar/neo-gest.hoon Symbolic link
View File

@ -0,0 +1 @@
../../arvo/mar/neo-gest.hoon

1
pkg/shrub/mar/neo-meet.hoon Symbolic link
View File

@ -0,0 +1 @@
../../arvo/mar/neo-meet.hoon

1
pkg/shrub/mar/neo-twig.hoon Symbolic link
View File

@ -0,0 +1 @@
../../arvo/mar/neo-twig.hoon

1
pkg/shrub/mar/neo-wand.hoon Symbolic link
View File

@ -0,0 +1 @@
../../arvo/mar/neo-wand.hoon

1
pkg/shrub/mar/neo-yuga.hoon Symbolic link
View File

@ -0,0 +1 @@
../../arvo/mar/neo-yuga.hoon