parsav  Check-in [e78334fe04]

Overview
Comment:more progress on ui & circles
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: e78334fe044290702094265be2b1c24f856b0e8495f7ee16a57405c091143fe7
User & Date: lexi on 2021-01-14 05:31:36
Other Links: manifest | tags
Context
2021-01-14
17:37
circle management complete check-in: c43a1b6e9d user: lexi tags: trunk
05:31
more progress on ui & circles check-in: e78334fe04 user: lexi tags: trunk
01:11
more work on UI and circles check-in: 03ea3dffe7 user: lexi tags: trunk
Changes

Modified common.lua from [c72e0a0971] to [c868f8cd22].

74
75
76
77
78
79
80







81
82
83
84
85
86
87
return {
	exec = exec;
	dump = dump;
	ping = ping;
	chomp = chomp;
	map = map;
	tobool = tobool;







	rndstr = function(len)
		local s = ''
		for i=1,len do
			local ofs = math.random(0,10 + 26)
			if ofs >= 10 then ofs = 0x60 + (ofs - 10)
						 else ofs = 0x30 + ofs end
			s = s .. string.char(ofs) 







>
>
>
>
>
>
>







74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
return {
	exec = exec;
	dump = dump;
	ping = ping;
	chomp = chomp;
	map = map;
	tobool = tobool;
	find = function(lst,pred)
		for k,v in pairs(lst) do
			local test = pred(v,k) 
			if test then return test end
		end
		return nil
	end;
	rndstr = function(len)
		local s = ''
		for i=1,len do
			local ofs = math.random(0,10 + 26)
			if ofs >= 10 then ofs = 0x60 + (ofs - 10)
						 else ofs = 0x30 + ofs end
			s = s .. string.char(ofs) 

Modified config.lua from [b2a2580dbd] to [e037d77845].

52
53
54
55
56
57
58

59
60

61
62
63
64
65
66
67
		-- we should add support for content-encoding headers and pre-compress
		-- the damn things before compiling (also making the binary smaller)
		{'style.css', 'text/css'};
		{'live.js', 'text/javascript'}; -- rrrrrrrr
		{'default-avatar.webp', 'image/webp'}; -- needs inkscape-exclusive svg features
		{'bell.svg', 'image/svg+xml'};
		{'gear.svg', 'image/svg+xml'};

		{'heart.webp', 'image/webp'};
		{'retweet.webp', 'image/webp'};

		{'padlock.svg', 'image/svg+xml'};
		{'warn.svg', 'image/svg+xml'};
		{'query.webp', 'image/webp'};
		{'reply.webp', 'image/webp'};
		{'file.webp', 'image/webp'};
		{'follow.webp', 'image/webp'};
		-- keep in mind before you add anything to this list: these are not







>


>







52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
		-- we should add support for content-encoding headers and pre-compress
		-- the damn things before compiling (also making the binary smaller)
		{'style.css', 'text/css'};
		{'live.js', 'text/javascript'}; -- rrrrrrrr
		{'default-avatar.webp', 'image/webp'}; -- needs inkscape-exclusive svg features
		{'bell.svg', 'image/svg+xml'};
		{'gear.svg', 'image/svg+xml'};
		{'pen.svg', 'image/svg+xml'};
		{'heart.webp', 'image/webp'};
		{'retweet.webp', 'image/webp'};
		{'logo.svg', 'image/svg+xml'};
		{'padlock.svg', 'image/svg+xml'};
		{'warn.svg', 'image/svg+xml'};
		{'query.webp', 'image/webp'};
		{'reply.webp', 'image/webp'};
		{'file.webp', 'image/webp'};
		{'follow.webp', 'image/webp'};
		-- keep in mind before you add anything to this list: these are not

Modified render/nav.t from [5e68ddf43b] to [665c264b07].

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
local terra 
render_nav(co: &lib.srv.convo)
	var t = co:stra(64)
	if co.who ~= nil or co.srv.cfg.pol_sec == lib.srv.secmode.public then
		t:lpush(' <a accesskey="t" href="/"><u>t</u>imeline</a>')
	end
	if co.who ~= nil then
		t:lpush(' <a accesskey="c" href="/compose"><u>c</u>ompose</a> <a accesskey="m" href="/media"><u>m</u>edia</a> <a accesskey="d" href="/doc"><u>d</u>ocs</a> <hr> <a accesskey="p" href="'):push(co.who.xid,0):lpush('" class="ident">')
		t:push(co.who.handle,0)
		t:lpush('</a> <a accesskey="g" href="/logout">lo<u>g</u> out</a> <a class="gear" accesskey="o" href="/conf">c<u>o</u>nfigure</a> <a class="bell" accesskey="x" href="/notices">notices (<u>x</u>)</a>')
	else
		t:lpush(' <a accesskey="d" href="/doc"><u>d</u>ocs</a> <a accesskey="g" href="/login">lo<u>g</u> in</a>')
	end
	return t:finalize()
end
return render_nav







|

|






2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
local terra 
render_nav(co: &lib.srv.convo)
	var t = co:stra(64)
	if co.who ~= nil or co.srv.cfg.pol_sec == lib.srv.secmode.public then
		t:lpush(' <a accesskey="t" href="/"><u>t</u>imeline</a>')
	end
	if co.who ~= nil then
		t:lpush(' <a accesskey="m" href="/media"><u>m</u>edia</a> <a accesskey="d" href="/doc"><u>d</u>ocs</a> <hr> <a accesskey="p" href="'):push(co.who.xid,0):lpush('" class="ident">')
		t:push(co.who.handle,0)
		t:lpush('</a> <a accesskey="g" href="/logout">lo<u>g</u> out</a> <a class="pen" accesskey="c" href="/compose"><u>c</u>ompose</a> <a class="gear" accesskey="o" href="/conf">c<u>o</u>nfigure</a> <a class="bell" accesskey="x" href="/notices">notices (<u>x</u>)</a>')
	else
		t:lpush(' <a accesskey="d" href="/doc"><u>d</u>ocs</a> <a accesskey="g" href="/login">lo<u>g</u> in</a>')
	end
	return t:finalize()
end
return render_nav

Modified render/profile.t from [06727d1481] to [e47888d2bc].

193
194
195
196
197
198
199













200
201
202
203
204
205
206
...
208
209
210
211
212
213
214

215
216
217
218
219
220
221
222
223
224
225
226
227
	if relationship.rel.block() then
		comments:lpush('<li style="--co:80">blocked</li>')
	end

	if relationship.recip.follow() then
		comments:lpush('<li style="--co:30">follows you</li>')
	end














	var profile = data.view.profile {
		nym = fullname;
		bio = bio;
		xid = cs(actor.xid);
		avatar = cs(actor.avatar);

................................................................................
		nfollowers = sn_followers, nmutuals = sn_mutuals;
		tweetday = cs(timestr);
		timephrase = lib.trn(actor.origin == 0, pstr 'joined', pstr 'known since');

		remarks = '';

		auxbtn = auxp;

		relations = relbtns:finalize();
		sanctions = sancbtns:finalize();
	}
	if comments.sz > 0 then profile.remarks = comments:finalize() end

	var ret = profile:poolstr(&co.srv.pool)
	-- auxp:free() 
	--if actor.bio ~= nil then bio:free() end
	--if comments.sz > 0 then profile.remarks:free() end
	return ret
end

return render_profile







>
>
>
>
>
>
>
>
>
>
>
>
>







 







>













193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
...
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
	if relationship.rel.block() then
		comments:lpush('<li style="--co:80">blocked</li>')
	end

	if relationship.recip.follow() then
		comments:lpush('<li style="--co:30">follows you</li>')
	end

	var circpanel = co:stra(128)
	var allcircs = co.srv:circle_search(&co.srv.pool, co.who.id, 0)
	if allcircs:ref() then
		var mycircs = co.srv:circle_memberships_uid(&co.srv.pool, co.who.id, actor.id)
		for i=0, allcircs.ct do
			circpanel:lpush '<label><input type="checkbox" name="circle" value="'
			         :shpush(allcircs(i).cid)
					 :lpush '"> '
					 :ppush(allcircs(i).name)
					 :lpush '</label>'
		end
	end

	var profile = data.view.profile {
		nym = fullname;
		bio = bio;
		xid = cs(actor.xid);
		avatar = cs(actor.avatar);

................................................................................
		nfollowers = sn_followers, nmutuals = sn_mutuals;
		tweetday = cs(timestr);
		timephrase = lib.trn(actor.origin == 0, pstr 'joined', pstr 'known since');

		remarks = '';

		auxbtn = auxp;
		circles = circpanel:finalize();
		relations = relbtns:finalize();
		sanctions = sancbtns:finalize();
	}
	if comments.sz > 0 then profile.remarks = comments:finalize() end

	var ret = profile:poolstr(&co.srv.pool)
	-- auxp:free() 
	--if actor.bio ~= nil then bio:free() end
	--if comments.sz > 0 then profile.remarks:free() end
	return ret
end

return render_profile

Modified route.t from [89c9cb6c12] to [23df5e6037].

16
17
18
19
20
21
22






23
24
25
26
27
28
29
30
		if meth == method.post then
			var act = co:ppostv('act')
			if rel.recip.block() then
				if act:cmp('follow') or act:cmp('subscribe') then
					co:complain(403,'blocked','you cannot follow a user you are blocked by') return
				end
			end






			if act:cmp('block') and not rel.rel.block() then
				rel.rel.block = true  rel.recip.follow = false
				co.srv:actor_rel_create([lib.store.relation.idvmap.block], co.who.id, actor.id)
				co.srv:actor_rel_destroy([lib.store.relation.idvmap.follow], actor.id, co.who.id)
			elseif not act:cmp('report') then
				[(function()
					local tests = quote co:complain(400,'bad request','the action you have attempted on this user is not meaningful') return end
					for i,v in ipairs(lib.store.relation.members) do







>
>
>
>
>
>
|







16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
		if meth == method.post then
			var act = co:ppostv('act')
			if rel.recip.block() then
				if act:cmp('follow') or act:cmp('subscribe') then
					co:complain(403,'blocked','you cannot follow a user you are blocked by') return
				end
			end
			if act:cmp('circle') then
				lib.dbg('encircling user!')
				var iter = co:eachpostv('circle')
				for cid in iter do

				end
			elseif act:cmp('block') and not rel.rel.block() then
				rel.rel.block = true  rel.recip.follow = false
				co.srv:actor_rel_create([lib.store.relation.idvmap.block], co.who.id, actor.id)
				co.srv:actor_rel_destroy([lib.store.relation.idvmap.follow], actor.id, co.who.id)
			elseif not act:cmp('report') then
				[(function()
					local tests = quote co:complain(400,'bad request','the action you have attempted on this user is not meaningful') return end
					for i,v in ipairs(lib.store.relation.members) do

Modified srv.t from [36e7e8aa84] to [fbf604f655].

413
414
415
416
417
418
419
420













421
422
423
424
425
426




427

428

429
430
431
432
433
434
435




436
437
438
439















440
441
442
443
444
445
446
		var ok = true
		if self.aid == 0 or self.who.rights.powers.[pow:asvalue()]() == false then
			ok = false
			self:complain(403,'insufficient privileges',['you lack the <strong>'..pow:asvalue()..'</strong> power and cannot perform this action'])
		end
	in ok end
end)














-- CALL ONLY ONCE PER VAR
terra convo:postv(name: rawstring)
	if self.varbuf.ptr == nil then
		self.varbuf = self.srv.pool:alloc(int8, self.msg.body.len + self.msg.query.len)
		self.vbofs = self.varbuf.ptr
	end




	var o = lib.net.mg_http_get_var(&self.msg.body, name, self.vbofs, self.varbuf.ct - (self.vbofs - self.varbuf.ptr))

	if o > 0 then

		var r = self.vbofs
		self.vbofs = self.vbofs + o + 1
		@(self.vbofs - 1) = 0
		var norm = lib.str.normalize([lib.mem.ptr(int8)]{ptr = r, ct = o})
		return norm.ptr, norm.ct
	else return nil, 0 end
end




terra convo:ppostv(name: rawstring)
	var s,l = self:postv(name)
	return pstring { ptr = s, ct = l }
end
















terra convo:getv(name: rawstring)
	if self.varbuf.ptr == nil then
		self.varbuf = self.srv.pool:alloc(int8, self.msg.query.len + self.msg.body.len)
		self.vbofs = self.varbuf.ptr
	end
	var o = lib.net.mg_http_get_var(&self.msg.query, name, self.vbofs, self.varbuf.ct - (self.vbofs - self.varbuf.ptr))








>
>
>
>
>
>
>
>
>
>
>
>
>

|




>
>
>
>
|
>

>







>
>
>
>
|



>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
		var ok = true
		if self.aid == 0 or self.who.rights.powers.[pow:asvalue()]() == false then
			ok = false
			self:complain(403,'insufficient privileges',['you lack the <strong>'..pow:asvalue()..'</strong> power and cannot perform this action'])
		end
	in ok end
end)

local pstr2mg, mg2pstr
do -- aaaaaaaaaaaaaaaaaaaaaaaa
	mgstr = lib.util.find(lib.net.mg_http_message.entries, function(v)
		if v.field == 'body' or v[1] == 'body' then return v.type end
	end)
	terra pstr2mg(p: pstring): mgstr
		return mgstr { ptr = p.ptr, len = p.ct }
	end
	terra mg2pstr(m: mgstr): pstring
		return pstring { ptr = m.ptr, ct = m.len }
	end
end

-- CALL ONLY ONCE PER VAR
terra convo:postv_next(name: pstring, start: &pstring)
	if self.varbuf.ptr == nil then
		self.varbuf = self.srv.pool:alloc(int8, self.msg.body.len + self.msg.query.len)
		self.vbofs = self.varbuf.ptr
	end
	var conv = pstr2mg(@start)
	var o = lib.net.mg_http_get_var(
		&conv,
		name.ptr, self.vbofs,
		self.varbuf.ct - (self.vbofs - self.varbuf.ptr)
	)
	if o > 0 then
		start:advance(name.ct + o + 2)
		var r = self.vbofs
		self.vbofs = self.vbofs + o + 1
		@(self.vbofs - 1) = 0
		var norm = lib.str.normalize([lib.mem.ptr(int8)]{ptr = r, ct = o})
		return norm.ptr, norm.ct
	else return nil, 0 end
end
terra convo:postv(name: pstring)
	var start = mg2pstr(self.msg.body)
	return self:postv_next(name, &start)
end
terra convo:ppostv(name: pstring)
	var s,l = self:postv(name)
	return pstring { ptr = s, ct = l }
end
do
	local struct postiter { co: &convo where: pstring name: pstring }
	terra convo:eachpostv(name: pstring)
		return postiter { co = self, where = mg2pstr(self.msg.body), name = name } 
	end
	postiter.metamethods.__for = function(self, body)
		return quote
			while true do
				var str, len = self.co:postv_next(self.name, &self.where)
				if str == nil then break end
				[ body(`pstring {str, len}) ]
			end
		end
	end
end

terra convo:getv(name: rawstring)
	if self.varbuf.ptr == nil then
		self.varbuf = self.srv.pool:alloc(int8, self.msg.query.len + self.msg.body.len)
		self.vbofs = self.varbuf.ptr
	end
	var o = lib.net.mg_http_get_var(&self.msg.query, name, self.vbofs, self.varbuf.ct - (self.vbofs - self.varbuf.ptr))

Added static/pen.svg version [3b4f7b1099].

















































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="0.2in"
   height="0.2in"
   viewBox="0 0 5.0800002 5.0800002"
   version="1.1"
   id="svg8"
   inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
   sodipodi:docname="pen.svg">
  <defs
     id="defs2">
    <linearGradient
       id="linearGradient997"
       inkscape:collect="always">
      <stop
         id="stop993"
         offset="0"
         style="stop-color:#ffffff;stop-opacity:0.40000001" />
      <stop
         id="stop995"
         offset="1"
         style="stop-color:#ffffff;stop-opacity:0.22173913" />
    </linearGradient>
    <linearGradient
       inkscape:collect="always"
       id="linearGradient863">
      <stop
         style="stop-color:#ffffff;stop-opacity:0.5518868"
         offset="0"
         id="stop859" />
      <stop
         style="stop-color:#ffffff;stop-opacity:0;"
         offset="1"
         id="stop861" />
    </linearGradient>
    <radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient863"
       id="radialGradient865"
       cx="2.5399754"
       cy="295.73944"
       fx="2.5399754"
       fy="295.91135"
       r="1.6620824"
       gradientTransform="matrix(2.9231276,0,0,2.7982783,-11.452033,-531.55554)"
       gradientUnits="userSpaceOnUse" />
    <radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient863"
       id="radialGradient865-3"
       cx="2.5399754"
       cy="295.73944"
       fx="2.5399754"
       fy="295.91135"
       r="1.6620824"
       gradientTransform="matrix(11.048041,0,0,10.57617,-21.779867,-3114.7234)"
       gradientUnits="userSpaceOnUse" />
    <radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient863"
       id="radialGradient980"
       gradientUnits="userSpaceOnUse"
       gradientTransform="matrix(2.9231276,0,0,2.7982783,-11.452033,-531.55554)"
       cx="4.5320868"
       cy="295.40598"
       fx="4.5320868"
       fy="295.57788"
       r="1.6620824" />
    <radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient863"
       id="radialGradient980-9"
       gradientUnits="userSpaceOnUse"
       gradientTransform="matrix(11.048041,0,0,10.57617,-45.140697,-3114.3717)"
       cx="4.5320868"
       cy="295.40598"
       fx="4.5320868"
       fy="295.57788"
       r="1.6620824" />
    <radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient863"
       id="radialGradient1028-3"
       gradientUnits="userSpaceOnUse"
       gradientTransform="matrix(10.458714,0,0,10.012014,-42.732813,-2952.9055)"
       cx="4.5320868"
       cy="295.40598"
       fx="4.5320868"
       fy="295.57788"
       r="1.6620824" />
    <radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient863"
       id="radialGradient877"
       gradientUnits="userSpaceOnUse"
       gradientTransform="matrix(12.203153,0,0,11.681946,-92.753639,-3438.82)"
       cx="8.0996866"
       cy="295.31769"
       fx="8.0996866"
       fy="295.48959"
       r="1.6620824" />
    <radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient997"
       id="radialGradient884"
       gradientUnits="userSpaceOnUse"
       gradientTransform="matrix(2.5465177,-1.6303896e-5,1.5607543e-5,2.4377538,-19.130237,-425.06144)"
       cx="8.1182146"
       cy="295.52625"
       fx="8.1182146"
       fy="295.69815"
       r="1.6620824" />
    <radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient863"
       id="radialGradient884-3"
       gradientUnits="userSpaceOnUse"
       gradientTransform="matrix(12.203153,0,0,11.681946,-97.773171,-3439.9293)"
       cx="8.0996866"
       cy="295.31769"
       fx="8.0996866"
       fy="295.48959"
       r="1.6620824" />
    <radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient863"
       id="radialGradient915"
       gradientUnits="userSpaceOnUse"
       gradientTransform="matrix(22.775335,0,0,21.802581,-167.8904,-6432.8016)"
       cx="8.0996866"
       cy="295.31769"
       fx="8.0996866"
       fy="295.48959"
       r="1.6620824" />
    <radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient863"
       id="radialGradient923"
       gradientUnits="userSpaceOnUse"
       gradientTransform="matrix(1.5516004,-1.2029723e-6,1.1515923e-6,1.4853302,-6.8816939,-144.29024)"
       cx="7.9044895"
       cy="295.25067"
       fx="7.9044895"
       fy="295.25067"
       r="1.6620824" />
    <radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient863"
       id="radialGradient884-9"
       gradientUnits="userSpaceOnUse"
       gradientTransform="matrix(12.203153,0,0,11.681946,-97.77317,-3439.9294)"
       cx="8.0996866"
       cy="295.31769"
       fx="8.0996866"
       fy="295.48959"
       r="1.6620824" />
    <radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient863"
       id="radialGradient959"
       gradientUnits="userSpaceOnUse"
       gradientTransform="matrix(3.2287509,0,0,3.0908482,-24.416093,-618.0091)"
       cx="8.0996866"
       cy="295.31769"
       fx="8.0996866"
       fy="295.48959"
       r="1.6620824" />
    <radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient863"
       id="radialGradient969"
       gradientUnits="userSpaceOnUse"
       gradientTransform="matrix(3.2287509,0,0,3.0908482,-24.416093,-618.0091)"
       cx="8.0996866"
       cy="295.31769"
       fx="8.0996866"
       fy="295.48959"
       r="1.6620824" />
    <radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient863"
       id="radialGradient971"
       gradientUnits="userSpaceOnUse"
       gradientTransform="matrix(3.2287509,0,0,3.0908482,-24.321599,-617.98547)"
       cx="8.4411459"
       cy="294.28815"
       fx="8.4411459"
       fy="294.46005"
       r="1.6620824" />
    <radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient863"
       id="radialGradient983"
       gradientUnits="userSpaceOnUse"
       gradientTransform="matrix(3.2287509,0,0,3.0908482,-24.593269,-617.99727)"
       cx="8.0996866"
       cy="295.31769"
       fx="8.0996866"
       fy="295.48959"
       r="1.6620824" />
  </defs>
  <sodipodi:namedview
     id="base"
     pagecolor="#2f000f"
     bordercolor="#666666"
     borderopacity="1.0"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:zoom="5.6"
     inkscape:cx="30.052814"
     inkscape:cy="10.293303"
     inkscape:document-units="mm"
     inkscape:current-layer="layer1"
     showgrid="false"
     units="in"
     inkscape:window-width="1920"
     inkscape:window-height="1042"
     inkscape:window-x="0"
     inkscape:window-y="38"
     inkscape:window-maximized="0" />
  <metadata
     id="metadata5">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
        <dc:title></dc:title>
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1"
     transform="translate(0,-291.91998)">
    <path
       style="opacity:1;vector-effect:none;fill:url(#radialGradient971);fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
       d="m 4.4124934,292.1625 c 0,0 -1.1108656,0.38981 -1.6371093,1.10122 -0.5262438,0.71139 -1.227832,2.09497 -1.227832,2.09497 0.1266883,-0.01 0.3994588,-0.18501 0.3994588,-0.18501 l 0.5555216,-0.98443 c 0,0 0.3995245,-0.0443 0.8433593,-0.16847 -0.1282446,-0.0703 -0.2669278,-0.14068 -0.3922241,-0.18397 0,0 0.4669658,0.007 0.7456911,0.0667 0.3067058,-0.11755 0.5913485,-0.27672 0.7327717,-0.49403 0.1385432,-0.21288 0.1746504,-0.42615 0.1679485,-0.6165 -0.2153555,-0.0167 -0.7131349,-0.0134 -0.7131349,-0.0134 0.3030665,-0.14907 0.5896433,-0.18827 0.6888469,-0.19998 -0.05315,-0.24735 -0.1632976,-0.41703 -0.1632976,-0.41703 z"
       id="path852"
       inkscape:connector-curvature="0" />
    <path
       style="opacity:1;vector-effect:none;fill:url(#radialGradient923);fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
       d="m 3.986763,294.05518 c -0.131622,-0.008 -0.2734744,0.006 -0.4382161,0.0646 -0.064856,0.0259 -0.1406203,0.0387 -0.1421104,0.14211 -0.00535,0.11274 0.060433,0.15383 0.1576131,0.16433 -0.082549,0.0209 -0.1693344,0.0404 -0.2092894,0.0754 0.1085829,0.0613 0.2280063,0.0826 0.3586343,0.0625 0,0 -0.2872568,0.1916 -0.4495848,0.49609 l 0.5286497,0.0507 a 0.15252899,0.15252899 0 0 1 0.127124,0.2129 l -0.280086,0.64699 c 0.3274787,0.0428 0.6397358,0.0399 0.9777179,-0.0584 0.4754632,-0.77165 -0.4206462,-1.34824 -0.4206462,-1.34824 0.1306288,0.0201 0.2500527,-0.002 0.3586345,-0.0625 -0.039955,-0.0349 -0.1267404,-0.0547 -0.2092896,-0.0754 0.09718,-0.0102 0.1624465,-0.0516 0.1570963,-0.16433 -0.00149,-0.10321 -0.076738,-0.11621 -0.1415933,-0.14211 -0.1219084,-0.0273 -0.2430323,-0.0568 -0.374654,-0.0646 z"
       id="path919"
       inkscape:connector-curvature="0" />
    <path
       style="opacity:1;vector-effect:none;fill:url(#radialGradient884);fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
       d="m 0.83863466,294.98018 -0.59066162,1.08676 2.91765136,0.61392 0.6139159,-1.41697 -1.5962849,-0.154 -0.084749,0.14986 a 0.17411337,0.17411337 0 0 1 -0.058911,0.061 c 0,-10e-6 -0.07109,0.0468 -0.1617473,0.0956 -0.090657,0.0488 -0.1834986,0.10679 -0.3167765,0.11731 a 0.17411337,0.17411337 0 0 1 -0.1679484,-0.25218 c 0,0 0.096479,-0.18004 0.125057,-0.23565 z"
       id="path932"
       inkscape:connector-curvature="0" />
  </g>
</svg>

Modified static/style.scss from [2db0a5b279] to [cdc5fd8fbb].

171
172
173
174
175
176
177

178
179
180
181
182
183
184
...
242
243
244
245
246
247
248
249
250

251
252
253
254
255
256
257
258
259

260
261
262
263
264
265
266
...
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
		outline: none;
		@extend %glow;
	}
}
select { width: 100%; }

@mixin glass {

	@supports (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px)) {
		backdrop-filter: blur(40px);
		-webkit-backdrop-filter: blur(40px);
		background-color: tone(-53%, -0.7);
	}
	@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
		background-color: tone(-53%, -0.1);
................................................................................
				//padding: calc((25% - 1em)/2) 0.15in;
				&, &::after { transition: 0.3s; }
				text-shadow: 1px 1px 1px black;
				&:hover{
					transform: scale(1.2);
				}
			}
			> a[href].bell, a[href].gear {
				height: 2em;

				padding: 0.125in 0.05in;
				filter: drop-shadow(1px 1px 3px tone(-5%));
				&:hover {
					filter: drop-shadow(1px 1px 3px tone(-5%))
						drop-shadow(0 0 10px tone(-5%));
				}
			}
			> a[href].bell { content: url(/s/bell.svg); }
			> a[href].gear { content: url(/s/gear.svg); }

		}
	}
}

main {
	@extend %content;
	display: block;
................................................................................
			grid-gap: 0.1in;
			> .opt {
				padding: 0.1in;
				border-radius: 5px;
				border: 1px solid transparent;
				&.on {
					background-color: tone(-30%, -0.7);
					box-shadow: 0 0 10px tone(-30%);
					border-color: tone(-20%);
				}
				> button, > p, > a[href] { display: block; }
				> p { text-align: center; font-size: 80%; margin: 0; margin-top: 0.1in; }
				> button, > a[href] {
					width: max-content;
					margin: auto;
				}







>







 







|

>









>







 







<
|







171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
...
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
...
303
304
305
306
307
308
309

310
311
312
313
314
315
316
317
		outline: none;
		@extend %glow;
	}
}
select { width: 100%; }

@mixin glass {
	box-shadow: inset 0 0 1.5em tone(-56%);
	@supports (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px)) {
		backdrop-filter: blur(40px);
		-webkit-backdrop-filter: blur(40px);
		background-color: tone(-53%, -0.7);
	}
	@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
		background-color: tone(-53%, -0.1);
................................................................................
				//padding: calc((25% - 1em)/2) 0.15in;
				&, &::after { transition: 0.3s; }
				text-shadow: 1px 1px 1px black;
				&:hover{
					transform: scale(1.2);
				}
			}
			> a[href].bell, a[href].gear, a[href].pen {
				height: 2em;
				width: 2em;
				padding: 0.125in 0.05in;
				filter: drop-shadow(1px 1px 3px tone(-5%));
				&:hover {
					filter: drop-shadow(1px 1px 3px tone(-5%))
						drop-shadow(0 0 10px tone(-5%));
				}
			}
			> a[href].bell { content: url(/s/bell.svg); }
			> a[href].gear { content: url(/s/gear.svg); }
			> a[href].pen { content: url(/s/pen.svg); }
		}
	}
}

main {
	@extend %content;
	display: block;
................................................................................
			grid-gap: 0.1in;
			> .opt {
				padding: 0.1in;
				border-radius: 5px;
				border: 1px solid transparent;
				&.on {
					background-color: tone(-30%, -0.7);

					border-color: tone(-20%) transparent;
				}
				> button, > p, > a[href] { display: block; }
				> p { text-align: center; font-size: 80%; margin: 0; margin-top: 0.1in; }
				> button, > a[href] {
					width: max-content;
					margin: auto;
				}

Modified view/docskel.tpl from [e2ac83ad65] to [f103ec4227].

1
2
3
4
5

6
7
8
9
10
11
12
<!doctype html>
<html>
	<head>
		<title>@instance :: @title</title>
		<link rel="stylesheet" type="text/css" href="/s/style.css">

		<script type="text/javascript" src="/s/live.js" async></script>
	</head>
	<body class="@class"@attr>
		<header><div>
			<h1>@title</h1>
			<nav>
				<a accesskey="i" href="/instance"><u>i</u>nstance</a>





>







1
2
3
4
5
6
7
8
9
10
11
12
13
<!doctype html>
<html>
	<head>
		<title>@instance :: @title</title>
		<link rel="stylesheet" type="text/css" href="/s/style.css">
		<link rel="icon" href="/s/logo.svg">
		<script type="text/javascript" src="/s/live.js" async></script>
	</head>
	<body class="@class"@attr>
		<header><div>
			<h1>@title</h1>
			<nav>
				<a accesskey="i" href="/instance"><u>i</u>nstance</a>

Modified view/profile.tpl from [ae30d737ce] to [9ae0c0e533].

29
30
31
32
33
34
35
36
37

38
39
40
41
42
43
44
45
46
47
48
49
50
		</div>
	</form>
</div>

<form id="rel" class="modal" method="post">
<a href="#0" class="button">close</a><div>
	<menu>@relations</menu>
	<details>
		<summary>circles</summary>

		<button name="act" value="encircle">commit</button>
	</details>
	<details>
		<summary>sanctions</summary>
		<menu>
			@sanctions
			<div class="opt">
				<a class="neg button" href="/@:xid/report">report</a>
				<p>if this user is violating instance rules, you can report this behavior to moderation staff and ask them to take action. please do not report users simply because you dislike them; this is what the above options are for.</p>
			</div>
		</menu>
	</details>
</div></form>







|
|
>
|
<











29
30
31
32
33
34
35
36
37
38
39

40
41
42
43
44
45
46
47
48
49
50
		</div>
	</form>
</div>

<form id="rel" class="modal" method="post">
<a href="#0" class="button">close</a><div>
	<menu>@relations</menu>
	<div class="check-panel">
		@circles
	</div>
	<button name="act" value="circle">set circles</button>

	<details>
		<summary>sanctions</summary>
		<menu>
			@sanctions
			<div class="opt">
				<a class="neg button" href="/@:xid/report">report</a>
				<p>if this user is violating instance rules, you can report this behavior to moderation staff and ask them to take action. please do not report users simply because you dislike them; this is what the above options are for.</p>
			</div>
		</menu>
	</details>
</div></form>