mirror of
https://github.com/urbit/shrub.git
synced 2024-11-28 05:22:27 +03:00
messenger UI
This commit is contained in:
parent
b3376cb10f
commit
d217f1f8aa
@ -1,10 +1,212 @@
|
||||
/@ message
|
||||
/@ groupchat
|
||||
/@ ship
|
||||
/- feather-icons
|
||||
/- messages
|
||||
:- [%sig %$ %htmx]
|
||||
|= =groupchat
|
||||
|= ~
|
||||
|= =bowl:neo
|
||||
|^
|
||||
view
|
||||
::
|
||||
++ view
|
||||
^- manx
|
||||
;div.p2
|
||||
;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: {<pith>}
|
||||
;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: {<org>}
|
||||
==
|
||||
;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="<span>V</span>"} else {this.innerHTML="<span>^</span>"}')
|
||||
;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="<span>+</span>"} else {this.innerHTML="<span>x</span>"}')
|
||||
;span: +
|
||||
==
|
||||
==
|
||||
;+ (add-member chat)
|
||||
==
|
||||
;* %+ turn `(list ship)`members
|
||||
|= =ship
|
||||
?: =(our.bowl ship)
|
||||
;div.fr.jb.g1
|
||||
;span.wf.br1.p2: {<ship>}
|
||||
==
|
||||
;div.fr.jb.g1
|
||||
;span.wf.br1.p1: {<ship>}
|
||||
;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
|
||||
==
|
||||
==
|
||||
==
|
||||
--
|
17
pkg/arvo/neo/cod/std/src/con/node-groupchat-diff.hoon
Normal file
17
pkg/arvo/neo/cod/std/src/con/node-groupchat-diff.hoon
Normal file
@ -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]
|
||||
==
|
28
pkg/arvo/neo/cod/std/src/con/node-messenger-diff.hoon
Normal file
28
pkg/arvo/neo/cod/std/src/con/node-messenger-diff.hoon
Normal file
@ -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]
|
||||
==
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user