Differences From
Artifact [fa178f73b5]:
11 11 {url = 'qnt', title = 'quarantine', render = 'quarantine'};
12 12 {url = 'acl', title = 'access control shortcuts', render = 'acl'};
13 13 {url = 'rooms', title = 'chatrooms', render = 'rooms'};
14 14 {url = 'circles', title = 'circles', render = 'circles'};
15 15
16 16 {url = 'srv', title = 'server settings', render = 'srv'};
17 17 {url = 'brand', title = 'instance branding', render = 'rebrand'};
18 + {url = 'badge', title = 'user badges', render = 'badge'};
19 + {url = 'emoji', title = 'custom emoji packs', render = 'emojo'};
18 20 {url = 'censor', title = 'censorship & badthink suppression', render = 'rebrand'};
19 21 {url = 'users', title = 'user accounting', render = 'users'};
20 22
21 23 }
22 24
23 25 local path = symbol(lib.mem.ptr(pref))
24 26 local co = symbol(&lib.srv.convo)
................................................................................
41 43
42 44 local terra
43 45 render_conf([co], [path], notify: pstr)
44 46 var menu: lib.str.acc menu:init(64):lpush('<hr>') defer menu:free()
45 47
46 48 -- build menu
47 49 do var p = co.who.rights.powers
48 - if p.config() then menu:lpush '<a href="/conf/srv">server settings</a>' end
49 - if p.rebrand() then menu:lpush '<a href="/conf/brand">instance branding</a>' end
50 + if p:affect_users() then menu:lpush '<a href="/conf/users">users</a>' end
50 51 if p.censor() then menu:lpush '<a href="/conf/censor">badthink alerts</a>' end
51 - if p:affect_users() then menu:lpush '<a href="/conf/users">users</a>' end
52 + if p.config() then menu:lpush([
53 + '<a href="/conf/srv">server & policy</a>' ..
54 + '<a href="/conf/badge">badges</a>' ..
55 + '<a href="/conf/emoji">emoji packs</a>'
56 + ]) end
57 + if p.rebrand() then menu:lpush '<a href="/conf/brand">instance branding</a>' end
52 58 end
53 59
54 60 -- select the appropriate panel
55 61 var [panel] = pstr { ptr = ''; ct = 0 }
56 62 if path.ct >= 2 then [invoker] end
57 63
58 64 -- avoid the hr if we didn't add any elements