parsav  Diff

Differences From Artifact [03b39adc21]:

To Artifact [19457b4b7c]:


     3      3   local terra cs(s: rawstring)
     4      4   	return pstr { ptr = s, ct = lib.str.sz(s) }
     5      5   end
     6      6   
     7      7   local terra 
     8      8   render_profile(co: &lib.srv.convo, actor: &lib.store.actor)
     9      9   	var aux: lib.str.acc
    10         -	var auxp: pstr
    11     10   	if co.aid ~= 0 and co.who.id == actor.id then
    12         -		auxp = lib.str.plit '<a href="/conf/profile">alter</a>'
           11  +		aux:compose('<a href="/conf/profile?go=/',actor.xid,'">alter</a>')
    13     12   	elseif co.aid ~= 0 then
    14     13   		aux:compose('<a href="/', actor.xid, '/follow">follow</a><a href="/',
    15     14   			actor.xid, '/chat">chat</a>')
    16     15   		if co.who.rights.powers:affect_users() then
    17     16   			aux:lpush('<a href="/'):push(actor.xid,0):lpush('/ctl">control</a>')
    18     17   		end
    19         -		auxp = aux:finalize()
    20     18   	else
    21     19   		aux:compose('<a href="/', actor.xid, '/follow">remote follow</a>')
    22         -		auxp = aux:finalize()
    23     20   	end
           21  +	var auxp = aux:finalize()
    24     22   	var avistr: lib.str.acc if actor.origin == 0 then
    25     23   		avistr:compose('/avi/',actor.handle)
    26     24   	end
    27     25   	var timestr: int8[26] lib.osclock.ctime_r(&actor.knownsince, &timestr[0])
    28     26   
    29     27   	var strfbuf: int8[28*4]
    30     28   	var stats = co.srv:actor_stats(actor.id)
    31     29   		var sn_posts     = cs(lib.math.decstr_friendly(stats.posts, &strfbuf[ [strfbuf.type.N - 1] ]))
    32     30   		var sn_follows   = cs(lib.math.decstr_friendly(stats.follows, sn_posts.ptr - 1))
    33     31   		var sn_followers = cs(lib.math.decstr_friendly(stats.followers, sn_follows.ptr - 1))
    34     32   		var sn_mutuals   = cs(lib.math.decstr_friendly(stats.mutuals, sn_followers.ptr - 1))
    35     33   	var bio = lib.str.plit "<em>tall, dark, and mysterious</em>"
    36     34   	if actor.bio ~= nil then
    37         -		bio = lib.html.sanitize(cs(actor.bio), false)
           35  +		bio = lib.smackdown.html(cs(actor.bio))
    38     36   	end
    39     37   	var fullname = lib.render.nym(actor,0) defer fullname:free()
    40     38   	var profile = data.view.profile {
    41     39   		nym = fullname;
    42     40   		bio = bio;
    43     41   		xid = cs(actor.xid);
    44     42   		avatar = lib.trn(actor.origin == 0, pstr{ptr=avistr.buf,ct=avistr.sz},
................................................................................
    50     48   		timephrase = lib.trn(actor.origin == 0, lib.str.plit'joined', lib.str.plit'known since');
    51     49   
    52     50   		auxbtn = auxp;
    53     51   	}
    54     52   
    55     53   	var ret = profile:tostr()
    56     54   	if actor.origin == 0 then avistr:free() end
    57         -	if not (co.aid ~= 0 and co.who.id == actor.id) then auxp:free() end
           55  +	auxp:free() 
    58     56   	if actor.bio ~= nil then bio:free() end
    59     57   	return ret
    60     58   end
    61     59   
    62     60   return render_profile