Merge remote-tracking branches 'philipcmonk/ford-fix', 'ray/lune-nule' and 'ohaitch/talk-comments'

Conflicts:
	mar/tree/comments.hoon

Fix off-by-one in marks that was removing the last byte of clay files
Add ++lune/++nule Unix textfile arms
Route .tree 'comments' input through talk
This commit is contained in:
Raymond Pasco 2016-02-29 17:11:50 -05:00
commit e1480cb570
12 changed files with 264 additions and 168 deletions

View File

@ -3,7 +3,7 @@
:: :: ::
/? 310
/- talk, sole
/+ talk, sole
/+ talk, sole, time-to-id
/= seed /~ !>(.)
::
::::
@ -72,6 +72,7 @@
== ::
++ pear :: poke fruit
$% {$talk-command command} ::
{$write-comment path ship cord} ::
== ::
++ card :: general card
$% {$diff lime} ::
@ -1292,6 +1293,49 @@
=. +>.$ pa-abet:(~(pa-reform pa man pur) con)
?:(neu +>.$ ra-homes)
::
++ ra-base-hart .^(hart %e /(scot %p our.hid)/host/(scot %da now.hid))
++ ra-comment
|= {pax/path txt/@t}
=. ..ra-emit
%+ ra-emit ost.hid
:* %poke
/comment
[our.hid %hood]
[%write-comment pax src.hid txt]
==
=+ man=%comments
?: (~(has by stories) man)
(ra-consume-comment man pax txt)
=. ..ra-apply
%+ ra-apply our.hid
:+ %design man
:- ~ :- ~
:- 'letters to the editor'
[%brown ~]
=. ..ra-consume
%^ ra-consume & our.hid
:^ (shaf %init eny.hid)
(my [[%& our.hid (main our.hid)] *envelope %pending] ~)
now.hid
[~ %app %tree 'receiving comments, ;join %comments for details']
(ra-consume-comment man pax txt)
::
++ ra-consume-comment
|= {man/knot pax/path txt/@t} ^+ +>
=+ nam==+(xap=(flop pax) ?~(xap "" (trip i.xap))) :: file name
=+ fra=(crip (time-to-id now.hid)) :: url fragment
%^ ra-consume &
src.hid
:* (shaf %comt eny.hid)
(my [[%& our.hid man] *envelope %pending] ~)
now.hid
(sy /comment eyre+pax ~)
:- %mor :~
[%fat text+(lore txt) [%url [ra-base-hart `pax ~] `fra]]
[%app %tree (crip "comment on /{nam}")]
==
==
::
++ ra-know :: story monad
|= man/knot
|* fun/$-(_pa _+>)
@ -1973,7 +2017,7 @@
$app tan+~[rose+[": " ~ ~]^~[leaf+"[{(trip p.sep)}]" leaf+(trip q.sep)]]
$url url+(crip (earf p.sep))
$mor mor+(turn p.sep |=(speech ^$(sep +<)))
$fat [%mor tan+(tr-rend-tors p.sep) $(sep q.sep) ~]
$fat [%mor $(sep q.sep) tan+(tr-rend-tors p.sep) ~]
==
::
++ tr-rend-tors
@ -1989,8 +2033,8 @@
%- ~(gas in *(set partner))
(turn (~(tap by aud)) |=({a/partner *} a))
::
++ chow
|= {len/@u txt/tape}
++ tr-chow
|= {len/@u txt/tape} ^- tape
?: (gth len (lent txt)) txt
=. txt (scag len txt)
|-
@ -2000,19 +2044,29 @@
?~ t.txt "…"
[i.txt $(txt t.txt)]
::
++ tr-both
|= {a/tape b/tape} ^- tape
?: (gth (lent a) 62) (tr-chow 64 a)
%+ weld a
(tr-chow (sub 64 (lent a)) " {b}")
::
++ tr-text
|= oug/?
^- tape
?+ -.sep ~&(tr-lost+sep "")
$mor
?~ p.sep ~&(%tr-mor-empty "")
|- ^- tape
?~ t.p.sep ^$(sep i.p.sep)
(tr-both ^$(sep i.p.sep) $(p.sep t.p.sep))
::
$fat
=+ rem=$(sep q.sep)
?: (gth (lent rem) 62) (chow 64 rem)
=- "{rem}{(chow (sub 64 (lent rem)) " {-}")}"
%+ tr-both $(sep q.sep)
?+ -.p.sep "..."
$tank ~(ram re %rose [" " `~] +.p.sep)
==
::
$exp (chow 66 '#' ' ' (trip p.sep))
$exp (tr-chow 66 '#' ' ' (trip p.sep))
$url =+ ful=(earf p.sep)
?: (gth 64 (lent ful)) ['/' ' ' ful]
:+ '/' '_'
@ -2035,7 +2089,7 @@
(weld " " txt)
::
$app
(chow 64 "[{(trip p.sep)}]: {(trip q.sep)}")
(tr-chow 64 "[{(trip p.sep)}]: {(trip q.sep)}")
==
--
::
@ -2146,6 +2200,10 @@
=+ grams:(~(got by stories) man)
[ost.hid %info /jamfile our.hid (foal paf [%talk-telegrams !>(-)])]
::
++ poke-talk-comment
|= {pax/path txt/@t} ^- (quip move +>)
ra-abet:(ra-comment:ra pax txt)
::
++ poke-talk-save
|= man/knot
^- (quip move +>)

View File

@ -228,119 +228,62 @@
==
::
++ favi :: XX favicon
0w3.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~LX-.~~HW-.L~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.Rdjk~.VWuDL.-3wUf.~zEWe.~Yj4N.f~Y~f.P~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~-~LX.~~lBp.m~~nR.Zv~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.RZvn~.GqCF~.Qt7h~.Ya2wH.~0000.~M000.fY000.
3~0w8.2~Qx8.if~eP.IX~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~fP.Y~QB9.ivY00.03~k5.1g~Z~.vT~~~.~~~~~.~~~~~.~~~~~.FWuD~.
CpCp~.P8OcL.Y0003.~0000.~M000.fY000.3~000.0~M00.0fY00.03~00.00~Nk.l5v-W.KHH~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~-QJ.bj~00.
00~M0.00fY0.003~6.hAp~S.FGqL-.6xEr~.oC9y~.NUu7L.Y0003.~0000.~M000.fY000.3~000.
0~M00.0fY00.03~00.00~M0.00fY0.003~0.000~N.sn5~~.fPY~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~Z7.hQvYr.6NL~0.000~M.000fY.0003~.0000~.
M000f.Y0003.~0000.~M000.fY000.3~000.0~M00.0fYJb.iT~sT.dP~Vu.nB~ZZ.vnT~a.iAF~M.
000fY.0003~.0000~.VGqCL.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~Y.D9OvY.B9in~.0000~.M000f.Y0003.~0000.~M000.fY000.3~000.0~M41.
0vZ1g.k7~Ha.OI~~n.RZv~~.~~~~~.~~~~~.~~~~~.HW-L~.jAVe~.M000f.YNcj7.~YLbO.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.-byUL.
ZzoSf.~3MYf.~M000.fY000.3~000.0~MQd.3vZik.Bb~Kb.yU~~P.Y~f~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~IXeP.~ezEW.~WGGG.L~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~pSt.D~DFW.u~Uu7.x~-tD.
pT~RZ.vn~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~IXe.
P~-LH.W~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~0000.00000.00000.00000.00000.50000.00002.000g0.00400.000w0.000a0.00000.
00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.
00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.
00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.
00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.
00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.00000.
00000.00000.3~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.Rdjk~.~bOYL.~~~~~.~~~~~.~~TZ~.v-ZLr.T~r6N.I~Rtn.l~-rC.
VL~-~.LX~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.ZLrS~.OMIbf.Z2gAb.~JHqS.~V-vD.~Y-fz.
X~000.0~M00.0fY00.03~00.00~S1.wof~U.-fz~~.~~~~~.~~~~~.~~~~~.~~~~~.~DV-v.ZDpSv.
~0000.~M000.fY000.3~000.0~Qp6.hL-FG.qD~LX.-~~Qt.7h~Yw.823~Y.LbO~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~LX-.~WCFG.vZtnl.T~rmR.J~Yf3.M~~~~.~~~~~.~~~~~.~~~~J.XuT~N.
Yv7~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.
~~~~~.~~~~~.~0000.00000.00000.00000.00000.1g000.00002.000g0.00200.000g0.000a0.
001kU.001gE.02000.g0082.00000.C0005.a00w0.04001.0g008.00g00
%+ can 6 :~
[20 0wf~.~0000.00000.00000.00000.00000.1g000.00002.000g0.00200.000g0.
000a0.001kU.001gE.02000.g0082.00000.C0005.a00w0.04001.0g008.00g00]
::
[98 (fil 6 98 0w3.~~~~~)]
[59 0wf~~~Z.jkRf~.OYLb~.~~~~~.~~~~~.~Z~vT.~LrSZ.~SNIr.fZnlR.v~CVK.r~~LX.
-~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.rSZLY.Ib2P~.gA92~.XqSJL.-vDV~.~fzU-.
~M000.fY000.3~000.0~M00.0fZwo.63~-f.zU~~~.~~~~~.~~~~~.~~~~~.~~~~~.V-vD~.
pStD~.M000f.Y0003.~0000.~M000.fZ6hA.r~GqC.F~X-~.L~Z7h.Qv~82.0w~~b.OYL~~.
~~~~~.~~~~~.~~~~~.~~~~~.~~~~~.~X-~L.-FGqD.~nlRt.~SRJr.v~3MY.f~~~~.~~~~~.
~~~~~.~~~Xu.TJ~Yv.7N~~~]
::
[98 (fil 6 98 0w3.~~~~~)]
[1 0wf~~]
[63 (fil 6 63 0w0)]
[11 0wf~~0.00000.00000.00000.00000.00050.00000.00200.0g000.40000.0w000.0a000]
[389 (fil 6 389 0w3.~~~~~)]
[3 0w~.~~~Xe.PI~~H.W-L~~]
[9 (fil 6 9 0w3.~~~~~)]
[6 0w~~.~~StD.p~VWu.DL-7x.Uv~Dp.St~Zv.nR~~~]
[14 (fil 6 14 0w3.~~~~~)]
[4 0w3~.~~~IX.eP~ez.EW~WG.GGL~~]
[5 (fil 6 5 0w3.~~~~~)]
[11 0wf~~~.-byUL.ZzoSf.~3MYf.~M000.fY000.
3~000.0~MQd.3vZik.Bb~Kb.yU~~P.Y~f~~]
[11 (fil 6 11 0w3.~~~~~)]
[13 0wfY.10g7~.gk51~.WOIHf.~RZvn.~~~~~.~~~~~.
~~~~~.~~W-L.H~QVe.jLY00.03~cj.4N~~b.OYL~~]
[6 (fil 6 6 0wfY0)]
[3 0w~.~~~Os.D9~Ok.B9vY0]
[10 (fil 6 10 0w3.~~~~~)]
[10 0wf.YJbiT.~sTdP.~VunB.~ZZvn.T~aiA.F~M00.0fY00.03~00.00~VG.qCL~~]
[10 (fil 6 10 0wfY0)]
[3 0w~.~~~Qt.7h~NI.r6~Y0]
[9 (fil 6 9 0w3.~~~~~)]
[3 0w3~5N.sn~Y~.fP~~~]
[10 (fil 6 10 0wfY0)]
[10 0w3~~~.-QJbj.~0000.~M000.fY000.3~6hA.p~SFG.qL-6x.Er~oC.9y~NU.u7LY0]
[10 (fil 6 10 0w3.~~~~~)]
[3 0w3~5h.kl~XG.WKL~~]
[7 (fil 6 7 0wfY0)]
[12 0w~~~~.~fPY~.QB9iv.Y0003.~k51g.~Z~vT.~~~~~.
~~~~~.~~~~~.~~~FW.uD~Cp.Cp~P8.OcLY0]
[11 (fil 6 11 0w3.~~~~~)]
[11 0wf~~~.~nRZv.-FGqD.~hQt7.~MEa2.LY000.
3~000.0~M00.0fY20.wb~i4.x8~YX.ePL~~]
[5 (fil 6 5 0w3.~~~~~)]
[4 0w3~.~~-~L.X~~lB.pm~~n.RZv~~]
[13 (fil 6 13 0w3.~~~~~)]
[7 0w3~~.~~kRd.j~DFW.u~Ue3.w~-ez.EX~Nc.j4~~P.Y~f~~]
[9 (fil 6 9 0w3.~~~~~)]
[3 0w~.~~~~L.X-~~H.W-L~~]
[389 (fil 6 389 0w3.~~~~~)]
[1 0wf~~]
==
::
++ js :: static javascript
|%
++ poll :: dependency long-poll
@ -839,7 +782,7 @@
::
++ ses-ya |=(ses/hole ~(. ya ses (~(got by wup) ses)))
++ our-host `hart`[& ~ %& /org/urbit/(rsh 3 1 (scot %p our))]
:: [| [~ 8.445] `/localhost] :: XX testing
:: [| [~ 8.443] `/localhost] :: XX testing
::
++ ames-gram
|=({him/ship gam/gram} (pass-note ~ %a %wont [our him] [%e -.gam] +.gam))
@ -1620,9 +1563,28 @@
..^$(+>- old)
::
++ scry
|= {our/(unit (set monk)) ren/@tas who/ship syd/desk lot/coin tyl/path}
^- (unit (unit (pair mark *)))
~
|= {fur/(unit (set monk)) ren/@tas who/ship syd/desk lot/coin tyl/path}
^- (unit (unit cage))
=+ our=(need hov) :: XX single home
=+ ska=(sloy ski)
=+ sky=|=({* *} `(unit)`=+(a=(ska +<) ?~(a ~ ?~(u.a ~ [~ u.u.a]))))
?. ?=($$ ren) [~ ~]
?. ?=($$ -.lot) [~ ~]
?+ syd [~ ~]
$host
%- (lift (lift |=(a/hart [%hart !>(a)])))
^- (unit (unit hart))
?. =(our who)
?. =([%da now] p.lot) [~ ~]
~& [%e %scry-foreign-host who]
~ :: XX add non-scry binding to $hat gram
=. p.lot ?.(=([%da now] p.lot) p.lot [%tas %real])
?+ p.lot [~ ~]
{$tas $fake} ``[& [~ 8.443] %& /localhost] :: XX from unix
{$tas $real}
``~(our-host ye [`duct`~[/] [now eny our sky] ~] bol)
==
==
::
++ stay `bolo`+>-.$
++ take :: accept response

View File

@ -1691,7 +1691,7 @@
=- (flaw cof leaf+"{<p.cay>} data with bad diff" -)
[>type=p.q.coy< >want=p:!>(*(urge cord))< ~]
=+ pac=(role (lurk (lore u.txt) u.dif))
(fine cof `gage`[%& p.cay [%atom %t ~] (end 3 (dec (met 3 pac)) pac)])
(fine cof `gage`[%& p.cay [%atom %t ~] pac])
::
%+ cope (fang cof p.cay)
|= {cof/cafe pro/vase}

View File

@ -4819,6 +4819,38 @@
$(i +(i), tez t.tez, our i.tez)
$(i +(i), tez t.tez, our (cat 3 (cat 3 our 10) i.tez))
::
++ lune :: cord by unix line
~/ %lune
|= txt/@t
?~ txt
^- (list @t) ~
=+ [byt=(rip 3 txt) len=(met 3 txt)]
=| {lin/(list @t) off/@}
^- (list @t)
%- flop
|- ^+ lin
?: =(off len)
~| %noeol !!
?: =((snag off byt) 10)
?: =(+(off) len)
[(rep 3 (scag off byt)) lin]
%= $
lin [(rep 3 (scag off byt)) lin]
byt (slag +(off) byt)
len (sub len +(off))
off 0
==
$(off +(off))
::
++ nule :: lines to unix cord
~/ %nule
|= lin/(list @t)
^- @t
%+ can 3
%+ turn lin
|= t/@t
[+((met 3 t)) (cat 3 t 10)]
::
++ lump :: apply patch
|= {don/udon src/*}
^- *

10
lib/time-to-id.hoon Normal file
View File

@ -0,0 +1,10 @@
:: Use lower bits of @da as hash identifier
::
:::: /hoon/time-to-id/lib
::
/? 310
!:
:::: ~fyr
::
|= a/time ^- tape
['c' (s-co:co f:(yell a))]

View File

@ -42,9 +42,9 @@
(poke--data [`typ /web/paste/(scot %da now)] %mime / (taco txt))
::
++ poke-comment
|= {pax/path txt/@t} ^+ abet
|= {pax/path him/ship txt/@t} ^+ abet
=. pax [%web (welp pax /comments/(scot %da now))]
=. txt (rap 3 (scot %p src) ': ' txt ~)
=. txt (rap 3 (scot %p him) ': ' txt ~)
(poke--data [`%md pax] %mime / (taco txt))
::
++ poke--data

View File

@ -1,5 +1,5 @@
::
:::: /hoon/comment/write/mar
:::: /hoon/comment/talk/mar
::
/? 310
!:

View File

@ -2,7 +2,7 @@
:::: /hoon/comments/tree/mar
::
/? 310
/+ react
/+ react, time-to-id
!:
::::
::
@ -15,6 +15,7 @@
%+ turn
(sort all |=({a/* b/*} (lor b a)))
|= {a/time b/manx} ^- ^json
=. a.g.b [id+(time-to-id a) a.g.b]
(jobe time+(jode a) body+(react-to-json:react b) ~)
--
++ grab |% :: convert from

View File

@ -3,16 +3,16 @@
:::: /hoon/rss-xml/ren
::
/? 310
/= sum /snip/
/= sum /&snip&elem&/|(/elem/ /~[;div;])
/= kid /^ (map knot {marl marl})
/_ /snip/
/_ /&snip&/elem/
/$ |=({bem/beam *} [our=p.bem tub=(slag 1 (flop s.bem))])
!:
:::: ~fyr, ~tasfyn-partyv
::
~& [sum=sum kid=kid]
::~& [sum=sum kid=kid]
:: Link from relative path
=+ hok=`hart`[& ~ &+/org/urbit/(rsh 3 1 (scot %p our))]
=+ hok=.^(hart %e /(scot %p our)/host/real)
=+ ref=|=(a/path (earn hok `(weld tub a) ~))
:: urb:front attrs confuse RSS validators, readers
=+ no-meta=|=(a/marl ^+(a ?~(a ~ ?.(?=($meta n.g.i.a) a $(a t.a)))))

View File

@ -22,7 +22,7 @@
;link(type "text/css", rel "stylesheet", href "/lib/css/codemirror.css");
;link(type "text/css", rel "stylesheet", href "/tree/main.css");
::;link(type "text/css", rel "stylesheet", href "http://localhost:8000/docs/pub/tree/main.css");
;link(type "application/rss+xml", rel "alternate", href "/{(spud tub)}.rss-xml");
;link(type "application/rss+xml", rel "alternate", href "{(spud tub)}.rss-xml");
;script(type "text/javascript", src "//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js");
;script(type "text/javascript", src "//cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js");
;script(type "text/javascript", src "//cdnjs.cloudflare.com/ajax/libs/react/0.14.6/react.js");

View File

@ -340,40 +340,83 @@ module.exports = recl({
}
return this.props._handlePm(user);
},
renderSpeech: function(speech) {
var con, x;
renderSpeech: function(arg) {
var app, con, exp, fat, lin, mor, tax, url, x;
lin = arg.lin, app = arg.app, exp = arg.exp, tax = arg.tax, url = arg.url, mor = arg.mor, fat = arg.fat;
switch (false) {
case !((con = speech.lin) || (con = speech.app) || (con = speech.exp) || (con = speech.tax)):
case !(con = lin || app || exp || tax):
return con.txt;
case !(con = speech.url):
case !url:
return a({
href: con.txt,
href: url.txt,
target: "_blank",
key: "speech"
}, con.txt);
case !(con = speech.mor):
return con.map(this.renderSpeech);
}, url.txt);
case !mor:
return mor.map(this.renderSpeech);
case !fat:
return [
this.renderSpeech(fat.taf), div({
className: "fat"
}, this.renderTorso(fat.tor))
];
default:
return "Unknown speech type:" + ((function() {
var results;
results = [];
for (x in speech) {
for (x in arguments[0]) {
results.push(" %" + x);
}
return results;
})()).join('');
}).apply(this, arguments)).join('');
}
},
renderTorso: function(arg) {
var name, tank, text, x;
text = arg.text, tank = arg.tank, name = arg.name;
switch (false) {
case text == null:
return text;
case tank == null:
return pre({}, tank.join("\n"));
case name == null:
return [name.nom, ": ", this.renderTorso(name.mon)];
default:
return "Unknown torso:" + ((function() {
var results;
results = [];
for (x in arguments[0]) {
results.push(" %" + x);
}
return results;
}).apply(this, arguments)).join('');
}
},
classesInSpeech: function(arg) {
var app, exp, fat, lin, mor, url;
url = arg.url, exp = arg.exp, app = arg.app, lin = arg.lin, mor = arg.mor, fat = arg.fat;
switch (false) {
case !url:
return "url";
case !exp:
return "exp";
case !app:
return "say";
case !lin:
return {
say: lin.say === false
};
case !mor:
return mor != null ? mor.map(this.classesInSpeech) : void 0;
case !fat:
return this.classesInSpeech(fat.taf);
}
},
render: function() {
var attachments, aude, audi, className, delivery, mainStation, name, ref1, speech, thought, type;
var aude, audi, className, delivery, mainStation, name, speech, thought, type;
thought = this.props.thought;
delivery = _.uniq(_.pluck(thought.audience, "delivery"));
speech = thought.statement.speech;
attachments = [];
while (speech.fat != null) {
attachments.push(pre({}, speech.fat.tor.tank.join("\n")));
speech = speech.fat.taf;
}
if (speech == null) {
return;
}
@ -385,17 +428,8 @@ module.exports = recl({
mainStation = window.util.mainStationPath(window.urb.user);
type = indexOf.call(aude, mainStation) >= 0 ? 'private' : 'public';
className = clas('gram', (this.props.sameAs ? "same" : "first"), (delivery.indexOf("received") !== -1 ? "received" : "pending"), {
say: ((ref1 = speech.lin) != null ? ref1.say : void 0) === false,
url: speech.url,
'new': this.props.unseen
}, (function() {
switch (false) {
case speech.app == null:
return "say";
case speech.exp == null:
return "exp";
}
})());
}, this.classesInSpeech(speech));
return div({
className: className,
'data-index': this.props.index,
@ -425,10 +459,7 @@ module.exports = recl({
}, this.convTime(thought.statement.date))), div({
className: "speech",
key: "speech"
}, this.renderSpeech(speech), attachments.length ? div({
className: "fat",
key: "fat"
}, attachments) : void 0));
}, this.renderSpeech(speech)));
}
});

View File

@ -53,7 +53,7 @@ module.exports = {
if (path[0] !== "/") {
path = "/" + path;
}
return TreePersistence.put("write-comment", path, text);
return TreePersistence.put("talk-comment", path, text);
},
setCurr: function(path) {
return TreeDispatcher.handleViewAction({
@ -1804,12 +1804,14 @@ module.exports = {
});
},
put: function(mark, pax, txt) {
var appl;
appl = /[a-z]*/.exec(mark)[0];
return urb.send({
pax: pax,
txt: txt
}, {
mark: mark,
appl: 'hood'
appl: appl
});
},
encode: function(obj) {