Index: backend/pgsql.t ================================================================== --- backend/pgsql.t +++ backend/pgsql.t @@ -833,11 +833,11 @@ :gsub('%%include (.-)%%',function(f) return sqlsquash(lib.util.ingest('backend/schema/' .. f)) end) -- include dependencies :gsub('%-%-.-\n','') -- remove disruptive line comments :gsub('%-%-.-$','') -- remove unnecessary terminal comments - :gsub('<(%g-)>',function(r) return tostring(sqlvars[r]) end) + :gsub('<(%g%g-)>',function(r) return tostring(sqlvars[r]) end) :gsub('%s+',' ') -- remove whitespace :gsub('^%s*(.-)%s*$','%1') -- chomp end -- to simplify queries and reduce development headaches in general, we Index: backend/schema/pgsql-views.sql ================================================================== --- backend/schema/pgsql-views.sql +++ backend/schema/pgsql-views.sql @@ -228,8 +228,9 @@ where r.since >= coalesce(nt.when,0) and r.kind = ), allnotices as (table acts union table replies union table follows) - table allnotices order by (notice).when desc + select * from allnotices where rcpt <> (notice).who + order by (notice).when desc ); Index: render/conf.t ================================================================== --- render/conf.t +++ render/conf.t @@ -52,18 +52,18 @@ var menu = co:stra(256) menu:lpush('
') -- build menu do var p = co.who.rights.powers - if p:affect_users() then menu:lpush 'users' end - if p.censor() then menu:lpush 'badthink alerts' end + if p:affect_users() then menu:lpush 'users' end + if p.censor() then menu:lpush 'badthink alerts' end if p.config() then menu:lpush([ - 'server & policy' .. - 'badges' .. - 'emoji packs' + 'server & policy' .. + 'badges' .. + 'emoji packs' ]) end - if p.rebrand() then menu:lpush 'instance branding' end + if p.rebrand() then menu:lpush 'instance branding' end end -- select the appropriate panel var [panel] = pstr { ptr = ''; ct = 0 } if path.ct >= 2 then [invoker] end Index: render/conf/users.t ================================================================== --- render/conf/users.t +++ render/conf/users.t @@ -27,11 +27,11 @@ local rnd = lib.crypt.random local terra suggest_handle(a: &lib.str.acc) var start = a.sz var puncts = array('.','_','-') - var xXx = rnd(uint8, 0, 9) == 0 + var xXx = rnd(uint8, 0, 30) == 0 var leet = rnd(uint8, 0, 8) == 0 var caps = rnd(uint8, 0, 10) var punct: rawstring = nil var useadj = rnd(uint8, 0, 4) == 0 if rnd(uint8, 0, 4) == 0 then @@ -50,21 +50,24 @@ pirate ninja shadow fog mist misery glory bear king queen empress emperor majesty space martian winter fall monk katana 420 warrior banana demon devil ghost wraith cuck legend hero heroine goblin gremlin troll dragon evil overlord radiance slop - operator rage hog bog roach wizard + operator rage hog bog roach wizard steel madness + reign ]] var adjs = splitwords [[ dark super supreme ultra ultimate total infinite omnipotent crazy final deathless immortal elite leet 1337 bloody fearless headless screaming insane - brutal legendary space frozen flaming burning + brutal legendary space frozen flaming burning lazy mighty flayed hidden secret lost mystery glorious nude naked bare first radiant martian fallen bog wandering dank demonic satanic invisible based woke deadly lethal heroic evil majestic luminous ethereal + perfect first fantastic special great steel insane + royal imperial celestial cosmic mystic sublime ]] if xXx then a:lpush('xXx_') end if useadj then @@ -127,11 +130,19 @@ 420 hog lover lovers best worst love hate big bigger tiny little teeny spunky jazz wrack rump kink kinky crack meth whore cam live over under turbo pizza rat rats crotch crank chunky funky butt grab grabber grabbers thief steal slave slaves hug hugs hag hags hogs wimp thieves wizard wizards - pussy pansy dark doom stank spunk dumb rage + pussy pansy dark doom stank spunk dumb rage worship orb + terror fear blood slime slab warp waggle tit boob bird derp + birb goat horde masto mastodon social global tweet post + house home prison jail box pit hole haven town trump putin + truth liberty zone land ranch butt butts sex pimp cop mail + slut goblin goblins no good bad only gtfo electro electric + dragon space mars earth venus neptune pluto saturn star + moon lunar catastrophe catastro cuck honk war lap cuddle + planet ]] var tlds = splitwords [[ tld club town space xxx house land ranch horse com io online shop site vip ltd win men lgbt cat adult army analytics art associates bar bible biz black blog broker cam camp careers @@ -139,13 +150,14 @@ duck dot enterprises esq estate expert express fail farm foo forsale fun fund forum foundation gay global golf gop guru group hangout hot industries international info investments jobs land law life limited live lol mom network now party porn productions pub rehab rocks school sex sexy singles - social software solutions space spot store sucks supplies - systems university vacations ventures wang website work - wow wtf world xyz soy live gym park + social software solutions spot store sucks supplies cuck + uwu systems university vacations ventures wang website work + wow wtf world xyz soy live gym park worship orb zone mail + war honk derp planet ]] var sub = rnd(uint8,0,10) == 0 if sub then a:ppush(words[rnd(intptr,0,[words.type.N])]):lpush('.') end a:ppush(words[rnd(intptr,0,[words.type.N])]) if rnd(uint8,0,3) == 0 or not sub then Index: render/profile.t ================================================================== --- render/profile.t +++ render/profile.t @@ -18,16 +18,16 @@ if not relationship.rel.follow() then aux:pcompose(&co.srv.pool,'') elseif relationship.rel.follow() then aux:pcompose(&co.srv.pool,'') end - aux:lpush('chat') + aux:lpush(' chat') if co.who.rights.powers:affect_users() and co.who:overpowers(actor) then - aux:lpush('control') + aux:lpush(' control') end else - aux:pcompose(&co.srv.pool,'remote follow') + aux:pcompose(&co.srv.pool,' remote follow') end var auxp = aux:finalize() var timestr: int8[26] lib.osclock.ctime_r(&actor.knownsince, ×tr[0]) var strfbuf: int8[28*4] @@ -75,14 +75,18 @@ comments:lpush('
  • underling
  • ') elseif actor:outranks(co.who) then comments:lpush('
  • outranks you
  • ') end end + end + + if relationship.rel.block() then + comments:lpush('
  • blocked
  • ') + end - if relationship.recip.follow() then - comments:lpush('
  • follows you
  • ') - end + if relationship.recip.follow() then + comments:lpush('
  • follows you
  • ') end var profile = data.view.profile { nym = fullname; bio = bio; Index: static/style.scss ================================================================== --- static/style.scss +++ static/style.scss @@ -35,11 +35,10 @@ color: white; text-shadow: 0 0 15px tone(20%); text-decoration-color: tone(10%,-0.1); outline: none; } - &.button { @extend %button; } } a[href^="//"], a[href^="http://"], a[href^="https://"] { // external link &:hover::after { @@ -67,11 +66,11 @@ %glow { box-shadow: 0 0 20px tone(0%,-0.8); } -%button { +.button, a[href].button { // 🙄 @extend %sans; font-size: 14pt; box-sizing: border-box; padding: 0.1in 0.2in; border: 1px solid black; @@ -113,13 +112,13 @@ otone(-35%) ); } } -button { @extend %button; +button { @extend .button; &:first-of-type { - @extend %button; + @extend .button; color: white; box-shadow: inset 0 1px otone(-25%), inset 0 -1px otone(-50%); background: linear-gradient(to bottom, otone(-35%), @@ -309,29 +308,33 @@ grid-column: 3 / 4; grid-row: 1 / 3; display: flex; flex-flow: column; > * { flex-grow: 1; } - table { td, th { text-align: center; } } + table { + width: 100%; + td, th { text-align: center; } + } } > form.actions { grid-column: 1 / 3; grid-row: 2 / 3; padding-top: 0.075in; - flex-wrap: wrap; display: flex; + flex-flow: column; justify-content: center; align-items: center; - > a[href] { - display: block; - margin: 0.025in 0.05in; - } - > hr { - all: unset; - display: block; - height: 0.3in; - width: 1px; - border-left: 1px solid rgba(0,0,0,0.6); + > div { + display: flex; + flex-wrap: wrap; + flex-flow: row; + justify-content: center; + align-items: center; + margin-bottom: 0.07in; + > a[href] { + display: block; + margin: 0.025in 0.05in; + } } } } .epithet { @@ -388,14 +391,14 @@ @extend %box; width: 3in; padding: 0.4in; p { text-align: center; } menu { - %button { + .button { display: block; width: 100%; - & + %button { border-top: none; } + & + button, & + a[href] { border-top: none; } } } } div.login { @extend %box; @@ -422,11 +425,12 @@ grid-gap: 5px; > label, input, button { display: block; } > label { grid-column: 1 / 3; grid-row: 1/2; font-weight: bold } > input, textarea { grid-column: 1 / 3; grid-row: 2/3; } > button { grid-column: 2 / 3; grid-row: 3/4; } - > a { @extend %button; grid-column: 1 / 2; grid-row: 3/4; } + > a { grid-column: 1 / 2; grid-row: 3/4; } + > textarea { @extend %teletype; font-size: 80% !important; height: 1.5in; } } } } form.compose { @@ -455,10 +459,11 @@ background: tone(-40%); border: 1px solid black; font-weight: bold; text-decoration: none; cursor: help; + max-width: 0.1in; } input.acl { @extend %teletype; background: url(/s/padlock.svg) no-repeat; @@ -487,11 +492,10 @@ height: 100%; overflow-y: scroll; >p:first-of-type { margin-top: 0; } } >a[href="#0"] { // close link - @extend %button; cursor: default; display: block; position: absolute; top: -0.3in; right: 0.1in; @@ -649,11 +653,10 @@ grid-column: 1/2; grid-row: 1/2; background: linear-gradient(to bottom, tone(-45%),tone(-55%)); border: 1px solid black; padding: 0.1in; > a[href] { - @extend %button; display: block; text-align: left; } > a[href] + a[href] { border-top: none; @@ -730,11 +733,11 @@ display: block; width: 100%; } > textarea { resize: vertical; min-height: 2in; } } - body.conf & > %button { margin-left: 50%; width: 50%; } + body.conf & { > .button { margin-left: 50%; width: 50%; } } .elem-group { display: flex; flex-flow: row; > .elem { flex-shrink: 1; @@ -760,11 +763,11 @@ flex-flow: column; float: right; width: 40%; margin-left: 0.1in; } - > %button { + > .button, a[href] { flex-basis: min-content; flex-grow: 1; display: block; margin: 2px; } } @@ -883,12 +886,14 @@ margin: 0.2em 0.1em; cursor: default; } } -:is(%button, a[href]).neg { --co: 30 } -:is(%button, a[href]).pos { --co: -30 } +.button, a[href] { + .neg { --co: 30 } + .pos { --co: -30 } +} .pick-list { display: flex; flex-flow: row wrap; padding: 0.1in; Index: tpl.t ================================================================== --- tpl.t +++ tpl.t @@ -52,11 +52,11 @@ constlen = constlen + string.len(segs[i]) end for n,d in pairs(docs) do local html = string.format( - '', n, d.text + '', n, d.text ) segs[#segs] = segs[#segs] .. html constlen = constlen + #html end Index: view/conf-sec-credmg.tpl ================================================================== --- view/conf-sec-credmg.tpl +++ view/conf-sec-credmg.tpl @@ -1,9 +1,9 @@

    this account can currently be accessed with the credentials listed below. if you fear a credential has been compromised, you can revoke or reset it.

    - @credlist Index: view/conf.tpl ================================================================== --- view/conf.tpl +++ view/conf.tpl @@ -1,16 +1,16 @@ - profile - avatar - interface - security - relationships - quarantine - ACL shortcuts - chatrooms - circles + profile + avatar + interface + security + relationships + quarantine + ACL shortcuts + chatrooms + circles @menu
    @panel
    Index: view/login-challenge.tpl ================================================================== --- view/login-challenge.tpl +++ view/login-challenge.tpl @@ -7,8 +7,8 @@ @inputfield - cancel + cancel Index: view/profile.tpl ================================================================== --- view/profile.tpl +++ view/profile.tpl @@ -6,22 +6,26 @@ @bio
    - - - - + + + + +
    posts mutuals
    @nposts @nmutuals
    following followers
    @nfollows @nfollowers
    posts mutuals
    @nposts @nmutuals
    following followers
    @nfollows @nfollowers
    @timephrase @tweetday
      @remarks
    - posts - archive - media - associates -
    - @auxbtn +
    + posts + archive + media + associates +
    +
    + @auxbtn +