diff --git a/pkg/arvo/web/testing.udon b/pkg/arvo/TESTING.udon similarity index 99% rename from pkg/arvo/web/testing.udon rename to pkg/arvo/TESTING.udon index 05bf295fd..faebbea83 100644 --- a/pkg/arvo/web/testing.udon +++ b/pkg/arvo/TESTING.udon @@ -55,4 +55,3 @@ I would like to get to a place where any direct scrying of the filesystem is dis Implicit in having a standard way to write tests and a standard `+test` runner is the idea that all functionality on the current desk should be tested. Let's say I'm shipping a program on Urbit and I use multiple third-party libraries. Each of those libraries should have their own test suites placed in `%/tests/`. When I `|merge` their desks into my application desk, having a standard test runner means that all their tests and all my application tests get run. If you're depending on a library, you want to make sure that the tests for your dependencies run when you test your application. - diff --git a/pkg/arvo/app/ask.hoon b/pkg/arvo/app/ask.hoon deleted file mode 100644 index aad53c96e..000000000 --- a/pkg/arvo/app/ask.hoon +++ /dev/null @@ -1,154 +0,0 @@ -:: -:::: /hoon/ask/app - :: -/? 310 -/+ sole, prey -=, sole -|% - ++ card - $% {$diff $sole-effect sole-effect} - == - ++ invited ?($new $sent $ignored) - ++ email @t --- -:: -=, gall -|_ $: bow/bowl - adr/(map email {time invited}) - sos/(map bone sole-share) - wom/(unit ship) - admins/(set ship) - == -++ prompt - ^- sole-prompt - ?~ wom [& %ask-ship ":womb-ship? ~"] - =/ new new-adrs - ?~ new [& %$ " (0) [l,a,i,w,?]"] - [& %$ ": approve {}? ({<(lent new)>}) [y,n,l,a,i,w,?]"] -:: -++ peer-sole - |= path - ^- (quip {bone card} _+>) - ~| [%not-in-whitelist src.bow] - ?> |((~(has in admins) src.bow) =(our.bow src.bow)) - :_ +>.$(sos (~(put by sos) ost.bow *sole-share)) - =- [(effect %mor pro+prompt -)]~ - =+ all=adrs - [(render all) (turn all put-mail)] -:: -++ render :: show list of invites - |= a/(list {time email invited}) ^- sole-effect - ?: =(~ a) txt+"~" - tan+(flop (turn a message)) -:: -++ adrs - =- (sort - |=([a=[=time *] b=[=time *]] (lth time.a time.b))) - %+ turn ~(tap by adr) - |=({a/email b/time c/invited} [tym=b ask=a inv=c]) -:: -++ new-adrs (skim adrs |=({@ @ inv/invited} =(%new inv))) -++ ignored-adrs (skim adrs |=({@ @ inv/invited} =(%ignored inv))) -++ effect |=(fec/sole-effect [ost.bow %diff %sole-effect fec]) -++ message - |= {now/time ask/@t inv/invited} ^- tank - =. now (sub now (mod now ~s1)) - leaf+"ask: {} {} {(trip ask)}" -:: -++ put-mail |=({@ ask/@t inv/invited} =+(pax=(rash ask unix-path) [%sav pax `@t`inv])) -++ unix-path :: split into path of "name" and "extension" - ;~ (glue dot) - (cook crip (star ;~(less dot next))) - ;~(plug (cook crip (star next)) (easy ~)) - == -:: -++ poke-ask-admins - |= a/(set ship) - ?> =(our.bow src.bow) - `+>.$(admins a) -:: -++ poke-ask-mail - |= ask/@t - ^- (quip {bone card} _+>) - ~| have-mail+ask - ?< (~(has by adr) ask) - =. adr (~(put by adr) ask now.bow %new) :: XX electroplating - :_ +>.$ - =/ new [now.bow ask %new] - =+ [mez=[(message new)]~ pro=prompt sav=(put-mail new)] - %+ turn (prey /sole bow) - |=({ost/bone ^} (effect(ost.bow ost) %mor tan+mez pro+prompt sav ~)) -:: -++ poke-sole-action - |= act/sole-action - ^- (quip {bone card} _+>) - =/ som (~(got by sos) ost.bow) - ?- -.act - $clr `+>.$ - $ret - ?^ wom [[(effect mor+help)]~ +>.$] :: show help - ?: =(~ buf.som) [[(effect txt+"Please enter womb ship")]~ +>.$] - =/ try (rose (tufa buf.som) fed:ag) - ?. ?=({%& ^} try) - [[(effect bel+~)]~ +>.$] - => .(wom p.try) :: XX TMI - (transmit set+~ pro+prompt ~) :: XX handle multiple links? - :: - $det :: reject all input - =^ inv som (~(transceive sole som) +.act) - =. sos (~(put by sos) ost.bow som) - ?~ wom - =/ try (rose (tufa buf.som) fed:ag) - ?: -.try `+>.$ - (transmit inv bel+~ ~) - ?: =(`*`"?" buf.som) (transmit inv help) - ?: =(`*`"a" buf.som) (transmit inv (render adrs) ~) - ?: =(`*`"l" buf.som) (transmit inv (render new-adrs) ~) - ?: =(`*`"i" buf.som) (transmit inv (render ignored-adrs) ~) - ?: =(`*`"n" buf.som) - =/ new new-adrs - ?~ new (transmit inv bel+~ ~) - =. inv.i.new %ignored - =. adr (~(put by adr) ask.i.new [tym inv]:i.new) - (transmit inv tan+[(message i.new)]~ pro+prompt ~) - ?: =(`*`"y" buf.som) - =/ new new-adrs - ?~ new (transmit inv bel+~ ~) - =. inv.i.new %sent :: XX pending - =- [[(invite ask.i.new) -<] ->] - =. adr (~(put by adr) ask.i.new [tym inv]:i.new) - (transmit inv tan+[(message i.new)]~ pro+prompt ~) - ?: =(`*`"w" buf.som) - => .(wom ~) :: XX TMI - (transmit inv pro+prompt ~) - (transmit inv bel+~ ~) - == -++ transmit - |= {inv/sole-edit mor/(list sole-effect)} - =/ som (~(got by sos) ost.bow) - =^ det som (~(transmit sole som) inv) - =. sos (~(put by sos) ost.bow som) - [[(effect mor+[det+det mor])]~ +>.$] -:: -++ help - ^- (list sole-effect) - =- (scan - (more (just '\0a') (stag %txt (star prn)))) - %+ welp - ?~ [new-adrs] "" - """ - y - invite current ask - n - ignore current ask - - """ - """ - l - list new asks - i - list ignored asks - a - list all asks - w - reset womb ship - ? - print help - """ -:: -++ invite - |= ask/email - ~| %ask-stub-invite - !! --- diff --git a/pkg/arvo/app/collections.hoon b/pkg/arvo/app/collections.hoon deleted file mode 100644 index 361a11da4..000000000 --- a/pkg/arvo/app/collections.hoon +++ /dev/null @@ -1,610 +0,0 @@ -:: -:::: /app/collections/hoon - :: -/? 309 -/- hall -/+ collections -:: -:: cols: -:: -:: run collections-item renderer on children of /web/collections -:: combine with a bunted config in a +collection structure defined in -:: /lib/collections because the top level collection has no config file -:: -:: whenever any of the clay files that compose this renderer change, this app -:: will recompile and the +prep arm will fire. we then check which files -:: changed and notify the corresponding hall circle of that change -:: -/= cols - /^ collection:collections - /; |= a=(map knot item:collections) - [*config:collections a] - /: /===/web/collections /_ /collections-item/ -:: -=, collections -=, space:userlib -:: -:: state: -:: -:: stores the collection built by above by :cols so that we can compare old -:: and new versions whenever the rendered data changes -:: -~% %landscape ..^is ~ -|_ [bol=bowl:gall sta=state] -:: -:: +this: app core subject -:: -++ this . -:: -:: +prep: -:: -:: on initial boot, create top level hall circle for collections, called %c -:: -:: on subsequent compiles, call +ta-update:ta on the old collection data, -:: then update state to store the new collection data -:: -++ prep - ~/ %land-prep - |= old=(unit state) - ^- (quip move _this) - ?~ old - :_ this - ;: welp - =< ta-done - (~(ta-hall-create-circle ta ~ bol) /c 'collections') - :: - :~ [ost.bol %peer /circles [our.bol %hall] /circles/[(scot %p our.bol)]] - [ost.bol %peer /inbox [our.bol %hall] /circle/inbox/config/grams] - [ost.bol %peer /invites [our.bol %hall] /circle/i/grams] - :: - :: ?. =(%duke (clan:title our.bol)) - :: ~ - :: :_ ~ - :: :* ost.bol %poke /client-action [our.bol %hall] - :: %hall-action %source %inbox & - :: (sy [[(^sein:title our.bol) %urbit-meta] ~]~) - :: == - == - == - ?- -.u.old - %0 - =/ mow=(list move) - =< ta-done - (~(ta-update ta ~ bol) col.u.old cols) - :- mow - %= this - sta [%0 cols str.u.old] - == - == -:: -:: +mack: -:: -:: recieve acknowledgement for permissions changes, print error if it failed -:: -++ mack - |= [wir=wire err=(unit tang)] - ^- (quip move _this) - ?~ err - [~ this] - (mean u.err) -:: -:: +coup: recieve acknowledgement for poke, print error if it failed -:: -++ coup - |= [wir=wire err=(unit tang)] - ^- (quip move _this) - ?~ err - [~ this] - (mean u.err) -:: -:: +poke-collections-action: -:: -:: the main interface for creating and deleting collections and items -:: -++ poke-collections-action - ~/ %coll-poke-collections-action - |= act=action - ^- (quip move _this) - ?: =(who.act our.bol) - :_ this - =< ta-done - (~(ta-act ta ~ bol) act) - :: forward poke if its not meant for us - :: - :_ this - :_ ~ - :* ost.bol %poke - /forward-collections-action - [who.act %collections] - %collections-action act - == -:: -:: +poke-json -:: -:: utility for setting whether or not to display the onboarding page -:: -++ poke-json - ~/ %coll-poke-json - |= jon=json - ^- (quip move _this) - ?: ?=([%o [[%onboard %b ?] ~ ~]] jon) - :_ this - =< ta-done - (~(ta-write ta ~ bol) /web/landscape/onboard/json [%json !>(jon)]) - [~ this] -:: -:: +poke-collections-command -:: -++ poke-collections-command - |= cod=command - ^- (quip move _this) - ?- -.cod - %chat-invite - :_ this - :- :* ost.bol - %poke - /permit - [our.bol %hall] - %hall-action - %permit - nom.cod - %.y - who.cod - == - %+ turn ~(tap in who.cod) - |= guy=@p - ^- move - :* ost.bol - %poke - /invite - [our.bol %hall] - %hall-action - %phrase - aud=(sy [guy %i] ~) - ses=[%inv & our.bol nom.cod]~ - == - :: - %collection-invite - :_ this - :- :* ost.bol - %poke - /permit - [our.bol %hall] - %hall-action - %permit - nom.cod - %.y - who.cod - == - %+ turn ~(tap in who.cod) - |= guy=@p - ^- move - :* ost.bol - %poke - /invite - [our.bol %hall] - %hall-action - %phrase - aud=(sy [guy %i] ~) - ses=[%app col.cod [%inv & our.bol nom.cod]]~ - == - == -:: -:: +peer: -:: -++ peer - |= wir=wire - ^- (quip move _this) - =/ response=streams - ?+ wir - %= str.sta - env.inbox (scag 1.000 env.inbox.str.sta) - == - :: negative range from latest - :: - [%primary @t ~] - =/ val=@ (slav %ud i.t.wir) - %= str.sta - env.inbox (scag val env.inbox.str.sta) - == - :: negative range from offset - :: - [%primary @t @t ~] - =/ offset=@ (slav %ud i.t.wir) - =/ num=@ (slav %ud i.t.t.wir) - %= str.sta - env.inbox (swag [offset num] env.inbox.str.sta) - == - :: - == - :_ this - [ost.bol %diff %collections-prize response]~ -:: -:: +reap: recieve acknowledgement for peer, retry on failure -:: -++ reap - |= [wir=wire err=(unit tang)] - ^- (quip move _this) - ::~& reap+[wir =(~ err)] - ?~ err - :: XX send message to users inbox - [~ this] - ?~ wir - (mean [leaf+"invalid wire for diff: {(spud wir)}"]~) - ?+ i.wir - (mean [leaf+"invalid wire for diff: {(spud wir)}"]~) - :: - %circles - :_ this - [ost.bol %peer /circles [our.bol %hall] /circles/[(scot %p our.bol)]]~ - :: - %inbox - :_ this - [ost.bol %peer /inbox [our.bol %hall] /circle/inbox/config/grams]~ - :: - %invites - :_ this - [ost.bol %peer /invites [our.bol %hall] /circle/i/grams]~ - :: - %our - ?< ?=(~ t.wir) - :_ this - [ost.bol %peer /our/[i.t.wir] [our.bol %hall] /circle/[i.t.wir]/config]~ - == -:: -:: +quit: -:: -++ quit - |= wir=wire - ^- (quip move _this) - ?~ wir - (mean [leaf+"invalid wire for diff: {(spud wir)}"]~) - ?+ i.wir - (mean [leaf+"invalid wire for diff: {(spud wir)}"]~) - :: - %circles - :_ this - [ost.bol %peer /circles [our.bol %hall] /circles/[(scot %p our.bol)]]~ - :: - %inbox - :_ this - [ost.bol %peer /inbox [our.bol %hall] /circle/inbox/config/grams]~ - :: - %invites - :_ this - [ost.bol %peer /invites [our.bol %hall] /circle/i/grams]~ - :: - %our - ?< ?=(~ t.wir) - :_ this - [ost.bol %peer /our/[i.t.wir] [our.bol %hall] /circle/[i.t.wir]/config]~ - == -:: -:: +diff-hall-prize: -:: -++ diff-hall-prize - |= [wir=wire piz=prize:hall] - ^- (quip move _this) - :: - :: - ::~& prize+[wir piz] - ?~ wir - (mean [leaf+"invalid wire for diff: {(spud wir)}"]~) - ?+ i.wir - (mean [leaf+"invalid wire for diff: {(spud wir)}"]~) - :: - :: %circles: subscribe to the configuration of each of our circles - :: - %circles - ?> ?=(%circles -.piz) - =/ noms=(set name:hall) (~(dif in cis.piz) (sy ~[%inbox %i %public])) - :_ this(our-circles.str.sta (~(uni in our-circles.str.sta) noms)) - ^- (list move) - %+ turn ~(tap in noms) - |= nom=name:hall - ^- move - [ost.bol %peer /our/[nom] [our.bol %hall] /circle/[nom]/config] - :: - :: %inbox: fill inbox config, messages and remote configs with prize data - :: - %inbox - ?> ?=(%circle -.piz) - :- ~ - %= this - con.inbox.str.sta `loc.cos.piz - :: - env.inbox.str.sta nes.piz - :: - circles.str.sta - %- ~(uni in circles.str.sta) - ^- (map circle:hall (unit config:hall)) - (~(run by rem.cos.piz) |=(a=config:hall `a)) - == - :: - :: %invites: fill invite messages with prize data - :: - %invites - ?> ?=(%circle -.piz) - :- ~ - %= this - invites.str.sta nes.piz - == - :: - :: %our: - :: - %our - ?> ?=(%circle -.piz) - =/ nom=name:hall &2:wir - :: XX todo: send rumor or let config-change handle it? - :: - :- ~ - %= this - circles.str.sta - (~(put by circles.str.sta) [our.bol nom] `loc.cos.piz) - :: - our-circles.str.sta (~(put in our-circles.str.sta) nom) - == - == -:: -:: +diff-hall-rumor -:: -++ diff-hall-rumor - |= [wir=wire rum=rumor:hall] - ^- (quip move _this) - ::~& rumor+[wir rum] - ?~ wir - (mean [leaf+"invalid wire for diff: {(spud wir)}"]~) - =; upd=[mow=(list move) sta=_this] - :_ sta.upd - %+ welp mow.upd - %+ turn (prey:pubsub:userlib /primary bol) - |= [=bone *] - [bone %diff %hall-rumor rum] - ?+ i.wir - (mean [leaf+"invalid wire for diff: {(spud wir)}"]~) - :: - :: %circles: - :: - %circles - ::~& %circles - ?> ?=(%circles -.rum) - =? dms.str.sta - ?& (is-dm-circle our.bol cir.rum) - !(~(has by dms.str.sta) cir.rum) - == - (~(put by dms.str.sta) cir.rum our.bol ~) - ?: add.rum - :_ this(our-circles.str.sta (~(put in our-circles.str.sta) cir.rum)) - [ost.bol %peer /our/[cir.rum] [our.bol %hall] /circle/[cir.rum]/config]~ - :_ this(our-circles.str.sta (~(del in our-circles.str.sta) cir.rum)) - [ost.bol %pull /our/[cir.rum] [our.bol %hall] ~]~ - :: - :: %inbox: - :: - %inbox - ?> ?=(%circle -.rum) - ?+ -.rum.rum - ::~& inbox-unprocessed-rumor+rum.rum - [~ this] - :: - :: %remove: - :: - %remove - ::~& %inbox-remove - ::~& %removed-story - [~ this] - :: - :: %gram: inbox has recieved messages - :: - %gram - ::~& %inbox-gram - :: XX TODO: handle stack trace message when foreign circle is killed? - :: - ?: (is-dm-circle src.rum.rum) - =/ dms=[ini=ship env=(list envelope:hall)] - (~(got by dms.str.sta) nom.src.rum.rum) - =. env.dms [nev.rum.rum env.dms] - :- ~ - %= this - env.inbox.str.sta [nev.rum.rum env.inbox.str.sta] - dms.str.sta (~(put by dms.str.sta) nom.src.rum.rum dms) - == - :- ~ ::(send-rumor [%new-msg %inbox nev.rum.rum]) - this(env.inbox.str.sta [nev.rum.rum env.inbox.str.sta]) - :: - :: %config: inbox config has changed - :: - %config - =* circ cir.rum.rum - ?+ -.dif.rum.rum - ::~& inbox-unprocessed-config+dif.rum.rum - [~ this] - :: - :: %remove: circle has been erased - :: - %remove - ::~& %inbox-config-remove - :- ~ ::(send-rumor %config-change cir.rum.rum ~) - %= this - circles.str.sta - (~(del by circles.str.sta) cir.rum.rum) - == - :: - :: %source: the sources of our inbox have changed - :: - %source - ::~& %inbox-config-source - ?. =(circ [our.bol %inbox]) - [~ this] - :: we've added a source to our inbox - :: - ?> ?=(^ con.inbox.str.sta) - ?: add.dif.rum.rum - =/ conf=config:hall - %= u.con.inbox.str.sta - src (~(put in src.u.con.inbox.str.sta) src.dif.rum.rum) - == - :- ~ ::(send-rumor %config-change [our.bol %inbox] `conf) - %= this - con.inbox.str.sta `conf - :: - circles.str.sta - ?: (~(has by circles.str.sta) cir.src.dif.rum.rum) - circles.str.sta - (~(put by circles.str.sta) cir.src.dif.rum.rum ~) - == - :: we've removed a source from our inbox - :: - =/ conf=config:hall - %= u.con.inbox.str.sta - src (~(del in src.u.con.inbox.str.sta) src.dif.rum.rum) - == - ::~& inbox+conf - :- ~ ::(send-rumor %config-change [our.bol %inbox] `conf) - %= this - con.inbox.str.sta `conf - :: - circles.str.sta - ?: =(our.bol hos.cir.src.dif.rum.rum) - circles.str.sta - (~(del by circles.str.sta) cir.src.dif.rum.rum) - == - :: - :: %full: recieved a full config update for one of our sources - :: - %full - ::~& %inbox-config-full - =* conf cof.dif.rum.rum - :- ~ ::(send-rumor %config-change circ `conf) - %= this - circles.str.sta (~(put by circles.str.sta) circ `conf) - == - :: - :: %read: recieved a read reciept - :: - %read - ?. =([our.bol %inbox] cir.rum.rum) - [~ this] - ?> ?=(^ con.inbox.str.sta) - :- ~ - %= this - red.u.con.inbox.str.sta red.dif.rum.rum - == - == - == - :: - :: %invites: - :: - %invites - ::~& %invites - ?> ?=(%circle -.rum) - ?> ?=(%gram -.rum.rum) - ?+ -.sep.gam.nev.rum.rum - [~ this(invites.str.sta [nev.rum.rum invites.str.sta])] - :: - %inv - =/ circ=circle:hall cir.sep.gam.nev.rum.rum - ?: (is-dm-circle circ) - =/ who=(set ship) (sy (rash nom.circ (more dot fed:ag))) - =/ act=poke [%hall-action %newdm who] - :- [ost.bol %poke /join-dm [our.bol %hall] act]~ - %= this - invites.str.sta [nev.rum.rum invites.str.sta] - dms.str.sta (~(put by dms.str.sta) nom.circ hos.circ ~) - == - =/ act=poke [%hall-action %source %inbox & (sy [circ ~] ~)] - :- ~ - this(invites.str.sta [nev.rum.rum invites.str.sta]) - == - :: - :: %our: - :: - %our - ?> ?=(%circle -.rum) - ?+ -.rum.rum - ::~& our-unprocessed-rumor+rum.rum - [~ this] - :: - :: %remove: - :: - %remove - ::~& %our-remove - [~ this] - :: - :: %config: - :: - %config - =* circ cir.rum.rum - =* diff dif.rum.rum - ?+ -.diff - ::~& our-unprocessed-config+diff - [~ this] - :: - :: %full: recieved a full config update for one of our sources - :: - %full - ::~& %our-config-full - =* conf cof.dif.rum.rum - :- ~ ::(send-rumor %config-change circ `conf) - %= this - circles.str.sta (~(put by circles.str.sta) circ `conf) - == - :: - :: %read: recieved a read reciept - :: - %read - =/ conf (need (~(got by circles.str.sta) circ)) - =. red.conf red.dif.rum.rum - :- ~ - %= this - circles.str.sta (~(put by circles.str.sta) circ `conf) - == - == - == - == -:: -:: +send-rumor: send a rumor to all subscribers -:: -++ send-rumor - |= rum=rumor - ::~& send-rumor+rum - ^- (list move) - %+ turn (prey:pubsub:userlib /primary bol) - |= [=bone *] - [bone %diff %collections-rumor rum] -:: -:: +poke-noun: debugging stuff -:: -++ poke-noun - |= a=@tas - ^- (quip move _this) - ?+ a - [~ this] - :: - %check-all-subs - ~& 'here are all incoming subs' - ~& ^- (list (pair ship path)) - %+ turn ~(tap by sup.bol) - |= [b=bone s=ship p=path] - ^- (pair ship path) - [s p] - [~ this] - :: - %print-state - ~& str.sta - [~ this] - :: - %rebuild-subs - :_ this - :~ [ost.bol %peer /circles [our.bol %hall] /circles/[(scot %p our.bol)]] - [ost.bol %peer /inbox [our.bol %hall] /circle/inbox/config/grams] - [ost.bol %peer /invites [our.bol %hall] /circle/i/grams] - == - == -:: -++ is-dm-circle - |= circ=circle:hall - ^- ? - ?= ^ - (rush nom.circ (more dot fed:ag)) --- diff --git a/pkg/arvo/app/fora.hoon b/pkg/arvo/app/fora.hoon deleted file mode 100644 index 0089aa5c5..000000000 --- a/pkg/arvo/app/fora.hoon +++ /dev/null @@ -1,104 +0,0 @@ -:: -:: /app/fora/hoon -:: -::TODO maybe stop relying on %hood one day. -:: -/- hall -/+ hall, time-to-id -=, format -=, title -:: -|% -++ move (pair bone card) -++ card - $% {$poke wire dock poke} - {$info wire @p toro:clay} - == -++ poke - $% {$hall-action action:hall} - {$write-fora-post spur ship cord cord} - {$write-comment spur ship cord} - == --- -:: -|_ {bol/bowl:gall ~} -:: -++ prep - |= old/(unit ~) - ^- (quip move _..prep) - ?^ old [~ ..prep(+<+ u.old)] - :_ ..prep - :~ (act %create %fora-posts 'fora posts' %journal) - (act %create %fora-comments 'fora comments' %journal) - == -:: -++ act - |= a/action:hall - ^- move - [ost.bol %poke / [our.bol %hall] %hall-action a] -:: -++ ra-base-hart .^(hart:eyre %e /(scot %p our.bol)/host/(scot %da now.bol)) -:: -++ poke-fora-post - |= {pax/path sup/spur hed/@t txt/@t} - ^- (quip move _+>) - :_ +> - :: - :: if txt is blank then return no moves. - :: - ?: ?=(^ (rush txt spac:de-json:html)) ~ - :: - :: otherwise, post the content. - :: - :~ %- act - :+ %phrase [[our.bol %fora-posts] ~ ~] - :_ ~ - :+ %app dap.bol - :+ %fat - :+ %name - (crip "post by {(cite src.bol)}: {(trip hed)}") - text+(to-wain txt) - =. pax (welp pax /posts/(crip "{}~")) - [%url [ra-base-hart `pax ~] ~] - :: - :* ost.bol - %poke - /fora-post - [our.bol %hood] - [%write-fora-post sup src.bol hed txt] - == - == -:: -++ poke-fora-comment - |= {pax/path sup/spur txt/@t} - ^- (quip move _+>) - :_ +> - :: - :: if txt is blank then return no moves. - :: - ?: ?=(^ (rush txt spac:de-json:html)) ~ - :: - :: otherwise, post the content. - :: - :~ ^- move - %- act - :+ %phrase [[our.bol %fora-comments] ~ ~] - :_ ~ - :+ %app dap.bol - ^- speech:hall - :+ %fat - :+ %name - =+ nam=?~(sup "" (trip i.sup)) - (crip "comment by {(cite src.bol)} on /{nam}") - text+(to-wain txt) - =+ fra=(crip (time-to-id now.bol)) - [%url [ra-base-hart `pax ~] `fra] - :: - :* ost.bol - %poke - /fora-comment - [our.bol %hood] - [%write-comment sup src.bol txt] - == - == --- diff --git a/pkg/arvo/app/hood.hoon b/pkg/arvo/app/hood.hoon index 2b4efc3a1..aec482263 100644 --- a/pkg/arvo/app/hood.hoon +++ b/pkg/arvo/app/hood.hoon @@ -129,7 +129,6 @@ :: :: :: ++ coup-drum-phat (wrap take-coup-phat):from-drum ++ coup-helm-hi (wrap coup-hi):from-helm -++ coup-helm-ask (wrap coup-ask):from-helm ++ coup-kiln-fancy (wrap take-coup-fancy):from-kiln ++ coup-kiln-reload (wrap take-coup-reload):from-kiln ++ coup-kiln-spam (wrap take-coup-spam):from-kiln @@ -160,13 +159,9 @@ ++ poke-helm-reset (wrap poke-reset):from-helm ++ poke-helm-serve (wrap poke-serve):from-helm ++ poke-helm-send-hi (wrap poke-send-hi):from-helm -++ poke-helm-send-ask (wrap poke-send-ask):from-helm ++ poke-helm-verb (wrap poke-verb):from-helm ++ poke-helm-rekey (wrap poke-rekey):from-helm ++ poke-helm-nuke (wrap poke-nuke):from-helm -++ poke-helm-tlon-add-fora (wrap poke-tlon-add-fora):from-helm -++ poke-helm-tlon-add-stream (wrap poke-tlon-add-stream):from-helm -++ poke-helm-tlon-init-stream (wrap poke-tlon-init-stream):from-helm ++ poke-helm-automass (wrap poke-automass):from-helm ++ poke-helm-cancel-automass (wrap poke-cancel-automass):from-helm ++ poke-helm-bonk (wrap poke-bonk):from-helm @@ -192,10 +187,6 @@ ++ poke-kiln-permission (wrap poke-permission):from-kiln ++ poke-write-sec-atom (wrap poke-sec-atom):from-write ++ poke-write-paste (wrap poke-paste):from-write -++ poke-write-comment (wrap poke-comment):from-write -++ poke-write-fora-post (wrap poke-fora-post):from-write -++ poke-write-plan-info (wrap poke-plan-info):from-write -++ poke-write-plan-account (wrap poke-plan-account):from-write ++ poke-write-tree (wrap poke-tree):from-write ++ poke-write-wipe (wrap poke-wipe):from-write ++ quit-drum-phat (wrap quit-phat):from-drum diff --git a/pkg/arvo/app/server.hoon b/pkg/arvo/app/server.hoon deleted file mode 100644 index 8ea7f90c6..000000000 --- a/pkg/arvo/app/server.hoon +++ /dev/null @@ -1,214 +0,0 @@ -|% -:: +move: output effect -:: -+$ move [bone card] -:: +card: output effect payload -:: -+$ card - $% [%connect wire [(unit @t) (list @t)] %server] - [%wait wire @da] - [%http-response =http-event:http] - [%diff %json json] - == --- -:: utilities: -:: -|% -:: -++ parse-request-line - |= url=@t - ^- [[(unit @ta) site=(list @t)] args=(list [key=@t value=@t])] - (fall (rush url ;~(plug apat:de-purl:html yque:de-purl:html)) [[~ ~] ~]) -:: +hello: -:: -++ hello - |= name=@t - ^- octs - %- as-octs:mimes:html - %- crip - %- en-xml:html - ;html - ;head - ;title:"Hello, {(trip name)}" - == - ;body - ;h1:"Hello, {(trip name)}" - ;p - ; Time is - ;span#time:"?????" - == - ;button#start:"Start Timer" - ;button#poke:"Random Poke" - ;script(type "module", src "/~server/hello.js"); - == - == -:: -++ hello-js - ^- octs - %- as-octs:mimes:html - ''' - import * as urb from '/~/channel/channel.js'; - - var c = urb.newChannel(); - - // The poke button just sends a poke - document.getElementById("poke").addEventListener("click", function(){ - c.poke("zod", "server", "json", 5, - function() { - console.log("Poke worked"); - }, - function(err) { - console.log("Poke failed: " + err); - }); - }); - - function doSubs() { - // The subscription sends the time which makes the thing work. - // - c.subscribe("zod", "server", "/timer", - function(err) { - console.log("Failed initial connection: " + err); - }, - function(json) { - console.log("Subscription update: ", json); - var message = document.getElementById("time"); - message.innerHTML = json; - }, - function() { - console.log("Subscription quit"); - - // resubscribe because Gall is broken - // - // Galls queuing mechanism is broken and will - // break subscriptions whenever 20 messages have - // been sent. - // - doSubs(); - }); - } - doSubs(); - ''' -:: +require-authorization: redirect to the login page when unauthenticated -:: -++ require-authorization - |* [=bone move=mold this=*] - |= handler=$-(inbound-request:eyre (quip move _this)) - |= =inbound-request:eyre - ^- (quip move _this) - :: - ?: authenticated.inbound-request - (handler inbound-request) - :: - :_ this - ^- (list move) - =/ redirect=cord - %- crip - "/~/login?redirect={(trip url.request.inbound-request)}" - [bone [%http-response %start [307 ['location' redirect]~] ~ %.y]]~ --- -|% -:: -+$ state - $: next-timer=(unit @da) - == --- -:: -|_ [bow=bowl:gall state] -:: -++ this . -:: -++ prep - |= old=(unit state) - ^- (quip move _this) - ~& %prep - :- [`move`[ost.bow [%connect / [~ /'~server'] %server]] ~] - ?~ old - this - this(+<+ u.old) -:: alerts us that we were bound. we need this because the vane calls back. -:: -++ bound - |= [wir=wire success=? binding=binding:eyre] - ~& [%bound success] - [~ this] -:: -:: +wake: responds to a %wait send from +handle-start-stream -:: -++ wake - |= [wir=wire ~] - ^- (quip move _this) - :: - ~& [%timer-tick wir now.bow] - :: - =/ moves=(list move) - %+ turn (prey:pubsub:userlib /timer bow) - |= [=bone ^] - [bone %diff %json %s (scot %da now.bow)] - :: if we have outbound moves, say that we have another timer. - :: - =. next-timer - ?: ?=(^ moves) - `(add now.bow ~s1) - ~ - :: if we have any subscribers, add another timer for the future - :: - =? moves ?=(^ moves) - [[ost.bow %wait /timer (add now.bow ~s1)] moves] - :: - [moves this] -:: +poke-handle-http-request: received on a new connection established -:: -++ poke-handle-http-request - %- (require-authorization ost.bow move this) - |= =inbound-request:eyre - ^- (quip move _this) - :: - =+ request-line=(parse-request-line url.request.inbound-request) - ~& [%request-line request-line] - =/ name=@t - =+ back-path=(flop site.request-line) - ?~ back-path - 'World' - i.back-path - :: - ?: =(name 'hello') - :_ this - :~ ^- move - :- ost.bow - :* %http-response - [%start [200 ['content-type' 'application/javascript']~] [~ hello-js] %.y] - == - == - :: - :_ this - :~ ^- move - :- ost.bow - :* %http-response - [%start [200 ['content-type' 'text/html']~] [~ (hello name)] %.y] - == - == -:: +poke-handle-http-cancel: received when a connection was killed -:: -++ poke-handle-http-cancel - |= =inbound-request:eyre - ^- (quip move _this) - :: the only long lived connections we keep state about are the stream ones. - :: - [~ this] -:: -++ poke-json - |= =json - ^- (quip move _this) - ~& [%poke-json json] - [~ this] -:: -++ peer-timer - |= pax/path - ^- (quip move _this) - :: if we don't have a timer, set a timer. - ?: ?=(^ next-timer) - [~ this] - :: - :- [ost.bow %wait /timer (add now.bow ~s1)]~ - this(next-timer `(unit @da)`[~ (add now.bow ~s1)]) --- diff --git a/pkg/arvo/app/test.hoon b/pkg/arvo/app/test.hoon index f89cca889..648a00e48 100644 --- a/pkg/arvo/app/test.hoon +++ b/pkg/arvo/app/test.hoon @@ -152,19 +152,8 @@ ++ skip-completely ^~ ^- (map path tape) %- my :~ ::TODO don't hardcode - :- /ren/css "not meant to be called outside /web/pack" - :- /ren/js "not meant to be called outside /web/pack" :- /ren/run "not meant to be called except on a (different) hoon file" - :- /ren/collections "temporarily disabled" - :- /ren/rss-xml "scrys into eyre" :- /ren/test-gen "temporarily disabled" - :- /ren/urb "temporarily disabled" - :- /ren/x-urb "temporarily disabled" - :- /ren/x-htm "temporarily disabled" - :- /ren/x-collections-snip "temporarily disabled" - :- /ren/x-collections-json "temporarily disabled" - :: - :- /web/landscape "/$ doensn't work in tests" == :: ++ failing diff --git a/pkg/arvo/gen/al.hoon b/pkg/arvo/gen/al.hoon deleted file mode 100644 index 89f693043..000000000 --- a/pkg/arvo/gen/al.hoon +++ /dev/null @@ -1,458 +0,0 @@ -!: -:- %say -|= * -:- %noun -=- %hello -=> |% - ++ tope :: topographic type - $@ $? %& :: cell or atom - %| :: atom - == :: - (pair tope tope) :: cell - -- -|% -++ ax - =+ :* dom=`axis`1 - doc=*(list what) - == - |_ mod/tile - ++ home - :: express a hoon against the original subject - :: - |=(gen/hoon ^-(hoon ?:(=(1 dom) gen [%tsgr [%$ dom] gen]))) - :: - ++ default - :: produce a hoon that makes the model's default value, untyped - :: - |- ^- hoon - ?- mod - {^ *} - [$(mod -.mod) $(mod +.mod)] - :: - {$axil *} - ?+ p.mod [%rock %$ 0] - $cell [[%rock %$ 0] [%rock %$ 0]] - $void [%zpzp ~] - == - :: - {$bark *} - $(mod q.mod) - :: - {$herb *} - =+ cys=~(boil ap p.mod) - ?: ?=($herb -.cys) - (home [%tsgl [%limb %$] p.mod]) - $(mod cys) - :: - {$deet *} - $(mod q.mod) - :: - {$fern *} - :: last entry is the default value - :: - |- ^- hoon - ?~(t.p.mod ^$(mod i.p.mod) $(i.p.mod i.t.p.mod, t.p.mod t.t.p.mod)) - :: - {$kelp *} - :: last entry is the default value - :: - |- ^- hoon - ?~(t.p.mod ^$(mod i.p.mod) $(i.p.mod i.t.p.mod, t.p.mod t.t.p.mod)) - :: - {$leaf *} - [%rock p.mod q.mod] - :: - {$plow *} - $(mod q.mod) - :: - {$reed *} - $(mod p.mod) - :: - {$vine *} - $(mod q.mod) - :: - {$weed *} - (home p.mod) - == - :: - ++ trivial - :: ersatz by trivial construction - :: - ^- hoon - :+ %tsls - [%bust %noun] - ~(construct sample [2 %|]) - :: - ++ basic - |= bas/base - ?- bas - :: - {$atom *} - :: trivial zero - :: - [%sand p.bas 0] - :: - $noun - :: raw nock produces noun type - :: - =+([%rock %$ 0] [%ktls [%dttr - - [%rock %$ 1]] -]) - :: - $cell - :: reduce to pair of nouns - :: - =+($(mod [%axil %noun]) [- -]) - :: - $bean - :: comparison produces boolean type - :: - =+([%rock %$ 0] [%ktls [%dtts - -] -]) - :: - $null - [%rock %n 0] - :: - $void - :: should not actually be a thing - :: - [%zpzp ~] - == - :: - ++ decorate - :: document - :: - |= gen/hoon - ^- hoon - ?~ doc gen - =/ fin $(doc t.doc) - ?~(i.doc gen [%docs u.i.doc gen]) - :: - ++ ersatz - :: produce a correctly typed instance without subject - :: - ^- hoon - ?- mod - {^ *} - %- decorate - =. doc ~ - [ersatz(mod -.mod) ersatz(mod +.mod)] - :: - {$axil *} - (decorate (basic p.mod)) - :: - {$bark *} - [%ktts p.mod ersatz(mod q.mod)] - :: - {$herb *} - %- decorate - =. doc ~ - =+ cys=~(boil ap p.mod) - ?: ?=($herb -.cys) - (home [%tsgl [%limb %$] p.mod]) - ersatz(mod cys) - :: - {$deet *} - [%dbug p.mod ersatz(mod q.mod)] - :: - {$fern *} - trivial - :: - {$kelp *} - trivial - :: - {$leaf *} - (decorate [%rock p.mod q.mod]) - :: - {$plow *} - ersatz(mod q.mod, doc [p.mod doc]) - :: atom/cell, $@ - :: - {$reed *} - trivial - :: pair/switch, $^ - :: - {$vine *} - trivial - :: - {$weed *} - (home p.mod) - == - :: - ++ factory - :: produce a normalizing gate (mold) - :: - ^- hoon - :^ %brts ~^~ - [%base %noun] - ~(construct sample [6 %&]) - :: - ++ sample - :: normalize a sample of the subject - :: - |_ $: :: axe: axis to sample - :: top: topographic type of sample - :: - axe/axis - top/tope - == - ++ basic - |= bas/base - :: apply documentation - :: - ?^ doc document - ?- bas - {%atom *} - :: rez: fake instance - :: - =/ rez ersatz - ?^ top rez - ?: =(%| top) - :: xx sanitize - :: - fetch - [%wtpt fetch-wing fetch rez] - :: - $noun - fetch - :: - $cell - ?^ top fetch - :: rez: fake instance - :: - =/ rez ersatz - ?: =(%| top) - rez - [%wtpt fetch-wing rez fetch] - :: - $bean - ?^ top ersatz - :^ %wtcl - [%dtts [%rock %$ |] [%$ axe]] - [%rock %f |] - [%rock %f &] - :: - $null - ersatz - :: - $void - ersatz - == - ++ fetch - :: load the sample - :: - ^- hoon - [%$ axe] - :: - ++ fetch-wing - :: load, as a wing - :: - ^- wing - [[%& axe] ~] - :: - ++ choice - :: match full models, by trying them - :: - |= $: :: one: first option - :: rep: other options - :: - one/tile - rep/(list tile) - == - ^- hoon - :: if no other choices, construct head - :: - ?~ rep construct(mod one) - :: fin: loop completion - :: - =/ fin/hoon $(one i.rep, rep t.rep) - :: new: trial product - :: old: original subject - :: - =/ new [%$ 2] - =* old [%$ 3] - :: build trial noun - :: - :+ %tsls - :: build the sample with the first option - :: - construct(mod one) - :: build test - :: - :^ %wtcl - :: if the trial noun equals the sample - :: - [%dtts new fetch] - :: produce the trial noun - :: - new - :: continue with the original subject - :: - [%tsgr old fin] - :: - ++ switch - |= $: :: one: first format - :: two: more formats - :: - one/line - rep/(list line) - == - ^- hoon - :: if no other choices, construct head - :: - ?~ rep construct(mod `tile`one) - :: fin: loop completion - :: - =/ fin/hoon $(one i.rep, rep t.rep) - :: interrogate this instance - :: - :^ %wtcl - :: test if we match this wing - :: - [%wtts p.i.rep fetch-wing] - :: use this format - :: - :- `hoon`p.i.rep - construct(mod q.i.rep, top &, axe (peg axe 3)) - :: continue in the loop - :: - fin - :: - ++ probe - :: probe for cell or default - :: - ^- hoon - :: against constructor - :: - :+ %tsgr - :: constructor trap - :: - :+ %brdt ~^~ - :: construct within trap - :: - %= construct - :: old context within trap context - :: - dom (peg 3 dom) - :: old sample within trap sample - :: - axe (peg 3 axe) - :: only kick trap if sample is known cell - :: - top [& &] - == - :: boc: call constructor - :: but: default, but coerce type to call - :: - =/ boc/hoon [%limb %$] - =/ but/hoon [%ktls boc default] - ?: =(& top) - :: may be atom or cell; default or construct - :: - [%wtpt fetch-wing but boc] - :: must be atom; construct - :: - but - :: - ++ document - :: document and construct - :: - |- ^- hoon - ?~ doc construct - =/ fin $(doc t.doc) - ?~(i.doc fin [%docs u.i.doc fin]) - :: - ++ construct - :: constructor at arbitrary sample - :: - ^- hoon - ?- mod - :: - :: cell - :: - {^ *} - :: apply help - :: - ?^ doc document - :: probe unless we know the sample is a cell - :: - ?@ top probe - :: if known cell, descend directly - :: - :- construct(mod -.mod, top p.top, axe (peg axe 2)) - construct(mod +.mod, top q.top, axe (peg axe 3)) - :: - :: base - :: - {$axil *} - (basic p.mod) - :: - :: name, $= - :: - {$bark *} - [%ktts p.mod construct(mod q.mod)] - :: - :: debug - :: - {$deet *} - [%dbug p.mod construct(mod q.mod)] - :: - :: choice, $? - :: - {$fern *} - (choice i.p.mod t.p.mod) - :: - :: synthesis, $; - :: - {$herb *} - ?^ doc document - =+ cys=~(boil ap p.mod) - ?: ?=($herb -.cys) - [%cnhp (home p.mod) fetch ~] - construct(mod cys) - :: - :: switch, $% - :: - {$kelp *} - :: if atom or unknown, probe - :: - ?@ top probe - :: if cell, enter switch directly - :: - (switch i.p.mod t.p.mod) - :: - :: constant - :: - {$leaf *} - (decorate [%rock p.mod q.mod]) - :: - :: documentation - :: - {$plow *} - construct(doc [p.mod doc], mod q.mod) - :: - :: branch, $@ - :: - {$reed *} - ?^ doc document - ?@ top - ?: =(%| top) - construct(mod p.mod) - [%wtpt fetch-wing construct(mod p.mod) construct(mod q.mod)] - construct(mod q.mod) - :: - :: bridge, $^ - :: - {$vine *} - ?^ doc document - ?@ top probe - :^ %wtpt - fetch-wing(axe (peg axe 2)) - construct(mod q.mod) - construct(mod p.mod) - :: - :: weed, $_ - :: - {$weed *} - (decorate (home p.mod)) - == - -- - -- --- diff --git a/pkg/arvo/gen/ask/admins.hoon b/pkg/arvo/gen/ask/admins.hoon deleted file mode 100644 index 9973ab049..000000000 --- a/pkg/arvo/gen/ask/admins.hoon +++ /dev/null @@ -1,15 +0,0 @@ -:: Set admin users -:: -:::: /hoon/admins/ask/gen - :: -/? 310 -:: -:::: - :: -:- %say -|= $: {now/@da eny/@uvJ bec/beak} - {who/(list ship) ~} - == -:- %ask-admins ^- (set ship) -~? =(~ who) %admins-unset -(silt who) diff --git a/pkg/arvo/gen/bug.hoon b/pkg/arvo/gen/bug.hoon deleted file mode 100644 index 330516a8d..000000000 --- a/pkg/arvo/gen/bug.hoon +++ /dev/null @@ -1,57 +0,0 @@ -!: -:- %say -|= * -:- %noun -=- "hello, world" -|% -+$ scan [=loop=(map =@ud =xray) =xray] -+$ xray - $~ %noun - $@ $? %noun - %void - == - $% :: %bark: atom selection - :: - [%bark =(map atom aura)] - :: %bush: head-of-cell superposition - :: - [%bush wide=xray tall=xray] - :: %cell: ordered pair - :: - [%cell head=xray tail=xray] - :: %core: functional attribute battery - :: - [%core =vair =xray =(map term (map term xray))] - :: %face: namespace - :: - [%face =term =xray] - :: %fork: disordered superposition - :: - [%fork =(set xray)] - :: %hint: context-preserving type hint - :: - [%hint [=type =note] =xray] - :: %knot: recursion root - :: - [%knot =(set @ud) =xray] - :: %loop: recursion point - :: - [%loop index=@ud] - :: %rock: constant - :: - [%rock =atom =aura] - :: %root: atom/cell superposition - :: - [%root flat=xray deep=xray] - :: %sand: variable atom - :: - [%sand =aura] - :: %wood: tagged superposition - :: - [%wood =(map atom (pair aura xray))] - == -++ foo - |= bar=xray - !! --- - diff --git a/pkg/arvo/gen/hood/ask.hoon b/pkg/arvo/gen/hood/ask.hoon deleted file mode 100644 index 01fcc9bdc..000000000 --- a/pkg/arvo/gen/hood/ask.hoon +++ /dev/null @@ -1,11 +0,0 @@ -:: Request a planet from Tlon Inc. -:: -:::: /hoon/ask/hood/gen - :: -/? 310 -:- %say -|= {^ {mel/cord ~} ~} -=+ adr=(star ;~(less (mask "\"\\()[],:;<>@") prn)) -=+ dom=[;~(plug dlab dot (most dot dlab))]:de-purl:html -=+ ~|(bad-email+mel (rash mel ;~((glue vat) adr dom))) -helm-send-ask+mel diff --git a/pkg/arvo/gen/hood/default-serve.hoon b/pkg/arvo/gen/hood/default-serve.hoon deleted file mode 100644 index 0c5b7a5ee..000000000 --- a/pkg/arvo/gen/hood/default-serve.hoon +++ /dev/null @@ -1,14 +0,0 @@ -:: Eyre: set web root -:: -:::: /hoon/serve/hood/gen - :: -/? 310 -:: -:::: - :: -:- %say -|= $: {now/@da eny/@uvJ bec/beak} - ~ - ~ - == -[%helm-serve [~ /] [%home /gen/frontpage/hoon ~]] diff --git a/pkg/arvo/gen/hood/deset.hoon b/pkg/arvo/gen/hood/deset.hoon deleted file mode 100644 index 4839c5d8c..000000000 --- a/pkg/arvo/gen/hood/deset.hoon +++ /dev/null @@ -1,13 +0,0 @@ -:: Helm: break arvo somehow?? XX unknown -:: -:::: /hoon/deset/hood/gen - :: -/? 310 -:: -:::: - :: -:- %say -|= $: {now/@da eny/@uvJ bec/beak} - {arg/~ ~} - == -[%helm-deset ~] diff --git a/pkg/arvo/gen/hood/tlon/add-fora.hoon b/pkg/arvo/gen/hood/tlon/add-fora.hoon deleted file mode 100644 index cc5288c99..000000000 --- a/pkg/arvo/gen/hood/tlon/add-fora.hoon +++ /dev/null @@ -1,11 +0,0 @@ -:: tlon: add fora notifications to local urbit-meta -:: -:: make the local urbit-meta pull from {for}'s fora notification channels. -:: -:::: /gen/hood/tlon/add-fora/hoon - :: -:- %say -|= $: {now/@da eny/@uvJ bec/beak} - {{for/ship ~} ~} - == -[%helm-tlon-add-fora for] diff --git a/pkg/arvo/gen/hood/tlon/add-stream.hoon b/pkg/arvo/gen/hood/tlon/add-stream.hoon deleted file mode 100644 index abc31d45c..000000000 --- a/pkg/arvo/gen/hood/tlon/add-stream.hoon +++ /dev/null @@ -1,11 +0,0 @@ -:: tlon: add stream to local urbit-meta -:: -:: make the local urbit-meta pull from {web}'s stream. -:: -:::: /gen/hood/tlon/add-stream/hoon - :: -:- %say -|= $: {now/@da eny/@uvJ bec/beak} - {{web/ship ~} ~} - == -[%helm-tlon-add-stream web] diff --git a/pkg/arvo/gen/hood/tlon/init-stream.hoon b/pkg/arvo/gen/hood/tlon/init-stream.hoon deleted file mode 100644 index 0690a5fa7..000000000 --- a/pkg/arvo/gen/hood/tlon/init-stream.hoon +++ /dev/null @@ -1,12 +0,0 @@ -:: tlon: configure stream ship -:: -:: create a local stream channel and have it pull from -:: {met}'s urbit-meta. -:: -:::: /gen/hood/tlon/init-stream/hoon - :: -:- %say -|= $: {now/@da eny/@uvJ bec/beak} - {{met/ship ~} ~} - == -[%helm-tlon-init-stream met] diff --git a/pkg/arvo/lib/collections.hoon b/pkg/arvo/lib/collections.hoon deleted file mode 100644 index 72b2351d9..000000000 --- a/pkg/arvo/lib/collections.hoon +++ /dev/null @@ -1,992 +0,0 @@ -:: -:::: /hoon/collections/lib - :: -/? 309 -/- hall -/+ cram, elem-to-react-json -:: :: -~% %collections-lib ..is ~ -|% -+$ move [bone card] -:: -+$ card - $% [%info wire toro:clay] - [%poke wire dock poke] - [%perm wire desk path rite:clay] - [%peer wire dock path] - [%pull wire dock ~] - [%diff diff] - == -:: -+$ diff - $% [%collections-prize prize] - [%collections-rumor rumor] - [%hall-rumor rumor:hall] - == -:: -+$ poke - $% [%hall-action action:hall] - [%collections-action action] - [%json json] - == -:: -+$ state - $% [%0 col=collection str=streams] - == -:: -+$ streams - $: :: inbox config and messages - :: - inbox=[con=(unit config:hall) env=(list envelope:hall)] - :: names and configs of all circles we know about - :: - circles=(map circle:hall (unit config:hall)) - :: names of all circles we own - :: - our-circles=(set name:hall) - :: list of messages in all our DM circles - :: - dms=(map name:hall [ini=ship env=(list envelope:hall)]) - :: all the DM invites we've received - :: - invites=(list envelope:hall) - == -:: -+$ prize - $: :: inbox config and messages - :: - inbox=[con=(unit config:hall) env=(list envelope:hall)] - :: names and configs of all circles we know about - :: - circles=(map circle:hall (unit config:hall)) - :: names of all circles we own - :: - our-circles=(set name:hall) - :: list of messages in all our DM circles - :: - dms=(map name:hall [ini=ship env=(list envelope:hall)]) - :: all the DM invites we've received - :: - invites=(list envelope:hall) - == -:: -+$ rumor - $% :: if config is given, either add new circle or update existing one - :: if config is nil then delete circle - :: - [%config-change cir=circle:hall con=(unit config:hall)] - :: recieved a new inbox message or DM invite - :: - [%new-msg nom=?(%inbox %invites) env=envelope:hall] - == -:: -+$ command - $% [%chat-invite nom=name:hall who=(set ship)] - [%collection-invite nom=name:hall col=term who=(set ship)] - == -+$ collection [meta=config data=(map nom=knot =item)] -:: -+$ item - $~ [%error ~] - $% [%collection col=collection] - [%raw raw=raw-item] - [%both col=collection raw=raw-item] - [%error ~] - == -:: -+$ raw-item - $% [%udon meta=(map knot cord) data=@t] - == -:: -+$ config - $: full-path=beam - name=@t - description=@t - :: - author=@p - :: - date-created=@da - last-modified=@da - :: - type=@tas - comments=? - sort-key=(unit @) - visible=? - :: - == -:: -+$ action - $: who=ship - dek=desk - acts=(list sub-action) - == -:: -+$ sub-action - $% [%write pax=path for=form] - [%delete pax=path] - [%perms pax=path r=rule:clay w=rule:clay] - :: - [%collection pax=path name=@t desc=@t comments=? visible=? type=@tas] - [%post pax=path name=@t type=@tas comments=? content=@t edit=?] - [%comment pax=path content=@t] - == -:: -+$ form - $% [%udon @t] - [%collections-config config] - == -:: -++ collection-error - ~/ %coll-collection-error - |= col=collection - ^- ? - |- - =/ vals=(list item) ~(val by data.col) - %+ roll vals - |= [i=item out=_|] - ^- ? - ?: out out - ?+ -.i - %.n - %error %.y - %collection ^$(col col.i) - %both ^$(col col.i) - == -:::: -:::: /mar/snip -:::: -++ words 1 -++ hedtal - =| met/marl - |= a/marl ^- {hed/marl tal/marl} - ?~ a [~ ~] - :: looks like it only terminates if it finds an h1? - ?. ?=($h1 n.g.i.a) - ?: ?=($meta n.g.i.a) - $(a t.a, met [i.a met]) - =+ had=$(a c.i.a) - ?^ -.had had - $(a t.a) - [c.i.a (weld (flop met) (limit words t.a))] - :: -:: -++ limit - ~/ %coll-limit - |= {lim/@u mal/marl} - =< res - |- ^- {rem/@u res/marl} - ?~ mal [lim ~] - ?~ lim [0 ~] - =+ ^- {lam/@u hed/manx} - ?: ?=(_;/(**) i.mal) - [lim ;/(tay)]:(deword lim v.i.a.g.i.mal) - [rem ele(c res)]:[ele=i.mal $(mal c.i.mal)] - [rem - res]:[hed $(lim lam, mal t.mal)] -:: -++ deword - ~/ %coll-deword - |= {lim/@u tay/tape} ^- {lim/@u tay/tape} - ?~ tay [lim tay] - ?~ lim [0 ~] - =+ wer=(dot 1^1 tay) - ?~ q.wer - [lim - tay]:[i.tay $(tay t.tay)] - =+ nex=$(lim (dec lim), tay q.q.u.q.wer) - [-.nex [(wonk wer) +.nex]] -:: -:: json -:: -++ item-to-json - ~/ %coll-item-to-json - |= itm=item - ^- json - ?- -.itm - %error (frond:enjs:format %error ~) - :: - %collection - %+ frond:enjs:format - %collection (collection-to-json col.itm) - :: - %raw - %- frond:enjs:format - [%item (raw-to-json raw.itm)] - :: - %both - %- pairs:enjs:format - :~ [%item (raw-to-json raw.itm)] - [%collection (collection-to-json col.itm)] - == - == -:: -++ collection-to-json - ~/ %coll-collection-to-json - |= col=collection - ^- json - %- pairs:enjs:format - :~ [%meta (config-to-json meta.col)] - :+ %data %a - %+ turn ~(tap by data.col) - |= [nom=knot ite=item] - ^- json - %- pairs:enjs:format - :~ [%filename %s nom] - [%item (item-to-json ite)] - == - == -:: -++ raw-to-json - ~/ %coll-raw-to-json - |= raw=raw-item - ^- json - =/ elm=manx elm:(static:cram (ream data.raw)) - =/ rec=json (elem-to-react-json elm) - %- pairs:enjs:format - :~ [%data rec] - [%meta (meta-to-json meta.raw)] - == -:: -++ config-to-json - ~/ %coll-config-to-json - |= con=config - ^- json - ?: =(con *config) - ~ - %- pairs:enjs:format - :~ :- %full-path - :- %a - %+ turn (en-beam:format full-path.con) - |= a=@ta - [%s a] - :- %name [%s name.con] - :- %desc [%s description.con] - :- %author (ship:enjs:format author.con) - :- %date-created (time:enjs:format date-created.con) - :- %last-modified (time:enjs:format last-modified.con) - :- %type [%s type.con] - :- %comments [%b comments.con] - :- %sort-key ?~(sort-key.con ~ (numb:enjs:format u.sort-key.con)) - :- %visible [%b visible.con] - == -:: -++ meta-to-json - ~/ %coll-meta-to-json - |= meta=(map knot cord) - ^- json - %- pairs:enjs:format - %+ turn ~(tap by meta) - |= [key=@t val=@t] - ^- [@t json] - [key [%s val]] -:: -++ udon-to-front - ~/ %coll-udon-to-front - |= u=@t - ^- (map knot cord) - %- ~(run by inf:(static:cram (ream u))) - |= a=dime ^- cord - ?+ (end 3 1 p.a) (scot a) - %t q.a - == -:: -:: +path-to-circle: -:: -:: takes a clay path and returns a hall circle -:: for a path /foo/bar it returns a circle with a :name %c-foo-bar -:: -++ path-to-circle - ~/ %coll-path-to-circle - |= [pax=path our=@p] - ^- circle:hall - =. pax - ?: ?=([%web %collections *] pax) - (weld /c (slag 2 `path`pax)) - ?: ?=([%collections *] pax) - (weld /c (slag 1 `path`pax)) - ?: ?=([%c *] pax) - `path`pax - `path`(weld /c pax) - =/ nam=term - %+ roll `(list @ta)`pax - |= [seg=@ta out=term] - %^ cat 3 - ?:(=(%$ out) out (cat 3 out '-')) - ;;(@tas seg) - [our nam] -:: -:: +allowed-by: checks if ship :who is allowed by the permission rules in :dic -:: -++ allowed-by - ~/ %coll-allowed-by - |= [who=@p dic=dict:clay our=@p] - ^- ? - ?: =(who our) & - =/ in-list=? - ?| (~(has in p.who.rul.dic) who) - :: - %- ~(rep by q.who.rul.dic) - |= [[@ta cru=crew:clay] out=_|] - ?: out & - (~(has in cru) who) - == - ?: =(%black mod.rul.dic) - !in-list - in-list -:: -:: +collection-notify: XX -:: -++ collection-notify - ~/ %coll-collection-notify - |= [pax=path conf=config] - ^- json - %- pairs:enjs:format - :~ ['author' [%s (crip (scow %p author.conf))]] - ['host' [%s (crip (scow %p p.full-path.conf))]] - ['path' [%a (turn pax |=(a=@ta `json`[%s a]))]] - ['name' [%s name.conf]] - ['date' [%s (crip (scow %da last-modified.conf))]] - ['type' [%s type.conf]] - == -:: -:: +item-notify: XX -:: -++ item-notify - ~/ %coll-item-notify - |= [pax=path raw=raw-item now=@da byk=beak] - ^- json - =/ author (fall (~(get by meta.raw) %author) ~.anon) - =/ host (fall (~(get by meta.raw) %host) ~.anon) - =/ dat (fall (~(get by meta.raw) %last-modified) (scot %da now)) - =/ nom (fall (~(get by meta.raw) %name) ~.no-title) - =/ typ (fall (~(get by meta.raw) %type) ~.no-type) - :: - =/ elm=manx elm:(static:cram (ream data.raw)) - =/ snip=marl tal:(hedtal +.elm) - =/ inner - ?~ snip - (crip (en-xml:html elm)) - (crip (en-xml:html i.snip)) :: inner html - :: - =/ parent-spur (slag 1 (flop pax)) - =/ bek=beak byk(r [%da now]) - =/ parent-path (en-beam:format [bek parent-spur]) - =/ parent-dir .^(arch %cy parent-path) - :: - =/ parent-conf=json - ?: (~(has in dir.parent-dir) ~.udon ~) - %- meta-to-json - %- udon-to-front - .^(@t %cx (weld parent-path /udon)) - ?: (~(has in dir.parent-dir) ~.collections-config ~) - %- config-to-json - .^(config %cx (weld parent-path /collections-config)) - ~ - :: - %- pairs:enjs:format - :~ ['author' [%s author]] - ['host' [%s host]] - ['path' [%a (turn pax |=(a=@ta `json`[%s a]))]] - ['name' [%s nom]] - ['date' [%s dat]] - ['type' [%s typ]] - ['content' [%s data.raw]] - ['snip' [%s inner]] - ['parent-config' parent-conf] - == -:: -:: +front-to-wain: XX -:: -++ front-to-wain - ~/ %coll-front-to-wain - |= a=(map knot cord) - ^- wain - =/ entries=wain - %+ turn ~(tap by a) - |= b=[knot cord] - =/ c=[term cord] ;;([term cord] b) - (crip " [{<-.c>} {<+.c>}]") - :: - ?~ entries ~ - ;: weld - [':- :~' ~] - entries - [' ==' ~] - == -:: -:: +update-udon-front: XX -:: -++ update-udon-front - ~/ %coll-update-udon-front - |= [fro=(map knot cord) udon=@t] - ^- @t - %- of-wain:format - =/ tum (trip udon) - =/ id (find ";>" tum) - ?~ id - %+ weld (front-to-wain fro) - (to-wain:format (crip (weld ";>\0a" tum))) - %+ weld (front-to-wain fro) - (to-wain:format (crip (slag u.id tum))) -:: -:: _ta: main event core for collections -:: -++ ta - ~/ %coll-ta - |_ $: moves=(list move) - bol=bowl:gall - == - :: - :: +ta-this: ta core subject - :: - ++ ta-this . - :: - :: +ta-done: - :: - :: flop :moves for finalization, since moves are prepended to the list - :: - ++ ta-done (flop moves) - :: - :: +ta-emit: add a +move to :moves - :: - ++ ta-emit - ~/ %coll-ta-emit - |= mov=move - %_ ta-this - moves [mov moves] - == - :: - :: +ta-emil: add a list of +move to :moves - :: - ++ ta-emil - ~/ %coll-ta-emil - |= mos=(list move) - %_ ta-this - moves (welp (flop mos) moves) - == - :: - :: +ta-act: process collection-action - :: - ++ ta-act - ~/ %coll-ta-act - |= act=action - ^+ ta-this - :: - :: iterate through list of +sub-action of +action - :: - |- - ?~ acts.act ta-this - =* a i.acts.act - :: - =/ now-id=@da (sub now.bol (div (dis now.bol ~s0..fffe) 2)) - =/ dat (scot %da now-id) - =/ bek=beak byk.bol(r [%da now-id]) - =/ sap (en-beam:format [bek (flop (path +<.a))]) - :: - =. ta-this - ?- -.a - %write - =/ perms .^([dict:clay dict:clay] %cp sap) - ?: (allowed-by src.bol +.perms our.bol) - ?- -.for.a - %udon (ta-write pax.a `cage`[-.for.a !>(+.for.a)]) - %collections-config (ta-write pax.a `cage`[-.for.a !>(+.for.a)]) - == - ta-this - :: - %delete - =/ perms .^([dict:clay dict:clay] %cp sap) - ?: (allowed-by src.bol +.perms our.bol) - (ta-remove pax.a) - ta-this - :: - %perms - ?: =(src.bol our.bol) :: XX admin privileges for other users? - (ta-set-permissions pax.a r.a w.a) - ta-this - :: - :: - :: XX some of this is redunant - :: - %collection - =/ perms - .^([dict:clay dict:clay] %cp (weld sap /[dat]/collections-config)) - ?. (allowed-by src.bol +.perms our.bol) - ta-this - =/ conf=config - :* [bek (flop (weld pax.a /[dat]/collections-config))] - name.a - desc.a - our.bol - now-id - now-id - type.a - comments.a - ~ - visible.a - == - =. ta-this - %+ ta-write (weld pax.a /[dat]/collections-config) - [%collections-config !>(conf)] - :: restrict permissions on config file - =. ta-this - %^ ta-set-permissions (weld pax.a /[dat]/collections-config) - [%white ((set whom:clay) [[& src.bol] ~ ~])] :: read - [%white ((set whom:clay) [[& src.bol] ~ ~])] :: write - :: open permissions on collection items - =. ta-this - %^ ta-set-permissions (weld pax.a /[dat]) - [%black ((set whom:clay) ~)] :: read - [%black ((set whom:clay) ~)] :: write - ta-this - :: - %post - =? pax.a !edit.a - (weld pax.a /[dat]) - =? sap !edit.a - (en-beam:format [bek (flop pax.a)]) - =/ perms .^([dict:clay dict:clay] %cp (weld sap /udon)) - ?. (allowed-by src.bol +.perms our.bol) - ta-this - =. content.a (crip (weld (trip content.a) "\0a")) - =/ front=(map knot cord) - %- my - :~ [%name name.a] - [%comments ?:(comments.a ~..y ~..n)] - [%author (scot %p src.bol)] - [%host (scot %p our.bol)] - [%date-created (snag 0 (flop pax.a))] - [%last-modified dat] - [%type type.a] - == - =. ta-this - %+ ta-write (weld pax.a /udon) - [%udon !>((update-udon-front front content.a))] - :: restrict permissions on udon file - =. ta-this - %^ ta-set-permissions (weld pax.a /udon) - [%black ((set whom:clay) ~)] :: read - [%white ((set whom:clay) [[& src.bol] ~ ~])] :: write - :: open permissions on comments - =. ta-this - %^ ta-set-permissions pax.a - [%black ((set whom:clay) ~)] :: read - [%black ((set whom:clay) ~)] :: write - ta-this - :: - %comment - =/ perms .^([dict:clay dict:clay] %cp (weld sap /[dat]/udon)) - ?. (allowed-by src.bol +.perms our.bol) - ta-this - =. content.a (crip (weld (trip content.a) "\0a")) - =/ front=(map knot cord) - %- my - :~ [%author (scot %p src.bol)] - [%host (scot %p our.bol)] - [%date-created dat] - [%last-modified dat] - [%type %comments] - == - =. ta-this - %+ ta-write (weld pax.a /[dat]/udon) - [%udon !>((update-udon-front front content.a))] - :: restrict permissions on udon file - =. ta-this - %^ ta-set-permissions (weld pax.a /[dat]/udon) - [%black ((set whom:clay) ~)] :: read - [%white ((set whom:clay) [[& src.bol] ~ ~])] :: write - ta-this - :: - == - $(acts.act t.acts.act) - :: - :: +ta-update: - :: - :: - :: - ++ ta-update - ~/ %coll-ta-update - |= [old=collection new=collection] - ^+ ta-this - ?: =(old new) - ta-this - (ta-update-collection old new /web/collections) - :: - ++ ta-insert-item - ~/ %coll-ta-insert-item - |= [new=item pax=path] - ^+ ta-this - =/ parent-path (scag (dec (lent pax)) pax) - :: - ?- -.new - :: - %error - (ta-hall-lin parent-path 'error') - :: - %collection - =. ta-this - %^ ta-hall-json parent-path 'new collection' - (collection-notify pax meta.col.new) - :: - =. ta-this (ta-hall-create-circle pax name.meta.col.new) - =/ items=(list [nom=@ta =item]) ~(tap by data.col.new) - |- - ?~ items ta-this - =. ta-this (ta-insert-item item.i.items (weld pax [nom.i.items ~])) - $(items t.items) - :: - %both - =. ta-this (ta-hall-create-circle pax name.meta.col.new) - =/ items=(list [nom=@ta =item]) ~(tap by data.col.new) - =. ta-this - |- - ?~ items ta-this - =. ta-this (ta-insert-item item.i.items (weld pax [nom.i.items ~])) - $(items t.items) - :: - ta-this - :: - %raw - =. ta-this - %^ ta-hall-json - parent-path - 'new item' - (item-notify pax raw.new now.bol byk.bol) - ?: ?& (~(has by meta.raw.new) %comments) - =('.y' (~(got by meta.raw.new) %comments)) - == - =/ author=(unit @ta) (~(get by meta.raw.new) %author) - =/ author-p=@p - ?~ author our.bol - (fall (rush u.author ;~(pfix sig fed:ag)) our.bol) - (ta-generate-comments pax author-p) - ta-this - :: - == - :: - ++ ta-remove-item - ~/ %coll-ta-remove-item - |= [old=item pax=path] - ^+ ta-this - :: flush permissions - :: notify parent of deletion - =/ parent (scag (dec (lent pax)) pax) - :: recurse for children - ?- -.old - :: - %error - (ta-hall-lin parent 'error') - :: - %collection - =. ta-this - %^ ta-hall-json parent 'deleted collection' - (collection-notify pax meta.col.old) - =. ta-this (ta-flush-permissions (weld pax /collections-config)) - =/ items=(list [nom=@ta =item]) ~(tap by data.col.old) - |- - ?~ items ta-this - =. ta-this (ta-remove-item item.i.items (weld pax [nom.i.items ~])) - $(items t.items) - :: - %both - =. ta-this (ta-flush-permissions pax) - =. ta-this (ta-flush-permissions (weld pax /collections-config)) - =/ items=(list [nom=@ta =item]) ~(tap by data.col.old) - |- - ?~ items ta-this - =. ta-this (ta-remove-item item.i.items (weld pax [nom.i.items ~])) - $(items t.items) - :: - %raw - =. ta-this (ta-flush-permissions pax) - %^ ta-hall-json - parent - 'deleted item' - (item-notify pax raw.old now.bol byk.bol) - :: - == - :: - :: - :: - ++ ta-update-item - :: always make sure removals happen first and insertions happen last - :: because removals flush permissions and insertions set them - :: - ~/ %coll-ta-update-item - |= [old=item new=item pax=path] - ^+ ta-this - ?: =(old new) - ta-this - :: - :: check for changes in item type - ?: &(?=(%collection -.old) ?=(%collection -.new)) - (ta-update-collection col.old col.new pax) - ?: &(?=(%raw -.old) ?=(%raw -.new)) - (ta-update-raw-item raw.old raw.new pax) - ?: &(?=(%both -.old) ?=(%both -.new)) - :: update raw item - =. ta-this (ta-update-collection col.old col.new pax) - (ta-update-raw-item raw.old raw.new pax) - :: - ?: &(?=(%collection -.old) ?=(%raw -.new)) - :: remove collection - :: insert raw item - =. ta-this (ta-remove-item old pax) - (ta-insert-item new pax) - :: - ?: &(?=(%collection -.old) ?=(%both -.new)) - :: insert raw item - :: update-collection - =. ta-this (ta-update-collection col.old col.new pax) - (ta-insert-item new pax) - :: - ?: &(?=(%raw -.old) ?=(%collection -.new)) - :: remove raw item - :: insert collection - =. ta-this (ta-remove-item old pax) - (ta-insert-item new pax) - :: - ?: &(?=(%raw -.old) ?=(%both -.new)) - :: insert collection - :: update raw item - =. ta-this (ta-update-raw-item raw.old raw.new pax) - (ta-insert-item new pax) - :: - ?: &(?=(%both -.old) ?=(%raw -.new)) - :: remove collection - :: update raw item - =. ta-this (ta-remove-item [%collection col.old] pax) - (ta-update-raw-item raw.old raw.new pax) - :: - ?: &(?=(%both -.old) ?=(%collection -.new)) - :: remove raw item - :: update collection - =. ta-this (ta-remove-item [%raw raw.old] pax) - (ta-update-collection col.old col.new pax) - :: - :: - ?: &(?=(%error -.old) ?=(%error -.new)) - ta-this - ?: &(?=(%error -.old) ?=(%collection -.new)) - (ta-insert-item new pax) - ?: &(?=(%error -.old) ?=(%raw -.new)) - (ta-insert-item new pax) - ?: &(?=(%error -.old) ?=(%both -.new)) - (ta-insert-item new pax) - ?: ?=(%error -.new) - (ta-hall-lin pax 'error') - :: - ta-this - :: - ++ ta-update-raw-item - ~/ %coll-ta-update-raw-item - |= [old=raw-item new=raw-item pax=path] - ^+ ta-this - ?: =(old new) - ta-this - :: - =? ta-this !=(data.old data.new) - =/ parent-path (scag (dec (lent pax)) pax) - %^ ta-hall-json - parent-path - 'edited item' - (item-notify pax new now.bol byk.bol) - :: - =? ta-this - ?& =('.y' (fall (~(get by meta.new) %comments) '.n')) - =('.n' (fall (~(get by meta.old) %comments) '.n')) - == - =/ author=(unit @ta) (~(get by meta.new) %author) - =/ author-p=@p - ?~ author our.bol - (fall (rush u.author ;~(pfix sig fed:ag)) our.bol) - (ta-generate-comments pax author-p) - :: - =? ta-this - ?& =('.n' (fall (~(get by meta.new) %comments) '.n')) - =('.y' (fall (~(get by meta.old) %comments) '.n')) - == - :: delete comments - (ta-remove (weld pax /collections-config)) - :: - ta-this - :: - ++ ta-update-collection - ~/ %coll-ta-update-collection - |= $: old=collection - new=collection - pax=path - == - ^+ ta-this - :: - =? ta-this !=(meta.old meta.new) - =/ parent-path (scag (dec (lent pax)) pax) - %^ ta-hall-json parent-path 'edited collection' - (collection-notify pax meta.new) - :: - ?: =(data.old data.new) - ta-this - :: - :: new values of all changed items - =/ upd-new (~(dif in (~(int by data.old) data.new)) data.old) - :: old values of all changed items - =/ upd-old (~(dif in (~(int by data.new) data.old)) data.new) - :: all totally new entries - =/ ins-new (~(dif by data.new) data.old) - :: all deleted entries - =/ del-old (~(dif by data.old) data.new) - :: - =/ upd-new=(list [nom=knot =item]) ~(tap by upd-new) - =/ upd-old=(list [nom=knot =item]) ~(tap by upd-old) - =/ ins-new=(list [nom=knot =item]) ~(tap by ins-new) - =/ del-old=(list [nom=knot =item]) ~(tap by del-old) - :: - =/ lam |=([[a=knot item] out=(list path)] [(weld pax [a ~]) out]) - :: - =. ta-this |- - ?~ upd-new - ta-this - ?< ?=(~ upd-old) - =* new-item i.upd-new - =* old-item i.upd-old - =/ new-pax (weld pax [nom.new-item ~]) - =. ta-this (ta-update-item item.old-item item.new-item new-pax) - :: - %= $ - upd-new t.upd-new - upd-old t.upd-old - == - :: - =. ta-this |- - ?~ ins-new - ta-this - =* new-item i.ins-new - =/ new-pax (weld pax [nom.new-item ~]) - =. ta-this (ta-insert-item +.new-item (weld pax [-.new-item ~])) - $(ins-new t.ins-new) - :: - =. ta-this |- - ?~ del-old - ta-this - =* old-item i.del-old - =/ old-pax (weld pax [nom.old-item ~]) - =. ta-this (ta-remove-item +.old-item (weld pax [-.old-item ~])) - $(del-old t.del-old) - :: - ta-this - :: - ++ ta-generate-comments - ~/ %coll-ta-generate-comments - |= [pax=path author=ship] - ^+ ta-this - =/ sup=path [%collections-config (flop pax)] - =/ bek byk.bol(r [%da now.bol]) - =/ pat (en-beam:format [bek sup]) - =/ dat=@da (slav %da (snag 0 (flop pax))) - =/ cay=config - :* [bek sup] - 'comments' - 'comments' - author - dat - dat - %comments - | - ~ - | - == - (ta-write (flop sup) %collections-config !>(cay)) - :: - :: writing files - :: - ++ ta-write - ~/ %coll-ta-write - =, space:userlib - |= [pax=path cay=cage] - ^+ ta-this - =/ bek byk.bol(r [%da now.bol]) - =. pax (en-beam:format bek (flop pax)) - %+ ta-emit ost.bol - [%info (weld /ta-write pax) (foal pax cay)] - :: - ++ ta-remove - =, space:userlib - ~/ %coll-ta-remove - |= pax=path - =/ bek byk.bol(r [%da now.bol]) - =. pax (en-beam:format bek (flop pax)) - ^+ ta-this - %+ ta-emit ost.bol - [%info (weld /ta-remove pax) (fray pax)] - :: - :: permissions - :: - ++ ta-set-permissions - ~/ %coll-ta-set-permissions - |= [pax=path r=rule:clay w=rule:clay] - ^+ ta-this - %+ ta-emit ost.bol - [%perm (weld /perms pax) q.byk.bol pax [%rw `r `w]] - :: - ++ ta-flush-permissions - ~/ %coll-ta-flush-permissions - |= pax=path - ^+ ta-this - %+ ta-emit ost.bol - [%perm (weld /perms pax) q.byk.bol pax [%rw ~ ~]] - :: - :: hall - :: - ++ ta-hall-action - ~/ %coll-ta-hall-action - |= act=action:hall - ^+ ta-this - %+ ta-emit ost.bol - [%poke /col-hall-action [our.bol %hall] %hall-action act] - :: - ++ ta-hall-actions - ~/ %coll-ta-hall-actions - |= act=(list $?(~ action:hall)) - ^+ ta-this - ?~ act ta-this - ?~ i.act $(act t.act) - %= $ - ta-this (ta-hall-action i.act) - act t.act - == - :: - ++ ta-hall-create-circle - ~/ %coll-ta-hall-create-circle - |= [pax=path name=@t] - ^+ ta-this - =/ circ=circle:hall (path-to-circle pax our.bol) - =/ parent=circle:hall - ?: =(nom.circ %c) - [our.bol %inbox] - (path-to-circle (scag (dec (lent pax)) pax) our.bol) - =/ acts=(list action:hall) - :~ [%source nom.parent & (sy `source:hall`[circ ~] ~)] - [%create nom.circ name %journal] - == - :: XX should we also source comment circles? - =? acts =(nom.parent %c) - [[%source %inbox & (sy `source:hall`[circ ~] ~)] acts] - (ta-hall-actions (flop acts)) - :: - ++ ta-hall-lin - ~/ %coll-ta-hall-lin - |= [pax=path msg=cord] - ^+ ta-this - =/ circ=circle:hall (path-to-circle pax our.bol) - %- ta-hall-action - [%phrase [circ ~ ~] [%lin | msg]~] - :: - ++ ta-hall-json - ~/ %coll-ta-hall-json - |= [pax=path header=@t jon=json] - ^+ ta-this - =/ circ=circle:hall (path-to-circle pax our.bol) - %- ta-hall-action - :+ %phrase [circ ~ ~] - [%fat [%text ~[header]] [%lin | (crip (en-json:html jon))]]~ - :: - -- --- diff --git a/pkg/arvo/lib/hood/helm.hoon b/pkg/arvo/lib/hood/helm.hoon index f3a8595c4..6369e166a 100644 --- a/pkg/arvo/lib/hood/helm.hoon +++ b/pkg/arvo/lib/hood/helm.hoon @@ -50,7 +50,6 @@ ++ move (pair bone card) :: user-level move ++ pear :: poke fruit $% {$hood-unsync desk ship desk} :: - {$ask-mail cord} :: {$helm-hi cord} :: {$drum-start well:gall} :: {$hall-action action:hall} :: @@ -131,9 +130,6 @@ %^ emit %poke /helm/hi/(scot %p her) [[her %hood] %helm-hi ?~(mes '' (crip u.mes))] :: -++ poke-send-ask - |= mel/cord - abet :: ++ poke-hi |= mes/@t @@ -155,11 +151,6 @@ ?> ?=({@t ~} pax) (emit %flog ~ %text "hi {(trip i.pax)} {?~(cop "" "un")}successful") :: -++ coup-ask - |= {pax/path cop/(unit tang)} =< abet - ?> ?=({@t ~} pax) - (emit %flog ~ %text "ask {} {?~(cop "" "un")}successful") -:: ++ poke-reload |=(all/(list term) (poke-reload-desk %home all)) ++ poke-reload-desk :: reload vanes |: $:{syd/desk all/(list term)} =< abet @@ -225,50 +216,4 @@ |= [wir=wire success=? binding=binding:eyre] =< abet (emit %flog ~ %text "bound: {}") :: -++ poke-tlon-init-stream - :: creates stream channel and makes it pull from - :: urbit-meta on {met}. - |= met/ship =< abet - %- emil - %- flop - :~ ^- card - :^ %poke /helm/web/stream/create [our %hall] - :- %hall-action - :- %create - [%stream 'stream relay channel' %channel] - :: - :^ %poke /helm/web/stream/filter [our %hall] - :- %hall-action - :- %filter - [%stream | |] - :: - :^ %poke /helm/web/stream/source [our %hall] - :- %hall-action - :- %source - [%stream & [[[met %urbit-meta] `[da+(sub now ~d1) ~]] ~ ~]] - == -:: -++ poke-tlon-add-fora - :: makes the local urbit-meta pull from {for}'s fora - :: notification channels. - |= for/ship =< abet - %- emil - :~ :^ %poke /helm/web/fora/source [our %hall] - :- %hall-action - :- %source - [%urbit-meta & [[[for %fora-posts] `[da+now ~]] ~ ~]] - :: - :^ %poke /helm/web/fora/source [our %hall] - :- %hall-action - :- %source - [%urbit-meta & [[[for %fora-comments] `[da+now ~]] ~ ~]] - == -:: -++ poke-tlon-add-stream - :: makes the local urbit-meta pull from {web}'s stream. - |= web/ship =< abet - %- emit - :^ %poke /helm/web/stream/source [our %hall] - :+ %hall-action %source - [%urbit-meta & [[[web %stream] `[da+now ~]] ~ ~]] -- diff --git a/pkg/arvo/lib/hood/write.hoon b/pkg/arvo/lib/hood/write.hoon index 2d484b866..b1d20d279 100644 --- a/pkg/arvo/lib/hood/write.hoon +++ b/pkg/arvo/lib/hood/write.hoon @@ -3,7 +3,6 @@ :::: /hoon/write/hood/lib :: /? 310 -/- plan-diff, plan-acct =, format =* as-octs as-octs:mimes:html =, space:userlib @@ -41,45 +40,6 @@ |= {sup/path mim/mime} ^+ abet :: XX determine extension, beak (poke--data [`%md (flop sup)] %mime mim) :: -++ poke-plan-account - |= {sev/knot usr/plan-acct} ^+ abet - (poke-plan-diff [~ ~ [[sev usr] ~ ~]]) -:: -++ poke-plan-info - |= {who/@t loc/@t} - (poke-plan-diff [[~ who loc] ~ ~]) -:: -++ poke-plan-diff - |= dif/plan-diff ^+ abet - ?. =(our src) - ~|(foreign-write+[our=our src=src] !!) - =/ sev - :: XX this scry will always fail. wat do? - :: - =+ .^(path %e /(scot %p our)/serv/(scot %da now)) - ?>(?=({@tas @tas *} -) -) - =; sob/soba:clay - ?~(sob abet abet:(emit %info write+~ `toro:clay`[i.t.sev %& sob])) - =+ pax=`path`/web/plan - =+ paf=(en-beam beak-now (flop pax)) - ?~ [fil:.^(arch %cy paf)] - =+ ins=(pact-plan [['' ''] ~] dif) - [pax %ins plan+!>(ins)]~ - =+ ole=.^({{@t @t} (map knot plan-acct)} %cx paf) - =+ neu=(pact-plan ole dif) - ?: =(ole neu) ~ - [pax %dif plan-diff+!>(dif)]~ -:: -++ pact-plan :: XX clay should handle fused insert+diff - |= {all/{{who/@t loc/@t} acc/(map knot plan-acct)} dif/plan-diff} - ^+ all - :- (fall inf.dif -.all) - =; neu (~(uni by neu) put.dif) - =+ del=~(tap by del.dif) :: XXX map functions - |- ^+ acc.all - ?~ del acc.all - $(del t.del, acc.all (~(del by acc.all) p.i.del)) -:: ++ poke-paste |= {typ/?($hoon $md $txt) txt/@t} ^+ abet (poke--data [`typ /web/paste/(scot %da now)] %mime / (as-octs txt)) diff --git a/pkg/arvo/lib/httr-to-json.hoon b/pkg/arvo/lib/httr-to-json.hoon deleted file mode 100644 index ff8fd1000..000000000 --- a/pkg/arvo/lib/httr-to-json.hoon +++ /dev/null @@ -1,2 +0,0 @@ -=, html -|=(hit/httr:eyre ~|(hit ?>(?=($2 (div p.hit 100)) (need (de-json q:(need r.hit)))))) diff --git a/pkg/arvo/lib/landscape.hoon b/pkg/arvo/lib/landscape.hoon deleted file mode 100644 index b36bcff72..000000000 --- a/pkg/arvo/lib/landscape.hoon +++ /dev/null @@ -1,21 +0,0 @@ -|= inner=manx -^- manx -;html -:: - ;head - ;title: Landscape - ;meta(charset "utf-8"); - ;meta - =name "viewport" - =content "width=device-width, initial-scale=1, shrink-to-fit=no"; - ;link(rel "stylesheet", href "/~~/landscape/css/index.css"); - == -:: - ;body - ;div#root - ;+ inner - == - ;script@"/~~/landscape/js/index-min.js"; - == -:: -== diff --git a/pkg/arvo/lib/map-to-json.hoon b/pkg/arvo/lib/map-to-json.hoon deleted file mode 100644 index b6556cd4c..000000000 --- a/pkg/arvo/lib/map-to-json.hoon +++ /dev/null @@ -1,9 +0,0 @@ -:: hoon data to json -:: -:::: /hoon/map-to-json/lib - :: -/? 310 -=, format -|* {a/_cord b/_json} :: XX {a/$-(* cord) b/$-(* json)} -|= c/(map _+<.a _+<.b) -(pairs:enjs (turn ~(tap by c) |*(d/^ [(a -.d) (b +.d)]))) diff --git a/pkg/arvo/lib/prey.hoon b/pkg/arvo/lib/prey.hoon deleted file mode 100644 index 1dfdb2dc1..000000000 --- a/pkg/arvo/lib/prey.hoon +++ /dev/null @@ -1 +0,0 @@ -prey:pubsub:userlib diff --git a/pkg/arvo/mar/ask-mail.hoon b/pkg/arvo/mar/ask-mail.hoon deleted file mode 100644 index a3d8abf09..000000000 --- a/pkg/arvo/mar/ask-mail.hoon +++ /dev/null @@ -1,19 +0,0 @@ -:: -:::: /hoon/ask-mail/mar - :: -/? 310 -=, format -=, mimes:html -|_ txt/cord -:: -++ grab :: convert from - |% - ++ noun @t :: clam from %noun - ++ json so:dejs - -- -++ grow - |% - ++ psal ;div: {(trip txt)} - ++ mime [text+/plain (as-octs txt)] - -- --- diff --git a/pkg/arvo/mar/collections/action.hoon b/pkg/arvo/mar/collections/action.hoon deleted file mode 100644 index e33ce7c42..000000000 --- a/pkg/arvo/mar/collections/action.hoon +++ /dev/null @@ -1,120 +0,0 @@ -:: -:::: /hoon/actions/collection/mar - :: -/? 309 -/+ collections -=, collections -=, format -:: -|_ act=action:collections -:: -++ grow - |% - ++ tank >act< - -- -:: -++ grab - |% - ++ noun action:collections - ++ json - |= jon=^json - ;; action:collections - =< (action jon) - |% - ++ action - %- ot:dejs - :~ ship+(su:dejs fed:ag) - desk+(su:dejs sym) - :- %acts - %- ar:dejs - %- of:dejs - :~ write+write - delete+delete - perms+perms - collection+collection - post+post - comment+comment - == - == - :: - ++ write - %- ot:dejs - :~ path+(su:dejs ;~(pfix fas (more fas urs:ab))) - mark+(su:dejs sym) - data+so:dejs - == - :: - ++ delete - %- ot:dejs - :~ path+(su:dejs ;~(pfix fas (more fas urs:ab))) - == - :: - ++ perms - %- ot:dejs - :~ path+(su:dejs ;~(pfix fas (more fas urs:ab))) - :- %read - %- ot:dejs - :~ mod+(su:dejs ;~(pose (jest %black) (jest %white))) - who+whoms - == - :- %write - %- ot:dejs - :~ mod+(su:dejs ;~(pose (jest %black) (jest %white))) - who+whoms - == - == - :: - ++ whoms - |= jon=^json - ^- (set whom:clay) - =/ x ((ar:dejs (su:dejs fed:ag)) jon) - ;; (set whom:clay) - %- ~(run in (sy x)) - |=(w=@ [& w]) - -- - :: - ++ collection - %- ot:dejs - :~ path+(su:dejs ;~(pfix fas (more fas urs:ab))) - name+sa - desc+so:dejs - comments+bo:dejs - visible+bo:dejs - type+(su:dejs sym) - == - :: - ++ post - %- ot:dejs - :~ path+(su:dejs ;~(pfix fas (more fas urs:ab))) - name+sa - type+(su:dejs sym) - comments+bo:dejs - content+so:dejs - edit+bo:dejs - == - :: - ++ comment - %- ot:dejs - :~ path+(su:dejs ;~(pfix fas (more fas urs:ab))) - content+so:dejs - == - :: - ++ sa :: string as ta - |= jon=^json - ?> ?=([%s *] jon) - (scot %tas p.jon) - -- -:: --- - - - - - - - - - - - - diff --git a/pkg/arvo/mar/collections/command.hoon b/pkg/arvo/mar/collections/command.hoon deleted file mode 100644 index b1ab6a14a..000000000 --- a/pkg/arvo/mar/collections/command.hoon +++ /dev/null @@ -1,11 +0,0 @@ -/? 309 -:: -/- hall -/+ collections -:: -|_ com=command:collections -++ grab - |% - ++ noun command:collections - -- --- diff --git a/pkg/arvo/mar/collections/config.hoon b/pkg/arvo/mar/collections/config.hoon deleted file mode 100644 index b9803dd51..000000000 --- a/pkg/arvo/mar/collections/config.hoon +++ /dev/null @@ -1,92 +0,0 @@ -:: -:::: /hoon/config/collection/mar - :: -/+ collections -!: -|_ con=config:collections -:: -:: -++ grow - |% - ++ mime - :- /text/x-collection-config - (as-octs:mimes:html (of-wain:format txt)) - ++ txt - ^- wain - :: - :~ (cat 3 'full-path: ' (spat (en-beam:format full-path.con))) - (cat 3 'name: ' name.con) - (cat 3 'description: ' description.con) - :: - (cat 3 'author: ' (scot %p author.con)) - :: - (cat 3 'date-created: ' (scot %da date-created.con)) - (cat 3 'last-modified: ' (scot %da last-modified.con)) - :: - (cat 3 'type: ' type.con) - (cat 3 'comments: ' ?:(comments.con 'y' 'n')) - (cat 3 'sort-key: ' ?~(sort-key.con '~' (scot %ud u.sort-key.con))) - (cat 3 'visible: ' ?:(visible.con 'y' 'n')) - == - -- -++ grab - |% - ++ mime - |= [mite:eyre p=octs:eyre] - (txt (to-wain:format q.p)) - ++ txt - |= txs=(pole @t) - ^- config:collections - :: TODO: putting ~ instead of * breaks this but shouldn't - :: - ?> ?= $: full-path=@t - name=@t - desc=@t - author=@t - dc=@t - lm=@t - type=@t - com=@t - sk=@t - vis=@t - * - == - txs - :: - :* %- need - %+ rash full-path.txs - ;~ pfix (jest 'full-path: ') - %+ cook de-beam:format - ;~(pfix fas (more fas urs:ab)) - == - :: - (rash name.txs ;~(pfix (jest 'name: ') (cook crip (star next)))) - :: - (rash desc.txs ;~(pfix (jest 'description: ') (cook crip (star next)))) - :: - (rash author.txs ;~(pfix (jest 'author: ~') fed:ag)) - :: - %+ rash dc.txs - ;~ pfix - (jest 'date-created: ~') - (cook year when:so) - == - :: - %+ rash lm.txs - ;~ pfix - (jest 'last-modified: ~') - (cook year when:so) - == - :: - (rash type.txs ;~(pfix (jest 'type: ') (cook crip (star next)))) - :: - (rash com.txs ;~(pfix (jest 'comments: ') (fuss %y %n))) - :: - (rush sk.txs ;~(pfix (jest 'sort-key: ') dem:ag)) - :: - (rash vis.txs ;~(pfix (jest 'visible: ') (fuss %y %n))) - == - ++ noun config:collections - -- -++ grad %mime --- diff --git a/pkg/arvo/mar/collections/elem.hoon b/pkg/arvo/mar/collections/elem.hoon deleted file mode 100644 index c01321b76..000000000 --- a/pkg/arvo/mar/collections/elem.hoon +++ /dev/null @@ -1,17 +0,0 @@ -:: -:::: /hoon/elem/collection/mar - :: -/? 310 -=, mimes:html -=, html -|_ own/manx -:: -++ grow :: convert to - |% - ++ hymn ;html:(head body:"+{own}") :: convert to %hymn - ++ html (crip (en-xml hymn)) :: convert to %html - ++ mime [/text/html (as-octs html)] :: convert to %mime - -- -++ grab |% :: convert from - ++ noun manx :: clam from %noun --- -- diff --git a/pkg/arvo/mar/collections/json.hoon b/pkg/arvo/mar/collections/json.hoon deleted file mode 100644 index d8943648f..000000000 --- a/pkg/arvo/mar/collections/json.hoon +++ /dev/null @@ -1,24 +0,0 @@ -:: -:::: /hoon/json/collection/mar - :: -/? 309 - :: -:::: compute - :: -=, eyre -=, format -=, html -|_ jon/json -:: -++ grow :: convert to - |% - ++ txt (crip (en-json jon)) - ++ json jon - -- -++ grab - |% :: convert from - ++ noun ^json :: clam from %noun - ++ json ^json - -- -++ grad %mime --- diff --git a/pkg/arvo/mar/collections/prize.hoon b/pkg/arvo/mar/collections/prize.hoon deleted file mode 100644 index 8e1cd01d3..000000000 --- a/pkg/arvo/mar/collections/prize.hoon +++ /dev/null @@ -1,54 +0,0 @@ -:: -:: -/? 309 -:: -/- hall -/+ collections, hall-json -:: -|_ piz=prize:collections -++ grow - |% - ++ json - =, enjs:format - ^- ^json - %+ frond %landscape - %+ frond %prize - %- pairs - :~ :- %inbox - %- pairs - :~ [%config ?~(con.inbox.piz ~ (conf:enjs:hall-json u.con.inbox.piz))] - [%messages %a (turn env.inbox.piz enve:enjs:hall-json)] - == - :: - :+ %circles %a - %+ turn ~(tap by circles.piz) - |= [cir=circle:hall con=(unit config:hall)] - %- pairs - :~ [%circle (circ:enjs:hall-json cir)] - [%config ?~(con ~ (conf:enjs:hall-json u.con))] - == - :: - :+ %circles-our %a - %+ turn ~(tap in our-circles.piz) - |= nom=name:hall - [%s nom] - :: - :- %dms - %- pairs - %+ turn ~(tap by dms.piz) - |= [nom=name:hall ini=@p env=(list envelope:hall)] - :- nom - %- pairs - :~ [%initiator (ship ini)] - [%messages %a (turn env enve:enjs:hall-json)] - == - :: - [%invites %a (turn invites.piz enve:enjs:hall-json)] - == - -- -:: -++ grab - |% - ++ noun prize:collections - -- --- diff --git a/pkg/arvo/mar/collections/rumor.hoon b/pkg/arvo/mar/collections/rumor.hoon deleted file mode 100644 index 57cf3f4f2..000000000 --- a/pkg/arvo/mar/collections/rumor.hoon +++ /dev/null @@ -1,36 +0,0 @@ -:: -:: -/? 309 -:: -/+ collections, hall-json -:: -|_ rum=rumor:collections -++ grow - |% - ++ json - =, enjs:format - ^- ^json - %+ frond %landscape - %+ frond %rumor - %+ frond -.rum - ?- -.rum - %config-change - %- pairs - :~ [%circle (circ:enjs:hall-json cir.rum)] - [%config ?~(con.rum ~ (conf:enjs:hall-json u.con.rum))] - == - :: - %new-msg - %- pairs - :~ [%circle [%s nom.rum]] - [%message (enve:enjs:hall-json env.rum)] - == - == - - -- -:: -++ grab - |% - ++ noun rumor:collections - -- --- diff --git a/pkg/arvo/mar/email.hoon b/pkg/arvo/mar/email.hoon deleted file mode 100644 index cdedcd361..000000000 --- a/pkg/arvo/mar/email.hoon +++ /dev/null @@ -1,11 +0,0 @@ -:: -:::: /hoon/email/mar - :: -/? 310 -|_ {adr/@ta tyl/tape mez/wall} -:: -++ grab :: convert from - |% - ++ noun {@ta tape wall} :: clam from %noun - -- --- diff --git a/pkg/arvo/mar/fora/comment.hoon b/pkg/arvo/mar/fora/comment.hoon deleted file mode 100644 index 1857ff9eb..000000000 --- a/pkg/arvo/mar/fora/comment.hoon +++ /dev/null @@ -1,12 +0,0 @@ -:: -:::: /mar/fora/comment/hoon - :: -/? 310 -|_ {pax/path sup/spur txt/@t} -++ grab - |% - ++ noun {path spur @t} - ++ json - (corl need =>(dejs-soft:format (ot pax+(su fel:stab) sup+(su fel:stab) txt+so ~))) - -- --- diff --git a/pkg/arvo/mar/fora/post.hoon b/pkg/arvo/mar/fora/post.hoon deleted file mode 100644 index fa6fa2ce6..000000000 --- a/pkg/arvo/mar/fora/post.hoon +++ /dev/null @@ -1,12 +0,0 @@ -:: -:::: /mar/fora/post/hoon - :: -/? 310 -|_ {pax/path sup/spur hed/@t txt/@t} -++ grab - |% - ++ noun {path spur @t @t} - ++ json - (corl need =>(dejs-soft:format (ot pax+(su fel:stab) sup+(su fel:stab) hed+so txt+so ~))) - -- --- diff --git a/pkg/arvo/mar/hall/speeches.hoon b/pkg/arvo/mar/hall/speeches.hoon deleted file mode 100644 index a2353df39..000000000 --- a/pkg/arvo/mar/hall/speeches.hoon +++ /dev/null @@ -1,23 +0,0 @@ -:: -:::: /mar/hall/speeches/hoon - :: -/? 310 -/- hall -/+ hall,map-to-json -:: -=+ hall -|_ gam/(list speech) -:: -++ grab - |% - ++ noun (list speech) - -- -:: -++ grad - |% - ++ form %hall-speeches - ++ diff |=((list speech) +<) - ++ pact |=((list speech) +<) - ++ join |=({(list speech) (list speech)} `(unit mime)`~) - -- --- diff --git a/pkg/arvo/mar/plan-diff.hoon b/pkg/arvo/mar/plan-diff.hoon deleted file mode 100644 index 8ed8381ea..000000000 --- a/pkg/arvo/mar/plan-diff.hoon +++ /dev/null @@ -1,11 +0,0 @@ -:: -:::: /hoon/plan-diff/mar - :: -/? 310 -/- plan-diff -:: -:::: ~fyr - :: -|_ plan-diff -++ grab |% ++ noun plan-diff --- -- diff --git a/pkg/arvo/mar/plan.hoon b/pkg/arvo/mar/plan.hoon deleted file mode 100644 index a8e74e993..000000000 --- a/pkg/arvo/mar/plan.hoon +++ /dev/null @@ -1,102 +0,0 @@ -:: -:::: /hoon/plan/mar - :: -/? 310 -/- plan-acct, plan-diff -:: -:::: ~fyr - :: -=, eyre -=, html -=, format -|_ all/{{who/@txname loc/@txloc} acc/(map knot plan-acct)} -:: -++ grow :: convert to - =+ all - |% - ++ txt - ^- wain - :+ (cat 3 'User ' ?~(who 'of Urbit' who)) - (cat 3 'Location ' ?~(loc %unknown loc)) - %+ turn (sort ~(tap by acc) aor) - |= {a/knot b/plan-acct} ^- cord - %+ rap 3 - :^ a ': ' usr.b - ?~(url.b ~ [', ' (apix:en-purl u.url.b)]) - :: - ++ plan-json - %- pairs:enjs :~ - who+?~(who ~ s+who) - loc+?~(loc ~ s+loc) - acc+o+(~(run by acc) json-acct) - == - ++ json-acct :: helper - |= a/plan-acct ^- json - =/ url ?~(url.a ~ (tape:enjs (apix:en-purl u.url.a))) - (pairs:enjs usr+s+usr.a url+url ~) - -- -++ grab |% :: convert from - ++ noun {{cord cord} (map knot plan-acct)} :: clam from %noun - ++ txt - |^ |= a/wain ^+ all - ?> ?=({@t @t *} a) - :- [(rash i.a user) (rash i.t.a location)] - (malt (turn t.t.a |=(b/cord (rash b account)))) - :: - ++ user ;~(pfix (jest 'User ') (cook crip (star prn))) - ++ knot %+ cook crip - (plus ;~(pose nud low hig hep dot sig cab)) - ++ location ;~(pfix (jest 'Location ') (cook crip (star prn))) - ++ account - ;~ plug - knot - ;~(pfix col ace knot) - (punt ;~(pfix com ace aurf:de-purl)) - == - -- - ++ mime |=({* a/octs} (txt (to-wain q.a))) :: XX mark translation - -- -++ grad - |% - ++ form %plan-diff - ++ diff - |= neu/_all ^- plan-diff :: XXX map functions - :+ ?:(=(-.all -.neu) ~ (some -.neu)) - =< (malt `(list {knot ~})`(murn ~(tap by acc.all) .)) - |= {a/knot *} ^- (unit {knot ~}) - ?:((~(has by acc.neu) a) ~ (some [a ~])) - =< (malt (murn ~(tap by acc.neu) .)) - |= {a/knot b/plan-acct} ^- (unit {knot plan-acct}) - ?: =([~ b] (~(get by acc.all) a)) - ~ - (some [a b]) - :: - ++ pact - |= dif/plan-diff ^+ all :: XXX map functions - :- (fall inf.dif -.all) - =; neu (~(uni by neu) put.dif) - =+ del=~(tap by del.dif) - |- ^+ acc.all - ?~ del acc.all - $(del t.del, acc.all (~(del by acc.all) p.i.del)) - :: - ++ can-join - |= {ali/plan-diff bob/plan-diff} ^- ? - ?& !&(?=({{^ *} {^ *}} +<) !=(u.inf.ali u.inf.bob)) :: compatible info - =(~ (~(int by `(map knot *)`del.ali) put.bob)) :: no del-put - =(~ (~(int by `(map knot *)`put.ali) del.bob)) :: conflicts - .= (~(int by put.ali) put.bob) :: and all put - (~(int by put.bob) put.ali) :: values match - == - :: - ++ join - |= {ali/plan-diff bob/plan-diff} - ^- (unit plan-diff) - ?. (can-join ali bob) - ~ - %^ some - (mate inf.ali inf.bob) - (~(uni by del.ali) del.bob) - (~(uni by put.ali) put.bob) - -- --- diff --git a/pkg/arvo/mar/quri.hoon b/pkg/arvo/mar/quri.hoon deleted file mode 100644 index ecd0b2768..000000000 --- a/pkg/arvo/mar/quri.hoon +++ /dev/null @@ -1,17 +0,0 @@ -:: -:::: /hoon/quri/mar - :: -/? 310 -=, eyre -=, mimes:html -=, html -|_ url/quri -:: -++ grow |% ++ mime [text+/x-uri (as-octt (apex:en-purl url))] - -- -++ grab :: convert from - |% - ++ noun quri :: clam from %noun - ++ mime |=(mim/^mime (rash q.q.mim zest:de-purl)) - -- --- diff --git a/pkg/arvo/mar/recoverable-error.hoon b/pkg/arvo/mar/recoverable-error.hoon deleted file mode 100644 index 0856593a3..000000000 --- a/pkg/arvo/mar/recoverable-error.hoon +++ /dev/null @@ -1,31 +0,0 @@ -:: Possibly non-fatal http error -:: -:::: /hoon/recoverable-error/mar - :: -/- recoverable-error -:: -:::: ~fyr - :: -=, eyre -=, format -=, html -|_ recoverable-error -++ grab - |% - ++ noun recoverable-error - ++ httr - |= a/^httr ^- recoverable-error - ~& [%recoverable-httr a] - ~! a - ?+ p.a ~|(non-recoverable+p.a !!) - $429 :+ p.a %rate-limit - %. %x-rate-limit-reset - ;~ biff - ~(get by (malt q.a)) - de-json - ni:dejs-soft - == - == - -- -++ grow |% ++ tank >[+<]< -- --- diff --git a/pkg/arvo/mar/rss-xml.hoon b/pkg/arvo/mar/rss-xml.hoon deleted file mode 100644 index 4fad468d2..000000000 --- a/pkg/arvo/mar/rss-xml.hoon +++ /dev/null @@ -1,10 +0,0 @@ -:: -:::: /hoon/rss-xml/mar - :: -/? 310 -:: -:: alias -/: /===/mar/xml - /!noun/ -:: -- diff --git a/pkg/arvo/mar/x-collections-json.hoon b/pkg/arvo/mar/x-collections-json.hoon deleted file mode 100644 index 95ce9a0a1..000000000 --- a/pkg/arvo/mar/x-collections-json.hoon +++ /dev/null @@ -1,26 +0,0 @@ -:: -:::: /hoon/x-collections-json/mar - :: -/? 310 - :: -:::: compute - :: -=, eyre -=, format -=, html -|_ jon/json -:: -++ grow :: convert to - |% - ++ mime [/application/json (as-octs:mimes txt)] :: convert to %mime - ++ txt (crip (en-json jon)) - -- -++ grab - |% :: convert from - ++ mime |=({p/mite q/octs} (fall (rush (@t q.q) apex:de-json) *json)) - ++ noun json :: clam from %noun - ++ numb numb:enjs - ++ time time:enjs - -- -++ grad %mime --- diff --git a/pkg/arvo/mar/x-collections-json/elem.hoon b/pkg/arvo/mar/x-collections-json/elem.hoon deleted file mode 100644 index da75a75e8..000000000 --- a/pkg/arvo/mar/x-collections-json/elem.hoon +++ /dev/null @@ -1,3 +0,0 @@ -|_ a=json -++ grab |% ++ noun json --- -- diff --git a/pkg/arvo/mar/x-collections-snip.hoon b/pkg/arvo/mar/x-collections-snip.hoon deleted file mode 100644 index d8284b160..000000000 --- a/pkg/arvo/mar/x-collections-snip.hoon +++ /dev/null @@ -1,21 +0,0 @@ -/? 310 -|_ [hed=marl tal=marl] -++ grow - |% - ++ mime - =< mime - |% - ++ elem ;div:(h1:"*{hed}" div:"*{tal}") :: convert to %elem - ++ hymn ;html:(head:title:"snip" body:"+{elem}") :: convert to %hymn - ++ html (crip (en-xml:^html hymn)) :: convert to %html - ++ mime [/text/html (as-octs:mimes:^html html)] :: convert to %mime - -- - ++ collections-snip [hed tal] - -- -:: -++ grab - |% - +$ noun [marl marl] - -- --- - diff --git a/pkg/arvo/mar/x-collections-snip/elem.hoon b/pkg/arvo/mar/x-collections-snip/elem.hoon deleted file mode 100644 index c0210fd11..000000000 --- a/pkg/arvo/mar/x-collections-snip/elem.hoon +++ /dev/null @@ -1,3 +0,0 @@ -|_ a=manx -++ grab |% ++ noun manx --- -- diff --git a/pkg/arvo/mar/x-urb-elem.hoon b/pkg/arvo/mar/x-urb-elem.hoon deleted file mode 100644 index d1edbfb00..000000000 --- a/pkg/arvo/mar/x-urb-elem.hoon +++ /dev/null @@ -1,17 +0,0 @@ -:: -:::: /hoon/elem/urb/mar - :: -/? 310 -=, mimes:html -=, html -|_ own/manx -:: -++ grow :: convert to - |% - ++ hymn ;html:(head body:"+{own}") :: convert to %hymn - ++ html (crip (en-xml hymn)) :: convert to %html - ++ mime [/text/html (as-octs html)] :: convert to %mime - -- -++ grab |% :: convert from - ++ noun manx :: clam from %noun --- -- diff --git a/pkg/arvo/mar/x-urb.hoon b/pkg/arvo/mar/x-urb.hoon deleted file mode 100644 index 22b7f39d8..000000000 --- a/pkg/arvo/mar/x-urb.hoon +++ /dev/null @@ -1,20 +0,0 @@ -:: -:::: /hoon/x-urb/mar - :: -/? 310 -=, format -=, mimes:html -=, html -:: -|_ max=manx -++ grow :: convert to - |% - ++ mime [/text/html (as-octs html)] :: convert to %mime - ++ html (crip (en-xml hymn)) :: convert to %html - ++ hymn max - -- -++ grab - |% :: convert from - ++ noun manx :: clam from %noun - -- --- diff --git a/pkg/arvo/ren/collections.hoon b/pkg/arvo/ren/collections.hoon deleted file mode 100644 index e306ac0d2..000000000 --- a/pkg/arvo/ren/collections.hoon +++ /dev/null @@ -1,22 +0,0 @@ -:: -:::: /ren/collections/hoon - :: -/? 309 -/+ collections -:: -:: collections: -:: -:: get collection-config file at rendered path, -:: and all collections-item files the subpath. -:: outputs a +collection defined in /lib/collections/hoon -:: -:: recursive renderer, see its counterpart in /ren/collections/item/hoon -:: -/= collection - /^ collection:collections - /; |= [a=config:collections b=(map knot item:collections) ~] - [a b] - /. /collections-config/ - /_ /collections-item/ - == -collection diff --git a/pkg/arvo/ren/collections/elem.hoon b/pkg/arvo/ren/collections/elem.hoon deleted file mode 100644 index 887221eef..000000000 --- a/pkg/arvo/ren/collections/elem.hoon +++ /dev/null @@ -1,322 +0,0 @@ -:: -:::: - :: -/? 309 -/+ collections, cram -/= gas /$ fuel:html -/= itm /collections-web-item/ -:: -:: -/= collection-post - /: /===/web/landscape/collections/post /!noun/ -:: -=< (item-to-elem itm) -|% -++ item-to-elem - !: - |= itm=item:collections - ^- manx - ?< =(/collections/web s.bem.gas) - =/ sho (fall (~(get by qix.gas) %show) %default) - ;div.container - ;+ - ?+ -.itm !! - %error ;div: 404 - :: - %collection - ?+ sho !! - :: - %default - ;div.row - ;div.flex-col-2; - ;div.flex-col-x - ;div - ;+ (meta-to-elem itm sho) - ;+ (collection-to-elem col.itm) - == - == - ;+ ?: =(type.meta.col.itm %blog) - ;div.flex-col-5; - ?: =(type.meta.col.itm %fora) - ;div.flex-col-4; - ;div.flex-col-4; - == - :: - %post - ;div.row - ;div.flex-col-2; - ;div.flex-col-x - ;div - ;+ (meta-to-elem itm sho) - ;+ (collection-post ~ (flop s.bem.gas)) - == - == - ;div.flex-col-2; - == - == -:: %raw - :: - %both - ?+ sho !! - :: - %default - ;div.row - ;div.flex-col-2; - ;div.flex-col-x - ;div - ;+ (meta-to-elem itm sho) - ;+ (both-to-elem col.itm raw.itm) - == - == - ;div.flex-col-3; - == - :: - %edit - ;div.row - ;div.flex-col-2; - ;div.flex-col-x - ;div - ;+ (meta-to-elem itm sho) - ;+ (collection-post `raw.itm (flop s.bem.gas)) - == - == - ;div.flex-col-2; - == - == - == - == -++ collection-to-elem - |= col=collection:collections - ^- manx - ;ul.vanilla - ;* %+ roll - %+ sort ~(tap by data.col) - |= [[knot a=item:collections] [knot b=item:collections]] - =/ a-dat (extract-date-created a) - =/ b-dat (extract-date-created b) - (lth a-dat b-dat) - |= [[nom=knot ite=item:collections] out=marl] - ^- marl - ?: ?=(%error -.ite) - out - :_ out - ^- manx - ;li.collection-post.mt-6 - ;+ (item-to-snip nom ite) - == - == -:: -++ raw-to-elem - |= raw=raw-item:collections - ^- manx - =/ elm elm:(static:cram (ream data.raw)) - =/ ht (hedtal:collections +.elm) - =/ title (fall (~(get by meta.raw) %name) -.s.bem.gas) - =/ date (fall (~(get by meta.raw) %date-created) 'missing date') - =/ author (fall (~(get by meta.raw) %author) 'anonymous') - :: - ;div.mb-18.mt-4 - ;+ elm - == -:: -++ both-to-elem - |= [col=collection:collections raw=raw-item:collections] - ^- manx - ;div - ;+ (raw-to-elem raw) - :: - ;div - ;div.flex.align-center.mb-5 - ;div(urb-component "IconComment"); - ;div.ml-2.text-small.text-mono.text-600: {<~(wyt by data.col)>} - == - :: - ;ul.vanilla - ;* %+ turn - %+ sort ~(tap by data.col) - |= [[knot a=item:collections] [knot b=item:collections]] - =/ a-dat (extract-date-created a) - =/ b-dat (extract-date-created b) - (lte a-dat b-dat) - |= [nom=knot ite=item:collections] - ^- manx - ?> ?=(%raw -.ite) - =/ author (fall (~(get by meta.raw.ite) %author) 'anonymous') - =/ host (fall (~(get by meta.raw.ite) %host) 'anonymous') - =/ date (fall (~(get by meta.raw.ite) %date-created) 'missing date') - ;li.mb-6 - ;div.flex.align-center - ;div.mr-2 - =urb-component "Sigil" - =urb-ship "{(trip author)}" - =urb-size "18" - =urb-prefix "true"; - ;div - ;a.vanilla.text-mono.text-small.text-700.mr-4 - =href "/~~/{(trip host)}/==/web/landscape/profile" - ; {(trip author)} - == - == - ;div.text-host-breadcrumb - =urb-component "Elapsed" - =urb-timestring "{(trip date)}"; - == - ;div.collection-comment-content - ;+ elm:(static:cram (ream data.raw.ite)) - == - == - == - :: - ;div - =urb-component "CommentCreate" - =urb-pax "{<(flop s.bem.gas)>}" - =urb-ship "{(scow %p p.bem.gas)}"; - == - == -:: -++ extract-date-created - |= i=item:collections - ^- @da - ?- -.i - %error *@da - %collection date-created.meta.col.i - %both date-created.meta.col.i - %raw (slav %da (~(got by meta.raw.i) %date-created)) - == -:: -:: -:: -++ item-to-snip - |= [nom=knot itm=item:collections] - ^- manx - ?- -.itm - %error - ;div: 404 - %collection - (collection-to-snip nom col.itm) - %raw - (raw-to-snip nom raw.itm) - %both - (both-to-snip nom col.itm raw.itm) - == -:: -++ collection-to-snip - |= [nom=knot col=collection:collections] - ^- manx - =/ lnk=tape - "/~~/{(scow %p p.full-path.meta.col)}/=={(spud (flop (slag 1 s.full-path.meta.col)))}" - ;div - ;div.collection-date: {} - ;h2.mt-0.mb-0 - ;a(href lnk): {(trip name.meta.col)} - == - ;div.who.text-mono.text-600: {} - ;div.meta-cont - ;div.com-count.ml-12 - ; {(trip (scot %ud ~(wyt by data.col)))} comments - == - == - == -:: -++ raw-to-snip - |= [nom=knot raw=raw-item:collections] - ^- manx - =/ elm=manx elm:(static:cram (ream data.raw)) - =/ ht (hedtal:collections +.elm) - =? tal.ht ?=(~ hed.ht) - (scag 5 c.elm) - =/ title (fall (~(get by meta.raw) %name) nom) - =/ date (fall (~(get by meta.raw) %date-created) 'missing date') - =/ author (fall (~(get by meta.raw) %author) 'anonymous') - =/ lnk=tape - "/~~/{(scow %p p.bem.gas)}/=={(spud (flop s.bem.gas))}/{(trip nom)}" - :: - ;div - ;div.collection-date: {(trip date)} - ;h2 - ;+ ?~ hed.ht - ;a(href lnk): {(trip title)} - ;a(href lnk): *{hed.ht} - == - ;div.who.text-mono.text-600: {(trip author)} - ;div.snippet - ;* tal.ht - == - == -:: -++ both-to-snip - |= [nom=knot col=collection:collections raw=raw-item:collections] - ^- manx - =/ elm=manx elm:(static:cram (ream data.raw)) - =/ ht (hedtal:collections +.elm) - =? tal.ht ?=(~ hed.ht) - (scag 5 c.elm) - =/ title (fall (~(get by meta.raw) %name) nom) - =/ lnk=tape - "/~~/{(scow %p p.bem.gas)}/=={(spud (flop s.bem.gas))}/{(trip nom)}" - :: - ;div - ;div.collection-date: {} - ;h2.mt-0.mb-0.text-500 - ;+ ?~ hed.ht - ;a(href lnk): {(trip title)} - ;a(href lnk): *{hed.ht} - == - ;div.text-mono.text-small.text-300.mt-1.mb-1: {} - ;div - ;div.icon-label.justify-start - ;div(urb-component "IconComment"); - ;div.ml-2 - ; {(trip (scot %ud ~(wyt by data.col)))} - == - == - == - == -:: -++ meta-to-elem - |= [itm=item:collections sho=@tas] - ^- manx - =/ mat=mart - :~ [%type "hidden"] - [%name "urb-metadata"] - [%urb-show (trip sho)] - [%urb-path (spud (flop s.bem.gas))] - == - :_ ~ - :- %input - %+ weld mat - ^- mart - ?- -.itm - %error ~ - %collection - =* met meta.col.itm - :~ [%urb-name (trip name.met)] - [%urb-author (scow %p author.met)] - [%urb-host (scow %p p.full-path.met)] - [%urb-date-created (scow %da date-created.met)] - [%urb-last-modified (scow %da last-modified.met)] - [%urb-content-type (trip type.met)] - [%urb-structure-type "collection-index"] - == - %raw - =/ met ~(got by meta.raw.itm) - :~ [%urb-name (trip (met %name))] - [%urb-author (trip (met %author))] - [%urb-host (trip (met %host))] - [%urb-date-created (trip (met %date-created))] - [%urb-last-modified (trip (met %last-modified))] - [%urb-content-type (trip (met %type))] - [%urb-structure-type "collection-post"] - == - %both - =/ met ~(got by meta.raw.itm) - :~ [%urb-name (trip (met %name))] - [%urb-author (trip (met %author))] - [%urb-host (trip (met %host))] - [%urb-date-created (trip (met %date-created))] - [%urb-last-modified (trip (met %last-modified))] - [%urb-content-type (trip (met %type))] - [%urb-structure-type "collection-post"] - == - == --- diff --git a/pkg/arvo/ren/collections/item.hoon b/pkg/arvo/ren/collections/item.hoon deleted file mode 100644 index 901e0a523..000000000 --- a/pkg/arvo/ren/collections/item.hoon +++ /dev/null @@ -1,56 +0,0 @@ -:: -:::: /ren/collections/item/hoon - :: -/? 309 -/+ collections -:: -:: item: -:: -:: render a collection-item at this path -:: outputs a +item defined in /lib/collections/hoon -:: -:: recursive renderer, see its counterpart in /ren/collections/hoon -:: -/= item - /^ item:collections - :: - :: run a gate which checks if the output of the renderers below are null or not, - :: crash in the case that both are null - :: tag them with %collection, %raw, or %both for the 3 remaining permissible cases, - :: - /; |= $: raw=?(~ raw-item:collections) - col=?(~ collection:collections) - ~ - == - ?~ raw - ?~ col - [%error ~] - [%collection col] - ?~ col - [%raw raw] - [%both col raw] - :: - :: run a pair of renderers - :: - :: 1. get a .udon file together with its frontmatter, or else return ~ - :: - :: 2. run the collections renderer, if it fails return ~ - :: (it fails if .collections-config file does not exist at this path) - :: - /. - :: - /| /; |= [a=(map knot cord) b=@t ~] - [%udon a b] - /. /front/ - /udon/ - == - /~ ~ - == - :: - /| /collections/ - /~ ~ - == - :: - == -:: -item diff --git a/pkg/arvo/ren/collections/json.hoon b/pkg/arvo/ren/collections/json.hoon deleted file mode 100644 index 0c4fc9674..000000000 --- a/pkg/arvo/ren/collections/json.hoon +++ /dev/null @@ -1,10 +0,0 @@ -/? 309 -/+ collections -/= gas /$ fuel:html -/= jon -/^ json -/; item-to-json:collections -:: -/collections-web-item/ -:: -jon diff --git a/pkg/arvo/ren/collections/web-item.hoon b/pkg/arvo/ren/collections/web-item.hoon deleted file mode 100644 index cdcad9f53..000000000 --- a/pkg/arvo/ren/collections/web-item.hoon +++ /dev/null @@ -1,50 +0,0 @@ -/+ collections -/= gas /$ fuel:html -/= raw - /^ $@(~ raw-item:collections) - /| /; |= [a=(map knot cord) b=@t ~] - ^- raw-item:collections - [%udon a b] - /. /front/ - /udon/ - == - :: - /~ ~ - == -:: -/= col - /^ $@ ~ - $% [%config config=config:collections items=(map knot item:collections) ~] - [%no-config items=(map knot item:collections) ~] - == - /| /. /~ %config - /collections-config/ - /_ /collections-item/ - == - :: - /. /~ %no-config - /_ /collections-item/ - == - :: - /~ ~ - == - -:: -:: -^- item:collections -?~ col - ?~ raw - [%error ~] - [%raw raw] -:: -?: ?=(%no-config -.col) - ?: =(s.bem.gas /collections/web) - ?~ raw - [%collection *config:collections items.col] - [%both [*config:collections items.col] raw] - ?~ raw - [%error ~] - [%raw raw] -?~ raw - [%collection config.col items.col] -[%both [config.col items.col] raw] diff --git a/pkg/arvo/ren/css.hoon b/pkg/arvo/ren/css.hoon deleted file mode 100644 index e0fd8837c..000000000 --- a/pkg/arvo/ren/css.hoon +++ /dev/null @@ -1,9 +0,0 @@ -:: /!css/ in /===web/pack -:: -:::: /hoon/css/ren - :: -/? 310 -/, /web/pack/css /!css/ - / /~ !! -== --.- diff --git a/pkg/arvo/ren/js.hoon b/pkg/arvo/ren/js.hoon deleted file mode 100644 index 8f681d52b..000000000 --- a/pkg/arvo/ren/js.hoon +++ /dev/null @@ -1,9 +0,0 @@ -:: /!js/ in /===web/pack -:: -:::: /hoon/js/ren - :: -/? 309 -/, /web/pack/js /!js/ - / /~ !! -== --.- diff --git a/pkg/arvo/ren/rss-xml.hoon b/pkg/arvo/ren/rss-xml.hoon deleted file mode 100644 index e2c692ee2..000000000 --- a/pkg/arvo/ren/rss-xml.hoon +++ /dev/null @@ -1,36 +0,0 @@ -:: Simple rss transformer -:: -:::: /hoon/rss-xml/ren - :: -/? 310 -/= sum /&snip&elem&/|(/elem/ /~[;div;]) -/= kid /^ (map knot {marl marl}) - /_ /&snip&/elem/ -/$ |=({bem/beam *} [our=p.bem tub=(slag 1 (flop s.bem))]) -:: -:::: ~fyr, ~tasfyn-partyv - :: -::~& [sum=sum kid=kid] -:: Link from relative path -=, eyre -=, html -=+ hok=.^(hart %e /(scot %p our)/host/real) -=+ ref=|=(a/path (en-purl 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))))) -:: -%- crip %- en-xml -;rss(version "2.0") - ;channel - ;title: *{hed.sum} - ;link: {(ref /)} - ;description: *{(no-meta tal.sum)} - ;* %+ turn ~(tap by kid) - |= {nom/@t hed/marl tal/marl} - ;item - ;title: *{hed} - ;description: *{(no-meta tal)} - ;link: {(ref /[nom])} - == - == -== diff --git a/pkg/arvo/ren/urb.hoon b/pkg/arvo/ren/urb.hoon deleted file mode 100644 index 2baf5e134..000000000 --- a/pkg/arvo/ren/urb.hoon +++ /dev/null @@ -1,19 +0,0 @@ -:: -:::: /hoon/urb/ren - :: -/? 309 -/+ landscape -/= full-page - /^ manx - /| - /, /web/collections /; landscape /collections-elem/ - /web/landscape /; landscape /!hymn/ - /web/pages /| /!hymn/ - /hymn/ - == - / /; landscape /!hymn/ - == - :: - /: /===/web/404 /; landscape /!hymn/ - == -full-page diff --git a/pkg/arvo/ren/x-collections-json/elem.hoon b/pkg/arvo/ren/x-collections-json/elem.hoon deleted file mode 100644 index 13550ffec..000000000 --- a/pkg/arvo/ren/x-collections-json/elem.hoon +++ /dev/null @@ -1,13 +0,0 @@ -:: -:::: /hoon/json/ren - :: -/? 309 -/= page - /^ json - /, /web/collections - /& json - /collections-json/ - / - /!json/ - == -page diff --git a/pkg/arvo/ren/x-collections-json/wrap.hoon b/pkg/arvo/ren/x-collections-json/wrap.hoon deleted file mode 100644 index 04e3d14bb..000000000 --- a/pkg/arvo/ren/x-collections-json/wrap.hoon +++ /dev/null @@ -1 +0,0 @@ -|=(a=json a) diff --git a/pkg/arvo/ren/x-collections-snip/elem.hoon b/pkg/arvo/ren/x-collections-snip/elem.hoon deleted file mode 100644 index 5a72db4a7..000000000 --- a/pkg/arvo/ren/x-collections-snip/elem.hoon +++ /dev/null @@ -1,16 +0,0 @@ -:: -:: no snip view for collections, only items -:: -/= snipped-udon - /& snip - /& elem - /udon/ -^- manx -;div - ;h1 - ;* hed.snipped-udon - == - ;* tal.snipped-udon -== - - diff --git a/pkg/arvo/ren/x-collections-snip/wrap.hoon b/pkg/arvo/ren/x-collections-snip/wrap.hoon deleted file mode 100644 index 2c1d03447..000000000 --- a/pkg/arvo/ren/x-collections-snip/wrap.hoon +++ /dev/null @@ -1 +0,0 @@ -|=(a=manx [*marl ~[a]]) diff --git a/pkg/arvo/ren/x-htm/elem.hoon b/pkg/arvo/ren/x-htm/elem.hoon deleted file mode 100644 index 4c3c3d9ee..000000000 --- a/pkg/arvo/ren/x-htm/elem.hoon +++ /dev/null @@ -1,12 +0,0 @@ -:: -:::: /hoon/elem/x-htm/ren - :: -/? 309 -/= page - /^ manx - /, /web/collections - /collections-elem/ - / - /!hymn/ - == -page diff --git a/pkg/arvo/ren/x-htm/wrap.hoon b/pkg/arvo/ren/x-htm/wrap.hoon deleted file mode 100644 index d55a5638f..000000000 --- a/pkg/arvo/ren/x-htm/wrap.hoon +++ /dev/null @@ -1 +0,0 @@ -|=(a=manx a) diff --git a/pkg/arvo/ren/x-urb/elem.hoon b/pkg/arvo/ren/x-urb/elem.hoon deleted file mode 100644 index 1b838cb58..000000000 --- a/pkg/arvo/ren/x-urb/elem.hoon +++ /dev/null @@ -1,16 +0,0 @@ -:: -:::: /hoon/elem/x-urb/ren - :: -/? 309 -/= inner - /^ manx - /| - /, /web/collections /collections-elem/ - / /| /!hymn/ - /hymn/ - == - == - :: - /: /===/web/404 /!hymn/ - == -inner diff --git a/pkg/arvo/ren/x-urb/wrap.hoon b/pkg/arvo/ren/x-urb/wrap.hoon deleted file mode 100644 index 8bf54945b..000000000 --- a/pkg/arvo/ren/x-urb/wrap.hoon +++ /dev/null @@ -1,14 +0,0 @@ -:: Add tree chrome -:: -:::: /hoon/wrap/urb/ren - :: -/? 309 -/+ landscape -/= wrapped - /^ $-(inr=manx out=manx) - /, /web/collections /~ landscape - /web/landscape /~ landscape - /web/pages /~ |=(manx +<) - / /~ landscape - == -wrapped diff --git a/pkg/arvo/sur/gh.hoon b/pkg/arvo/sur/gh.hoon deleted file mode 100644 index c3ff9372d..000000000 --- a/pkg/arvo/sur/gh.hoon +++ /dev/null @@ -1,185 +0,0 @@ -:: https://developer.github.com/v3/ -:: -:: These types correspond to the types that Github's API -:: produces, so please check Github's documentation for -:: details. -:: -:: For parsing JSON into these types, check out the gh-parse -:: library. -:: -|% -++ repository - $: id/id - name/@t - full-name/@t - owner/user - private/? - html-url/@t - description/@t - fork/? - url/@t - forks-url/@t - keys-url/@t - collaborators-url/@t - teams-url/@t - hooks-url/@t - issue-events-url/@t - events-url/@t - assignees-url/@t - branches-url/@t - tags-url/@t - blobs-url/@t - git-tags-url/@t - git-refs-url/@t - trees-url/@t - statuses-url/@t - languages-url/@t - stargazers-url/@t - contributors-url/@t - subscribers-url/@t - subscription-url/@t - commits-url/@t - git-commits-url/@t - comments-url/@t - issue-comment-url/@t - contents-url/@t - compare-url/@t - merges-url/@t - archive-url/@t - downloads-url/@t - issues-urls/@t - pulls-url/@t - milestones-url/@t - notifications-url/@t - labels-url/@t - releases-url/@t - created-at/time - updated-at/time - pushed-at/time - git-url/@t - ssh-url/@t - clone-url/@t - svn-url/@t - homepage/json - size/@ud - stargazers-count/@ud - watchers-count/@ud - language/json - has-issues/? - has-downloads/? - has-wiki/? - has-pages/? - forks-count/@ud - mirror-url/json - open-issues-count/@ud - forks/@ud - open-issues/@ud - watchers/@ud - default-branch/@t - == -++ commit - $: sha/@t - url/@t - author/author - committer/author - message/@t - tree/point - parents/(list point) - verification/verification - == -++ user - $: login/@t - id/id - avatar-url/@t - gravatar-id/@t - url/@t - html-url/@t - followers-url/@t - following-url/@t - gists-url/@t - starred-url/@t - subscriptions-url/@t - organizations-url/@t - repos-url/@t - events-url/@t - received-events/@t - type/@t - site-admin/? - == -++ issue - $: raw/json - url/@t - labels-url/@t - comments-url/@t - events-url/@t - html-url/@t - id/id - number/@ud - title/@t - user/user - labels/(list label) - state/@t - locked/? - assignee/(unit user) - milestone/json - comments/@ud - created-at/time - updated-at/time - closed-at/(unit time) - body/@t - == -++ author - $: date/@t - name/@t - email/@t - == -++ point - $: url/@t - sha/@t - == -++ verification - $: verified/? - reason/@t - signature/(unit @t) - payload/(unit @t) - == -++ label - $: url/@t - name/@t - color/@t - == -++ comment - $: url/@t - html-url/@t - issue-url/@t - id/id - user/user - created-at/time - updated-at/time - body/@t - == -++ id @t -++ time @t -++ issues - $: repository/repository - sender/user - $= action - $% {$assigned assignee/user} - {$unassigned assignee/user} - {$labeled label/label} - {$unlabeled label/label} - {$opened ~} - {$closed ~} - {$reopened ~} - == - issue/issue - == -++ issue-comment - $: repository/repository - sender/user - action/@t - issue/issue - comment/comment - == -++ ping {repo/json sender/json hok/(list @t) hook-id/@t zen/json} --- diff --git a/pkg/arvo/sur/plan/acct.hoon b/pkg/arvo/sur/plan/acct.hoon deleted file mode 100644 index 6c2e50278..000000000 --- a/pkg/arvo/sur/plan/acct.hoon +++ /dev/null @@ -1 +0,0 @@ -{usr/knot url/(unit purf:eyre)} diff --git a/pkg/arvo/sur/plan/diff.hoon b/pkg/arvo/sur/plan/diff.hoon deleted file mode 100644 index 0023a1a77..000000000 --- a/pkg/arvo/sur/plan/diff.hoon +++ /dev/null @@ -1,2 +0,0 @@ -/- plan-acct -{inf/(unit {@txname @txloc}) del/(map knot ~) put/(map knot plan-acct)} diff --git a/pkg/arvo/sur/recoverable-error.hoon b/pkg/arvo/sur/recoverable-error.hoon deleted file mode 100644 index 291dbef52..000000000 --- a/pkg/arvo/sur/recoverable-error.hoon +++ /dev/null @@ -1,8 +0,0 @@ -:: Possibly non-fatal http error -:: -:::: /hoon/recoverable-error/sur - :: -:: -$% :: more later, {@u (cask)} - {$429 p/{$rate-limit p/(unit @da)}} -== diff --git a/pkg/arvo/tests/app/collections.hoon b/pkg/arvo/tests/app/collections.hoon deleted file mode 100644 index 706a2261f..000000000 --- a/pkg/arvo/tests/app/collections.hoon +++ /dev/null @@ -1,97 +0,0 @@ -/+ *test, collections -:: -/= app /: /===/app/collections /!noun/ -/= gall-vane /: /===/sys/vane/gall /!noun/ -:: -=, gall -=> -|% -++ gall-args [~1234.5.7 0vagine *slyt] -:: -++ hype - |= tak=task:able:gall - ^- (hypo (hobo task:able:gall)) - [-:!>(tak) tak] -:: -++ gall-gate (gall-vane !>(..zuse)) --- -:: -|% -:: -++ test-prep - =/ prep-bone 20 - =/ our-ship ~marzod - =/ bol - %* . *bowl:gall - our our-ship - ost prep-bone - == - :: - =/ moves -:(~(prep app bol *state:collections) ~) - ;: weld - %+ expect-eq - !> %- sort - :_ aor - ^- (list move:collections) - :~ :* prep-bone %poke /col-hall-action [our-ship %hall] - %hall-action %create %c 'collections' %journal - == - :: - :* prep-bone %poke /col-hall-action [our-ship %hall] - %hall-action %source %inbox & (sy [[our-ship %c] ~]~) - == - :: - :* prep-bone %peer /circles [our-ship %hall] - /circles/[(scot %p our-ship)] - == - :: - :* prep-bone %peer /inbox [our-ship %hall] - /circle/inbox/config/grams - == - :: - :* prep-bone %peer /invites [our-ship %hall] - /circle/i/grams - == - == - !> (sort moves aor) - :: - =. our-ship ~davtyr-nimren - =. bol bol(our our-ship) - :: - =/ moves -:(~(prep app bol *state:collections) ~) - %+ expect-eq - !> %- sort - :_ aor - ^- (list move:collections) - :~ :* prep-bone %poke /col-hall-action [our-ship %hall] - %hall-action %create %c 'collections' %journal - == - :: - :* prep-bone %poke /col-hall-action [our-ship %hall] - %hall-action %source %inbox & (sy [[our-ship %c] ~]~) - == - :: - :* prep-bone %peer /circles [our-ship %hall] - /circles/[(scot %p our-ship)] - == - :: - :* prep-bone %peer /inbox [our-ship %hall] - /circle/inbox/config/grams - == - :: - :* prep-bone %peer /invites [our-ship %hall] - /circle/i/grams - == - :: - == - !> (sort moves aor) - == -:: -::++ test-load-app -:: =/ gall-door (gall-gate gall-args) -:: =/ init (call:gall-door [/test]~ (hype %init ~marzod)) -:: %+ expect-eq -:: !> -:: !> -:: --- diff --git a/pkg/arvo/web.hoon b/pkg/arvo/web.hoon deleted file mode 100644 index be7112039..000000000 --- a/pkg/arvo/web.hoon +++ /dev/null @@ -1,5 +0,0 @@ -^- manx -;meta(http-equiv "refresh", content "0; url=/~~/landscape"); -;script(type "text/javascript") - ; window.location = "/~~/landscape" -== diff --git a/pkg/arvo/web/404.hoon b/pkg/arvo/web/404.hoon deleted file mode 100644 index 101a47283..000000000 --- a/pkg/arvo/web/404.hoon +++ /dev/null @@ -1,4 +0,0 @@ -:: -:::: /hoon/404/web - :: -;div.urb-404-page: 404 diff --git a/pkg/arvo/web/dojo.hoon b/pkg/arvo/web/dojo.hoon deleted file mode 100644 index 0271b41bf..000000000 --- a/pkg/arvo/web/dojo.hoon +++ /dev/null @@ -1,27 +0,0 @@ -:: Console front-end -:: -:::: /hoon/dojo/web - :: -/? 310 -|% -++ cdnj |=(a/tape ;script(src "//cdnjs.cloudflare.com/ajax/libs/{a}");) --- -:: -:::: - :: -^- manx -;module - =nav_title "Dojo" - =nav_no-dpad "" - =nav_no-sibs "" - ;script(src "//cdnjs.cloudflare.com/ajax/libs/mousetrap/1.4.6/mousetrap.js"); - ;style:''' - #term { width: 100%; } - #term * { margin: 0px; } - .module pre { margin-bottom: 0; } - ''' - ;div#err; - ;div#term:"" - ;script@"/lib/js/sole.js"; - ;sole(appl "dojo"); -== diff --git a/pkg/arvo/web/lib/css/bootstrap.css b/pkg/arvo/web/lib/css/bootstrap.css deleted file mode 100644 index a74245817..000000000 --- a/pkg/arvo/web/lib/css/bootstrap.css +++ /dev/null @@ -1,6318 +0,0 @@ -/*! - * Bootstrap v4.0.0-alpha.2 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html { - font-family: sans-serif; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -body { - margin: 0; -} - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} - -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; -} - -audio:not([controls]) { - display: none; - height: 0; -} - -[hidden], -template { - display: none; -} - -a { - background-color: transparent; -} - -a:active { - outline: 0; -} - -a:hover { - outline: 0; -} - -abbr[title] { - border-bottom: 1px dotted; -} - -b, -strong { - font-weight: bold; -} - -dfn { - font-style: italic; -} - -h1 { - margin: .67em 0; - font-size: 2em; -} - -mark { - color: #000; - background: #ff0; -} - -small { - font-size: 80%; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sup { - top: -.5em; -} - -sub { - bottom: -.25em; -} - -img { - border: 0; -} - -svg:not(:root) { - overflow: hidden; -} - -figure { - margin: 1em 40px; -} - -hr { - height: 0; - -webkit-box-sizing: content-box; - box-sizing: content-box; -} - -pre { - overflow: auto; -} - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} - -button, -input, -optgroup, -select, -textarea { - margin: 0; - font: inherit; - color: inherit; -} - -button { - overflow: visible; -} - -button, -select { - text-transform: none; -} - -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} - -button[disabled], -html input[disabled] { - cursor: default; -} - -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} - -input { - line-height: normal; -} - -input[type="checkbox"], -input[type="radio"] { - -webkit-box-sizing: border-box; - box-sizing: border-box; - padding: 0; -} - -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -input[type="search"] { - -webkit-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -fieldset { - padding: .35em .625em .75em; - margin: 0 2px; - border: 1px solid #c0c0c0; -} - -legend { - padding: 0; - border: 0; -} - -textarea { - overflow: auto; -} - -optgroup { - font-weight: bold; -} - -table { - border-spacing: 0; - border-collapse: collapse; -} - -td, -th { - padding: 0; -} - -@media print { - *, - *::before, - *::after { - text-shadow: none !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - abbr[title]::after { - content: " (" attr(title) ")"; - } - pre, - blockquote { - border: 1px solid #999; - - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - .navbar { - display: none; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} - -html { - -webkit-box-sizing: border-box; - box-sizing: border-box; -} - -*, -*::before, -*::after { - -webkit-box-sizing: inherit; - box-sizing: inherit; -} - -@-moz-viewport { - width: device-width; -} - -@-ms-viewport { - width: device-width; -} - -@-webkit-viewport { - width: device-width; -} - -@viewport { - width: device-width; -} - -html { - font-size: 18px; - - -webkit-tap-highlight-color: transparent; -} - -body { - font-family: "bau", "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 1rem; - line-height: 1.5; - color: #373a3c; - background-color: #fff; -} - -[tabindex="-1"]:focus { - outline: none !important; -} - -h1, h2, h3, h4, h5, h6 { - margin-top: 0; - margin-bottom: .5rem; -} - -p { - margin-top: 0; - margin-bottom: 1rem; -} - -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #b1b7bd; -} - -address { - margin-bottom: 1rem; - font-style: normal; - line-height: inherit; -} - -ol, -ul, -dl { - margin-top: 0; - margin-bottom: 1rem; -} - -ol ol, -ul ul, -ol ul, -ul ol { - margin-bottom: 0; -} - -dt { - font-weight: bold; -} - -dd { - margin-bottom: .5rem; - margin-left: 0; -} - -blockquote { - margin: 0 0 1rem; -} - -a { - color: #000; - text-decoration: underline; -} - -a:focus, a:hover { - color: #000; - text-decoration: underline; -} - -a:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -pre { - margin-top: 0; - margin-bottom: 1rem; -} - -figure { - margin: 0 0 1rem; -} - -img { - vertical-align: middle; -} - -[role="button"] { - cursor: pointer; -} - -a, -area, -button, -[role="button"], -input, -label, -select, -summary, -textarea { - -ms-touch-action: manipulation; - touch-action: manipulation; -} - -table { - background-color: transparent; -} - -caption { - padding-top: .75rem; - padding-bottom: .75rem; - color: #b1b7bd; - text-align: left; - caption-side: bottom; -} - -th { - text-align: left; -} - -label { - display: inline-block; - margin-bottom: .5rem; -} - -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color; -} - -input, -button, -select, -textarea { - margin: 0; - line-height: inherit; - border-radius: 0; -} - -textarea { - resize: vertical; -} - -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: .5rem; - font-size: 1.5rem; - line-height: inherit; -} - -input[type="search"] { - -webkit-box-sizing: inherit; - box-sizing: inherit; - -webkit-appearance: none; -} - -output { - display: inline-block; -} - -[hidden] { - display: none !important; -} - -h1, h2, h3, h4, h5, h6, -.h1, .h2, .h3, .h4, .h5, .h6 { - margin-bottom: .5rem; - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; -} - -h1 { - font-size: 2.5rem; -} - -h2 { - font-size: 2rem; -} - -h3 { - font-size: 1.5rem; -} - -h4 { - font-size: 1.5rem; -} - -h5 { - font-size: 1rem; -} - -h6 { - font-size: 1rem; -} - -.h1 { - font-size: 2.5rem; -} - -.h2 { - font-size: 2rem; -} - -.h3 { - font-size: 1.5rem; -} - -.h4 { - font-size: 1.5rem; -} - -.h5 { - font-size: 1rem; -} - -.h6 { - font-size: 1rem; -} - -.lead { - font-size: 1.25rem; - font-weight: 300; -} - -.display-1 { - font-size: 6rem; - font-weight: 300; -} - -.display-2 { - font-size: 5.5rem; - font-weight: 300; -} - -.display-3 { - font-size: 4.5rem; - font-weight: 300; -} - -.display-4 { - font-size: 3.5rem; - font-weight: 300; -} - -hr { - margin-top: 1rem; - margin-bottom: 1rem; - border: 0; - border-top: 1px solid rgba(0, 0, 0, .1); -} - -small, -.small { - font-size: 80%; - font-weight: normal; -} - -mark, -.mark { - padding: .2em; - background-color: #fcf8e3; -} - -.list-unstyled { - padding-left: 0; - list-style: none; -} - -.list-inline { - padding-left: 0; - list-style: none; -} - -.list-inline-item { - display: inline-block; -} - -.list-inline-item:not(:last-child) { - margin-right: 5px; -} - -.dl-horizontal { - margin-right: -1.875rem; - margin-left: -1.875rem; -} - -.dl-horizontal::after { - display: table; - clear: both; - content: ""; -} - -.initialism { - font-size: 90%; - text-transform: uppercase; -} - -.blockquote { - padding: .5rem 1rem; - margin-bottom: 1rem; - font-size: 1.25rem; - border-left: .25rem solid #eceeef; -} - -.blockquote-footer { - display: block; - font-size: 80%; - line-height: 1.5; - color: #b1b7bd; -} - -.blockquote-footer::before { - content: "\2014 \00A0"; -} - -.blockquote-reverse { - padding-right: 1rem; - padding-left: 0; - text-align: right; - border-right: .25rem solid #eceeef; - border-left: 0; -} - -.blockquote-reverse .blockquote-footer::before { - content: ""; -} - -.blockquote-reverse .blockquote-footer::after { - content: "\00A0 \2014"; -} - -.img-fluid, .carousel-inner > .carousel-item > img, -.carousel-inner > .carousel-item > a > img { - display: block; - max-width: 100%; - height: auto; -} - -.img-thumbnail { - display: inline-block; - max-width: 100%; - height: auto; - padding: .25rem; - line-height: 1.5; - background-color: #fff; - border: 1px solid #ddd; - border-radius: .25rem; - -webkit-transition: all .2s ease-in-out; - -o-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; -} - -.img-circle { - border-radius: 50%; -} - -.figure { - display: inline-block; -} - -.figure-img { - margin-bottom: .5rem; - line-height: 1; -} - -.figure-caption { - font-size: 90%; - color: #b1b7bd; -} - -code, -kbd, -pre, -samp { - font-family: "scp", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -} - -code { - padding: .2rem .4rem; - font-size: 90%; - color: #2f2f2f; - background-color: #f7f7f7; -} - -kbd { - padding: .2rem .4rem; - font-size: 90%; - color: #fff; - background-color: #333; -} - -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: bold; -} - -pre { - display: block; - margin-top: 0; - margin-bottom: 1rem; - font-size: 90%; - line-height: 1.5; - color: #373a3c; -} - -pre code { - padding: 0; - font-size: inherit; - color: inherit; - background-color: transparent; - border-radius: 0; -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} - -.container { - padding-right: .9375rem; - padding-left: .9375rem; - margin-right: auto; - margin-left: auto; -} - -.container::after { - display: table; - clear: both; - content: ""; -} - -@media (min-width: 544px) { - .container { - max-width: 576px; - } -} - -@media (min-width: 768px) { - .container { - max-width: 720px; - } -} - -@media (min-width: 992px) { - .container { - max-width: 940px; - } -} - -@media (min-width: 1200px) { - .container { - max-width: 1140px; - } -} - -.container-fluid { - padding-right: .9375rem; - padding-left: .9375rem; - margin-right: auto; - margin-left: auto; -} - -.container-fluid::after { - display: table; - clear: both; - content: ""; -} - -.row { - margin-right: -.9375rem; - margin-left: -.9375rem; -} - -.row::after { - display: table; - clear: both; - content: ""; -} - -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12 { - position: relative; - min-height: 1px; - padding-right: .9375rem; - padding-left: .9375rem; -} - -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; -} - -.col-xs-1 { - width: 8.333333%; -} - -.col-xs-2 { - width: 16.666667%; -} - -.col-xs-3 { - width: 25%; -} - -.col-xs-4 { - width: 33.333333%; -} - -.col-xs-5 { - width: 41.666667%; -} - -.col-xs-6 { - width: 50%; -} - -.col-xs-7 { - width: 58.333333%; -} - -.col-xs-8 { - width: 66.666667%; -} - -.col-xs-9 { - width: 75%; -} - -.col-xs-10 { - width: 83.333333%; -} - -.col-xs-11 { - width: 91.666667%; -} - -.col-xs-12 { - width: 100%; -} - -.col-xs-pull-0 { - right: auto; -} - -.col-xs-pull-1 { - right: 8.333333%; -} - -.col-xs-pull-2 { - right: 16.666667%; -} - -.col-xs-pull-3 { - right: 25%; -} - -.col-xs-pull-4 { - right: 33.333333%; -} - -.col-xs-pull-5 { - right: 41.666667%; -} - -.col-xs-pull-6 { - right: 50%; -} - -.col-xs-pull-7 { - right: 58.333333%; -} - -.col-xs-pull-8 { - right: 66.666667%; -} - -.col-xs-pull-9 { - right: 75%; -} - -.col-xs-pull-10 { - right: 83.333333%; -} - -.col-xs-pull-11 { - right: 91.666667%; -} - -.col-xs-pull-12 { - right: 100%; -} - -.col-xs-push-0 { - left: auto; -} - -.col-xs-push-1 { - left: 8.333333%; -} - -.col-xs-push-2 { - left: 16.666667%; -} - -.col-xs-push-3 { - left: 25%; -} - -.col-xs-push-4 { - left: 33.333333%; -} - -.col-xs-push-5 { - left: 41.666667%; -} - -.col-xs-push-6 { - left: 50%; -} - -.col-xs-push-7 { - left: 58.333333%; -} - -.col-xs-push-8 { - left: 66.666667%; -} - -.col-xs-push-9 { - left: 75%; -} - -.col-xs-push-10 { - left: 83.333333%; -} - -.col-xs-push-11 { - left: 91.666667%; -} - -.col-xs-push-12 { - left: 100%; -} - -.col-xs-offset-0 { - margin-left: 0; -} - -.col-xs-offset-1 { - margin-left: 8.333333%; -} - -.col-xs-offset-2 { - margin-left: 16.666667%; -} - -.col-xs-offset-3 { - margin-left: 25%; -} - -.col-xs-offset-4 { - margin-left: 33.333333%; -} - -.col-xs-offset-5 { - margin-left: 41.666667%; -} - -.col-xs-offset-6 { - margin-left: 50%; -} - -.col-xs-offset-7 { - margin-left: 58.333333%; -} - -.col-xs-offset-8 { - margin-left: 66.666667%; -} - -.col-xs-offset-9 { - margin-left: 75%; -} - -.col-xs-offset-10 { - margin-left: 83.333333%; -} - -.col-xs-offset-11 { - margin-left: 91.666667%; -} - -.col-xs-offset-12 { - margin-left: 100%; -} - -@media (min-width: 544px) { - .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { - float: left; - } - .col-sm-1 { - width: 8.333333%; - } - .col-sm-2 { - width: 16.666667%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-4 { - width: 33.333333%; - } - .col-sm-5 { - width: 41.666667%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-7 { - width: 58.333333%; - } - .col-sm-8 { - width: 66.666667%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-10 { - width: 83.333333%; - } - .col-sm-11 { - width: 91.666667%; - } - .col-sm-12 { - width: 100%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-pull-1 { - right: 8.333333%; - } - .col-sm-pull-2 { - right: 16.666667%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-4 { - right: 33.333333%; - } - .col-sm-pull-5 { - right: 41.666667%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-7 { - right: 58.333333%; - } - .col-sm-pull-8 { - right: 66.666667%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-10 { - right: 83.333333%; - } - .col-sm-pull-11 { - right: 91.666667%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-push-1 { - left: 8.333333%; - } - .col-sm-push-2 { - left: 16.666667%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-4 { - left: 33.333333%; - } - .col-sm-push-5 { - left: 41.666667%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-7 { - left: 58.333333%; - } - .col-sm-push-8 { - left: 66.666667%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-10 { - left: 83.333333%; - } - .col-sm-push-11 { - left: 91.666667%; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-offset-0 { - margin-left: 0; - } - .col-sm-offset-1 { - margin-left: 8.333333%; - } - .col-sm-offset-2 { - margin-left: 16.666667%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-4 { - margin-left: 33.333333%; - } - .col-sm-offset-5 { - margin-left: 41.666667%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-7 { - margin-left: 58.333333%; - } - .col-sm-offset-8 { - margin-left: 66.666667%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-10 { - margin-left: 83.333333%; - } - .col-sm-offset-11 { - margin-left: 91.666667%; - } - .col-sm-offset-12 { - margin-left: 100%; - } -} - -@media (min-width: 768px) { - .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { - float: left; - } - .col-md-1 { - width: 8.333333%; - } - .col-md-2 { - width: 16.666667%; - } - .col-md-3 { - width: 25%; - } - .col-md-4 { - width: 33.333333%; - } - .col-md-5 { - width: 41.666667%; - } - .col-md-6 { - width: 50%; - } - .col-md-7 { - width: 58.333333%; - } - .col-md-8 { - width: 66.666667%; - } - .col-md-9 { - width: 75%; - } - .col-md-10 { - width: 83.333333%; - } - .col-md-11 { - width: 91.666667%; - } - .col-md-12 { - width: 100%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-pull-1 { - right: 8.333333%; - } - .col-md-pull-2 { - right: 16.666667%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-4 { - right: 33.333333%; - } - .col-md-pull-5 { - right: 41.666667%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-7 { - right: 58.333333%; - } - .col-md-pull-8 { - right: 66.666667%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-10 { - right: 83.333333%; - } - .col-md-pull-11 { - right: 91.666667%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-push-0 { - left: auto; - } - .col-md-push-1 { - left: 8.333333%; - } - .col-md-push-2 { - left: 16.666667%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-4 { - left: 33.333333%; - } - .col-md-push-5 { - left: 41.666667%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-7 { - left: 58.333333%; - } - .col-md-push-8 { - left: 66.666667%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-10 { - left: 83.333333%; - } - .col-md-push-11 { - left: 91.666667%; - } - .col-md-push-12 { - left: 100%; - } - .col-md-offset-0 { - margin-left: 0; - } - .col-md-offset-1 { - margin-left: 8.333333%; - } - .col-md-offset-2 { - margin-left: 16.666667%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-4 { - margin-left: 33.333333%; - } - .col-md-offset-5 { - margin-left: 41.666667%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-7 { - margin-left: 58.333333%; - } - .col-md-offset-8 { - margin-left: 66.666667%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-10 { - margin-left: 83.333333%; - } - .col-md-offset-11 { - margin-left: 91.666667%; - } - .col-md-offset-12 { - margin-left: 100%; - } -} - -@media (min-width: 992px) { - .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { - float: left; - } - .col-lg-1 { - width: 8.333333%; - } - .col-lg-2 { - width: 16.666667%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-4 { - width: 33.333333%; - } - .col-lg-5 { - width: 41.666667%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-7 { - width: 58.333333%; - } - .col-lg-8 { - width: 66.666667%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-10 { - width: 83.333333%; - } - .col-lg-11 { - width: 91.666667%; - } - .col-lg-12 { - width: 100%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-pull-1 { - right: 8.333333%; - } - .col-lg-pull-2 { - right: 16.666667%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-4 { - right: 33.333333%; - } - .col-lg-pull-5 { - right: 41.666667%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-7 { - right: 58.333333%; - } - .col-lg-pull-8 { - right: 66.666667%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-10 { - right: 83.333333%; - } - .col-lg-pull-11 { - right: 91.666667%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-push-1 { - left: 8.333333%; - } - .col-lg-push-2 { - left: 16.666667%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-4 { - left: 33.333333%; - } - .col-lg-push-5 { - left: 41.666667%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-7 { - left: 58.333333%; - } - .col-lg-push-8 { - left: 66.666667%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-10 { - left: 83.333333%; - } - .col-lg-push-11 { - left: 91.666667%; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-offset-0 { - margin-left: 0; - } - .col-lg-offset-1 { - margin-left: 8.333333%; - } - .col-lg-offset-2 { - margin-left: 16.666667%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-4 { - margin-left: 33.333333%; - } - .col-lg-offset-5 { - margin-left: 41.666667%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-7 { - margin-left: 58.333333%; - } - .col-lg-offset-8 { - margin-left: 66.666667%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-10 { - margin-left: 83.333333%; - } - .col-lg-offset-11 { - margin-left: 91.666667%; - } - .col-lg-offset-12 { - margin-left: 100%; - } -} - -@media (min-width: 1200px) { - .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12 { - float: left; - } - .col-xl-1 { - width: 8.333333%; - } - .col-xl-2 { - width: 16.666667%; - } - .col-xl-3 { - width: 25%; - } - .col-xl-4 { - width: 33.333333%; - } - .col-xl-5 { - width: 41.666667%; - } - .col-xl-6 { - width: 50%; - } - .col-xl-7 { - width: 58.333333%; - } - .col-xl-8 { - width: 66.666667%; - } - .col-xl-9 { - width: 75%; - } - .col-xl-10 { - width: 83.333333%; - } - .col-xl-11 { - width: 91.666667%; - } - .col-xl-12 { - width: 100%; - } - .col-xl-pull-0 { - right: auto; - } - .col-xl-pull-1 { - right: 8.333333%; - } - .col-xl-pull-2 { - right: 16.666667%; - } - .col-xl-pull-3 { - right: 25%; - } - .col-xl-pull-4 { - right: 33.333333%; - } - .col-xl-pull-5 { - right: 41.666667%; - } - .col-xl-pull-6 { - right: 50%; - } - .col-xl-pull-7 { - right: 58.333333%; - } - .col-xl-pull-8 { - right: 66.666667%; - } - .col-xl-pull-9 { - right: 75%; - } - .col-xl-pull-10 { - right: 83.333333%; - } - .col-xl-pull-11 { - right: 91.666667%; - } - .col-xl-pull-12 { - right: 100%; - } - .col-xl-push-0 { - left: auto; - } - .col-xl-push-1 { - left: 8.333333%; - } - .col-xl-push-2 { - left: 16.666667%; - } - .col-xl-push-3 { - left: 25%; - } - .col-xl-push-4 { - left: 33.333333%; - } - .col-xl-push-5 { - left: 41.666667%; - } - .col-xl-push-6 { - left: 50%; - } - .col-xl-push-7 { - left: 58.333333%; - } - .col-xl-push-8 { - left: 66.666667%; - } - .col-xl-push-9 { - left: 75%; - } - .col-xl-push-10 { - left: 83.333333%; - } - .col-xl-push-11 { - left: 91.666667%; - } - .col-xl-push-12 { - left: 100%; - } - .col-xl-offset-0 { - margin-left: 0; - } - .col-xl-offset-1 { - margin-left: 8.333333%; - } - .col-xl-offset-2 { - margin-left: 16.666667%; - } - .col-xl-offset-3 { - margin-left: 25%; - } - .col-xl-offset-4 { - margin-left: 33.333333%; - } - .col-xl-offset-5 { - margin-left: 41.666667%; - } - .col-xl-offset-6 { - margin-left: 50%; - } - .col-xl-offset-7 { - margin-left: 58.333333%; - } - .col-xl-offset-8 { - margin-left: 66.666667%; - } - .col-xl-offset-9 { - margin-left: 75%; - } - .col-xl-offset-10 { - margin-left: 83.333333%; - } - .col-xl-offset-11 { - margin-left: 91.666667%; - } - .col-xl-offset-12 { - margin-left: 100%; - } -} - -.table { - width: 100%; - max-width: 100%; - margin-bottom: 1rem; -} - -.table th, -.table td { - padding: .75rem; - line-height: 1.5; - vertical-align: top; - border-top: 1px solid #eceeef; -} - -.table thead th { - vertical-align: bottom; - border-bottom: 2px solid #eceeef; -} - -.table tbody + tbody { - border-top: 2px solid #eceeef; -} - -.table .table { - background-color: #fff; -} - -.table-sm th, -.table-sm td { - padding: .3rem; -} - -.table-bordered { - border: 1px solid #eceeef; -} - -.table-bordered th, -.table-bordered td { - border: 1px solid #eceeef; -} - -.table-bordered thead th, -.table-bordered thead td { - border-bottom-width: 2px; -} - -.table-striped tbody tr:nth-of-type(odd) { - background-color: #f9f9f9; -} - -.table-hover tbody tr:hover { - background-color: #f5f5f5; -} - -.table-active, -.table-active > th, -.table-active > td { - background-color: #f5f5f5; -} - -.table-hover .table-active:hover { - background-color: #e8e8e8; -} - -.table-hover .table-active:hover > td, -.table-hover .table-active:hover > th { - background-color: #e8e8e8; -} - -.table-success, -.table-success > th, -.table-success > td { - background-color: #dff0d8; -} - -.table-hover .table-success:hover { - background-color: #d0e9c6; -} - -.table-hover .table-success:hover > td, -.table-hover .table-success:hover > th { - background-color: #d0e9c6; -} - -.table-info, -.table-info > th, -.table-info > td { - background-color: #d9edf7; -} - -.table-hover .table-info:hover { - background-color: #c4e3f3; -} - -.table-hover .table-info:hover > td, -.table-hover .table-info:hover > th { - background-color: #c4e3f3; -} - -.table-warning, -.table-warning > th, -.table-warning > td { - background-color: #fcf8e3; -} - -.table-hover .table-warning:hover { - background-color: #faf2cc; -} - -.table-hover .table-warning:hover > td, -.table-hover .table-warning:hover > th { - background-color: #faf2cc; -} - -.table-danger, -.table-danger > th, -.table-danger > td { - background-color: #f2dede; -} - -.table-hover .table-danger:hover { - background-color: #ebcccc; -} - -.table-hover .table-danger:hover > td, -.table-hover .table-danger:hover > th { - background-color: #ebcccc; -} - -.table-responsive { - display: block; - width: 100%; - min-height: .01%; - overflow-x: auto; -} - -.thead-inverse th { - color: #fff; - background-color: #373a3c; -} - -.thead-default th { - color: #55595c; - background-color: #eceeef; -} - -.table-inverse { - color: #eceeef; - background-color: #373a3c; -} - -.table-inverse.table-bordered { - border: 0; -} - -.table-inverse th, -.table-inverse td, -.table-inverse thead th { - border-color: #55595c; -} - -.table-reflow thead { - float: left; -} - -.table-reflow tbody { - display: block; - white-space: nowrap; -} - -.table-reflow th, -.table-reflow td { - border-top: 1px solid #eceeef; - border-left: 1px solid #eceeef; -} - -.table-reflow th:last-child, -.table-reflow td:last-child { - border-right: 1px solid #eceeef; -} - -.table-reflow thead:last-child tr:last-child th, -.table-reflow thead:last-child tr:last-child td, -.table-reflow tbody:last-child tr:last-child th, -.table-reflow tbody:last-child tr:last-child td, -.table-reflow tfoot:last-child tr:last-child th, -.table-reflow tfoot:last-child tr:last-child td { - border-bottom: 1px solid #eceeef; -} - -.table-reflow tr { - float: left; -} - -.table-reflow tr th, -.table-reflow tr td { - display: block !important; - border: 1px solid #eceeef; -} - -.form-control { - display: block; - width: 100%; - padding: .375rem .75rem; - font-size: 1rem; - line-height: 1.5; - color: #55595c; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; -} - -.form-control::-ms-expand { - background-color: transparent; - border: 0; -} - -.form-control:focus { - border-color: #66afe9; - outline: none; -} - -.form-control::-webkit-input-placeholder { - color: #999; - opacity: 1; -} - -.form-control::-moz-placeholder { - color: #999; - opacity: 1; -} - -.form-control:-ms-input-placeholder { - color: #999; - opacity: 1; -} - -.form-control::placeholder { - color: #999; - opacity: 1; -} - -.form-control:disabled, .form-control[readonly] { - background-color: #eceeef; - opacity: 1; -} - -.form-control:disabled { - cursor: not-allowed; -} - -.form-control-file, -.form-control-range { - display: block; -} - -.form-control-label { - padding: .375rem .75rem; - margin-bottom: 0; -} - -@media screen and (-webkit-min-device-pixel-ratio: 0) { - input[type="date"].form-control, - input[type="time"].form-control, - input[type="datetime-local"].form-control, - input[type="month"].form-control { - line-height: 2.25rem; - } - input[type="date"].input-sm, - .input-group-sm input[type="date"].form-control, - input[type="time"].input-sm, - .input-group-sm - input[type="time"].form-control, - input[type="datetime-local"].input-sm, - .input-group-sm - input[type="datetime-local"].form-control, - input[type="month"].input-sm, - .input-group-sm - input[type="month"].form-control { - line-height: 1.8625rem; - } - input[type="date"].input-lg, - .input-group-lg input[type="date"].form-control, - input[type="time"].input-lg, - .input-group-lg - input[type="time"].form-control, - input[type="datetime-local"].input-lg, - .input-group-lg - input[type="datetime-local"].form-control, - input[type="month"].input-lg, - .input-group-lg - input[type="month"].form-control { - line-height: 3.166667rem; - } -} - -.form-control-static { - min-height: 2.25rem; - padding-top: .375rem; - padding-bottom: .375rem; - margin-bottom: 0; -} - -.form-control-static.form-control-sm, .input-group-sm > .form-control-static.form-control, -.input-group-sm > .form-control-static.input-group-addon, -.input-group-sm > .input-group-btn > .form-control-static.btn, .form-control-static.form-control-lg, .input-group-lg > .form-control-static.form-control, -.input-group-lg > .form-control-static.input-group-addon, -.input-group-lg > .input-group-btn > .form-control-static.btn { - padding-right: 0; - padding-left: 0; -} - -.form-control-sm, .input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - padding: .275rem .75rem; - font-size: .875rem; - line-height: 1.5; -} - -.form-control-lg, .input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - padding: .75rem 1.25rem; - font-size: 1.25rem; - line-height: 1.333333; -} - -.form-group { - margin-bottom: 1rem; -} - -.radio, -.checkbox { - position: relative; - display: block; - margin-bottom: .75rem; -} - -.radio label, -.checkbox label { - padding-left: 1.25rem; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} - -.radio label input:only-child, -.checkbox label input:only-child { - position: static; -} - -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-top: .25rem; - margin-left: -1.25rem; -} - -.radio + .radio, -.checkbox + .checkbox { - margin-top: -.25rem; -} - -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 1.25rem; - margin-bottom: 0; - font-weight: normal; - vertical-align: middle; - cursor: pointer; -} - -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: .75rem; -} - -input[type="radio"]:disabled, input[type="radio"].disabled, -input[type="checkbox"]:disabled, -input[type="checkbox"].disabled { - cursor: not-allowed; -} - -.radio-inline.disabled, -.checkbox-inline.disabled { - cursor: not-allowed; -} - -.radio.disabled label, -.checkbox.disabled label { - cursor: not-allowed; -} - -.form-control-success, -.form-control-warning, -.form-control-danger { - padding-right: 2.25rem; - background-repeat: no-repeat; - background-position: center right .5625rem; - -webkit-background-size: 1.4625rem 1.4625rem; - background-size: 1.4625rem 1.4625rem; -} - -.has-success .text-help, -.has-success .form-control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #64de79; -} - -.has-success .form-control { - border-color: #64de79; -} - -.has-success .input-group-addon { - color: #64de79; - background-color: white; - border-color: #64de79; -} - -.has-success .form-control-feedback { - color: #64de79; -} - -.has-success .form-control-success { - background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg=="); -} - -.has-warning .text-help, -.has-warning .form-control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #a100fe; -} - -.has-warning .form-control { - border-color: #a100fe; -} - -.has-warning .input-group-addon { - color: #a100fe; - background-color: #eccbff; - border-color: #a100fe; -} - -.has-warning .form-control-feedback { - color: #a100fe; -} - -.has-warning .form-control-warning { - background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+"); -} - -.has-danger .text-help, -.has-danger .form-control-label, -.has-danger .radio, -.has-danger .checkbox, -.has-danger .radio-inline, -.has-danger .checkbox-inline, -.has-danger.radio label, -.has-danger.checkbox label, -.has-danger.radio-inline label, -.has-danger.checkbox-inline label { - color: #ff0808; -} - -.has-danger .form-control { - border-color: #ff0808; -} - -.has-danger .input-group-addon { - color: #ff0808; - background-color: #ffd4d4; - border-color: #ff0808; -} - -.has-danger .form-control-feedback { - color: #ff0808; -} - -.has-danger .form-control-danger { - background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4="); -} - -@media (min-width: 544px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-static { - display: inline-block; - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .form-control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} - -.btn { - display: inline-block; - padding: .375rem 1rem; - font-size: 1rem; - font-weight: normal; - line-height: 1.5; - text-align: center; - white-space: nowrap; - vertical-align: middle; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - border: 1px solid transparent; -} - -.btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -.btn:focus, .btn:hover { - text-decoration: none; -} - -.btn.focus { - text-decoration: none; -} - -.btn:active, .btn.active { - background-image: none; - outline: 0; -} - -.btn.disabled, .btn:disabled { - cursor: not-allowed; - opacity: .65; -} - -a.btn.disabled, -fieldset[disabled] a.btn { - pointer-events: none; -} - -.btn-primary { - color: #fff; - background-color: #000; - border-color: #000; -} - -.btn-primary:hover { - color: #fff; - background-color: black; - border-color: black; -} - -.btn-primary:focus, .btn-primary.focus { - color: #fff; - background-color: black; - border-color: black; -} - -.btn-primary:active, .btn-primary.active, -.open > .btn-primary.dropdown-toggle { - color: #fff; - background-color: black; - background-image: none; - border-color: black; -} - -.btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus, -.open > .btn-primary.dropdown-toggle:hover, -.open > .btn-primary.dropdown-toggle:focus, -.open > .btn-primary.dropdown-toggle.focus { - color: #fff; - background-color: black; - border-color: black; -} - -.btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary:disabled:focus, .btn-primary:disabled.focus { - background-color: #000; - border-color: #000; -} - -.btn-primary.disabled:hover, .btn-primary:disabled:hover { - background-color: #000; - border-color: #000; -} - -.btn-secondary { - color: #373a3c; - background-color: #fff; - border-color: #ccc; -} - -.btn-secondary:hover { - color: #373a3c; - background-color: #e6e6e6; - border-color: #adadad; -} - -.btn-secondary:focus, .btn-secondary.focus { - color: #373a3c; - background-color: #e6e6e6; - border-color: #adadad; -} - -.btn-secondary:active, .btn-secondary.active, -.open > .btn-secondary.dropdown-toggle { - color: #373a3c; - background-color: #e6e6e6; - background-image: none; - border-color: #adadad; -} - -.btn-secondary:active:hover, .btn-secondary:active:focus, .btn-secondary:active.focus, .btn-secondary.active:hover, .btn-secondary.active:focus, .btn-secondary.active.focus, -.open > .btn-secondary.dropdown-toggle:hover, -.open > .btn-secondary.dropdown-toggle:focus, -.open > .btn-secondary.dropdown-toggle.focus { - color: #373a3c; - background-color: #d4d4d4; - border-color: #8c8c8c; -} - -.btn-secondary.disabled:focus, .btn-secondary.disabled.focus, .btn-secondary:disabled:focus, .btn-secondary:disabled.focus { - background-color: #fff; - border-color: #ccc; -} - -.btn-secondary.disabled:hover, .btn-secondary:disabled:hover { - background-color: #fff; - border-color: #ccc; -} - -.btn-info { - color: #fff; - background-color: #0500f0; - border-color: #0500f0; -} - -.btn-info:hover { - color: #fff; - background-color: #0400bd; - border-color: #0400b3; -} - -.btn-info:focus, .btn-info.focus { - color: #fff; - background-color: #0400bd; - border-color: #0400b3; -} - -.btn-info:active, .btn-info.active, -.open > .btn-info.dropdown-toggle { - color: #fff; - background-color: #0400bd; - background-image: none; - border-color: #0400b3; -} - -.btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus, -.open > .btn-info.dropdown-toggle:hover, -.open > .btn-info.dropdown-toggle:focus, -.open > .btn-info.dropdown-toggle.focus { - color: #fff; - background-color: #030099; - border-color: #020071; -} - -.btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info:disabled:focus, .btn-info:disabled.focus { - background-color: #0500f0; - border-color: #0500f0; -} - -.btn-info.disabled:hover, .btn-info:disabled:hover { - background-color: #0500f0; - border-color: #0500f0; -} - -.btn-success { - color: #fff; - background-color: #64de79; - border-color: #64de79; -} - -.btn-success:hover { - color: #fff; - background-color: #3ad555; - border-color: #32d34d; -} - -.btn-success:focus, .btn-success.focus { - color: #fff; - background-color: #3ad555; - border-color: #32d34d; -} - -.btn-success:active, .btn-success.active, -.open > .btn-success.dropdown-toggle { - color: #fff; - background-color: #3ad555; - background-image: none; - border-color: #32d34d; -} - -.btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus, -.open > .btn-success.dropdown-toggle:hover, -.open > .btn-success.dropdown-toggle:focus, -.open > .btn-success.dropdown-toggle.focus { - color: #fff; - background-color: #29c244; - border-color: #22a038; -} - -.btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success:disabled:focus, .btn-success:disabled.focus { - background-color: #64de79; - border-color: #64de79; -} - -.btn-success.disabled:hover, .btn-success:disabled:hover { - background-color: #64de79; - border-color: #64de79; -} - -.btn-warning { - color: #fff; - background-color: #a100fe; - border-color: #a100fe; -} - -.btn-warning:hover { - color: #fff; - background-color: #8100cb; - border-color: #7a00c1; -} - -.btn-warning:focus, .btn-warning.focus { - color: #fff; - background-color: #8100cb; - border-color: #7a00c1; -} - -.btn-warning:active, .btn-warning.active, -.open > .btn-warning.dropdown-toggle { - color: #fff; - background-color: #8100cb; - background-image: none; - border-color: #7a00c1; -} - -.btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus, -.open > .btn-warning.dropdown-toggle:hover, -.open > .btn-warning.dropdown-toggle:focus, -.open > .btn-warning.dropdown-toggle.focus { - color: #fff; - background-color: #6a00a7; - border-color: #50007f; -} - -.btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning:disabled:focus, .btn-warning:disabled.focus { - background-color: #a100fe; - border-color: #a100fe; -} - -.btn-warning.disabled:hover, .btn-warning:disabled:hover { - background-color: #a100fe; - border-color: #a100fe; -} - -.btn-danger { - color: #fff; - background-color: #ff0808; - border-color: #ff0808; -} - -.btn-danger:hover { - color: #fff; - background-color: #d40000; - border-color: #ca0000; -} - -.btn-danger:focus, .btn-danger.focus { - color: #fff; - background-color: #d40000; - border-color: #ca0000; -} - -.btn-danger:active, .btn-danger.active, -.open > .btn-danger.dropdown-toggle { - color: #fff; - background-color: #d40000; - background-image: none; - border-color: #ca0000; -} - -.btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus, -.open > .btn-danger.dropdown-toggle:hover, -.open > .btn-danger.dropdown-toggle:focus, -.open > .btn-danger.dropdown-toggle.focus { - color: #fff; - background-color: #b00000; - border-color: #800; -} - -.btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger:disabled:focus, .btn-danger:disabled.focus { - background-color: #ff0808; - border-color: #ff0808; -} - -.btn-danger.disabled:hover, .btn-danger:disabled:hover { - background-color: #ff0808; - border-color: #ff0808; -} - -.btn-primary-outline { - color: #000; - background-color: transparent; - background-image: none; - border-color: #000; -} - -.btn-primary-outline:focus, .btn-primary-outline.focus, .btn-primary-outline:active, .btn-primary-outline.active, -.open > .btn-primary-outline.dropdown-toggle { - color: #fff; - background-color: #000; - border-color: #000; -} - -.btn-primary-outline:hover { - color: #fff; - background-color: #000; - border-color: #000; -} - -.btn-primary-outline.disabled:focus, .btn-primary-outline.disabled.focus, .btn-primary-outline:disabled:focus, .btn-primary-outline:disabled.focus { - border-color: #333; -} - -.btn-primary-outline.disabled:hover, .btn-primary-outline:disabled:hover { - border-color: #333; -} - -.btn-secondary-outline { - color: #ccc; - background-color: transparent; - background-image: none; - border-color: #ccc; -} - -.btn-secondary-outline:focus, .btn-secondary-outline.focus, .btn-secondary-outline:active, .btn-secondary-outline.active, -.open > .btn-secondary-outline.dropdown-toggle { - color: #fff; - background-color: #ccc; - border-color: #ccc; -} - -.btn-secondary-outline:hover { - color: #fff; - background-color: #ccc; - border-color: #ccc; -} - -.btn-secondary-outline.disabled:focus, .btn-secondary-outline.disabled.focus, .btn-secondary-outline:disabled:focus, .btn-secondary-outline:disabled.focus { - border-color: white; -} - -.btn-secondary-outline.disabled:hover, .btn-secondary-outline:disabled:hover { - border-color: white; -} - -.btn-info-outline { - color: #0500f0; - background-color: transparent; - background-image: none; - border-color: #0500f0; -} - -.btn-info-outline:focus, .btn-info-outline.focus, .btn-info-outline:active, .btn-info-outline.active, -.open > .btn-info-outline.dropdown-toggle { - color: #fff; - background-color: #0500f0; - border-color: #0500f0; -} - -.btn-info-outline:hover { - color: #fff; - background-color: #0500f0; - border-color: #0500f0; -} - -.btn-info-outline.disabled:focus, .btn-info-outline.disabled.focus, .btn-info-outline:disabled:focus, .btn-info-outline:disabled.focus { - border-color: #5b57ff; -} - -.btn-info-outline.disabled:hover, .btn-info-outline:disabled:hover { - border-color: #5b57ff; -} - -.btn-success-outline { - color: #64de79; - background-color: transparent; - background-image: none; - border-color: #64de79; -} - -.btn-success-outline:focus, .btn-success-outline.focus, .btn-success-outline:active, .btn-success-outline.active, -.open > .btn-success-outline.dropdown-toggle { - color: #fff; - background-color: #64de79; - border-color: #64de79; -} - -.btn-success-outline:hover { - color: #fff; - background-color: #64de79; - border-color: #64de79; -} - -.btn-success-outline.disabled:focus, .btn-success-outline.disabled.focus, .btn-success-outline:disabled:focus, .btn-success-outline:disabled.focus { - border-color: #b8f0c2; -} - -.btn-success-outline.disabled:hover, .btn-success-outline:disabled:hover { - border-color: #b8f0c2; -} - -.btn-warning-outline { - color: #a100fe; - background-color: transparent; - background-image: none; - border-color: #a100fe; -} - -.btn-warning-outline:focus, .btn-warning-outline.focus, .btn-warning-outline:active, .btn-warning-outline.active, -.open > .btn-warning-outline.dropdown-toggle { - color: #fff; - background-color: #a100fe; - border-color: #a100fe; -} - -.btn-warning-outline:hover { - color: #fff; - background-color: #a100fe; - border-color: #a100fe; -} - -.btn-warning-outline.disabled:focus, .btn-warning-outline.disabled.focus, .btn-warning-outline:disabled:focus, .btn-warning-outline:disabled.focus { - border-color: #c765ff; -} - -.btn-warning-outline.disabled:hover, .btn-warning-outline:disabled:hover { - border-color: #c765ff; -} - -.btn-danger-outline { - color: #ff0808; - background-color: transparent; - background-image: none; - border-color: #ff0808; -} - -.btn-danger-outline:focus, .btn-danger-outline.focus, .btn-danger-outline:active, .btn-danger-outline.active, -.open > .btn-danger-outline.dropdown-toggle { - color: #fff; - background-color: #ff0808; - border-color: #ff0808; -} - -.btn-danger-outline:hover { - color: #fff; - background-color: #ff0808; - border-color: #ff0808; -} - -.btn-danger-outline.disabled:focus, .btn-danger-outline.disabled.focus, .btn-danger-outline:disabled:focus, .btn-danger-outline:disabled.focus { - border-color: #ff6e6e; -} - -.btn-danger-outline.disabled:hover, .btn-danger-outline:disabled:hover { - border-color: #ff6e6e; -} - -.btn-link { - font-weight: normal; - color: #000; - border-radius: 0; -} - -.btn-link, .btn-link:active, .btn-link.active, .btn-link:disabled { - background-color: transparent; -} - -.btn-link, .btn-link:focus, .btn-link:active { - border-color: transparent; -} - -.btn-link:hover { - border-color: transparent; -} - -.btn-link:focus, .btn-link:hover { - color: #000; - text-decoration: underline; - background-color: transparent; -} - -.btn-link:disabled:focus, .btn-link:disabled:hover { - color: #b1b7bd; - text-decoration: none; -} - -.btn-lg, .btn-group-lg > .btn { - padding: .75rem 1.25rem; - font-size: 1.25rem; - line-height: 1.333333; -} - -.btn-sm, .btn-group-sm > .btn { - padding: .25rem .75rem; - font-size: .875rem; - line-height: 1.5; -} - -.btn-block { - display: block; - width: 100%; -} - -.btn-block + .btn-block { - margin-top: 5px; -} - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} - -.fade { - opacity: 0; - -webkit-transition: opacity .15s linear; - -o-transition: opacity .15s linear; - transition: opacity .15s linear; -} - -.fade.in { - opacity: 1; -} - -.collapse { - display: none; -} - -.collapse.in { - display: block; -} - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-timing-function: ease; - -o-transition-timing-function: ease; - transition-timing-function: ease; - -webkit-transition-duration: .35s; - -o-transition-duration: .35s; - transition-duration: .35s; - -webkit-transition-property: height; - -o-transition-property: height; - transition-property: height; -} - -.dropup, -.dropdown { - position: relative; -} - -.dropdown-toggle::after { - display: inline-block; - width: 0; - height: 0; - margin-right: .25rem; - margin-left: .25rem; - vertical-align: middle; - content: ""; - border-top: .3em solid; - border-right: .3em solid transparent; - border-left: .3em solid transparent; -} - -.dropdown-toggle:focus { - outline: 0; -} - -.dropup .dropdown-toggle::after { - border-top: 0; - border-bottom: .3em solid; -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - font-size: 1rem; - color: #373a3c; - text-align: left; - list-style: none; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .15); -} - -.dropdown-divider { - height: 1px; - margin: .5rem 0; - overflow: hidden; - background-color: #e5e5e5; -} - -.dropdown-item { - display: block; - width: 100%; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.5; - color: #373a3c; - text-align: inherit; - white-space: nowrap; - background: none; - border: 0; -} - -.dropdown-item:focus, .dropdown-item:hover { - color: #2b2d2f; - text-decoration: none; - background-color: #f5f5f5; -} - -.dropdown-item.active, .dropdown-item.active:focus, .dropdown-item.active:hover { - color: #fff; - text-decoration: none; - background-color: #000; - outline: 0; -} - -.dropdown-item.disabled, .dropdown-item.disabled:focus, .dropdown-item.disabled:hover { - color: #b1b7bd; -} - -.dropdown-item.disabled:focus, .dropdown-item.disabled:hover { - text-decoration: none; - cursor: not-allowed; - background-color: transparent; - background-image: none; - filter: "progid:DXImageTransform.Microsoft.gradient(enabled = false)"; -} - -.open > .dropdown-menu { - display: block; -} - -.open > a { - outline: 0; -} - -.dropdown-menu-right { - right: 0; - left: auto; -} - -.dropdown-menu-left { - right: auto; - left: 0; -} - -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: .875rem; - line-height: 1.5; - color: #b1b7bd; - white-space: nowrap; -} - -.dropdown-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 990; -} - -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} - -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - content: ""; - border-top: 0; - border-bottom: .3em solid; -} - -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} - -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} - -.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, -.btn-group-vertical > .btn:focus, -.btn-group-vertical > .btn:active, -.btn-group-vertical > .btn.active { - z-index: 2; -} - -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover { - z-index: 2; -} - -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} - -.btn-toolbar { - margin-left: -5px; -} - -.btn-toolbar::after { - display: table; - clear: both; - content: ""; -} - -.btn-toolbar .btn-group, -.btn-toolbar .input-group { - float: left; -} - -.btn-toolbar > .btn, -.btn-toolbar > .btn-group, -.btn-toolbar > .input-group { - margin-left: 5px; -} - -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} - -.btn-group > .btn:first-child { - margin-left: 0; -} - -.btn-group > .btn-group { - float: left; -} - -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} - -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - -.btn-group > .btn + .dropdown-toggle { - padding-right: 8px; - padding-left: 8px; -} - -.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle { - padding-right: 12px; - padding-left: 12px; -} - -.btn .caret { - margin-left: 0; -} - -.btn-lg .caret, .btn-group-lg > .btn .caret { - border-width: .3em .3em 0; - border-bottom-width: 0; -} - -.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret { - border-width: 0 .3em .3em; -} - -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; -} - -.btn-group-vertical > .btn-group::after { - display: table; - clear: both; - content: ""; -} - -.btn-group-vertical > .btn-group > .btn { - float: none; -} - -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} - -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} - -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: .25rem; -} - -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-bottom-left-radius: .25rem; -} - -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} - -[data-toggle="buttons"] > .btn input[type="radio"], -[data-toggle="buttons"] > .btn input[type="checkbox"], -[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} - -.input-group { - position: relative; - display: table; - border-collapse: separate; -} - -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} - -.input-group .form-control:focus, .input-group .form-control:active, .input-group .form-control:hover { - z-index: 3; -} - -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} - -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} - -.input-group-addon { - padding: .375rem .75rem; - font-size: 1rem; - font-weight: normal; - line-height: 1; - color: #55595c; - text-align: center; - background-color: #eceeef; - border: 1px solid #ccc; -} - -.input-group-addon.form-control-sm, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .input-group-addon.btn { - padding: .275rem .75rem; - font-size: .875rem; -} - -.input-group-addon.form-control-lg, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .input-group-addon.btn { - padding: .75rem 1.25rem; - font-size: 1.25rem; -} - -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} - -.input-group-addon:first-child { - border-right: 0; -} - -.input-group-addon:last-child { - border-left: 0; -} - -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; -} - -.input-group-btn > .btn { - position: relative; -} - -.input-group-btn > .btn + .btn { - margin-left: -1px; -} - -.input-group-btn > .btn:focus, .input-group-btn > .btn:active, .input-group-btn > .btn:hover { - z-index: 3; -} - -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group { - margin-right: -1px; -} - -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group { - z-index: 2; - margin-left: -1px; -} - -.input-group-btn:last-child > .btn:focus, .input-group-btn:last-child > .btn:active, .input-group-btn:last-child > .btn:hover, -.input-group-btn:last-child > .btn-group:focus, -.input-group-btn:last-child > .btn-group:active, -.input-group-btn:last-child > .btn-group:hover { - z-index: 3; -} - -.c-input { - position: relative; - display: inline; - padding-left: 1.5rem; - color: #555; - cursor: pointer; -} - -.c-input > input { - position: absolute; - z-index: -1; - opacity: 0; -} - -.c-input > input:checked ~ .c-indicator { - color: #fff; - background-color: #0074d9; -} - -.c-input > input:focus ~ .c-indicator { - -webkit-box-shadow: 0 0 0 .075rem #fff, 0 0 0 .2rem #0074d9; - box-shadow: 0 0 0 .075rem #fff, 0 0 0 .2rem #0074d9; -} - -.c-input > input:active ~ .c-indicator { - color: #fff; - background-color: #84c6ff; -} - -.c-input + .c-input { - margin-left: 1rem; -} - -.c-indicator { - position: absolute; - top: 0; - left: 0; - display: block; - width: 1rem; - height: 1rem; - font-size: 65%; - line-height: 1rem; - color: #eee; - text-align: center; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: #eee; - background-repeat: no-repeat; - background-position: center center; - -webkit-background-size: 50% 50%; - background-size: 50% 50%; -} - -.c-checkbox .c-indicator { - border-radius: .25rem; -} - -.c-checkbox input:checked ~ .c-indicator { - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgOCA4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA4IDgiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTYuNCwxTDUuNywxLjdMMi45LDQuNUwyLjEsMy43TDEuNCwzTDAsNC40bDAuNywwLjdsMS41LDEuNWwwLjcsMC43bDAuNy0wLjdsMy41LTMuNWwwLjctMC43TDYuNCwxTDYuNCwxeiINCgkvPg0KPC9zdmc+DQo=); -} - -.c-checkbox input:indeterminate ~ .c-indicator { - background-color: #0074d9; - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iOHB4IiBoZWlnaHQ9IjhweCIgdmlld0JveD0iMCAwIDggOCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgOCA4IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Ik0wLDN2Mmg4VjNIMHoiLz4NCjwvc3ZnPg0K); -} - -.c-radio .c-indicator { - border-radius: 50%; -} - -.c-radio input:checked ~ .c-indicator { - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgOCA4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA4IDgiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTQsMUMyLjMsMSwxLDIuMywxLDRzMS4zLDMsMywzczMtMS4zLDMtM1M1LjcsMSw0LDF6Ii8+DQo8L3N2Zz4NCg==); -} - -.c-inputs-stacked .c-input { - display: inline; -} - -.c-inputs-stacked .c-input::after { - display: block; - margin-bottom: .25rem; - content: ""; -} - -.c-inputs-stacked .c-input + .c-input { - margin-left: 0; -} - -.c-select { - display: inline-block; - max-width: 100%; - -webkit-appearance: none; - padding: .375rem 1.75rem .375rem .75rem; - padding-right: .75rem \9; - color: #55595c; - vertical-align: middle; - background: #fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAUCAMAAACzvE1FAAAADFBMVEUzMzMzMzMzMzMzMzMKAG/3AAAAA3RSTlMAf4C/aSLHAAAAPElEQVR42q3NMQ4AIAgEQTn//2cLdRKppSGzBYwzVXvznNWs8C58CiussPJj8h6NwgorrKRdTvuV9v16Afn0AYFOB7aYAAAAAElFTkSuQmCC) no-repeat right .75rem center; - background-image: none \9; - -webkit-background-size: 8px 10px; - background-size: 8px 10px; - border: 1px solid #ccc; - - -moz-appearance: none; -} - -.c-select:focus { - border-color: #51a7e8; - outline: none; -} - -.c-select::-ms-expand { - opacity: 0; -} - -.c-select-sm { - padding-top: 3px; - padding-bottom: 3px; - font-size: 12px; -} - -.c-select-sm:not([multiple]) { - height: 26px; - min-height: 26px; -} - -.file { - position: relative; - display: inline-block; - height: 2.5rem; - cursor: pointer; -} - -.file input { - min-width: 14rem; - margin: 0; - filter: alpha(opacity=0); - opacity: 0; -} - -.file-custom { - position: absolute; - top: 0; - right: 0; - left: 0; - z-index: 5; - height: 2.5rem; - padding: .5rem 1rem; - line-height: 1.5; - color: #555; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: #fff; - border: 1px solid #ddd; - border-radius: .25rem; -} - -.file-custom::after { - content: "Choose file..."; -} - -.file-custom::before { - position: absolute; - top: -.075rem; - right: -.075rem; - bottom: -.075rem; - z-index: 6; - display: block; - height: 2.5rem; - padding: .5rem 1rem; - line-height: 1.5; - color: #555; - content: "Browse"; - background-color: #eee; - border: 1px solid #ddd; - border-radius: 0 .25rem .25rem 0; -} - -.nav { - padding-left: 0; - margin-bottom: 0; - list-style: none; -} - -.nav-link { - display: inline-block; -} - -.nav-link:focus, .nav-link:hover { - text-decoration: none; -} - -.nav-link.disabled { - color: #b1b7bd; -} - -.nav-link.disabled, .nav-link.disabled:focus, .nav-link.disabled:hover { - color: #b1b7bd; - cursor: not-allowed; - background-color: transparent; -} - -.nav-inline .nav-item { - display: inline-block; -} - -.nav-inline .nav-item + .nav-item, -.nav-inline .nav-link + .nav-link { - margin-left: 1rem; -} - -.nav-tabs { - border-bottom: 1px solid #ddd; -} - -.nav-tabs::after { - display: table; - clear: both; - content: ""; -} - -.nav-tabs .nav-item { - float: left; - margin-bottom: -1px; -} - -.nav-tabs .nav-item + .nav-item { - margin-left: .2rem; -} - -.nav-tabs .nav-link { - display: block; - padding: .5em 1em; - border: 1px solid transparent; -} - -.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover { - border-color: #eceeef #eceeef #ddd; -} - -.nav-tabs .nav-link.disabled, .nav-tabs .nav-link.disabled:focus, .nav-tabs .nav-link.disabled:hover { - color: #b1b7bd; - background-color: transparent; - border-color: transparent; -} - -.nav-tabs .nav-link.active, .nav-tabs .nav-link.active:focus, .nav-tabs .nav-link.active:hover, -.nav-tabs .nav-item.open .nav-link, -.nav-tabs .nav-item.open .nav-link:focus, -.nav-tabs .nav-item.open .nav-link:hover { - color: #55595c; - background-color: #fff; - border-color: #ddd #ddd transparent; -} - -.nav-pills::after { - display: table; - clear: both; - content: ""; -} - -.nav-pills .nav-item { - float: left; -} - -.nav-pills .nav-item + .nav-item { - margin-left: .2rem; -} - -.nav-pills .nav-link { - display: block; - padding: .5em 1em; -} - -.nav-pills .nav-link.active, .nav-pills .nav-link.active:focus, .nav-pills .nav-link.active:hover, -.nav-pills .nav-item.open .nav-link, -.nav-pills .nav-item.open .nav-link:focus, -.nav-pills .nav-item.open .nav-link:hover { - color: #fff; - cursor: default; - background-color: #000; -} - -.nav-stacked .nav-item { - display: block; - float: none; -} - -.nav-stacked .nav-item + .nav-item { - margin-top: .2rem; - margin-left: 0; -} - -.tab-content > .tab-pane { - display: none; -} - -.tab-content > .active { - display: block; -} - -.nav-tabs .dropdown-menu { - margin-top: -1px; -} - -.navbar { - position: relative; - padding: .5rem 1rem; -} - -.navbar::after { - display: table; - clear: both; - content: ""; -} - -.navbar-full { - z-index: 1000; -} - -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; -} - -.navbar-fixed-top { - top: 0; -} - -.navbar-fixed-bottom { - bottom: 0; -} - -.navbar-sticky-top { - position: -webkit-sticky; - position: sticky; - top: 0; - z-index: 1030; - width: 100%; -} - -.navbar-brand { - float: left; - padding-top: .25rem; - padding-bottom: .25rem; - margin-right: 1rem; - font-size: 1.25rem; -} - -.navbar-brand:focus, .navbar-brand:hover { - text-decoration: none; -} - -.navbar-brand > img { - display: block; -} - -.navbar-divider { - float: left; - width: 1px; - padding-top: .425rem; - padding-bottom: .425rem; - margin-right: 1rem; - margin-left: 1rem; - overflow: hidden; -} - -.navbar-divider::before { - content: "\00a0"; -} - -.navbar-toggler { - padding: .5rem .75rem; - font-size: 1.25rem; - line-height: 1; - background: none; - border: 1px solid transparent; -} - -.navbar-toggler:focus, .navbar-toggler:hover { - text-decoration: none; -} - -@media (min-width: 544px) { - .navbar-toggleable-xs { - display: block !important; - } -} - -@media (min-width: 768px) { - .navbar-toggleable-sm { - display: block !important; - } -} - -@media (min-width: 992px) { - .navbar-toggleable-md { - display: block !important; - } -} - -.navbar-nav .nav-item { - float: left; -} - -.navbar-nav .nav-link { - display: block; - padding-top: .425rem; - padding-bottom: .425rem; -} - -.navbar-nav .nav-link + .nav-link { - margin-left: 1rem; -} - -.navbar-nav .nav-item + .nav-item { - margin-left: 1rem; -} - -.navbar-light .navbar-brand { - color: rgba(0, 0, 0, .8); -} - -.navbar-light .navbar-brand:focus, .navbar-light .navbar-brand:hover { - color: rgba(0, 0, 0, .8); -} - -.navbar-light .navbar-nav .nav-link { - color: rgba(0, 0, 0, .3); -} - -.navbar-light .navbar-nav .nav-link:focus, .navbar-light .navbar-nav .nav-link:hover { - color: rgba(0, 0, 0, .6); -} - -.navbar-light .navbar-nav .open > .nav-link, .navbar-light .navbar-nav .open > .nav-link:focus, .navbar-light .navbar-nav .open > .nav-link:hover, -.navbar-light .navbar-nav .active > .nav-link, -.navbar-light .navbar-nav .active > .nav-link:focus, -.navbar-light .navbar-nav .active > .nav-link:hover, -.navbar-light .navbar-nav .nav-link.open, -.navbar-light .navbar-nav .nav-link.open:focus, -.navbar-light .navbar-nav .nav-link.open:hover, -.navbar-light .navbar-nav .nav-link.active, -.navbar-light .navbar-nav .nav-link.active:focus, -.navbar-light .navbar-nav .nav-link.active:hover { - color: rgba(0, 0, 0, .8); -} - -.navbar-light .navbar-divider { - background-color: rgba(0, 0, 0, .075); -} - -.navbar-dark .navbar-brand { - color: white; -} - -.navbar-dark .navbar-brand:focus, .navbar-dark .navbar-brand:hover { - color: white; -} - -.navbar-dark .navbar-nav .nav-link { - color: rgba(255, 255, 255, .5); -} - -.navbar-dark .navbar-nav .nav-link:focus, .navbar-dark .navbar-nav .nav-link:hover { - color: rgba(255, 255, 255, .75); -} - -.navbar-dark .navbar-nav .open > .nav-link, .navbar-dark .navbar-nav .open > .nav-link:focus, .navbar-dark .navbar-nav .open > .nav-link:hover, -.navbar-dark .navbar-nav .active > .nav-link, -.navbar-dark .navbar-nav .active > .nav-link:focus, -.navbar-dark .navbar-nav .active > .nav-link:hover, -.navbar-dark .navbar-nav .nav-link.open, -.navbar-dark .navbar-nav .nav-link.open:focus, -.navbar-dark .navbar-nav .nav-link.open:hover, -.navbar-dark .navbar-nav .nav-link.active, -.navbar-dark .navbar-nav .nav-link.active:focus, -.navbar-dark .navbar-nav .nav-link.active:hover { - color: white; -} - -.navbar-dark .navbar-divider { - background-color: rgba(255, 255, 255, .075); -} - -.card { - position: relative; - display: block; - margin-bottom: .75rem; - background-color: #fff; - border: 1px solid #e5e5e5; -} - -.card-block { - padding: 1.25rem; -} - -.card-title { - margin-bottom: .75rem; -} - -.card-subtitle { - margin-top: -.375rem; - margin-bottom: 0; -} - -.card-text:last-child { - margin-bottom: 0; -} - -.card-link:hover { - text-decoration: none; -} - -.card-link + .card-link { - margin-left: 1.25rem; -} - -.card-header { - padding: .75rem 1.25rem; - background-color: #f5f5f5; - border-bottom: 1px solid #e5e5e5; -} - -.card-footer { - padding: .75rem 1.25rem; - background-color: #f5f5f5; - border-top: 1px solid #e5e5e5; -} - -.card-primary { - background-color: #000; - border-color: #000; -} - -.card-success { - background-color: #64de79; - border-color: #64de79; -} - -.card-info { - background-color: #0500f0; - border-color: #0500f0; -} - -.card-warning { - background-color: #a100fe; - border-color: #a100fe; -} - -.card-danger { - background-color: #ff0808; - border-color: #ff0808; -} - -.card-primary-outline { - background-color: transparent; - border-color: #000; -} - -.card-secondary-outline { - background-color: transparent; - border-color: #ccc; -} - -.card-info-outline { - background-color: transparent; - border-color: #0500f0; -} - -.card-success-outline { - background-color: transparent; - border-color: #64de79; -} - -.card-warning-outline { - background-color: transparent; - border-color: #a100fe; -} - -.card-danger-outline { - background-color: transparent; - border-color: #ff0808; -} - -.card-inverse .card-header, -.card-inverse .card-footer { - border-bottom: 1px solid rgba(255, 255, 255, .2); -} - -.card-inverse .card-header, -.card-inverse .card-footer, -.card-inverse .card-title, -.card-inverse .card-blockquote { - color: #fff; -} - -.card-inverse .card-link, -.card-inverse .card-text, -.card-inverse .card-blockquote > footer { - color: rgba(255, 255, 255, .65); -} - -.card-inverse .card-link:focus, .card-inverse .card-link:hover { - color: #fff; -} - -.card-blockquote { - padding: 0; - margin-bottom: 0; - border-left: 0; -} - -.card-img-overlay { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - padding: 1.25rem; -} - -@media (min-width: 544px) { - .card-deck { - display: table; - table-layout: fixed; - border-spacing: 1.25rem 0; - } - .card-deck .card { - display: table-cell; - width: 1%; - vertical-align: top; - } - .card-deck-wrapper { - margin-right: -1.25rem; - margin-left: -1.25rem; - } -} - -@media (min-width: 544px) { - .card-group { - display: table; - width: 100%; - table-layout: fixed; - } - .card-group .card { - display: table-cell; - vertical-align: top; - } - .card-group .card + .card { - margin-left: 0; - border-left: 0; - } -} - -@media (min-width: 544px) { - .card-columns { - -webkit-column-count: 3; - -moz-column-count: 3; - column-count: 3; - -webkit-column-gap: 1.25rem; - -moz-column-gap: 1.25rem; - column-gap: 1.25rem; - } - .card-columns .card { - display: inline-block; - width: 100%; - } -} - -.breadcrumb { - padding: .75rem 1rem; - margin-bottom: 1rem; - list-style: none; - background-color: #eceeef; -} - -.breadcrumb::after { - display: table; - clear: both; - content: ""; -} - -.breadcrumb > li { - float: left; -} - -.breadcrumb > li + li::before { - padding-right: .5rem; - padding-left: .5rem; - color: #b1b7bd; - content: "/"; -} - -.breadcrumb > .active { - color: #b1b7bd; -} - -.pagination { - display: inline-block; - padding-left: 0; - margin-top: 1rem; - margin-bottom: 1rem; -} - -.page-item { - display: inline; -} - -.page-item:first-child .page-link { - margin-left: 0; -} - -.page-item.active .page-link, .page-item.active .page-link:focus, .page-item.active .page-link:hover { - z-index: 2; - color: #fff; - cursor: default; - background-color: #000; - border-color: #000; -} - -.page-item.disabled .page-link, .page-item.disabled .page-link:focus, .page-item.disabled .page-link:hover { - color: #b1b7bd; - cursor: not-allowed; - background-color: #fff; - border-color: #ddd; -} - -.page-link { - position: relative; - float: left; - padding: .5rem .75rem; - margin-left: -1px; - line-height: 1.5; - color: #000; - text-decoration: none; - background-color: #fff; - border: 1px solid #ddd; -} - -.page-link:focus, .page-link:hover { - color: #000; - background-color: #eceeef; - border-color: #ddd; -} - -.pagination-lg .page-link { - padding: .75rem 1.5rem; - font-size: 1.25rem; - line-height: 1.333333; -} - -.pagination-sm .page-link { - padding: .275rem .75rem; - font-size: .875rem; - line-height: 1.5; -} - -.pager { - padding-left: 0; - margin-top: 1rem; - margin-bottom: 1rem; - text-align: center; - list-style: none; -} - -.pager::after { - display: table; - clear: both; - content: ""; -} - -.pager li { - display: inline; -} - -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 15px; -} - -.pager li > a:focus, .pager li > a:hover { - text-decoration: none; - background-color: #eceeef; -} - -.pager .disabled > a, .pager .disabled > a:focus, .pager .disabled > a:hover { - color: #b1b7bd; - cursor: not-allowed; - background-color: #fff; -} - -.pager .disabled > span { - color: #b1b7bd; - cursor: not-allowed; - background-color: #fff; -} - -.pager-next > a, -.pager-next > span { - float: right; -} - -.pager-prev > a, -.pager-prev > span { - float: left; -} - -.label { - display: inline-block; - padding: .25em .4em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; -} - -.label:empty { - display: none; -} - -.btn .label { - position: relative; - top: -1px; -} - -a.label:focus, a.label:hover { - color: #fff; - text-decoration: none; - cursor: pointer; -} - -.label-pill { - padding-right: .6em; - padding-left: .6em; -} - -.label-default { - background-color: #b1b7bd; -} - -.label-default[href]:focus, .label-default[href]:hover { - background-color: #959ea6; -} - -.label-primary { - background-color: #000; -} - -.label-primary[href]:focus, .label-primary[href]:hover { - background-color: black; -} - -.label-success { - background-color: #64de79; -} - -.label-success[href]:focus, .label-success[href]:hover { - background-color: #3ad555; -} - -.label-info { - background-color: #0500f0; -} - -.label-info[href]:focus, .label-info[href]:hover { - background-color: #0400bd; -} - -.label-warning { - background-color: #a100fe; -} - -.label-warning[href]:focus, .label-warning[href]:hover { - background-color: #8100cb; -} - -.label-danger { - background-color: #ff0808; -} - -.label-danger[href]:focus, .label-danger[href]:hover { - background-color: #d40000; -} - -.jumbotron { - padding: 2rem 1rem; - margin-bottom: 2rem; - background-color: #eceeef; -} - -@media (min-width: 544px) { - .jumbotron { - padding: 4rem 2rem; - } -} - -.jumbotron-hr { - border-top-color: #d0d5d8; -} - -.jumbotron-fluid { - padding-right: 0; - padding-left: 0; -} - -.alert { - padding: 15px; - margin-bottom: 1rem; - border: 1px solid transparent; -} - -.alert > p, -.alert > ul { - margin-bottom: 0; -} - -.alert > p + p { - margin-top: 5px; -} - -.alert-heading { - color: inherit; -} - -.alert-link { - font-weight: bold; -} - -.alert-dismissible { - padding-right: 35px; -} - -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} - -.alert-success { - color: #3c763d; - background-color: #dff0d8; - border-color: #d0e9c6; -} - -.alert-success hr { - border-top-color: #c1e2b3; -} - -.alert-success .alert-link { - color: #2b542c; -} - -.alert-info { - color: #31708f; - background-color: #d9edf7; - border-color: #bcdff1; -} - -.alert-info hr { - border-top-color: #a6d5ec; -} - -.alert-info .alert-link { - color: #245269; -} - -.alert-warning { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faf2cc; -} - -.alert-warning hr { - border-top-color: #f7ecb5; -} - -.alert-warning .alert-link { - color: #66512c; -} - -.alert-danger { - color: #a94442; - background-color: #f2dede; - border-color: #ebcccc; -} - -.alert-danger hr { - border-top-color: #e4b9b9; -} - -.alert-danger .alert-link { - color: #843534; -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 1rem 0; - } - to { - background-position: 0 0; - } -} - -@-o-keyframes progress-bar-stripes { - from { - background-position: 1rem 0; - } - to { - background-position: 0 0; - } -} - -@keyframes progress-bar-stripes { - from { - background-position: 1rem 0; - } - to { - background-position: 0 0; - } -} - -.progress { - display: block; - width: 100%; - height: 1rem; - margin-bottom: 1rem; -} - -.progress[value] { - -webkit-appearance: none; - color: #0074d9; - border: 0; - - -moz-appearance: none; - appearance: none; -} - -.progress[value]::-webkit-progress-bar { - background-color: #eee; -} - -.progress[value]::-webkit-progress-value::before { - content: attr(value); -} - -.progress[value]::-webkit-progress-value { - background-color: #0074d9; - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; -} - -.progress[value="100"]::-webkit-progress-value { - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; -} - -@media screen and (min-width: 0\0) { - .progress { - background-color: #eee; - } - .progress-bar { - display: inline-block; - height: 1rem; - text-indent: -999rem; - background-color: #0074d9; - border-top-left-radius: .25rem; - border-bottom-left-radius: .25rem; - } - .progress[width^="0"] { - min-width: 2rem; - color: #b1b7bd; - background-color: transparent; - background-image: none; - } - .progress[width="100%"] { - border-top-right-radius: .25rem; - border-bottom-right-radius: .25rem; - } -} - -.progress-striped[value]::-webkit-progress-value { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - -webkit-background-size: 1rem 1rem; - background-size: 1rem 1rem; -} - -.progress-striped[value]::-moz-progress-bar { - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-size: 1rem 1rem; -} - -@media screen and (min-width: 0\0) { - .progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - -webkit-background-size: 1rem 1rem; - background-size: 1rem 1rem; - } -} - -.progress-animated[value]::-webkit-progress-value { - -webkit-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} - -.progress-animated[value]::-moz-progress-bar { - animation: progress-bar-stripes 2s linear infinite; -} - -@media screen and (min-width: 0\0) { - .progress-animated .progress-bar-striped { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; - } -} - -.progress-success[value]::-webkit-progress-value { - background-color: #64de79; -} - -.progress-success[value]::-moz-progress-bar { - background-color: #64de79; -} - -@media screen and (min-width: 0\0) { - .progress-success .progress-bar { - background-color: #64de79; - } -} - -.progress-info[value]::-webkit-progress-value { - background-color: #0500f0; -} - -.progress-info[value]::-moz-progress-bar { - background-color: #0500f0; -} - -@media screen and (min-width: 0\0) { - .progress-info .progress-bar { - background-color: #0500f0; - } -} - -.progress-warning[value]::-webkit-progress-value { - background-color: #a100fe; -} - -.progress-warning[value]::-moz-progress-bar { - background-color: #a100fe; -} - -@media screen and (min-width: 0\0) { - .progress-warning .progress-bar { - background-color: #a100fe; - } -} - -.progress-danger[value]::-webkit-progress-value { - background-color: #ff0808; -} - -.progress-danger[value]::-moz-progress-bar { - background-color: #ff0808; -} - -@media screen and (min-width: 0\0) { - .progress-danger .progress-bar { - background-color: #ff0808; - } -} - -.media { - margin-top: 15px; -} - -.media:first-child { - margin-top: 0; -} - -.media, -.media-body { - overflow: hidden; - zoom: 1; -} - -.media-body { - width: 10000px; -} - -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; -} - -.media-middle { - vertical-align: middle; -} - -.media-bottom { - vertical-align: bottom; -} - -.media-object { - display: block; -} - -.media-object.img-thumbnail { - max-width: none; -} - -.media-right { - padding-left: 10px; -} - -.media-left { - padding-right: 10px; -} - -.media-heading { - margin-top: 0; - margin-bottom: 5px; -} - -.media-list { - padding-left: 0; - list-style: none; -} - -.list-group { - padding-left: 0; - margin-bottom: 0; -} - -.list-group-item { - position: relative; - display: block; - padding: .75rem 1.25rem; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid #ddd; -} - -.list-group-item:last-child { - margin-bottom: 0; -} - -.list-group-flush .list-group-item { - border-width: 1px 0; - border-radius: 0; -} - -.list-group-flush:first-child .list-group-item:first-child { - border-top: 0; -} - -.list-group-flush:last-child .list-group-item:last-child { - border-bottom: 0; -} - -a.list-group-item, -button.list-group-item { - width: 100%; - color: #555; - text-align: inherit; -} - -a.list-group-item .list-group-item-heading, -button.list-group-item .list-group-item-heading { - color: #333; -} - -a.list-group-item:focus, a.list-group-item:hover, -button.list-group-item:focus, -button.list-group-item:hover { - color: #555; - text-decoration: none; - background-color: #f5f5f5; -} - -.list-group-item.disabled, .list-group-item.disabled:focus, .list-group-item.disabled:hover { - color: #b1b7bd; - cursor: not-allowed; - background-color: #eceeef; -} - -.list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading { - color: inherit; -} - -.list-group-item.disabled .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text { - color: #b1b7bd; -} - -.list-group-item.active, .list-group-item.active:focus, .list-group-item.active:hover { - z-index: 2; - color: #fff; - background-color: #000; - border-color: #000; -} - -.list-group-item.active .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > .small { - color: inherit; -} - -.list-group-item.active .list-group-item-text, .list-group-item.active:focus .list-group-item-text, .list-group-item.active:hover .list-group-item-text { - color: #666; -} - -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; -} - -a.list-group-item-success, -button.list-group-item-success { - color: #3c763d; -} - -a.list-group-item-success .list-group-item-heading, -button.list-group-item-success .list-group-item-heading { - color: inherit; -} - -a.list-group-item-success:focus, a.list-group-item-success:hover, -button.list-group-item-success:focus, -button.list-group-item-success:hover { - color: #3c763d; - background-color: #d0e9c6; -} - -a.list-group-item-success.active, a.list-group-item-success.active:focus, a.list-group-item-success.active:hover, -button.list-group-item-success.active, -button.list-group-item-success.active:focus, -button.list-group-item-success.active:hover { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} - -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} - -a.list-group-item-info, -button.list-group-item-info { - color: #31708f; -} - -a.list-group-item-info .list-group-item-heading, -button.list-group-item-info .list-group-item-heading { - color: inherit; -} - -a.list-group-item-info:focus, a.list-group-item-info:hover, -button.list-group-item-info:focus, -button.list-group-item-info:hover { - color: #31708f; - background-color: #c4e3f3; -} - -a.list-group-item-info.active, a.list-group-item-info.active:focus, a.list-group-item-info.active:hover, -button.list-group-item-info.active, -button.list-group-item-info.active:focus, -button.list-group-item-info.active:hover { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} - -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} - -a.list-group-item-warning, -button.list-group-item-warning { - color: #8a6d3b; -} - -a.list-group-item-warning .list-group-item-heading, -button.list-group-item-warning .list-group-item-heading { - color: inherit; -} - -a.list-group-item-warning:focus, a.list-group-item-warning:hover, -button.list-group-item-warning:focus, -button.list-group-item-warning:hover { - color: #8a6d3b; - background-color: #faf2cc; -} - -a.list-group-item-warning.active, a.list-group-item-warning.active:focus, a.list-group-item-warning.active:hover, -button.list-group-item-warning.active, -button.list-group-item-warning.active:focus, -button.list-group-item-warning.active:hover { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} - -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} - -a.list-group-item-danger, -button.list-group-item-danger { - color: #a94442; -} - -a.list-group-item-danger .list-group-item-heading, -button.list-group-item-danger .list-group-item-heading { - color: inherit; -} - -a.list-group-item-danger:focus, a.list-group-item-danger:hover, -button.list-group-item-danger:focus, -button.list-group-item-danger:hover { - color: #a94442; - background-color: #ebcccc; -} - -a.list-group-item-danger.active, a.list-group-item-danger.active:focus, a.list-group-item-danger.active:hover, -button.list-group-item-danger.active, -button.list-group-item-danger.active:focus, -button.list-group-item-danger.active:hover { - color: #fff; - background-color: #a94442; - border-color: #a94442; -} - -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} - -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} - -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; -} - -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0; -} - -.embed-responsive-21by9 { - padding-bottom: 42.857143%; -} - -.embed-responsive-16by9 { - padding-bottom: 56.25%; -} - -.embed-responsive-4by3 { - padding-bottom: 75%; -} - -.embed-responsive-1by1 { - padding-bottom: 100%; -} - -.close { - float: right; - font-size: 1.5rem; - font-weight: bold; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - opacity: .2; -} - -.close:focus, .close:hover { - color: #000; - text-decoration: none; - cursor: pointer; - opacity: .5; -} - -button.close { - -webkit-appearance: none; - padding: 0; - cursor: pointer; - background: transparent; - border: 0; -} - -.modal-open { - overflow: hidden; -} - -.modal { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - display: none; - overflow: hidden; - -webkit-overflow-scrolling: touch; - outline: 0; -} - -.modal.fade .modal-dialog { - -webkit-transition: -webkit-transform .3s ease-out; - -o-transition: transform .3s ease-out, -o-transform .3s ease-out; - transition: -webkit-transform .3s ease-out; - transition: transform .3s ease-out; - transition: transform .3s ease-out, -webkit-transform .3s ease-out, -o-transform .3s ease-out; - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); -} - -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} - -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} - -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} - -.modal-content { - position: relative; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: .3rem; - outline: 0; -} - -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000; -} - -.modal-backdrop.fade { - opacity: 0; -} - -.modal-backdrop.in { - opacity: .5; -} - -.modal-header { - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} - -.modal-header::after { - display: table; - clear: both; - content: ""; -} - -.modal-header .close { - margin-top: -2px; -} - -.modal-title { - margin: 0; - line-height: 1.5; -} - -.modal-body { - position: relative; - padding: 15px; -} - -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} - -.modal-footer::after { - display: table; - clear: both; - content: ""; -} - -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} - -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} - -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} - -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} - -@media (min-width: 544px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-sm { - width: 300px; - } -} - -@media (min-width: 768px) { - .modal-lg { - width: 900px; - } -} - -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: "bau", "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: .875rem; - font-style: normal; - font-weight: normal; - line-height: 1.5; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - white-space: normal; - opacity: 0; - - line-break: auto; -} - -.tooltip.in { - opacity: .9; -} - -.tooltip.tooltip-top, .tooltip.bs-tether-element-attached-bottom { - padding: 5px 0; - margin-top: -3px; -} - -.tooltip.tooltip-top .tooltip-arrow, .tooltip.bs-tether-element-attached-bottom .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} - -.tooltip.tooltip-right, .tooltip.bs-tether-element-attached-left { - padding: 0 5px; - margin-left: 3px; -} - -.tooltip.tooltip-right .tooltip-arrow, .tooltip.bs-tether-element-attached-left .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000; -} - -.tooltip.tooltip-bottom, .tooltip.bs-tether-element-attached-top { - padding: 5px 0; - margin-top: 3px; -} - -.tooltip.tooltip-bottom .tooltip-arrow, .tooltip.bs-tether-element-attached-top .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} - -.tooltip.tooltip-left, .tooltip.bs-tether-element-attached-right { - padding: 0 5px; - margin-left: -3px; -} - -.tooltip.tooltip-left .tooltip-arrow, .tooltip.bs-tether-element-attached-right .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000; -} - -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - background-color: #000; -} - -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: block; - max-width: 276px; - padding: 1px; - font-family: "bau", "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: .875rem; - font-style: normal; - font-weight: normal; - line-height: 1.5; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - white-space: normal; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .2); - - line-break: auto; -} - -.popover.popover-top, .popover.bs-tether-element-attached-bottom { - margin-top: -10px; -} - -.popover.popover-top .popover-arrow, .popover.bs-tether-element-attached-bottom .popover-arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: rgba(0, 0, 0, .25); - border-bottom-width: 0; -} - -.popover.popover-top .popover-arrow::after, .popover.bs-tether-element-attached-bottom .popover-arrow::after { - bottom: 1px; - margin-left: -10px; - content: ""; - border-top-color: #fff; - border-bottom-width: 0; -} - -.popover.popover-right, .popover.bs-tether-element-attached-left { - margin-left: 10px; -} - -.popover.popover-right .popover-arrow, .popover.bs-tether-element-attached-left .popover-arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: rgba(0, 0, 0, .25); - border-left-width: 0; -} - -.popover.popover-right .popover-arrow::after, .popover.bs-tether-element-attached-left .popover-arrow::after { - bottom: -10px; - left: 1px; - content: ""; - border-right-color: #fff; - border-left-width: 0; -} - -.popover.popover-bottom, .popover.bs-tether-element-attached-top { - margin-top: 10px; -} - -.popover.popover-bottom .popover-arrow, .popover.bs-tether-element-attached-top .popover-arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: rgba(0, 0, 0, .25); -} - -.popover.popover-bottom .popover-arrow::after, .popover.bs-tether-element-attached-top .popover-arrow::after { - top: 1px; - margin-left: -10px; - content: ""; - border-top-width: 0; - border-bottom-color: #fff; -} - -.popover.popover-left, .popover.bs-tether-element-attached-right { - margin-left: -10px; -} - -.popover.popover-left .popover-arrow, .popover.bs-tether-element-attached-right .popover-arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: rgba(0, 0, 0, .25); -} - -.popover.popover-left .popover-arrow::after, .popover.bs-tether-element-attached-right .popover-arrow::after { - right: 1px; - bottom: -10px; - content: ""; - border-right-width: 0; - border-left-color: #fff; -} - -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 1rem; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; -} - -.popover-content { - padding: 9px 14px; -} - -.popover-arrow, .popover-arrow::after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.popover-arrow { - border-width: 11px; -} - -.popover-arrow::after { - content: ""; - border-width: 10px; -} - -.carousel { - position: relative; -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} - -.carousel-inner > .carousel-item { - position: relative; - display: none; - -webkit-transition: .6s ease-in-out left; - -o-transition: .6s ease-in-out left; - transition: .6s ease-in-out left; -} - -.carousel-inner > .carousel-item > img, -.carousel-inner > .carousel-item > a > img { - line-height: 1; -} - -@media all and (transform-3d), (-webkit-transform-3d) { - .carousel-inner > .carousel-item { - -webkit-transition: -webkit-transform .6s ease-in-out; - -o-transition: transform .6s ease-in-out, -o-transform .6s ease-in-out; - transition: -webkit-transform .6s ease-in-out; - transition: transform .6s ease-in-out; - transition: transform .6s ease-in-out, -webkit-transform .6s ease-in-out, -o-transform .6s ease-in-out; - - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000px; - perspective: 1000px; - } - .carousel-inner > .carousel-item.next, .carousel-inner > .carousel-item.active.right { - left: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } - .carousel-inner > .carousel-item.prev, .carousel-inner > .carousel-item.active.left { - left: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } - .carousel-inner > .carousel-item.next.left, .carousel-inner > .carousel-item.prev.right, .carousel-inner > .carousel-item.active { - left: 0; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} - -.carousel-inner > .active { - left: 0; -} - -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} - -.carousel-inner > .next { - left: 100%; -} - -.carousel-inner > .prev { - left: -100%; -} - -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} - -.carousel-inner > .active.left { - left: -100%; -} - -.carousel-inner > .active.right { - left: 100%; -} - -.carousel-control { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 15%; - font-size: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, .6); - opacity: .5; -} - -.carousel-control.left { - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); - background-repeat: repeat-x; -} - -.carousel-control.right { - right: 0; - left: auto; - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); - background-repeat: repeat-x; -} - -.carousel-control:focus, .carousel-control:hover { - color: #fff; - text-decoration: none; - outline: 0; - opacity: .9; -} - -.carousel-control .icon-prev, -.carousel-control .icon-next { - position: absolute; - top: 50%; - z-index: 5; - display: inline-block; - width: 20px; - height: 20px; - margin-top: -10px; - font-family: serif; - line-height: 1; -} - -.carousel-control .icon-prev { - left: 50%; - margin-left: -10px; -} - -.carousel-control .icon-next { - right: 50%; - margin-right: -10px; -} - -.carousel-control .icon-prev::before { - content: "\2039"; -} - -.carousel-control .icon-next::before { - content: "\203a"; -} - -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - padding-left: 0; - margin-left: -30%; - text-align: center; - list-style: none; -} - -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - cursor: pointer; - background-color: transparent; - border: 1px solid #fff; - border-radius: 10px; -} - -.carousel-indicators .active { - width: 12px; - height: 12px; - margin: 0; - background-color: #fff; -} - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, .6); -} - -.carousel-caption .btn { - text-shadow: none; -} - -@media (min-width: 544px) { - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -15px; - font-size: 30px; - } - .carousel-control .icon-prev { - margin-left: -15px; - } - .carousel-control .icon-next { - margin-right: -15px; - } - .carousel-caption { - right: 20%; - left: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} - -.clearfix::after { - display: table; - clear: both; - content: ""; -} - -.center-block { - display: block; - margin-right: auto; - margin-left: auto; -} - -.pull-xs-left { - float: left !important; -} - -.pull-xs-right { - float: right !important; -} - -.pull-xs-none { - float: none !important; -} - -@media (min-width: 544px) { - .pull-sm-left { - float: left !important; - } - .pull-sm-right { - float: right !important; - } - .pull-sm-none { - float: none !important; - } -} - -@media (min-width: 768px) { - .pull-md-left { - float: left !important; - } - .pull-md-right { - float: right !important; - } - .pull-md-none { - float: none !important; - } -} - -@media (min-width: 992px) { - .pull-lg-left { - float: left !important; - } - .pull-lg-right { - float: right !important; - } - .pull-lg-none { - float: none !important; - } -} - -@media (min-width: 1200px) { - .pull-xl-left { - float: left !important; - } - .pull-xl-right { - float: right !important; - } - .pull-xl-none { - float: none !important; - } -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} - -.sr-only-focusable:active, .sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} - -.invisible { - visibility: hidden !important; -} - -.text-hide { - font: "0/0" a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.text-justify { - text-align: justify !important; -} - -.text-nowrap { - white-space: nowrap !important; -} - -.text-truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.text-xs-left { - text-align: left !important; -} - -.text-xs-right { - text-align: right !important; -} - -.text-xs-center { - text-align: center !important; -} - -@media (min-width: 544px) { - .text-sm-left { - text-align: left !important; - } - .text-sm-right { - text-align: right !important; - } - .text-sm-center { - text-align: center !important; - } -} - -@media (min-width: 768px) { - .text-md-left { - text-align: left !important; - } - .text-md-right { - text-align: right !important; - } - .text-md-center { - text-align: center !important; - } -} - -@media (min-width: 992px) { - .text-lg-left { - text-align: left !important; - } - .text-lg-right { - text-align: right !important; - } - .text-lg-center { - text-align: center !important; - } -} - -@media (min-width: 1200px) { - .text-xl-left { - text-align: left !important; - } - .text-xl-right { - text-align: right !important; - } - .text-xl-center { - text-align: center !important; - } -} - -.text-lowercase { - text-transform: lowercase !important; -} - -.text-uppercase { - text-transform: uppercase !important; -} - -.text-capitalize { - text-transform: capitalize !important; -} - -.font-weight-normal { - font-weight: normal; -} - -.font-weight-bold { - font-weight: bold; -} - -.font-italic { - font-style: italic; -} - -.text-muted { - color: #b1b7bd; -} - -.text-primary { - color: #000 !important; -} - -a.text-primary:focus, a.text-primary:hover { - color: black; -} - -.text-success { - color: #64de79 !important; -} - -a.text-success:focus, a.text-success:hover { - color: #3ad555; -} - -.text-info { - color: #0500f0 !important; -} - -a.text-info:focus, a.text-info:hover { - color: #0400bd; -} - -.text-warning { - color: #a100fe !important; -} - -a.text-warning:focus, a.text-warning:hover { - color: #8100cb; -} - -.text-danger { - color: #ff0808 !important; -} - -a.text-danger:focus, a.text-danger:hover { - color: #d40000; -} - -.bg-inverse { - color: #eceeef; - background-color: #373a3c; -} - -.bg-faded { - background-color: #f7f7f9; -} - -.bg-primary { - color: #fff !important; - background-color: #000 !important; -} - -a.bg-primary:focus, a.bg-primary:hover { - background-color: black; -} - -.bg-success { - color: #fff !important; - background-color: #64de79 !important; -} - -a.bg-success:focus, a.bg-success:hover { - background-color: #3ad555; -} - -.bg-info { - color: #fff !important; - background-color: #0500f0 !important; -} - -a.bg-info:focus, a.bg-info:hover { - background-color: #0400bd; -} - -.bg-warning { - color: #fff !important; - background-color: #a100fe !important; -} - -a.bg-warning:focus, a.bg-warning:hover { - background-color: #8100cb; -} - -.bg-danger { - color: #fff !important; - background-color: #ff0808 !important; -} - -a.bg-danger:focus, a.bg-danger:hover { - background-color: #d40000; -} - -.m-x-auto { - margin-right: auto !important; - margin-left: auto !important; -} - -.m-a-0 { - margin: 0 0 !important; -} - -.m-t-0 { - margin-top: 0 !important; -} - -.m-r-0 { - margin-right: 0 !important; -} - -.m-b-0 { - margin-bottom: 0 !important; -} - -.m-l-0 { - margin-left: 0 !important; -} - -.m-x-0 { - margin-right: 0 !important; - margin-left: 0 !important; -} - -.m-y-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; -} - -.m-a-1 { - margin: 1rem 1rem !important; -} - -.m-t-1 { - margin-top: 1rem !important; -} - -.m-r-1 { - margin-right: 1rem !important; -} - -.m-b-1 { - margin-bottom: 1rem !important; -} - -.m-l-1 { - margin-left: 1rem !important; -} - -.m-x-1 { - margin-right: 1rem !important; - margin-left: 1rem !important; -} - -.m-y-1 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; -} - -.m-a-2 { - margin: 1.5rem 1.5rem !important; -} - -.m-t-2 { - margin-top: 1.5rem !important; -} - -.m-r-2 { - margin-right: 1.5rem !important; -} - -.m-b-2 { - margin-bottom: 1.5rem !important; -} - -.m-l-2 { - margin-left: 1.5rem !important; -} - -.m-x-2 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; -} - -.m-y-2 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; -} - -.m-a-3 { - margin: 3rem 3rem !important; -} - -.m-t-3 { - margin-top: 3rem !important; -} - -.m-r-3 { - margin-right: 3rem !important; -} - -.m-b-3 { - margin-bottom: 3rem !important; -} - -.m-l-3 { - margin-left: 3rem !important; -} - -.m-x-3 { - margin-right: 3rem !important; - margin-left: 3rem !important; -} - -.m-y-3 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; -} - -.p-a-0 { - padding: 0 0 !important; -} - -.p-t-0 { - padding-top: 0 !important; -} - -.p-r-0 { - padding-right: 0 !important; -} - -.p-b-0 { - padding-bottom: 0 !important; -} - -.p-l-0 { - padding-left: 0 !important; -} - -.p-x-0 { - padding-right: 0 !important; - padding-left: 0 !important; -} - -.p-y-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; -} - -.p-a-1 { - padding: 1rem 1rem !important; -} - -.p-t-1 { - padding-top: 1rem !important; -} - -.p-r-1 { - padding-right: 1rem !important; -} - -.p-b-1 { - padding-bottom: 1rem !important; -} - -.p-l-1 { - padding-left: 1rem !important; -} - -.p-x-1 { - padding-right: 1rem !important; - padding-left: 1rem !important; -} - -.p-y-1 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; -} - -.p-a-2 { - padding: 1.5rem 1.5rem !important; -} - -.p-t-2 { - padding-top: 1.5rem !important; -} - -.p-r-2 { - padding-right: 1.5rem !important; -} - -.p-b-2 { - padding-bottom: 1.5rem !important; -} - -.p-l-2 { - padding-left: 1.5rem !important; -} - -.p-x-2 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; -} - -.p-y-2 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; -} - -.p-a-3 { - padding: 3rem 3rem !important; -} - -.p-t-3 { - padding-top: 3rem !important; -} - -.p-r-3 { - padding-right: 3rem !important; -} - -.p-b-3 { - padding-bottom: 3rem !important; -} - -.p-l-3 { - padding-left: 3rem !important; -} - -.p-x-3 { - padding-right: 3rem !important; - padding-left: 3rem !important; -} - -.p-y-3 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; -} - -.pos-f-t { - position: fixed; - top: 0; - right: 0; - left: 0; - z-index: 1030; -} - -.hidden-xs-up { - display: none !important; -} - -@media (max-width: 543px) { - .hidden-xs-down { - display: none !important; - } -} - -@media (min-width: 544px) { - .hidden-sm-up { - display: none !important; - } -} - -@media (max-width: 767px) { - .hidden-sm-down { - display: none !important; - } -} - -@media (min-width: 768px) { - .hidden-md-up { - display: none !important; - } -} - -@media (max-width: 991px) { - .hidden-md-down { - display: none !important; - } -} - -@media (min-width: 992px) { - .hidden-lg-up { - display: none !important; - } -} - -@media (max-width: 1199px) { - .hidden-lg-down { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-xl-up { - display: none !important; - } -} - -.hidden-xl-down { - display: none !important; -} - -.visible-print-block { - display: none !important; -} - -@media print { - .visible-print-block { - display: block !important; - } -} - -.visible-print-inline { - display: none !important; -} - -@media print { - .visible-print-inline { - display: inline !important; - } -} - -.visible-print-inline-block { - display: none !important; -} - -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} - -@media print { - .hidden-print { - display: none !important; - } -} - -a { - cursor: pointer; -} - -ul { - padding: 0 1rem; -} - -b, strong { - font-weight: 500; -} - -hr { - width: 66.666667%; - height: 1px; - margin-left: 0; - background-color: #000; - border-top: none; -} - -button:focus { - outline: none; -} - -h1, -h2, -h3 { - padding-top: 2rem; -} - -h4, -h5, -h6 { - padding-top: 1rem; -} - -h3, h4 { - line-height: 3rem; -} - -h5, h6 { - line-height: 2rem; -} - -h1 code, -h2 code, -h3 code, -h4 code, -h5 code, -h6 code { - font-weight: 400; -} - -.even, -h1:first-of-type { - padding-top: 0; - padding-bottom: 3rem; - margin-bottom: 0; -} - -h1.first, -h2.first, -h3.first { - padding-top: 0; - padding-bottom: 2rem; -} - -h1.child, -h2.child, -h3.child { - padding-bottom: 0; -} - -blockquote { - padding-left: 1rem; - font-style: italic; - color: #55595c; - border-left: 3px solid #b1b7bd; -} - -.gray { - color: #55595c; -} - -.gray-light { - color: #b1b7bd; -} - -.gray-lighter { - color: #eceeef; -} - -@media (max-width: 767px) { - h1 { - font-size: 2rem; - line-height: 3rem; - } - h2 { - font-size: 1.6rem; - } -} - -code, -pre { - background-color: #f7f7f7; -} - -pre { - padding: .6rem; -} - -p code { - padding: .2rem .1rem; -} - -pre code { - padding-left: 0; - margin-left: 0; - background-color: transparent; -} - -input, -textarea { - border: 0; - border-bottom: .2rem solid #b1b7bd; - outline: none; -} - -input:focus, -textarea:focus { - border-color: #000; -} - -.container.top { - padding-top: 3rem; -} - -.lead { - margin-bottom: 3rem; -} - -@media (max-width: 767px) { - .container { - padding-top: 0; - } - .lead { - margin-bottom: 1rem; - } -} - -.close { - font-size: 1rem; - font-weight: 300; - text-shadow: none; - opacity: 1; -} - -.btn { - font-weight: 500; - text-transform: uppercase; - letter-spacing: .06rem; - background-color: #fff; - border-width: 3px; -} - -.btn-primary { - color: #000; -} - -.red { - color: #ff0808; -} - -.green { - color: #64de79; -} - -.yellow { - color: #fff900; -} - -.blue { - color: #0500f0; -} - -.inverse, -.inverse:focus, -.inverse:hover { - color: #fff; -} - -.inverse.red { - background-color: #ff0808; -} - -.inverse.green { - background-color: #64de79; -} - -.inverse.yellow { - background-color: #fff900; -} - -.inverse.blue { - background-color: #0500f0; -} - -.block { - display: inline-block; - padding: .6rem; - font-weight: 500; -} - -.block:first-of-type { - padding-top: .6rem; -} - -.i-b { - display: inline-block; -} - -.action { - margin-top: 1rem; - font-weight: 500; - letter-spacing: 1px; -} - -.action > label { - margin-right: .9375rem; - line-height: 1rem; -} - -.action.create > label { - width: 16px; - height: 16px; - vertical-align: middle; - background-color: transparent; - border: 3px solid #000; - border-radius: 50%; -} - -.action.add > label:before { - font-size: 1.3rem; - font-weight: 500; - content: "+"; -} - -.mono { - font-family: 'scp'; -} - -h1.sign { - line-height: 2; - color: #a100fe; -} - -h2.advice { - font-size: 2rem; - line-height: 3rem; - color: #b1b7bd; -} - -p.ship { - white-space: nowrap; -} - -input#ship { - width: 66.7%; -} - -.sig, -#ship, -#pass { - font-size: 2rem; -} - -.sig { - margin-right: .3rem; -} - -#pass { - width: 100%; -} - -button#act { - font-size: 1.6rem; - font-weight: 500; - color: #fff; - text-decoration: underline; - background-color: #000; - border: 0; -} - -.lead .logo { - display: inline-block; - width: 3rem; - height: 3rem; - margin-right: 1rem; - text-align: center; - border-radius: 50%; -} - -@media (max-width: 991px) { - .lead .logo { - width: 3rem; - height: 3rem; - margin-right: 1rem; - font-size: 3.3rem; - line-height: 3.3rem; - border-radius: 3rem; - } -} - -@media (max-width: 767px) { - .lead .logo { - display: block; - margin-bottom: 1rem; - } -} -/*# sourceMappingURL=bootstrap.css.map */ diff --git a/pkg/arvo/web/lib/css/codemirror.css b/pkg/arvo/web/lib/css/codemirror.css deleted file mode 100644 index 942fbf64c..000000000 --- a/pkg/arvo/web/lib/css/codemirror.css +++ /dev/null @@ -1,5 +0,0 @@ -.CodeMirror { - height: 100% -} -.cm-s-default .cm-atom {color: #70f} -.cm-s-default .cm-operator {color: #097} diff --git a/pkg/arvo/web/lib/css/collections.css b/pkg/arvo/web/lib/css/collections.css deleted file mode 100644 index 9955811c2..000000000 --- a/pkg/arvo/web/lib/css/collections.css +++ /dev/null @@ -1,14 +0,0 @@ -input.red { - background: hsl(0, 100%, 60%); -} - -form.inline { - display: inline; -} - -.edit-toggle:checked ~ .edit-off { - display: none; -} -.edit-toggle:not(:checked) ~ .edit-on { - display: none; -} diff --git a/pkg/arvo/web/lib/css/fonts.css b/pkg/arvo/web/lib/css/fonts.css deleted file mode 100644 index d536ad9bf..000000000 --- a/pkg/arvo/web/lib/css/fonts.css +++ /dev/null @@ -1,84 +0,0 @@ -@font-face { - font-family: "bau"; - src: url("//media.urbit.org/fonts/bau.woff"); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: "bau"; - src: url("//media.urbit.org/fonts/bau-italic.woff"); - font-weight: 400; - font-style: italic; -} -@font-face { - font-family: "bau"; - src: url("//media.urbit.org/fonts/bau-medium.woff"); - font-weight: 500; - font-style: normal; -} -@font-face { - font-family: "bau"; - src: url("//media.urbit.org/fonts/bau-mediumitalic.woff"); - font-weight: 500; - font-style: italic; -} -@font-face { - font-family: "bau"; - src: url("//media.urbit.org/fonts/bau-bold.woff"); - font-weight: 600; - font-style: normal; -} -@font-face { - font-family: "bau"; - src: url("//media.urbit.org/fonts/bau-bolditalic.woff"); - font-weight: 600; - font-style: italic; -} -@font-face { - font-family: "bau"; - src: url("//media.urbit.org/fonts/bau-super.woff"); - font-weight: 600; - font-style: normal; -} -@font-face { - font-family: "bau"; - src: url("//media.urbit.org/fonts/bau-superitalic.woff"); - font-weight: 600; - font-style: italic; -} -@font-face { - font-family: "scp"; - src: url("//media.urbit.org/fonts/scp-extralight.woff"); - font-weight: 200; - font-style: normal; -} -@font-face { - font-family: "scp"; - src: url("//media.urbit.org/fonts/scp-light.woff"); - font-weight: 300; - font-style: normal; -} -@font-face { - font-family: "scp"; - src: url("//media.urbit.org/fonts/scp-regular.woff"); - font-weight: 400; - font-style: normal; -} -@font-face { - font-family: "scp"; - src: url("//media.urbit.org/fonts/scp-medium.woff"); - font-weight: 500; - font-style: normal; -} -@font-face { - font-family: "scp"; - src: url("//media.urbit.org/fonts/scp-bold.woff"); - font-weight: 600; - font-style: normal; -} -@font-face { - font-family: "scp"; - src: url("//media.urbit.org/fonts/scp-black.woff"); - font-weight: 700; - font-style: normal; -} diff --git a/pkg/arvo/web/lib/js/easy-form.js b/pkg/arvo/web/lib/js/easy-form.js deleted file mode 100644 index 4bf367065..000000000 --- a/pkg/arvo/web/lib/js/easy-form.js +++ /dev/null @@ -1,47 +0,0 @@ -//REVIEW this feels too complicated -let match_url_end = (pattern,out={})=> { - if(!pattern) return out - let here = document.location.pathname.split("/").reverse() - while(!here[0]) here.shift() - for(let segment of pattern.split("/").reverse()){ - let val = here.shift() - if(segment[0] != ":") continue //REVIEW check for match? - out[segment.slice(1)] = val - } - return out -} -// -window.easy_form = { - submit: (form)=> { - const param = (key)=> { - var x = form.elements[`easy_form:${key}`] - return x && x.value - } - let mark = param("mark") - if(!mark) throw new TypeError("Need a mark") - let appl = param("appl") || mark.match(/^[^-]*/)[0] - let tag = param("tag") - // - if(param("confirm") != null && !confirm("Are you sure?")) - return false - // - let req = {} - req = match_url_end(param("url_end"),req) - // - for (let [k,v] of new FormData(form)){ - if(!/^easy_form:/.test(k)) { - req[k] = v - } - } - if(tag) req = {[tag]:req} - - fetch("/~/auth.json", {credentials: "same-origin"}) - .then((res)=>res.json()) - .then(({oryx})=> fetch(`/~/to/${appl}/${mark}`,{ - method: "POST", - body:JSON.stringify({oryx,wire:"/",xyro:req}), - credentials: "same-origin" - })) - return false - } -} diff --git a/pkg/arvo/web/lib/js/hoon.js b/pkg/arvo/web/lib/js/hoon.js deleted file mode 100644 index 8383cd4b2..000000000 --- a/pkg/arvo/web/lib/js/hoon.js +++ /dev/null @@ -1,164 +0,0 @@ -CodeMirror.defineMode("hoon", function() { - glyph = /[+\-|$%:.#^~;=?!_,&\/<>%*]/ - term = /^[$&|]|^[a-z]([a-z0-9\-]*[a-z0-9])?/ - num = /~[a-z0-9._~-]+|-?-?^[0-9]([0-9.]*|[xwbv]?[0-9a-zA-Z.-~]*)/ - res = {} - res.startState = function(){return {soblock: false, doqblock:false, sail:false, space:true}} - var propOrVar = function(c){ - if(c == '.') - return 'property' - return 'variable' - } - res.token = function(stream, state){ - if(state.soqblock && stream.sol()){ - if(stream.match(/\s*'''/)){ - state.soqblock = false - } - else { - stream.skipToEnd() - } - return "string" - } - if(state.doqblock){ - if(stream.match(/\s*"""/)){ - state.doqblock = false - } - else { - stream.skipToEnd() - } - return "string" - } - - if(stream.sol()) - state.space = true - - if(state.sail){ - if(stream.peek().match(/[^#./() ]/)||stream.eol()){ - state.sail = false - if(stream.match(/:? /)){ - stream.skipToEnd() - return 'string' - } - if(stream.match(term)) - state.sail = true - return; - if(stream.match(':')) - state.sail = true - return 'operator' - } - } - if(stream.match("'")){ - if(stream.match("''")){ - state.soqblock = true - return 'string' - } - while(stream.match(/^[^'\\]/) || stream.match(/\\./)); - stream.eat("'") - return 'string' - } - if(stream.match('"')){ - if(stream.match('""')){ - state.doqblock = true - stream.skipToEnd() - return 'string' - } - while(stream.match(/^[^"\\]/) || stream.match(/\\./)); - stream.eat('"') - return 'string' - } - if(stream.match(' ;')){ - if(stream.eat(' ')){ - stream.skipToEnd() - return 'string' - } - if(!stream.match(glyph)){ - state.sail = true - } - return 'builtin' - } - - if(stream.match('::')){ - stream.skipToEnd() - return 'comment' - } - - if(stream.match('++ ') || stream.match('+- ')){ - stream.match(term) - return 'header' - } - if(state.space && stream.match('--')){ - if(stream.eat(glyph) || stream.eat(/[a-z0-9]/)) - stream.backUp(3) - else return 'header' - } - - if(stream.match(/^@[a-z]*[A-Z]?/)) - return 'atom' - if(stream.match(num)) - return 'number' - - if(stream.eat(/[%$]/)) - if(stream.match(term) || stream.match(num) || stream.match('~')) - return 'tag' - else stream.backUp(1) - if(state.space && stream.match('==')){ - return 'tag' - } - - if(stream.eat('~')){ - if(/[()]/.exec(stream.peek())) - return 'builtin' - return 'tag' - } - - if(stream.eat(/[+\-]/)){ - while(stream.eat(/[<>]/) && stream.eat(/[+\-]/)); - return propOrVar(stream.peek()) - } - - if(stream.eat('`')){ - state.space = false - return 'operator' - } - if(stream.sol() && stream.eatWhile(glyph)){ - state.space = false - return 'builtin' - } - if(stream.eat(glyph)){ - state.space = false - stream.backUp(2) - if(stream.eat(/[ ([{]/) || (stream.peek().match(/[^+\-<>]/) - && stream.eat(glyph))){ // expression start - stream.eatWhile(glyph) - return 'builtin' - } - stream.next() - if(state.space && stream.eat('=')){ - if(/[()]/.exec(stream.peek())) - return 'builtin' - return 'operator' - } - if(stream.eat(/[=:.^/]/)) - return 'operator' - stream.next() - return 'builtin' - } - - if(stream.match(term)){ - if(state.space && stream.match('+')) - return 'tag' - state.space = false - return propOrVar(stream.peek()) - } - if(stream.eat(/[ \[({]/)){ - state.space = true - return - } - stream.next() - } - res.lineComment = '::' - res.fold = "indent" - return res -}); - -CodeMirror.defineMIME("text/x-hoon", "hoon"); diff --git a/pkg/arvo/web/lib/js/sole.js b/pkg/arvo/web/lib/js/sole.js deleted file mode 100644 index 59286a96a..000000000 --- a/pkg/arvo/web/lib/js/sole.js +++ /dev/null @@ -1,787 +0,0 @@ -(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0) { - return this.setState({ - cursor: mapr.cursor - 1 - }); - } - break; - case 'right': - if (mapr.cursor < mapr.input.length) { - return this.setState({ - cursor: mapr.cursor + 1 - }); - } - break; - case 'baxp': - if (mapr.cursor > 0) { - return this.doEdit({ - del: mapr.cursor - 1 - }); - } - } - break; - case 'ctrl': - switch (key.str || key.act) { - case 'a': - case 'left': - return this.setState({ - cursor: 0 - }); - case 'e': - case 'right': - return this.setState({ - cursor: mapr.input.length - }); - case 'l': - return this.setState({ - rows: [] - }); - case 'entr': - return this.bell(); - case 'w': - return this.eatKyev(['alt'], { - act: 'baxp' - }); - case 'p': - return this.eatKyev([], { - act: 'up' - }); - case 'n': - return this.eatKyev([], { - act: 'down' - }); - case 'b': - return this.eatKyev([], { - act: 'left' - }); - case 'f': - return this.eatKyev([], { - act: 'right' - }); - case 'g': - return this.bell(); - case 'x': - return this.cycle(); - case 'v': - appl = mapr.appl !== '' ? '' : this.state.appl; - this.setState({ - appl: appl, - cursor: 0, - input: buffer[appl].buf - }); - return this.sysStatus(); - case 't': - if (mapr.cursor === 0 || mapr.input.length < 2) { - return this.bell(); - } - cursor = mapr.cursor; - if (cursor < mapr.input.length) { - cursor++; - } - this.doEdit([ - { - del: cursor - 1 - }, { - ins: { - at: cursor - 2, - cha: mapr.input[cursor - 1] - } - } - ]); - return this.setState({ - cursor: cursor - }); - case 'u': - this.yank = mapr.input.slice(0, mapr.cursor); - return this.doEdit((function() { - var i, ref4, results; - results = []; - for (n = i = 1, ref4 = mapr.cursor; 1 <= ref4 ? i <= ref4 : i >= ref4; n = 1 <= ref4 ? ++i : --i) { - results.push({ - del: mapr.cursor - n - }); - } - return results; - })()); - case 'k': - this.yank = mapr.input.slice(mapr.cursor); - return this.doEdit((function() { - var i, ref4, ref5, results; - results = []; - for (_ = i = ref4 = mapr.cursor, ref5 = mapr.input.length; ref4 <= ref5 ? i < ref5 : i > ref5; _ = ref4 <= ref5 ? ++i : --i) { - results.push({ - del: mapr.cursor - }); - } - return results; - })()); - case 'y': - return this.doEdit((function() { - var i, len, ref4, ref5, results; - ref5 = (ref4 = this.yank) != null ? ref4 : ''; - results = []; - for (n = i = 0, len = ref5.length; i < len; n = ++i) { - cha = ref5[n]; - results.push({ - ins: { - cha: cha, - at: mapr.cursor + n - } - }); - } - return results; - }).call(this)); - default: - return console.log(mod, str(key)); - } - break; - case 'alt': - switch (key.str || key.act) { - case 'f': - case 'right': - rest = mapr.input.slice(mapr.cursor); - rest = rest.match(/\W*\w*/)[0]; - return this.setState({ - cursor: mapr.cursor + rest.length - }); - case 'b': - case 'left': - prev = mapr.input.slice(0, mapr.cursor); - prev = prev.split('').reverse().join(''); - prev = prev.match(/\W*\w*/)[0]; - return this.setState({ - cursor: mapr.cursor - prev.length - }); - case 'baxp': - prev = mapr.input.slice(0, mapr.cursor); - prev = prev.split('').reverse().join(''); - prev = prev.match(/\W*\w*/)[0]; - this.yank = prev; - return this.doEdit((function() { - var i, len, results; - results = []; - for (n = i = 0, len = prev.length; i < len; n = ++i) { - _ = prev[n]; - results.push({ - del: mapr.cursor - 1 - n - }); - } - return results; - })()); - } - break; - default: - return console.log(mod, str(key)); - } - }, - mousetrapStop: function() { - return Mousetrap.handleKey = this._defaultHandleKey; - }, - mousetrapInit: function() { - this._defaultHandleKey = Mousetrap.handleKey; - return Mousetrap.handleKey = (function(_this) { - return function(char, mod, e) { - var chac, key, norm, ref2; - norm = { - capslock: 'caps', - pageup: 'pgup', - pagedown: 'pgdn', - backspace: 'baxp', - enter: 'entr' - }; - key = (function() { - var ref2; - switch (false) { - case char.length !== 1: - if (e.type === 'keypress') { - chac = char.charCodeAt(0); - if (chac < 32) { - char = String.fromCharCode(chac | 96); - } - return { - str: char - }; - } - break; - case e.type !== 'keydown': - if (char !== 'space') { - return { - act: (ref2 = norm[char]) != null ? ref2 : char - }; - } - break; - case !(e.type === 'keyup' && norm[key] === 'caps'): - return { - act: 'uncap' - }; - } - })(); - if (!key) { - return; - } - if (key.act && (ref2 = key.act, indexOf.call(mod, ref2) >= 0)) { - return; - } - e.preventDefault(); - return _this.eatKyev(mod, key); - }; - })(this); - } -})); - - -},{"./share.coffee":2}],2:[function(require,module,exports){ -var clog, str; - -str = JSON.stringify; - -clog = function(a) { - return console.log(a); -}; - -module.exports = (function() { - function exports(buf, ven, leg) { - this.buf = buf != null ? buf : ""; - this.ven = ven != null ? ven : [0, 0]; - this.leg = leg != null ? leg : []; - } - - exports.prototype.abet = function() { - return { - buf: this.buf, - leg: this.leg.slice(), - ven: this.ven.slice() - }; - }; - - exports.prototype.apply = function(ted) { - var at, cha, ref; - switch (false) { - case 'nop' !== ted: - break; - case !ted.map: - return ted.map(this.apply, this); - default: - switch (Object.keys(ted)[0]) { - case 'set': - return this.buf = ted.set; - case 'del': - return this.buf = this.buf.slice(0, ted.del) + this.buf.slice(ted.del + 1); - case 'ins': - ref = ted.ins, at = ref.at, cha = ref.cha; - return this.buf = this.buf.slice(0, at) + cha + this.buf.slice(at); - default: - throw "%sole-edit -lost." + (str(ted)); - } - } - }; - - exports.prototype.transmute = function(sin, dex) { - var at, cha, ref; - switch (false) { - case !(sin === 'nop' || dex === 'nop'): - return dex; - case !sin.reduce: - return sin.reduce(((function(_this) { - return function(dex, syn) { - return _this.transmute(syn, dex); - }; - })(this)), dex); - case !dex.map: - return dex.map((function(_this) { - return function(dax) { - return _this.transmute(sin, dax); - }; - })(this)); - case dex.set === void 0: - return dex; - default: - switch (Object.keys(sin)[0]) { - case 'set': - return 'nop'; - case 'del': - if (sin.del === dex.del) { - return 'nop'; - } - dex = $.extend(true, {}, dex); - switch (Object.keys(dex)[0]) { - case 'del': - if (sin.del < dex.del) { - dex.del--; - } - break; - case 'ins': - if (sin.del < dex.ins.at) { - dex.ins.at--; - } - } - return dex; - case 'ins': - dex = $.extend(true, {}, dex); - ref = sin.ins, at = ref.at, cha = ref.cha; - switch (Object.keys(dex)[0]) { - case 'del': - if (at < dex.del) { - dex.del++; - } - break; - case 'ins': - if (at < dex.ins.at || (at === dex.ins.at && !(cha <= dex.ins.cha))) { - dex.ins.at++; - } - } - return dex; - default: - throw "%sole-edit -lost." + (str(sin)); - } - } - }; - - exports.prototype.commit = function(ted) { - this.ven[0]++; - this.leg.push(ted); - return this.apply(ted); - }; - - exports.prototype.inverse = function(ted) { - switch (false) { - case 'nop' !== ted: - return ted; - case !ted.map: - return ted.map((function(_this) { - return function(tad) { - var res; - res = _this.inverse(tad); - _this.apply(tad); - return res; - }; - })(this)).reverse(); - default: - switch (Object.keys(ted)[0]) { - case 'set': - return { - set: this.buf - }; - case 'ins': - return { - del: ted.ins - }; - case 'del': - return { - ins: { - at: ted.del, - cha: this.buf[ted.del] - } - }; - default: - throw "%sole-edit -lost." + (str(ted)); - } - } - }; - - exports.prototype.receive = function(arg) { - var dat, ler, ted; - ler = arg.ler, ted = arg.ted; - if (!(ler[1] === this.ven[1])) { - throw "-out-of-sync.[" + (str(ler)) + " " + (str(this.ven)) + "]"; - } - this.leg = this.leg.slice(this.leg.length + ler[0] - this.ven[0]); - dat = this.transmute(this.leg, ted); - this.ven[1]++; - this.apply(dat); - return dat; - }; - - exports.prototype.remit = function() { - throw 'stub'; - }; - - exports.prototype.transmit = function(ted) { - var act; - act = { - ted: ted, - ler: [this.ven[1], this.ven[0]] - }; - this.commit(ted); - return act; - }; - - exports.prototype.transceive = function(arg) { - var dat, ler, old, ted; - ler = arg.ler, ted = arg.ted; - old = new Share(this.buf); - dat = this.receive({ - ler: ler, - ted: ted - }); - return old.inverse(dat); - }; - - exports.prototype.transpose = function(ted, pos) { - var ref; - if (pos === void 0) { - return this.transpose(this.leg, ted); - } else { - return ((ref = (this.transmute(ted, { - ins: { - at: pos - } - })).ins) != null ? ref : { - at: 0 - }).at; - } - }; - - return exports; - -})(); - - -},{}]},{},[1]); diff --git a/pkg/arvo/web/lib/js/urb.js b/pkg/arvo/web/lib/js/urb.js deleted file mode 100644 index 9631e0996..000000000 --- a/pkg/arvo/web/lib/js/urb.js +++ /dev/null @@ -1,328 +0,0 @@ -window.urb = window.urb || {} -window.urb.appl = window.urb.appl || null - -window.urb.init = function(onload){ // XX proper class? - onload = onload || function(){} - var $init = this.init - if($init.loaded) return onload() - if($init.loading) return $init.loading.push(onload) - $init.loading = [onload] - var s = document.createElement('script') - s.src = "/~/at/~/auth.js" // XX nop.js? auth.json? - s.onload = function(){ - $init.loading.map(function(f){f()}) - delete $init.loading - $init.loaded = true - } - document.body.appendChild(s) -} -window.urb.init.loaded = window.urb.oryx - -window.urb.req = function(method,url,params,json,cb) { - var xhr = new XMLHttpRequest() - method = method.toUpperCase() - if(method == "PUT" || method == "DELETE") - xhr.open("POST", url+"?"+method) - else xhr.open(method, url) - - if(json) - xhr.setRequestHeader("content-type", "text/json") - - xhr.timeout = 60000 - - if(!window.urb.oryx) throw "No CSRF token" // XX fetch auth.json - _data = {oryx: window.urb.oryx} - if(params.xyro) { _data.xyro = params.xyro; } - if(params.ship) { _data.ship = params.ship; } - if(params.path) { _data.path = params.path; } - if(params.appl) { _data.appl = params.appl; } - if(params.mark) { _data.mark = params.mark; } - if(params.wire) { _data.wire = params.wire; } - if(cb) { - xhr.onload = function() { - var err,res - try { - err = null - res = { - status:this.status, - data: JSON.parse(this.responseText) - } - if(res.data.reload) - res.reload = res.data.reload - } catch(e) { - // if(urb.wall !== false) document.write(this.responseText) // XX - err = { - message:"Failed to parse JSON", - raw:this.responseText - } - res = null - } - finally { - cb(err,res) - } - } - xhr.ontimeout = function() { - cb({ - status:408, - data:null - }) - } - xhr.onerror = function() { - cb({ - status:this.status, - data:this.responseText - }) - } - } - xhr.send(JSON.stringify(_data)) -} - -// window.urb.getJSON = function(url,cb){ window.urb.reqJSON("GET",url, null, cb)} -// window.urb.reqJSON = function(method, url, data, cb){ -// var xhr = new XMLHttpRequest() -// xhr.open(method, url) -// xhr.onload = function(){ -// urb.fetchTag.call(xhr) -// if(cb) cb(JSON.parse(xhr.responseText)) -// } -// xhr.send(data === null ? null : JSON.stringify(data)) -// } - -window.urb.reqq = [] -window.urb.qreq = function(method,url,params,json,cb) { - walk = function() { - qobj = {} - qobj.oargs = window.urb.reqq[0] - qobj.nargs = [].slice.call(qobj.oargs,0,4) - qobj.nargs.push(function(){ - if(this.oargs[4]) - this.oargs[4].apply(window.urb,arguments) - window.urb.reqq.shift() - if(window.urb.reqq.length > 0) - walk() - }.bind(qobj)) - window.urb.req.apply(this,qobj.nargs) - } - l = window.urb.reqq.length - window.urb.reqq.push(arguments); - if(l == 0) { walk() } -} - -window.urb.send = function(data,params,cb) { // or send(data, cb) - if(!params || typeof params === "function") - {cb = params; params = {}} - - var url, $send - $send = this.send - - params.data = data - params.ship = params.ship || this.ship - params.appl = params.appl || this.appl - params.mark = params.mark || $send.mark - // params.seqn = params.seqn || $send.seqn - params.wire = params.wire || "/" - params.xyro = (typeof(params.data) === 'undefined') ? null : params.data - - - if(!params.mark) throw new Error("You must specify a mark for urb.send.") - if(!params.appl) throw new Error("You must specify an appl for urb.send.") - - url = ["to",params.appl,params.mark] - url = "/~/"+url.join("/") - - // $send.seqn++ - - this.qreq('post',url,params,true,function(err,data) { - /* if(err) { $send.seqn--; } - else */ if(data && data.data.fail && urb.wall !== false && params.wall !== false) { - document.location = "#ERROR" - document.write("
"+JSON.stringify(params.xyro)+"\n"
-                            +data.data.mess+"
") // XX - } - if(cb) { cb.apply(this,arguments); } - }) -} -// window.urb.send.seqn = 0 -window.urb.send.mark = "json" - - -window.urb.gsig = function(params) { - var path = params.path - if(!path) path = "" - if(path[0] !== "/") path = "/"+path - return "~"+params.ship+"/"+ - params.appl+ - path.replace(/[^\x00-\x7F]/g, "") -} - -window.urb.puls = false -window.urb.cabs = {} -window.urb.poll = function(params) { - if(!params) throw new Error("You must supply params to urb.poll.") - - var url, $this - - seqn = this.poll.seqn - if(params.seqn) seqn = params.seqn() - - url = "/~/of/"+this.ixor+"?poll="+seqn - - this.puls = true - - $this = this - this.req("get",url,params,true,function(err,res) { - $this.poll.dely = params.dely || $this.poll.dely - if(res){ - if(res.data.beat) { - $this.poll.dely = params.dely || 250 - return $this.poll(params) - } - switch(res.data.type){ - case "news": - return document.location.reload() // XX check autoreload - case "rush": - case "mean": - var err2 = err - if(res.data.type == "mean") - err2 = res.data.data - var fn = $this.gsig(res.data.from) - if($this.cabs[fn]) - $this.cabs[fn].call(this,err2, - {status: res.status, data: res.data.data.json}) // XX non-json - break; - case "quit": - // XX necessary behaviour? - break; - default: - throw new Error("Lost event %"+res.data.type) - } - if(params.incs) - params.incs() - else - $this.poll.seqn++ - $this.poll.dely = 250 - return $this.poll(params) - } - - else if(err){ - setTimeout(function() { - $this.poll(params) - }, $this.poll.dely) - $this.poll.dely += Math.ceil($this.poll.dely*.2) - } - else throw "Neither error nor result on poll" - }) -} -window.urb.poll.seqn = 1 -window.urb.poll.dely = 250 - -window.urb.bind = function(path, params, cb, nicecb){ // or bind(path, cb) - if(!params || typeof params === "function") - {cb = params; params = {}} - - params.path = path - if(params.path[0] !== "/") params.path = "/"+params.path - params.ship = params.ship || this.ship - params.appl = params.appl || this.appl - params.mark = params.mark || this.bind.mark - params.wire = params.wire || params.path - - if(typeof path != "string") - throw new Error("You must specify a string path for urb.bind.") - if(!params.appl) throw new Error("You must specify an appl for urb.bind.") - if(!cb) throw new Error("You must supply a callback to urb.bind.") - - var method, perm, url, $this - - if(params.mark !== "json") - throw new Error("Non-json subscriptions unimplemented.") // XX - url = "/~/is/"+this.gsig(params)+"."+params.mark - - params.path = params.wire - this.cabs[this.gsig(params)] = cb - - $this = this - this.qreq("put",url,params,true,function(err,res) { - if(nicecb) { nicecb.apply(this,[err,{status: res.status, data: res.data}])} - // XX give raw data - // - if(!err && !$this.puls) $this.poll(params) - }) -} -urb.bind.mark = "json" - -window.urb.drop = function(path, params, cb){ // or drop(path,cb) - if(typeof params === "function") - {cb = params; params = {}} - - params.path = path - if(params.path[0] !== "/") params.path = "/"+params.path - params.ship = params.ship || this.ship - params.appl = params.appl || this.appl - params.wire = params.wire || params.path - - if(typeof path != "string") - throw new Error("You must specify a string path for urb.drop.") - if(!params.appl) throw new Error("You must specify an appl for urb.drop.") - - url = "/~/is/"+this.gsig(params)+".json" - method = "delete" - this.req("delete",url,params,true,function(err,res) { - if(cb) cb(err,res) - }) -} - -window.urb.subscribe = function(params,cb) { // legacy interface - if(!params) throw new Error("You must supply params to urb.subscribe") - return window.urb.bind(params.path, params, cb, cb) -} - -window.urb.unsubscribe = function(params,cb) { // legacy intreface - if(!params) throw new Error("You must supply params to urb.unsubscribe.") - return window.urb.drop(params.path, params, cb) -} - -window.urb.util = { - isURL: function(s) { - r = new RegExp('^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$', 'i'); - return s.length < 2083 && r.test(s); - }, - numDot: function(n) { - _n = String(n) - fun = function(s){ - if(s.length <= 3) - return s - return fun(s.slice(0,-3))+"."+s.slice(-3) - } - return fun((_n)) - }, - toDate: function (dat){ - var mils = Math.floor((0x10000 * dat.getUTCMilliseconds()) / 1000).toString(16) - function pad(num, str){ - return ((new Array(num + 1)).join('0') + str).substr(-num,num) - } - return '~' + dat.getUTCFullYear() + - '.' + (dat.getUTCMonth() + 1) + - '.' + dat.getUTCDate() + - '..' + pad(2, dat.getUTCHours()) + - '.' + pad(2, dat.getUTCMinutes()) + - '.' + pad(2, dat.getUTCSeconds()) + - '..' + pad(4, mils) - }, - basepath: function(spur, pathname){ - spur = spur || '' - if(spur === '/') spur = '' - pathname = pathname || window.location.pathname - - base = "" - - if(pathname.indexOf("/~~") == 0) - base = "/~~" - if(pathname.indexOf("/~/as/") == 0) - base = "/~/as/"+pathname.split("/")[3] - if(pathname.indexOf("/~/away") == 0) - base = "/~/away" - - return base+spur - } -} diff --git a/pkg/arvo/web/static.udon b/pkg/arvo/web/static.udon deleted file mode 100644 index 3bbe57aa9..000000000 --- a/pkg/arvo/web/static.udon +++ /dev/null @@ -1,8 +0,0 @@ -:- ~[comments+&] -;> - -# Static - -You can put static files in here to serve them to the web. Actually, you can put static files anywhere in `/web` and see them in a browser. - -Docs on static publishing with urbit are forthcoming — but feel free to drop markdown files in `/web` to try it out.