diff --git a/pkg/arvo/neo/cod/std/src/con/dm-htmx.hoon b/pkg/arvo/neo/cod/std/src/con/dm-htmx.hoon index f40e68eac3..564607a9da 100644 --- a/pkg/arvo/neo/cod/std/src/con/dm-htmx.hoon +++ b/pkg/arvo/neo/cod/std/src/con/dm-htmx.hoon @@ -7,7 +7,7 @@ ^- manx ;div.p2 =label "Chat" - ;div.ma.fc.g2 + ;div.ma.fc.g2 =style "max-width: 650px;" ;div.fc.g2 =id "children" diff --git a/pkg/arvo/neo/cod/std/src/con/messenger-htmx.hoon b/pkg/arvo/neo/cod/std/src/con/messenger-htmx.hoon index bf9a086a8a..c77919cd12 100644 --- a/pkg/arvo/neo/cod/std/src/con/messenger-htmx.hoon +++ b/pkg/arvo/neo/cod/std/src/con/messenger-htmx.hoon @@ -1,10 +1,212 @@ -/@ message /@ groupchat +/@ ship /- feather-icons /- messages :- [%sig %$ %htmx] -|= =groupchat +|= ~ |= =bowl:neo +|^ + view +:: +++ view ^- manx -;div.p2 -== \ No newline at end of file +;div.p2.fc.ac.view.g1 + ;style: {style} + ;+ create-groupchat + ;+ new-dm + ;+ all-chats +== +:: +++ pith-tape + |= =pith + ^- tape + (en-tape:pith:neo pith) +:: +++ style + ^~ + %- trip + ''' + .view { + max-width: 650px; + padding-bottom: 50vh; + padding-top: 30px; + } + input[type="text"]:hover { + cursor: text; + } + input:focus { + outline: none; + } + .w70{ + width: 70%; + } + ''' +:: +:: depending if value in input has space and more +++ create-groupchat + =/ pt (pith-tape here.bowl) + :: + ^- manx + ;form.fr.jc.g1.createchat.w70 + ::=hx-sync "closest div:queue last" + =hx-post "/neo/hawk{pt}?stud=messenger-diff" + =head "new-groupchat" + =hx-target "find button .loading" + =hx-swap "outerHTML" + ;input.grow.border.p2.br1.grow + =id "name-input" + =name "name" + =type "text" + =required "" + =placeholder "new groupchat" + =oninput "this.setAttribute('value', this.value);" + =autocomplete "off" + ; + == + ;button.loader.br1.hover.p2.b0.border + ;span.loaded: create + ;span.loading + ;+ loading.feather-icons + == + :: == + == + == +:: +++ new-dm + ;form.fr.jc.g1.w70 + =hx-post "/neo/hawk{(pith-tape here.bowl)}?stud=messenger-diff" + =head "new-dm" + =hx-target "find button .loading" + =hx-swap "outerHTML" + ;input.grow.border.p2.br1 + =name "partner" + =type "text" + =required "" + =placeholder "~zod" + =oninput "this.setAttribute('value', this.value);" + =autocomplete "off" + ; + == + ;button.loader.br1.hover.p2.b0.border + ;span.loaded; start dm + ;span.loading + ;+ loading.feather-icons + == + == + == +:: +++ all-chats + =/ kids + %+ skid ~(tap of:neo kids.bowl) + |= [=pith =idea:neo] + =(p.pail.idea %groupchat) + ^- manx + ;div.fc.as.g1.w70 + ;div.fc.ac.g2.wf + ;* %+ turn q.kids + |= [=pith =idea:neo] + ?~ pith + ;span.hidden: no dms + ?: (lte 3 (lent pith)) + ;h1.hidden: {} + ;a.br1.hover.b0.fr.jb.wf.border + =href "/neo/hawk{(pith-tape here.bowl)}{(pith-tape pith)}" + =hx-swap "innerHTML" + ;h3.s-1.p2: {(scow %tas ;;(@tas -.pith))} + ;h3.s-1.p2: {<+:;;([%p @p] (rear pith))>} + == + == + ;div.fc.ac.g2.wf + ;* %+ turn p.kids + |= [=pith =idea:neo] + ?~ pith ;span.hidden: no groupchats + (chat pith idea) + == + == +:: +++ chat + |= [=pith =idea:neo] + =/ org=@p +:;;([%p @p] (snag 1 `(list iota)`pith)) + =/ members=(list ship) ~(tap in members:!<(groupchat q.pail.idea)) + =/ chat +:;;([%t @t] (rear pith)) + ~& > ['members' members] + ^- manx + ;div.wf.br1.fc.g1 + ;div.fr.g1 + ;a.br1.hover.fr.jb.g2.wf.border.b0 + =href "/neo/hawk{(pith-tape here.bowl)}{(pith-tape pith)}" + =hx-swap "innerHTML" + ;h3.s-1.p2: {(trip chat)} + ;h3.s-1.p2: {} + == + ;button.br1.hover.border.b0 + =onclick (trip 'this.parentNode.nextElementSibling.classList.toggle("hidden"); this.parentNode.parentNode.classList.toggle("border"); this.parentNode.parentNode.classList.toggle("p2"); this.previousSibling.classList.toggle("border"); this.classList.toggle("border"); if (this.parentNode.nextElementSibling.classList.contains("hidden")){this.innerHTML="V"} else {this.innerHTML="^"}') + ;span: V + == + == + ;div.fc.g2.hidden + ;div.fc.g2 + ;div.fr.je.g2 + ;+ ?. =(our.bowl org) + ;span.hidden: ~ + ;button.hover.br1.b0.border + =onclick (trip 'this.parentNode.nextElementSibling.classList.toggle("hidden"); if (this.parentNode.nextElementSibling.classList.contains("hidden")){this.innerHTML="+"} else {this.innerHTML="x"}') + ;span: + + == + == + ;+ (add-member chat) + == + ;* %+ turn `(list ship)`members + |= =ship + ?: =(our.bowl ship) + ;div.fr.jb.g1 + ;span.wf.br1.p2: {} + == + ;div.fr.jb.g1 + ;span.wf.br1.p1: {} + ;button.hover.b0.br1.loader.border + =hx-post "/neo/hawk{(pith-tape here.bowl)}?stud=groupchat-diff" + =hx-target "find .loading" + =hx-swap "outerHTML" + =head "remove" + =ship (scow %p ship) + =hx-on--after-request "this.parentNode.remove();" + =onmouseover "this.previousSibling.classList.add('b1');" + =onmouseout "this.previousSibling.classList.remove('b1');" + ;span.loaded: x + ;span.loading + ;+ loading.feather-icons + == + == + == + == + == +++ add-member + |= chat=cord + ;form.fr.gb.g1.hidden + =hx-post "/neo/hawk{(pith-tape here.bowl)}?stud=messenger-diff" + =head "invite-to-groupchat" + =hx-target "find button .loading" + =hx-swap "outerHTML" + ;input.hidden + =type "text" + =name "name" + =value (trip chat) + ; + == + ;input.grow.border.p2.br1 + =name "ship" + =type "text" + =placeholder "~zod, ~bus" + =oninput "this.setAttribute('value', this.value);" + =autocomplete "off" + ; + == + ;button.loader.hover.br1.b0.border + ;span.loaded: + + ;span.loading + ;+ loading.feather-icons + == + == + == +-- \ No newline at end of file diff --git a/pkg/arvo/neo/cod/std/src/con/node-groupchat-diff.hoon b/pkg/arvo/neo/cod/std/src/con/node-groupchat-diff.hoon new file mode 100644 index 0000000000..bc25fa7564 --- /dev/null +++ b/pkg/arvo/neo/cod/std/src/con/node-groupchat-diff.hoon @@ -0,0 +1,17 @@ +/@ node +/@ groupchat-diff +/- manx-utils +:- [%node %$ %groupchat-diff] +|= nod=node +^- groupchat-diff +=/ mu ~(. manx-utils nod) +=/ head (@tas (got:mu %head)) +~& >>> head +%- groupchat-diff +?+ head + ~| [%unknown-head head] + !! + %remove + =/ =ship `@p`(slav %p (got:mu %pith)) + [head ship] +== \ No newline at end of file diff --git a/pkg/arvo/neo/cod/std/src/con/node-messenger-diff.hoon b/pkg/arvo/neo/cod/std/src/con/node-messenger-diff.hoon new file mode 100644 index 0000000000..8ed269cb42 --- /dev/null +++ b/pkg/arvo/neo/cod/std/src/con/node-messenger-diff.hoon @@ -0,0 +1,28 @@ +/@ node +/@ messenger-diff +/- manx-utils +:- [%node %$ %messenger-diff] +|= nod=node +^- messenger-diff +=/ mu ~(. manx-utils nod) +=/ head (@tas (got:mu %head)) +~& >>> head +%- messenger-diff +?+ head + ~| [%unknown-head head] + !! + %new-dm + =/ partner `@p`(slav %p (vol:mu "partner")) + [head partner] + :: + %new-groupchat + =/ name (vol:mu "name") + [head name] + :: + %invite-to-groupchat + ~& > (vol:mu "name") + =/ name (vol:mu "name") + =/ ship `@p`(slav %p (vol:mu "ship")) + ~& >>> [head name ship] + [head name ship] +== \ No newline at end of file diff --git a/pkg/arvo/neo/cod/std/src/lib/messages.hoon b/pkg/arvo/neo/cod/std/src/lib/messages.hoon index d558792d0b..58c30b1e1a 100644 --- a/pkg/arvo/neo/cod/std/src/lib/messages.hoon +++ b/pkg/arvo/neo/cod/std/src/lib/messages.hoon @@ -7,7 +7,7 @@ ++ render-messages |= =bowl:neo ^- manx - ;div + ;div.fc.g2 =label "Messages" ;* %+ turn @@ -42,9 +42,9 @@ ^- manx ;form.fc.g2 =hx-post "{(en-tape:pith:neo :(welp /neo/hawk here.bowl location))}?stud=txt" + =hx-swap "beforebegin" =hx-on-submit "this.reset()" - =hx-target "find button .loading" - =hx-swap "outerHTML" + =hx-target "this" =head "msg" ;textarea.p2.border.br1 =name "text" @@ -56,7 +56,7 @@ ; == ;button.p2.b1.br1.bd1.wfc.hover.loader - ;span.loaded.s2: create + ;span.loaded.s2: create ;span.loading ;+ loading.feather-icons ==