liquid_feedback_frontend
diff env/ui/avatar.lua @ 211:4993b71b383f
First checkin of lf2 (frontend second generation) prototype
author | bsw |
---|---|
date | Wed Mar 02 20:06:26 2011 +0100 (2011-03-02) |
parents | |
children | 4f6e6b213fb8 |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/env/ui/avatar.lua Wed Mar 02 20:06:26 2011 +0100 1.3 @@ -0,0 +1,66 @@ 1.4 +local alphabet = { 1.5 + "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", 1.6 + "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", 1.7 + "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", 1.8 + "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", 1.9 + "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/" 1.10 +} 1.11 + 1.12 +local function encode_base64(str) 1.13 + local parts = {} 1.14 + local pos = 1 1.15 + local block_count = 0 1.16 + while pos <= #str do 1.17 + local s = string.sub(str, pos, pos + 2) 1.18 + local n = 0 1.19 + for i = 1, 3 do 1.20 + n = n * 256 1.21 + if i <= #s then 1.22 + n = n + string.byte(string.sub(s, i, i)) 1.23 + end 1.24 + end 1.25 + parts[#parts+1] = alphabet[math.floor(n / 262144) + 1] 1.26 + parts[#parts+1] = alphabet[math.floor(n / 4096) % 64 + 1] 1.27 + if #s > 1 then 1.28 + parts[#parts+1] = alphabet[math.floor(n / 64) % 64 + 1] 1.29 + else 1.30 + parts[#parts+1] = "=" 1.31 + end 1.32 + if #s > 2 then 1.33 + parts[#parts+1] = alphabet[n % 64 + 1] 1.34 + else 1.35 + parts[#parts+1] = "=" 1.36 + end 1.37 + block_count = block_count + 1 1.38 + if block_count == 19 then 1.39 + --parts[#parts+1] = "\r\n" 1.40 + block_count = 0 1.41 + end 1.42 + pos = pos + #s 1.43 + end 1.44 + if block_count > 0 then 1.45 + --parts[#parts+1] = "\r\n" 1.46 + end 1.47 + return table.concat(parts) 1.48 +end 1.49 + 1.50 +function ui.avatar(member, size) 1.51 + local base64_string 1.52 + 1.53 + if member.avatar_base64 then 1.54 + base64_string = member.avatar_base64 1.55 + else 1.56 + local member_image = MemberImage:by_pk(member.id, "avatar", true) 1.57 + if member_image then 1.58 + base64_string = encode_base64(member_image.data) 1.59 + else 1.60 + base64_string = "/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAwADABAREA/8QAGQABAAMBAQAAAAAAAAAAAAAAAAMGBwQC/8QAIxAAAgICAgEEAwAAAAAAAAAAAQIAAwQRBTEGEiEyYTVRcf/aAAgBAQAAPwDf4kN2TRjjd1ip/TFOTRkDdNiv/DJoiR3WCml7D0o3M55DOtzsp7HYkb9h+hHH51uDlJYjEDfuP2Jo1NgupSwdMNySJzcgC3H3gd+gzNCNMR9wBtgPuaXx4K8fQD36BOmJ5ZQ6FT0RozNeQrWrPuRegx1HH1rbn0o3RYbmlKoRAo6A0J6kGXlV4eM99vxXuVrK8uJBXHp19tKxZY1trWN8mOzFdjVWrYvyU7Es+L5cQAuRTv7WWXEyq8zGS+r4t1ODyP8AC3SgRES/+OfhaZ//2Q==" 1.61 + end 1.62 + member.avatar_base64 = base64_string 1.63 + member:save() 1.64 + end 1.65 + 1.66 + ui.tag{ tag = "img", attr = { src = "data:image/jpeg;base64," .. base64_string } } 1.67 + 1.68 +end 1.69 +