mirror of
https://github.com/urbit/shrub.git
synced 2024-11-24 04:58:08 +03:00
Merge remote-tracking branch 'origin/tree-view' into pre-beta
This commit is contained in:
commit
b008d6b20b
3
bin/shrub.pill
Normal file
3
bin/shrub.pill
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b761d725f2a1787bc6cb31f44ca27111ef433e72e622c849f9d57a2b500f3085
|
||||
size 8534289
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c2ab6607450382e0ec80c7264dad2c72d69672eaf861eb1c24cde5a76921c6a3
|
||||
size 9972490
|
||||
oid sha256:007c8611fa1445f70f12d3434f3141292309515e566c1c5d059e8aa1c50f6a40
|
||||
size 8501804
|
||||
|
@ -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
|
||||
|
@ -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) ::
|
||||
|
@ -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
|
||||
|
73
pkg/arvo/neo/cod/std/src/con/http-request-tree-diff.hoon
Normal file
73
pkg/arvo/neo/cod/std/src/con/http-request-tree-diff.hoon
Normal 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
|
||||
--
|
@ -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"
|
||||
|
@ -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.
|
||||
Let’s `%make` a shrub at an arbitrary path `/path/to/counter` from the Dojo, giving it an initial state of `0`. We’ll 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 won’t see a Counter tile there because there is no `/counter` shrub beneath `/home`, so let’s 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.
|
||||
|
@ -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
|
||||
|
642
pkg/arvo/neo/cod/std/src/imp/tree-eyre-handler.hoon
Normal file
642
pkg/arvo/neo/cod/std/src/imp/tree-eyre-handler.hoon
Normal 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
|
||||
==
|
||||
==
|
||||
==
|
||||
::
|
||||
--
|
@ -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
|
||||
|
6
pkg/arvo/neo/cod/std/src/pro/tree-diff.hoon
Normal file
6
pkg/arvo/neo/cod/std/src/pro/tree-diff.hoon
Normal 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
1
pkg/shrub/mar/neo
Symbolic link
@ -0,0 +1 @@
|
||||
../../arvo/mar/neo
|
1
pkg/shrub/mar/neo-ack.hoon
Symbolic link
1
pkg/shrub/mar/neo-ack.hoon
Symbolic link
@ -0,0 +1 @@
|
||||
../../arvo/mar/neo-ack.hoon
|
1
pkg/shrub/mar/neo-feat.hoon
Symbolic link
1
pkg/shrub/mar/neo-feat.hoon
Symbolic link
@ -0,0 +1 @@
|
||||
../../arvo/mar/neo-feat.hoon
|
1
pkg/shrub/mar/neo-gest.hoon
Symbolic link
1
pkg/shrub/mar/neo-gest.hoon
Symbolic link
@ -0,0 +1 @@
|
||||
../../arvo/mar/neo-gest.hoon
|
1
pkg/shrub/mar/neo-meet.hoon
Symbolic link
1
pkg/shrub/mar/neo-meet.hoon
Symbolic link
@ -0,0 +1 @@
|
||||
../../arvo/mar/neo-meet.hoon
|
1
pkg/shrub/mar/neo-twig.hoon
Symbolic link
1
pkg/shrub/mar/neo-twig.hoon
Symbolic link
@ -0,0 +1 @@
|
||||
../../arvo/mar/neo-twig.hoon
|
1
pkg/shrub/mar/neo-wand.hoon
Symbolic link
1
pkg/shrub/mar/neo-wand.hoon
Symbolic link
@ -0,0 +1 @@
|
||||
../../arvo/mar/neo-wand.hoon
|
1
pkg/shrub/mar/neo-yuga.hoon
Symbolic link
1
pkg/shrub/mar/neo-yuga.hoon
Symbolic link
@ -0,0 +1 @@
|
||||
../../arvo/mar/neo-yuga.hoon
|
Loading…
Reference in New Issue
Block a user