Index: render/conf/users.t ================================================================== --- render/conf/users.t +++ render/conf/users.t @@ -303,11 +303,12 @@ if co.who.id ~= uid and co.who.rights.powers.purge() then var purgeconf = co:stra(48) var purgestrs = array( 'alpha', 'beta', 'gamma', 'delta', 'epsilon', 'eta', 'nu', 'kappa', 'emerald', 'carnelian', 'sapphire', 'ruby', 'amethyst', 'glory', - 'hope', 'grace', 'pearl', 'carnation', 'rose', 'peony', 'poppy' + 'hope', 'grace', 'pearl', 'carnation', 'rose', 'peony', 'poppy', + 'perihelion', 'aphelion' ) for i=0,3 do purgeconf:push(purgestrs[lib.crypt.random(intptr,0,[purgestrs.type.N])],0) if i ~= 2 then purgeconf:lpush('-') end end Index: srv.t ================================================================== --- srv.t +++ srv.t @@ -310,11 +310,11 @@ terra convo:stdpage(pg: convo.page) self:statpage(200, pg) end terra convo:bytestream_trusted(lockdown: bool, mime: pstring, data: lib.mem.ptr(uint8)) var lockhdr = "Content-Security-Policy: sandbox; default-src 'none'; form-action 'none'; navigate-to 'none';\r\n" if not lockdown then lockhdr = "" end - lib.net.mg_printf(self.con, "HTTP/1.1 200 OK\r\nContent-Type: %.*s\r\nContent-Length: %llu\r\n%sX-Content-Options: nosniff\r\n\r\n", mime.ct, mime.ptr, data.ct + 2, lockdown) + lib.net.mg_printf(self.con, "HTTP/1.1 200 OK\r\nContent-Type: %.*s\r\nContent-Length: %llu\r\n%sX-Content-Options: nosniff\r\n\r\n", mime.ct, mime.ptr, data.ct + 2, lockhdr) lib.net.mg_send(self.con, data.ptr, data.ct) lib.net.mg_send(self.con, '\r\n', 2) end terra convo:json(data: pstring) Index: static/style.scss ================================================================== --- static/style.scss +++ static/style.scss @@ -971,20 +971,24 @@ > input[type="radio"], > input[type="checkbox"] { display: none; &+label { display: block; flex-grow: 1; - padding: 0.08in 0.05in; + padding: 0.06in 0.05in; margin: 0.03in; - flex-basis: 15%; cursor: pointer; transition: 0.3s; text-align: center; border: 1px solid transparent; - text-shadow: 1px 1px black; + border-radius: 4px; color: otone(15%); - border-radius: 4px; + text-shadow: 1px 1px black, + // transition hints + -0.04ex 0 transparent, 0.04ex 0 transparent, + calc(-0.04ex + 1px) 1px transparent, + calc(0.04ex + 1px) 1px transparent; + &:nth-child(7n+1) { --co: -10 } //silly hack &:nth-child(7n+2) { --co: -35 } &:nth-child(7n+3) { --co: -20 } &:nth-child(7n+4) { --co: -50 } &:nth-child(7n+5) { --co: -40 } @@ -1002,11 +1006,14 @@ color: white; box-shadow: 0 0 0 1px tone(-60%); &:hover { border-top: 1px solid otone(10%); border-bottom: 1px solid otone(-60%); - font-weight: bold; + text-shadow: -0.04ex 0 white, 0.04ex 0 white, + calc(-0.04ex + 1px) 1px black, + calc(0.04ex + 1px) 1px black; // fake bold + //font-weight: bold; } } } } Index: store.t ================================================================== --- store.t +++ store.t @@ -27,40 +27,40 @@ }; powerset = lib.set { -- user powers -- default on 'login', -- not locked out 'visible', -- account & posts can be seen by others + 'edit'; -- edit own poasts 'post', -- can do poasts 'shout', -- posts show up on local timeline 'propagate', -- posts are sent to other instances 'artifact', -- upload, claim, and manage artifacts 'account', -- configure own account - 'edit'; -- edit own poasts 'snitch'; -- can issue badthink reports -- admin powers -- default off - 'purge', -- permanently delete users - 'config', -- change daemon policy & config UI 'censor', -- dispose of badthink + 'herald', -- grant serverwide epithets and badges + 'crier', -- can promote content to the instance page + 'invite', -- *unlimited* invites 'discipline', -- enforced timeouts, stripping badges and epithets, punitive actions that do not permanently deprive of powers; can remove own injunctions but not others' 'vacate', -- can remove others' injunctions, but not apply them 'cred', -- alter credentials 'elevate', 'demote', -- change user rank, give and take powers, including the ability to log in + 'config', -- change daemon policy & config UI 'rebrand', -- modify site's brand identity - 'herald', -- grant serverwide epithets and badges - 'crier', -- can promote content to the instance page - 'invite' -- *unlimited* invites + 'purge' -- permanently delete users }; prepmode = lib.enum { 'full','conf','admin' } } local function setmap(set) local map = {} local struct pt { name:lib.mem.ptr(int8), val:set } - for k,v in pairs(set.members) do + for i,v in ipairs(set.members) do map[#map + 1] = quote var ps: set ps:clear() (ps.[v] << true) in pt {name = [v], val = ps} end end