mirror of
https://github.com/urbit/shrub.git
synced 2024-11-23 20:26:54 +03:00
messenger self ui
This commit is contained in:
parent
46f168db43
commit
d7997a4001
@ -6,10 +6,8 @@
|
|||||||
++ kids
|
++ kids
|
||||||
:+ ~ %y
|
:+ ~ %y
|
||||||
%- ~(gas by *lads:neo)
|
%- ~(gas by *lads:neo)
|
||||||
:~ :- [|/%theirs |]
|
:~ :- [|/%tas |]
|
||||||
[pro/%message-pub (sy %sig ~)]
|
[pro/%sig (sy %sig ~)]
|
||||||
:- [|/%mine |]
|
|
||||||
[pro/%message-sub (sy %sig ~)]
|
|
||||||
==
|
==
|
||||||
++ deps *deps:neo
|
++ deps *deps:neo
|
||||||
++ form
|
++ form
|
||||||
|
@ -7,10 +7,8 @@
|
|||||||
++ kids
|
++ kids
|
||||||
:+ ~ %y
|
:+ ~ %y
|
||||||
%- ~(gas by *lads:neo)
|
%- ~(gas by *lads:neo)
|
||||||
:~ :- [|/%pub |]
|
:~ :- [|/%tas |]
|
||||||
[pro/%message-pub (sy %sig ~)]
|
[pro/%sig (sy %sig ~)]
|
||||||
:- [|/%sub |]
|
|
||||||
[pro/%message-sub (sy %sig ~)]
|
|
||||||
==
|
==
|
||||||
++ deps *deps:neo
|
++ deps *deps:neo
|
||||||
++ form
|
++ form
|
||||||
|
@ -1,19 +1,13 @@
|
|||||||
/@ messenger
|
|
||||||
/@ dm-diff
|
/@ dm-diff
|
||||||
|
/@ groupchat
|
||||||
/@ groupchat-diff
|
/@ groupchat-diff
|
||||||
|
/@ messenger
|
||||||
/@ messenger-diff
|
/@ messenger-diff
|
||||||
=>
|
/@ ship
|
||||||
|%
|
/- oxy=oxygen
|
||||||
++ send-invites
|
/- feather-icons
|
||||||
|= [invites=(set ship) location=pith]
|
/- serv=sky-server
|
||||||
%+ turn
|
/- su=shrub-utils
|
||||||
~(tap in invites)
|
|
||||||
|= =ship
|
|
||||||
:- location
|
|
||||||
=/ provider ~[p/ship %home %messenger]
|
|
||||||
~& provider
|
|
||||||
[%poke groupchat-diff/!>([%invite ship provider])]
|
|
||||||
--
|
|
||||||
::
|
::
|
||||||
|%
|
|%
|
||||||
++ state pro/%messenger
|
++ state pro/%messenger
|
||||||
@ -23,7 +17,7 @@
|
|||||||
::
|
::
|
||||||
++ poke
|
++ poke
|
||||||
:: %dm-diff is for creating DMs
|
:: %dm-diff is for creating DMs
|
||||||
(sy %dm-diff %groupchat-diff %messenger-diff ~)
|
(sy %dm-diff %groupchat-diff %messenger-diff %eyre-task ~)
|
||||||
:: +kids: Children for messenger
|
:: +kids: Children for messenger
|
||||||
++ kids
|
++ kids
|
||||||
:: Child constraints
|
:: Child constraints
|
||||||
@ -34,24 +28,26 @@
|
|||||||
::
|
::
|
||||||
:+ ~ %y
|
:+ ~ %y
|
||||||
%- ~(gas by *lads:neo)
|
%- ~(gas by *lads:neo)
|
||||||
:~ :- [&/%dms |/%p |]
|
:~
|
||||||
[pro/%dm (sy %dm-diff ~)]
|
:- [|/%tas |/%p |/%t |]
|
||||||
:- [&/%groupchats |/%p |/%t |]
|
[[%or [pro/%ship pro/%groupchat ~]] (sy %dm-diff %groupchat-diff ~)]
|
||||||
[pro/%groupchat (sy %groupchat-diff ~)]
|
|
||||||
==
|
==
|
||||||
++ deps *deps:neo
|
++ deps *deps:neo
|
||||||
++ form
|
++ form
|
||||||
:: ^- form:neo
|
:: ^- form:neo
|
||||||
|
=<
|
||||||
|_ [=bowl:neo =aeon:neo state=pail:neo]
|
|_ [=bowl:neo =aeon:neo state=pail:neo]
|
||||||
|
+* web ~(. +> [bowl state])
|
||||||
++ init
|
++ init
|
||||||
|= old=(unit pail:neo)
|
|= old=(unit pail:neo)
|
||||||
^- (quip card:neo pail:neo)
|
^- (quip card:neo pail:neo)
|
||||||
[~ messenger/!>(~)]
|
:_ messenger/!>(~)
|
||||||
|
:~ (bind:oxy bowl)
|
||||||
|
==
|
||||||
::
|
::
|
||||||
++ poke
|
++ poke
|
||||||
|= [=stud:neo vax=vase]
|
|= [=stud:neo vax=vase]
|
||||||
^- (quip card:neo pail:neo)
|
^- (quip card:neo pail:neo)
|
||||||
~& >> stud
|
|
||||||
?+ stud !!
|
?+ stud !!
|
||||||
%dm-diff
|
%dm-diff
|
||||||
~& >>> 'got dm diff'
|
~& >>> 'got dm diff'
|
||||||
@ -90,14 +86,253 @@
|
|||||||
(welp here.bowl ~[%groupchats p/our.bowl t/name.poke])
|
(welp here.bowl ~[%groupchats p/our.bowl t/name.poke])
|
||||||
:_ state
|
:_ state
|
||||||
:- [location [%make %groupchat ~ ~]]
|
:- [location [%make %groupchat ~ ~]]
|
||||||
(send-invites invites.poke location)
|
(send-invites:web invites.poke location)
|
||||||
::
|
::
|
||||||
%invite-to-groupchat
|
%invite-to-groupchat
|
||||||
=/ location
|
=/ location
|
||||||
(welp here.bowl ~[%groupchats p/our.bowl t/name.poke])
|
(welp here.bowl ~[%groupchats p/our.bowl t/name.poke])
|
||||||
:_ state
|
:_ state
|
||||||
(send-invites invites.poke location)
|
(send-invites:web invites.poke location)
|
||||||
==
|
==
|
||||||
|
%eyre-task
|
||||||
|
~& (kids-at-pith:su kids.bowl /)
|
||||||
|
(handle:web !<(task:eyre:neo vax))
|
||||||
==
|
==
|
||||||
--
|
--
|
||||||
--
|
|_ [=bowl:neo =pail:neo]
|
||||||
|
::
|
||||||
|
++ send-invites
|
||||||
|
|= [invites=(set ship) location=pith]
|
||||||
|
%+ turn
|
||||||
|
~(tap in invites)
|
||||||
|
|= =ship
|
||||||
|
:- location
|
||||||
|
=/ provider ~[p/ship %home %messenger]
|
||||||
|
~& provider
|
||||||
|
[%poke groupchat-diff/!>([%invite ship provider])]
|
||||||
|
::
|
||||||
|
++ handle
|
||||||
|
|= [eyre-id=@ta req=inbound-request:eyre]
|
||||||
|
^- (quip card:neo pail:neo)
|
||||||
|
~& p.pail
|
||||||
|
:_ pail
|
||||||
|
?+ method.request.req
|
||||||
|
~|(%unsupported-http-method !!)
|
||||||
|
::
|
||||||
|
%'GET'
|
||||||
|
=; manx
|
||||||
|
(respond:oxy [bowl eyre-id req manx])
|
||||||
|
%~ render
|
||||||
|
ui
|
||||||
|
(pave:neo pax:(parse-url:oxy request.req))
|
||||||
|
::
|
||||||
|
%'POST'
|
||||||
|
=/ body (parse-body:oxy request.req)
|
||||||
|
=/ mu ~(. manx-utils:oxy body)
|
||||||
|
=/ head (@tas (got:mu %head))
|
||||||
|
?+ head ~|(%unsupported-request !!)
|
||||||
|
::
|
||||||
|
%new-dm
|
||||||
|
=/ partner=ship ;; @p (slav %p (vol:mu "invites"))
|
||||||
|
%+ welp
|
||||||
|
(respond:oxy [bowl eyre-id req *manx])
|
||||||
|
[here.bowl %poke [%messenger-diff !>([head partner])]]~
|
||||||
|
::
|
||||||
|
%new-groupchat
|
||||||
|
=/ invites=tape
|
||||||
|
=/ val=tape (need (val:mu "invites"))
|
||||||
|
?: =(' ' (rear val)) (snip val)
|
||||||
|
val
|
||||||
|
=/ parsed-invites=(set @p)
|
||||||
|
%- silt
|
||||||
|
%+ scan (weld " " invites)
|
||||||
|
%- star
|
||||||
|
;~ pose
|
||||||
|
;~ pfix (jest ' ~')
|
||||||
|
fed:ag
|
||||||
|
==
|
||||||
|
;~ pfix (jest ', ~')
|
||||||
|
fed:ag
|
||||||
|
==
|
||||||
|
==
|
||||||
|
=/ value (val:mu "name")
|
||||||
|
=/ name=cord
|
||||||
|
:: TODO: if invites are longer than some amount of character
|
||||||
|
?~ value (crip invites)
|
||||||
|
(crip (need value))
|
||||||
|
%+ welp
|
||||||
|
(respond:oxy [bowl eyre-id req *manx])
|
||||||
|
[here.bowl %poke [%messenger-diff !>([head name parsed-invites])]]~
|
||||||
|
::
|
||||||
|
%messenger-created
|
||||||
|
~& >>> %meesenger-created
|
||||||
|
=; manx
|
||||||
|
(respond:oxy [bowl eyre-id req manx])
|
||||||
|
%~ render
|
||||||
|
ui
|
||||||
|
(pave:neo pax:(parse-url:oxy request.req))
|
||||||
|
::
|
||||||
|
==
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ ui
|
||||||
|
|_ here=pith
|
||||||
|
++ render
|
||||||
|
^- manx
|
||||||
|
;html
|
||||||
|
;head
|
||||||
|
;meta(charset "UTF-8");
|
||||||
|
;title: home
|
||||||
|
;* old-standard-head-tags:serv
|
||||||
|
;* standard-head-tags:serv
|
||||||
|
;meta
|
||||||
|
=name "htmx-config"
|
||||||
|
=content (trip '{"ignoreTitle":"true"}')
|
||||||
|
;
|
||||||
|
==
|
||||||
|
==
|
||||||
|
;body
|
||||||
|
=hx-ext "dom-enc,response-targets"
|
||||||
|
;div.p2.fc.ac.view.g2.ma
|
||||||
|
;style: {style}
|
||||||
|
;+ make-chat
|
||||||
|
;+ all-chats
|
||||||
|
==
|
||||||
|
==
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ 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%;
|
||||||
|
}
|
||||||
|
.bc1{
|
||||||
|
border: solid 1px var(--b2);
|
||||||
|
}
|
||||||
|
'''
|
||||||
|
::
|
||||||
|
++ make-chat
|
||||||
|
=/ oninput
|
||||||
|
%- 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");
|
||||||
|
}
|
||||||
|
'''
|
||||||
|
:: """
|
||||||
|
:: this.setAttribute("value", this.value); this.nextElementSibling.nextElementSibling.setAttribute('hx-get', '{(en-tape:pith:neo here.bowl)}/dms/' + this.value); htmx.process(document.body);
|
||||||
|
:: """
|
||||||
|
;form.fr.jc.g1.w70
|
||||||
|
=hx-post (en-tape:pith:neo here)
|
||||||
|
=head "new-dm"
|
||||||
|
=hx-swap "none"
|
||||||
|
=hx-on-htmx-after-request "$(this).find('.redirect').emit('messenger-created')"
|
||||||
|
;input.grow.bc1.p2.br1
|
||||||
|
=name "invites"
|
||||||
|
=type "text"
|
||||||
|
=required ""
|
||||||
|
=placeholder "Start chat (e.g. ~sampel-palnet)"
|
||||||
|
=oninput oninput
|
||||||
|
=autocomplete "off"
|
||||||
|
;
|
||||||
|
==
|
||||||
|
;input.hidden.grow.bc1.p2.br1
|
||||||
|
=type "text"
|
||||||
|
=name "name"
|
||||||
|
=placeholder "chat name"
|
||||||
|
=oninput (trip 'this.setAttribute("value", this.value);')
|
||||||
|
;
|
||||||
|
==
|
||||||
|
;div.redirect.hidden
|
||||||
|
=hx-post (en-tape:pith:neo here)
|
||||||
|
=head "messenger-created"
|
||||||
|
=hx-trigger "messenger-created"
|
||||||
|
=hx-swap "outerHTML"
|
||||||
|
=hx-target "body"
|
||||||
|
;
|
||||||
|
==
|
||||||
|
;button.loader.br1.hover.p2.b0.bc1
|
||||||
|
;span.loaded; >
|
||||||
|
;span.loading
|
||||||
|
;+ loading.feather-icons
|
||||||
|
==
|
||||||
|
==
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ all-chats
|
||||||
|
~& > (kids-at-pith:su kids.bowl /)
|
||||||
|
=/ kids
|
||||||
|
%+ skid ~(tap of:neo kids.bowl)
|
||||||
|
|= [=pith =idea:neo]
|
||||||
|
=(p.q.saga.idea %groupchat)
|
||||||
|
^- manx
|
||||||
|
;div.fc.as.g1.w70
|
||||||
|
;div.fc.ac.g1.wf
|
||||||
|
=id "dms"
|
||||||
|
;* %+ turn q.kids
|
||||||
|
|= [=pith =idea:neo]
|
||||||
|
?~ pith
|
||||||
|
;span.hidden: no dms
|
||||||
|
?: (lte 3 (lent pith))
|
||||||
|
;h1.hidden: {<pith>}
|
||||||
|
(dm pith)
|
||||||
|
==
|
||||||
|
;div.fc.ac.g1.wf
|
||||||
|
=id "groupchats"
|
||||||
|
;* %+ turn p.kids
|
||||||
|
|= [=pith =idea:neo]
|
||||||
|
?~ pith ;span.hidden: no groupchats
|
||||||
|
(chat pith)
|
||||||
|
==
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ dm
|
||||||
|
|= =pith
|
||||||
|
=/ ship
|
||||||
|
?. ?=([%p @p] (rear pith)) *@p
|
||||||
|
+:;;([%p @p] (rear pith))
|
||||||
|
^- manx
|
||||||
|
;a.br1.hover.b0.fr.jb.wf.bc1
|
||||||
|
=href (en-tape:pith:neo (welp here.bowl pith))
|
||||||
|
=hx-swap "innerHTML"
|
||||||
|
;h3.s-1.p2: {<ship>}
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ chat
|
||||||
|
|= =pith
|
||||||
|
~& pith
|
||||||
|
=/ org=@p +:;;([%p @p] (snag 1 `(list iota)`pith))
|
||||||
|
::=/ members=(list ship) ~(tap in members:!<(groupchat q.q.saga.idea))
|
||||||
|
=/ chat +:;;([%t @t] (rear pith))
|
||||||
|
^- manx
|
||||||
|
;div.wf.br1.fc.g1
|
||||||
|
;div.fr.g1
|
||||||
|
;a.br1.hover.fr.jb.g2.wf.bc1.b0
|
||||||
|
=href (en-tape:pith:neo (welp here.bowl pith))
|
||||||
|
=hx-swap "innerHTML"
|
||||||
|
;h3.s-1.p2: {(trip chat)}
|
||||||
|
;h3.s-1.p2: {<org>}
|
||||||
|
==
|
||||||
|
==
|
||||||
|
==
|
||||||
|
--
|
||||||
|
--
|
||||||
|
--
|
||||||
|
Loading…
Reference in New Issue
Block a user