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 +

Impressum / About Us