liquid_feedback_frontend

changeset 95:6a12fb7e4963

Suggestion API, draft preview, word based diff, multiple fixes
- Added suggestion API
- Initiative API: Drafts optionally delivered as rendered html fragment
- Initiative API: Fixed wrong output of revoked timestamp when using JSON
- Preview added for initiative drafts
- Improved (word based) diff added
- Improved suggestion list
- Added missing sorting of initiative in vote list
- Filter state for member page initiative lists
- Fixed wrong status output in member history
- Fixed wrongly closed div in layout
author bsw
date Mon Aug 30 21:52:19 2010 +0200 (2010-08-30)
parents 91671766a701
children d3fffad8612d
files LICENSE app/main/_layout/default.html app/main/api/initiative.lua app/main/api/suggestion.lua app/main/draft/_action/add.lua app/main/draft/diff.lua app/main/draft/new.lua app/main/initiative/_action/create.lua app/main/initiative/new.lua app/main/member/_list_supported_initiatives.lua app/main/member/history.lua app/main/member/show_tab.lua app/main/opinion/_action/update.lua app/main/suggestion/_list.lua app/main/vote/list.lua config/default.lua locale/translations.de.lua locale/translations.en.lua locale/translations.eo.lua locale/translations.fr.lua static/icons/emoticon_happy.png static/icons/emoticon_unhappy.png static/icons/emoticon_unhappy_red.png static/style.css
line diff
     1.1 --- a/LICENSE	Thu Aug 19 15:37:51 2010 +0200
     1.2 +++ b/LICENSE	Mon Aug 30 21:52:19 2010 +0200
     1.3 @@ -25,3 +25,16 @@
     1.4  icon set 1.3 by Mark James. [ http://www.famfamfam.com/lab/icons/silk/ ]
     1.5  His work is licensed under a Creative Commons Attribution 2.5 License.
     1.6  [ http://creativecommons.org/licenses/by/2.5/ ]
     1.7 +
     1.8 +The emoticons are taken from the following web pages:
     1.9 +http://de.wikipedia.org/w/index.php?title=Datei:Face-smile.svg and
    1.10 +http://de.wikipedia.org/w/index.php?title=Datei:Face-sad.svg
    1.11 +The author granted usage under the following terms:
    1.12 +"This file has been (or is hereby) released into the public domain by 
    1.13 +its author, The Tango! Desktop Project. This applies worldwide. In case
    1.14 +this is not legally possible: The Tango! Desktop Project grants anyone
    1.15 +the right to use this work for any purpose, without any conditions,
    1.16 +unless such conditions are required by law."
    1.17 +The orange and red smiley are modified versions of Face-sad.
    1.18 +
    1.19 +
     2.1 --- a/app/main/_layout/default.html	Thu Aug 19 15:37:51 2010 +0200
     2.2 +++ b/app/main/_layout/default.html	Mon Aug 30 21:52:19 2010 +0200
     2.3 @@ -60,7 +60,7 @@
     2.4          <div class="support vote_info" id="support">
     2.5            <!-- WEBMCP SLOT support -->
     2.6          </div>
     2.7 -        <div style="clear: left;" /></div>
     2.8 +        <div style="clear: left;"></div>
     2.9        </div>
    2.10      </div>
    2.11      <div class="main" id="default">
     3.1 --- a/app/main/api/initiative.lua	Thu Aug 19 15:37:51 2010 +0200
     3.2 +++ b/app/main/api/initiative.lua	Mon Aug 30 21:52:19 2010 +0200
     3.3 @@ -7,10 +7,15 @@
     3.4  local state          = param.get("state")
     3.5  local agreed         = param.get("agreed")
     3.6  local rank           = param.get("rank")
     3.7 -local search         = param.get("search")
     3.8 -local search_context = param.get("search_context") or "full"
     3.9 +--local search         = param.get("search")
    3.10 +--local search_context = param.get("search_context") or "full"
    3.11  local limit          = param.get("limit", atom.integer)
    3.12  local order          = param.get("order")
    3.13 +local render_draft   = param.get("render_draft")
    3.14 +
    3.15 +if render_draft and render_draft ~= "html" then
    3.16 +  error("unsupported render target, only 'html' is supported right now")
    3.17 +end
    3.18  
    3.19  local initiatives_selector = Initiative:new_selector()
    3.20    :join("issue", nil, "issue.id = initiative.issue_id")
    3.21 @@ -53,11 +58,13 @@
    3.22    initiatives_selector:add_where{ "initiative.rank = ?", rank }
    3.23  end
    3.24  
    3.25 +--[[
    3.26  if search then
    3.27    if search_context == "full" then
    3.28    elseif search_context == "title" then
    3.29    end
    3.30  end
    3.31 +--]]
    3.32  
    3.33  if order == "supporter_count" then
    3.34    initiatives_selector:add_order_by("initiative.supporter_count")
    3.35 @@ -154,7 +161,13 @@
    3.36        return format.timestamp(record.created)
    3.37      end
    3.38    },
    3.39 -  { name = "revoked",                   field = "initiative.revoked" },
    3.40 +  {
    3.41 +    name = "revoked",
    3.42 +    field = "initiative.revoked",
    3.43 +    func = function(record)
    3.44 +      return format.timestamp(record.revoked)
    3.45 +    end
    3.46 +  },
    3.47    { name = "suggested_initiative_id",   field = "initiative.suggested_initiative_id" },
    3.48    { name = "admitted",                  field = "initiative.admitted" },
    3.49    { name = "issue_population",          field = "issue.population" },
    3.50 @@ -185,14 +198,18 @@
    3.51    {
    3.52      name = "current_draft_content",
    3.53      func = function(record)
    3.54 -      return record.current_draft.content
    3.55 +      if render_draft then
    3.56 +        return record.current_draft:get_content(render_draft)
    3.57 +      else
    3.58 +        return record.current_draft.content
    3.59 +      end
    3.60      end
    3.61    }
    3.62  }
    3.63  
    3.64  util.autoapi{
    3.65    relation_name = "initiative",
    3.66 -  selector = initiatives_selector,
    3.67 -  fields = fields,
    3.68 -  api_engine = api_engine
    3.69 +  selector      = initiatives_selector,
    3.70 +  fields        = fields,
    3.71 +  api_engine    = api_engine
    3.72  }
    3.73 \ No newline at end of file
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/app/main/api/suggestion.lua	Mon Aug 30 21:52:19 2010 +0200
     4.3 @@ -0,0 +1,56 @@
     4.4 +local id     = param.get("id")
     4.5 +local min_id = param.get("min_id")
     4.6 +local max_id = param.get("max_id")
     4.7 +local initiative_id = param.get("initiative_id")
     4.8 +local order  = param.get("order")
     4.9 +local limit  = param.get("limit", atom.integer)
    4.10 +
    4.11 +local suggestions_selector = Suggestion:new_selector()
    4.12 +
    4.13 +if id then
    4.14 +  suggestions_selector:add_where{"suggestion.id = ?", id}
    4.15 +end
    4.16 +
    4.17 +if min_id then
    4.18 +  suggestions_selector:add_where{"suggestion.id >= ?", min_id}
    4.19 +end
    4.20 +
    4.21 +if max_id then
    4.22 +  suggestions_selector:add_where{"suggestion.id <= ?", max_id}
    4.23 +end
    4.24 +
    4.25 +if order == "id_desc" then
    4.26 +  suggestions_selector:add_order_by("suggestion.id DESC")
    4.27 +else
    4.28 +  suggestions_selector:add_order_by("suggestion.id")
    4.29 +end
    4.30 +
    4.31 +if limit then
    4.32 +  suggestions_selector:limit(limit)
    4.33 +end
    4.34 +
    4.35 +local api_engine = param.get("api_engine") or "xml"
    4.36 +
    4.37 +local fields = {
    4.38 +
    4.39 +  { name = "id",                       field = "suggestion.id" },
    4.40 +  { name = "initiative_id",            field = "suggestion.initiative_id" },
    4.41 +  { name = "name",                     field = "suggestion.name" },
    4.42 +  { name = "description",              field = "suggestion.description" },
    4.43 +  { name = "minus2_unfulfilled_count", field = "suggestion.minus2_unfulfilled_count" },
    4.44 +  { name = "minus2_fulfilled_count",   field = "suggestion.minus2_fulfilled_count" },
    4.45 +  { name = "minus1_unfulfilled_count", field = "suggestion.minus1_unfulfilled_count" },
    4.46 +  { name = "minus1_fulfilled_count",   field = "suggestion.minus1_fulfilled_count" },
    4.47 +  { name = "plus1_unfulfilled_count",  field = "suggestion.plus1_unfulfilled_count" },
    4.48 +  { name = "plus1_fulfilled_count",    field = "suggestion.plus1_fulfilled_count" },
    4.49 +  { name = "plus2_unfulfilled_count",  field = "suggestion.plus2_unfulfilled_count" },
    4.50 +  { name = "plus2_fulfilled_count",    field = "suggestion.plus2_fulfilled_count" },
    4.51 +
    4.52 +}
    4.53 +
    4.54 +util.autoapi{
    4.55 +  relation_name = "suggestion",
    4.56 +  selector      = suggestions_selector,
    4.57 +  fields        = fields,
    4.58 +  api_engine    = api_engine
    4.59 +}
    4.60 \ No newline at end of file
     5.1 --- a/app/main/draft/_action/add.lua	Thu Aug 19 15:37:51 2010 +0200
     5.2 +++ b/app/main/draft/_action/add.lua	Mon Aug 30 21:52:19 2010 +0200
     5.3 @@ -34,6 +34,9 @@
     5.4    error("invalid formatting engine!")
     5.5  end
     5.6  
     5.7 +if param.get("preview") then
     5.8 +  return false
     5.9 +end
    5.10  
    5.11  local draft = Draft:new()
    5.12  draft.author_id = app.session.member.id
     6.1 --- a/app/main/draft/diff.lua	Thu Aug 19 15:37:51 2010 +0200
     6.2 +++ b/app/main/draft/diff.lua	Mon Aug 30 21:52:19 2010 +0200
     6.3 @@ -22,92 +22,73 @@
     6.4  local old_draft = Draft:by_id(old_draft_id)
     6.5  local new_draft = Draft:by_id(new_draft_id)
     6.6  
     6.7 +local old_draft_content = string.gsub(string.gsub(old_draft.content, "\n", " ###ENTER###\n"), " ", "\n")
     6.8 +local new_draft_content = string.gsub(string.gsub(new_draft.content, "\n", " ###ENTER###\n"), " ", "\n")
     6.9 +
    6.10  local key = multirand.string(26, "123456789bcdfghjklmnpqrstvwxyz");
    6.11  
    6.12  local old_draft_filename = encode.file_path(request.get_app_basepath(), 'tmp', "diff-" .. key .. "-old.tmp")
    6.13  local new_draft_filename = encode.file_path(request.get_app_basepath(), 'tmp', "diff-" .. key .. "-new.tmp")
    6.14  
    6.15  local old_draft_file = assert(io.open(old_draft_filename, "w"))
    6.16 -old_draft_file:write(old_draft.content)
    6.17 +old_draft_file:write(old_draft_content)
    6.18  old_draft_file:write("\n")
    6.19  old_draft_file:close()
    6.20  
    6.21  local new_draft_file = assert(io.open(new_draft_filename, "w"))
    6.22 -new_draft_file:write(new_draft.content)
    6.23 +new_draft_file:write(new_draft_content)
    6.24  new_draft_file:write("\n")
    6.25  new_draft_file:close()
    6.26  
    6.27 -local output, err, status = os.pfilter(nil, "sh", "-c", "diff -U 100000 '" .. old_draft_filename .. "' '" .. new_draft_filename .. "' | grep -v ^--- | grep -v ^+++ | grep -v ^@")
    6.28 +local output, err, status = os.pfilter(nil, "sh", "-c", "diff -U 1000000000 '" .. old_draft_filename .. "' '" .. new_draft_filename .. "' | grep -v ^--- | grep -v ^+++ | grep -v ^@")
    6.29  
    6.30  os.remove(old_draft_filename)
    6.31  os.remove(new_draft_filename)
    6.32  
    6.33 +local last_state = "first_run"
    6.34 +
    6.35 +local function process_line(line)
    6.36 +  local state_char = string.sub(line, 1, 1)
    6.37 +  local state
    6.38 +  if state_char == "+" then
    6.39 +    state = "added"
    6.40 +  elseif state_char == "-" then
    6.41 +    state = "removed"
    6.42 +  elseif state_char == " " then
    6.43 +    state = "unchanged"
    6.44 +  end
    6.45 +  local state_changed = false
    6.46 +  if state ~= last_state then
    6.47 +    if last_state ~= "first_run" then
    6.48 +      slot.put("</span> ")
    6.49 +    end
    6.50 +    last_state = state
    6.51 +    state_changed = true
    6.52 +    slot.put("<span class=\"diff_" .. tostring(state) .. "\">")
    6.53 +  end
    6.54 +
    6.55 +  line = string.sub(line, 2, #line)
    6.56 +  if line ~= "###ENTER###" then
    6.57 +    if not state_changed then
    6.58 +      slot.put(" ")
    6.59 +    end
    6.60 +    slot.put(line)
    6.61 +  else
    6.62 +    slot.put("<br />")
    6.63 +  end
    6.64 +end
    6.65 +
    6.66  if not status then
    6.67    ui.field.text{ value = _"The drafts do not differ" }
    6.68  else
    6.69 -  slot.put('<table class="diff">')
    6.70 -  slot.put('<tr><th width="50%">' .. _"Old draft revision" .. '</th><th width="50%">' .. _"New draft revision" .. '</th></tr>')
    6.71 -
    6.72 -  local last_state = "unchanged"
    6.73 -  local lines = {}
    6.74 -  local removed_lines = nil
    6.75 -
    6.76 -  local function process_line(line)
    6.77 -    local state = "unchanged"
    6.78 -    local char = line:sub(1,1)
    6.79 -    line = line:sub(2)
    6.80 -    state = "unchanged"
    6.81 -    if char == "-" then
    6.82 -      state = "-"
    6.83 -    elseif char == "+" then
    6.84 -      state = "+"
    6.85 -    elseif char == "!" then
    6.86 -      state = "eof"
    6.87 +  ui.container{
    6.88 +    tag = "div",
    6.89 +    attr = { class = "diff" },
    6.90 +    content = function()
    6.91 +      output = output:gsub("[^\n\r]+", function(line)
    6.92 +        process_line(line)
    6.93 +      end)
    6.94      end
    6.95 -    if last_state == "unchanged" then
    6.96 -      if state == "unchanged" then
    6.97 -        lines[#lines+1] = line
    6.98 -      elseif (state == "-") or (state == "+") or (state == "eof") then
    6.99 -        local text = table.concat(lines, "\n")
   6.100 -        slot.put("<tr><td>", encode.html_newlines(encode.html(text)), "</td><td>", encode.html_newlines(encode.html(text)), "</td></tr>")
   6.101 -        lines = { line }
   6.102 -      end
   6.103 -    elseif last_state == "-" then
   6.104 -      if state == "-" then
   6.105 -        lines[#lines+1] = line
   6.106 -      elseif state == "+" then
   6.107 -        removed_lines = lines
   6.108 -        lines = { line }
   6.109 -      elseif (state == "unchanged") or (state == "eof") then
   6.110 -        local text = table.concat(lines,"\n")
   6.111 -        slot.put('<tr><td class="removed">', encode.html_newlines(encode.html(text)), "</td><td></td></tr>")
   6.112 -        lines = { line }
   6.113 -      end
   6.114 -    elseif last_state == "+" then
   6.115 -      if state == "+" then
   6.116 -        lines[#lines+1] = line
   6.117 -      elseif (state == "-") or (state == "unchanged") or (state == "eof") then
   6.118 -        if removed_lines then
   6.119 -          local text = table.concat(lines, "\n")
   6.120 -          local removed_text = table.concat(removed_lines, "\n")
   6.121 -          slot.put('<tr><td class="removed">', encode.html_newlines(encode.html(removed_text)), '</td><td class="added">', encode.html_newlines(encode.html(text)), "</td></tr>")
   6.122 -        else
   6.123 -          local text = table.concat(lines, "\n")
   6.124 -          slot.put('<tr><td></td><td class="added">', encode.html_newlines(encode.html(text)), "</td></tr>")
   6.125 -        end
   6.126 -        removed_lines = nil
   6.127 -        lines = { line }
   6.128 -      end
   6.129 -    end
   6.130 -    last_state = state
   6.131 -  end
   6.132 -
   6.133 -  output = output .. " "
   6.134 -  output = output:gsub("[^\n\r]+", function(line)
   6.135 -    process_line(line)
   6.136 -  end)
   6.137 -  process_line("!")
   6.138 -
   6.139 -  slot.put("</table>")
   6.140 +  }
   6.141  end 
   6.142  
     7.1 --- a/app/main/draft/new.lua	Thu Aug 19 15:37:51 2010 +0200
     7.2 +++ b/app/main/draft/new.lua	Mon Aug 30 21:52:19 2010 +0200
     7.3 @@ -14,6 +14,8 @@
     7.4    }
     7.5  end)
     7.6  
     7.7 +
     7.8 +
     7.9  ui.form{
    7.10    record = initiative.current_draft,
    7.11    attr = { class = "vertical" },
    7.12 @@ -21,7 +23,7 @@
    7.13    action = "add",
    7.14    params = { initiative_id = initiative.id },
    7.15    routing = {
    7.16 -    default = {
    7.17 +    ok = {
    7.18        mode = "redirect",
    7.19        module = "initiative",
    7.20        view = "show",
    7.21 @@ -31,6 +33,22 @@
    7.22    content = function()
    7.23  
    7.24      ui.field.text{ label = _"Author", value = app.session.member.name, readonly = true }
    7.25 +
    7.26 +    if param.get("preview") then
    7.27 +      ui.container{
    7.28 +        attr = { class = "draft_content wiki" },
    7.29 +        content = function()
    7.30 +          slot.put(format.wiki_text(param.get("content"), param.get("formatting_engine")))
    7.31 +        end
    7.32 +      }
    7.33 +      slot.put("<br />")
    7.34 +      ui.submit{ text = _"Save" }
    7.35 +      slot.put("<br />")
    7.36 +      slot.put("<br />")
    7.37 +    end
    7.38 +    slot.put("<br />")
    7.39 +
    7.40 +
    7.41      ui.field.select{
    7.42        label = _"Wiki engine",
    7.43        name = "formatting_engine",
    7.44 @@ -45,9 +63,11 @@
    7.45        label = _"Content",
    7.46        name = "content",
    7.47        multiline = true,
    7.48 -      attr = { style = "height: 50ex;" }
    7.49 +      attr = { style = "height: 50ex;" },
    7.50 +      value = param.get("content")
    7.51     }
    7.52  
    7.53 +    ui.submit{ name = "preview", text = _"Preview" }
    7.54      ui.submit{ text = _"Save" }
    7.55    end
    7.56  }
     8.1 --- a/app/main/initiative/_action/create.lua	Thu Aug 19 15:37:51 2010 +0200
     8.2 +++ b/app/main/initiative/_action/create.lua	Mon Aug 30 21:52:19 2010 +0200
     8.3 @@ -54,6 +54,9 @@
     8.4    error("invalid formatting engine!")
     8.5  end
     8.6  
     8.7 +if param.get("preview") then
     8.8 +  return
     8.9 +end
    8.10  
    8.11  
    8.12  local initiative = Initiative:new()
     9.1 --- a/app/main/initiative/new.lua	Thu Aug 19 15:37:51 2010 +0200
     9.2 +++ b/app/main/initiative/new.lua	Mon Aug 30 21:52:19 2010 +0200
     9.3 @@ -41,7 +41,7 @@
     9.4          foreign_records = tmp,
     9.5          foreign_id = "id",
     9.6          foreign_name = "name",
     9.7 -        value = (area.default_policy or {}).id
     9.8 +        value = area.default_policy and area.default_policy.id or param.get("policy_id", atom.integer)
     9.9        }
    9.10        ui.tag{
    9.11          tag = "div",
    9.12 @@ -70,9 +70,57 @@
    9.13          end
    9.14        }
    9.15      end
    9.16 +    
    9.17 +    if param.get("preview") then
    9.18 +      ui.heading{ level = 1, content = encode.html(param.get("name")) }
    9.19 +      local discussion_url = param.get("discussion_url")
    9.20 +      ui.container{
    9.21 +        attr = { class = "ui_field_label" },
    9.22 +        content = _"Discussion with initiators"
    9.23 +      }
    9.24 +      ui.tag{
    9.25 +        tag = "span",
    9.26 +        content = function()
    9.27 +          if discussion_url:find("^https?://") then
    9.28 +            if discussion_url and #discussion_url > 0 then
    9.29 +              ui.link{
    9.30 +                attr = {
    9.31 +                  class = "actions",
    9.32 +                  target = "_blank",
    9.33 +                  title = discussion_url
    9.34 +                },
    9.35 +                content = discussion_url,
    9.36 +                external = discussion_url
    9.37 +              }
    9.38 +            end
    9.39 +          else
    9.40 +            slot.put(encode.html(discussion_url))
    9.41 +          end
    9.42 +        end
    9.43 +      }
    9.44 +      ui.container{
    9.45 +        attr = { class = "draft_content wiki" },
    9.46 +        content = function()
    9.47 +          slot.put(format.wiki_text(param.get("draft"), param.get("formatting_engine")))
    9.48 +        end
    9.49 +      }
    9.50 +      slot.put("<br />")
    9.51 +      ui.submit{ text = _"Save" }
    9.52 +      slot.put("<br />")
    9.53 +      slot.put("<br />")
    9.54 +    end
    9.55      slot.put("<br />")
    9.56 -    ui.field.text{ label = _"Title of initiative", name = "name" }
    9.57 -    ui.field.text{ label = _"Discussion URL", name = "discussion_url" }
    9.58 +
    9.59 +    ui.field.text{
    9.60 +      label = _"Title of initiative",
    9.61 +      name  = "name",
    9.62 +      value = param.get("name")
    9.63 +    }
    9.64 +    ui.field.text{
    9.65 +      label = _"Discussion URL",
    9.66 +      name = "discussion_url",
    9.67 +      value = param.get("discussion_url")
    9.68 +    }
    9.69      ui.field.select{
    9.70        label = _"Wiki engine",
    9.71        name = "formatting_engine",
    9.72 @@ -81,9 +129,17 @@
    9.73          { id = "compat", name = _"Traditional wiki syntax" }
    9.74        },
    9.75        foreign_id = "id",
    9.76 -      foreign_name = "name"
    9.77 +      foreign_name = "name",
    9.78 +      value = param.get("formatting_engine")
    9.79      }
    9.80 -    ui.field.text{ label = _"Draft", name = "draft", multiline = true, attr = { style = "height: 50ex;" } }
    9.81 +    ui.field.text{
    9.82 +      label = _"Draft",
    9.83 +      name = "draft",
    9.84 +      multiline = true, 
    9.85 +      attr = { style = "height: 50ex;" },
    9.86 +      value = param.get("draft")
    9.87 +    }
    9.88 +    ui.submit{ name = "preview", text = _"Preview" }
    9.89      ui.submit{ text = _"Save" }
    9.90    end
    9.91  }
    9.92 \ No newline at end of file
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/app/main/member/_list_supported_initiatives.lua	Mon Aug 30 21:52:19 2010 +0200
    10.3 @@ -0,0 +1,72 @@
    10.4 +local initiatives_selector = param.get("initiatives_selector", "table")
    10.5 +
    10.6 +ui.filters{
    10.7 +  label = _"Filter",
    10.8 +  name = "filter_voting",
    10.9 +  selector = initiatives_selector,
   10.10 +  {
   10.11 +    label = _"Filter",
   10.12 +    {
   10.13 +      name = "open",
   10.14 +      label = _"Open",
   10.15 +      selector_modifier = function(selector)
   10.16 +          selector:add_where("issue.closed ISNULL")
   10.17 +      end
   10.18 +    },
   10.19 +    {
   10.20 +      name = "new",
   10.21 +      label = _"New",
   10.22 +      selector_modifier = function(selector)
   10.23 +        selector:add_where("issue.accepted ISNULL AND issue.closed ISNULL")
   10.24 +      end
   10.25 +    },
   10.26 +    {
   10.27 +      name = "accepted",
   10.28 +      label = _"In discussion",
   10.29 +      selector_modifier = function(selector)
   10.30 +        selector:add_where("issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.closed ISNULL")
   10.31 +      end
   10.32 +    },
   10.33 +    {
   10.34 +      name = "half_frozen",
   10.35 +      label = _"Frozen",
   10.36 +      selector_modifier = function(selector)
   10.37 +        selector:add_where("issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL")
   10.38 +      end
   10.39 +    },
   10.40 +    {
   10.41 +      name = "frozen",
   10.42 +      label = _"Voting",
   10.43 +      selector_modifier = function(selector)
   10.44 +        selector:add_where("issue.fully_frozen NOTNULL AND issue.closed ISNULL")
   10.45 +        filter_voting = true
   10.46 +      end
   10.47 +    },
   10.48 +    {
   10.49 +      name = "finished",
   10.50 +      label = _"Finished",
   10.51 +      selector_modifier = function(selector)
   10.52 +        selector:add_where("issue.closed NOTNULL AND issue.fully_frozen NOTNULL")
   10.53 +      end
   10.54 +    },
   10.55 +    {
   10.56 +      name = "cancelled",
   10.57 +      label = _"Cancelled",
   10.58 +      selector_modifier = function(selector)
   10.59 +        selector:add_where("issue.closed NOTNULL AND issue.fully_frozen ISNULL")
   10.60 +      end
   10.61 +    },
   10.62 +    {
   10.63 +      name = "any",
   10.64 +      label = _"Any",
   10.65 +      selector_modifier = function(selector) end
   10.66 +    },
   10.67 +  },
   10.68 +  content = function()
   10.69 +    execute.view{
   10.70 +      module = "initiative",
   10.71 +      view = "_list",
   10.72 +      params = { initiatives_selector = initiatives_selector }
   10.73 +    }
   10.74 +  end
   10.75 +}
    11.1 --- a/app/main/member/history.lua	Thu Aug 19 15:37:51 2010 +0200
    11.2 +++ b/app/main/member/history.lua	Mon Aug 30 21:52:19 2010 +0200
    11.3 @@ -55,7 +55,7 @@
    11.4            }
    11.5            ui.tag{
    11.6              tag = "td",
    11.7 -            content =  member.active and _'activated' or _'deactivated',
    11.8 +            content = entry.active and _'activated' or _'deactivated',
    11.9            }
   11.10            ui.tag{
   11.11              tag = "td",
    12.1 --- a/app/main/member/show_tab.lua	Thu Aug 19 15:37:51 2010 +0200
    12.2 +++ b/app/main/member/show_tab.lua	Mon Aug 30 21:52:19 2010 +0200
    12.3 @@ -152,12 +152,13 @@
    12.4  }
    12.5  
    12.6  local supported_initiatives_selector = member:get_reference_selector("supported_initiatives")
    12.7 +
    12.8  tabs[#tabs+1] = {
    12.9    name = "supported_initiatives",
   12.10    label = _"Supported initiatives" .. " (" .. tostring(supported_initiatives_selector:count()) .. ")",
   12.11    icon = { static = "icons/16/thumb_up_green.png" },
   12.12 -  module = "initiative",
   12.13 -  view = "_list",
   12.14 +  module = "member",
   12.15 +  view = "_list_supported_initiatives",
   12.16    params = { initiatives_selector = supported_initiatives_selector },
   12.17  }
   12.18  
   12.19 @@ -166,8 +167,8 @@
   12.20    name = "initiatied_initiatives",
   12.21    label = _"Initiated initiatives" .. " (" .. tostring(initiated_initiatives_selector:count()) .. ")",
   12.22    icon = { static = "icons/16/user_edit.png" },
   12.23 -  module = "initiative",
   12.24 -  view = "_list",
   12.25 +  module = "member",
   12.26 +  view = "_list_supported_initiatives",
   12.27    params = { initiatives_selector = initiated_initiatives_selector },
   12.28  }
   12.29  
    13.1 --- a/app/main/opinion/_action/update.lua	Thu Aug 19 15:37:51 2010 +0200
    13.2 +++ b/app/main/opinion/_action/update.lua	Mon Aug 30 21:52:19 2010 +0200
    13.3 @@ -28,7 +28,7 @@
    13.4    if opinion then
    13.5      opinion:destroy()
    13.6    end
    13.7 -  slot.put_into("notice", _"Your opinion has been deleted")
    13.8 +  slot.put_into("notice", _"Your rating has been deleted")
    13.9    return
   13.10  end
   13.11  
   13.12 @@ -52,4 +52,4 @@
   13.13  
   13.14  opinion:save()
   13.15  
   13.16 -slot.put_into("notice", _"Your opinion has been updated")
   13.17 +slot.put_into("notice", _"Your rating has been updated")
    14.1 --- a/app/main/suggestion/_list.lua	Thu Aug 19 15:37:51 2010 +0200
    14.2 +++ b/app/main/suggestion/_list.lua	Mon Aug 30 21:52:19 2010 +0200
    14.3 @@ -84,21 +84,20 @@
    14.4                end
    14.5              },
    14.6              {
    14.7 -              label = _"Collective opinion",
    14.8 +              label = _"Collective opinion of supporters",
    14.9                label_attr = { style = "width: 101px;" },
   14.10                content = function(record)
   14.11                  if record.minus2_unfulfilled_count then
   14.12 -                  local max_value = record.initiative.issue.population
   14.13 +                  local max_value = record.initiative.supporter_count
   14.14                    ui.bargraph{
   14.15                      max_value = max_value,
   14.16 -                    width = 50,
   14.17 +                    width = 100,
   14.18                      bars = {
   14.19 -                      { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.minus2_fulfilled_count - record.minus1_fulfilled_count },
   14.20 +                      { color = "#0a0", value = record.plus2_unfulfilled_count + record.plus2_fulfilled_count },
   14.21 +                      { color = "#8f8", value = record.plus1_unfulfilled_count + record.plus1_fulfilled_count },
   14.22 +                      { color = "#eee", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.minus2_fulfilled_count - record.minus1_fulfilled_count - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count},
   14.23                        { color = "#f88", value = record.minus1_unfulfilled_count + record.minus1_fulfilled_count },
   14.24                        { color = "#a00", value = record.minus2_unfulfilled_count + record.minus2_fulfilled_count },
   14.25 -                      { color = "#0a0", value = record.plus2_unfulfilled_count + record.plus2_fulfilled_count },
   14.26 -                      { color = "#8f8", value = record.plus1_unfulfilled_count + record.plus1_fulfilled_count },
   14.27 -                      { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count },
   14.28                      }
   14.29                    }
   14.30                  end
   14.31 @@ -106,6 +105,7 @@
   14.32              },
   14.33              {
   14.34                label = _"My opinion",
   14.35 +              label_attr = { style = "width: 130px; font-style: italic;" },
   14.36                content = function(record)
   14.37                  local degree
   14.38                  local opinion
   14.39 @@ -120,67 +120,53 @@
   14.40                    content = function()
   14.41                      if app.session.member_id then
   14.42                        if initiative.issue.state == "voting" or initiative.issue.state == "closed" then
   14.43 -                        ui.tag{
   14.44 -                          tag = "span",
   14.45 -                          attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
   14.46 -                          content = _"must not"
   14.47 -                        }
   14.48 -                        ui.tag{
   14.49 -                          tag = "span",
   14.50 -                          attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
   14.51 -                          content = _"should not"
   14.52 -                        }
   14.53 -                        ui.tag{
   14.54 -                          tag = "span",
   14.55 -                          attr = { class = "action" .. (degree == nil and " active" or "") },
   14.56 -                          content = _"neutral"
   14.57 -                        }
   14.58 -                        ui.tag{
   14.59 -                          tag = "span",
   14.60 -                          attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
   14.61 -                          content = _"should"
   14.62 -                        }
   14.63 -                        ui.tag{
   14.64 -                          tag = "span",
   14.65 -                          attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
   14.66 -                          content = _"must"
   14.67 -                        }
   14.68 +                        if degree == -2 then
   14.69 +                          ui.tag{
   14.70 +                            tag = "span",
   14.71 +                            attr = {
   14.72 +                              class = "action" .. (degree == -2 and " active_red2" or "")
   14.73 +                            },
   14.74 +                            content = _"must not"
   14.75 +                          }
   14.76 +                        end
   14.77 +                        if degree == -1 then
   14.78 +                          ui.tag{
   14.79 +                            tag = "span",
   14.80 +                            attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
   14.81 +                            content = _"should not"
   14.82 +                          }
   14.83 +                        end
   14.84 +                        if degree == nil then
   14.85 +                          ui.tag{
   14.86 +                            tag = "span",
   14.87 +                            attr = { class = "action" .. (degree == nil and " active" or "") },
   14.88 +                            content = _"neutral"
   14.89 +                          }
   14.90 +                        end
   14.91 +                        if degree == 1 then
   14.92 +                          ui.tag{
   14.93 +                            tag = "span",
   14.94 +                            attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
   14.95 +                            content = _"should"
   14.96 +                          }
   14.97 +                        end
   14.98 +                        if degree == 2 then
   14.99 +                          ui.tag{
  14.100 +                            tag = "span",
  14.101 +                            attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
  14.102 +                            content = _"must"
  14.103 +                          }
  14.104 +                        end
  14.105                        else
  14.106                          ui.link{
  14.107 -                          attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
  14.108 -                          text = _"must not",
  14.109 +                          attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
  14.110 +                          text = _"must",
  14.111                            module = "opinion",
  14.112                            action = "update",
  14.113                            routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
  14.114                            params = {
  14.115                              suggestion_id = record.id,
  14.116 -                            degree = -2
  14.117 -                          },
  14.118 -                          partial = partial
  14.119 -                        }
  14.120 -                        slot.put(" ")
  14.121 -                        ui.link{
  14.122 -                          attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
  14.123 -                          text = _"should not",
  14.124 -                          module = "opinion",
  14.125 -                          action = "update",
  14.126 -                          routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
  14.127 -                          params = {
  14.128 -                            suggestion_id = record.id,
  14.129 -                            degree = -1
  14.130 -                          },
  14.131 -                          partial = partial
  14.132 -                        }
  14.133 -                        slot.put(" ")
  14.134 -                        ui.link{
  14.135 -                          attr = { class = "action" .. (degree == nil and " active" or "") },
  14.136 -                          text = _"neutral",
  14.137 -                          module = "opinion",
  14.138 -                          action = "update",
  14.139 -                          routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
  14.140 -                          params = {
  14.141 -                            suggestion_id = record.id,
  14.142 -                            delete = true
  14.143 +                            degree = 2
  14.144                            },
  14.145                            partial = partial
  14.146                          }
  14.147 @@ -199,14 +185,40 @@
  14.148                          }
  14.149                          slot.put(" ")
  14.150                          ui.link{
  14.151 -                          attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
  14.152 -                          text = _"must",
  14.153 +                          attr = { class = "action" .. (degree == nil and " active" or "") },
  14.154 +                          text = _"neutral",
  14.155                            module = "opinion",
  14.156                            action = "update",
  14.157                            routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
  14.158                            params = {
  14.159                              suggestion_id = record.id,
  14.160 -                            degree = 2
  14.161 +                            delete = true
  14.162 +                          },
  14.163 +                          partial = partial
  14.164 +                        }
  14.165 +                        slot.put(" ")
  14.166 +                        ui.link{
  14.167 +                          attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
  14.168 +                          text = _"should not",
  14.169 +                          module = "opinion",
  14.170 +                          action = "update",
  14.171 +                          routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
  14.172 +                          params = {
  14.173 +                            suggestion_id = record.id,
  14.174 +                            degree = -1
  14.175 +                          },
  14.176 +                          partial = partial
  14.177 +                        }
  14.178 +                        slot.put(" ")
  14.179 +                        ui.link{
  14.180 +                          attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
  14.181 +                          text = _"must not",
  14.182 +                          module = "opinion",
  14.183 +                          action = "update",
  14.184 +                          routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
  14.185 +                          params = {
  14.186 +                            suggestion_id = record.id,
  14.187 +                            degree = -2
  14.188                            },
  14.189                            partial = partial
  14.190                          }
  14.191 @@ -219,71 +231,48 @@
  14.192                end
  14.193              },
  14.194              {
  14.195 -              content = function(record)
  14.196 -                local opinion
  14.197 -                if app.session.member_id then
  14.198 -                  opinion = Opinion:by_pk(app.session.member.id, record.id)
  14.199 -                end
  14.200 -                if opinion and not opinion.fulfilled then
  14.201 -                  ui.image{ static = "icons/16/cross.png" }
  14.202 -                end
  14.203 -              end
  14.204 -            },
  14.205 -            {
  14.206                label = _"Suggestion currently not implemented",
  14.207                label_attr = { style = "width: 101px;" },
  14.208                content = function(record)
  14.209                  if record.minus2_unfulfilled_count then
  14.210 -                  local max_value = record.initiative.issue.population
  14.211 +                  local max_value = record.initiative.supporter_count
  14.212                    ui.bargraph{
  14.213                      max_value = max_value,
  14.214 -                    width = 50,
  14.215 +                    width = 100,
  14.216                      bars = {
  14.217 -                      { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count },
  14.218 -                      { color = "#f88", value = record.minus1_unfulfilled_count },
  14.219 -                      { color = "#a00", value = record.minus2_unfulfilled_count },
  14.220                        { color = "#0a0", value = record.plus2_unfulfilled_count },
  14.221                        { color = "#8f8", value = record.plus1_unfulfilled_count },
  14.222 -                      { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count },
  14.223 +                      { color = "#eee", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count },
  14.224 +                      { color = "#f88", value = record.minus1_unfulfilled_count },
  14.225 +                      { color = "#a00", value = record.minus2_unfulfilled_count },
  14.226                      }
  14.227                    }
  14.228                  end
  14.229                end
  14.230              },
  14.231              {
  14.232 -              content = function(record)
  14.233 -                local opinion
  14.234 -                if app.session.member_id then
  14.235 -                  opinion = Opinion:by_pk(app.session.member.id, record.id)
  14.236 -                end
  14.237 -                if opinion and opinion.fulfilled then
  14.238 -                    ui.image{ static = "icons/16/tick.png" }
  14.239 -                end
  14.240 -              end
  14.241 -            },
  14.242 -            {
  14.243                label = _"Suggestion currently implemented",
  14.244                label_attr = { style = "width: 101px;" },
  14.245                content = function(record)
  14.246                  if record.minus2_fulfilled_count then
  14.247 -                  local max_value = record.initiative.issue.population
  14.248 +                  local max_value = record.initiative.supporter_count
  14.249                    ui.bargraph{
  14.250                      max_value = max_value,
  14.251 -                    width = 50,
  14.252 +                    width = 100,
  14.253                      bars = {
  14.254 -                      { color = "#ddd", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count },
  14.255 +                      { color = "#0a0", value = record.plus2_fulfilled_count },
  14.256 +                      { color = "#8f8", value = record.plus1_fulfilled_count },
  14.257 +                      { color = "#eee", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count},
  14.258                        { color = "#f88", value = record.minus1_fulfilled_count },
  14.259                        { color = "#a00", value = record.minus2_fulfilled_count },
  14.260 -                      { color = "#0a0", value = record.plus2_fulfilled_count },
  14.261 -                      { color = "#8f8", value = record.plus1_fulfilled_count },
  14.262 -                      { color = "#ddd", value = max_value - record.plus1_fulfilled_count - record.plus2_fulfilled_count },
  14.263                      }
  14.264                    }
  14.265                  end
  14.266                end
  14.267              },
  14.268              {
  14.269 -              label_attr = { style = "width: 200px;" },
  14.270 +              label = app.session.member_id and _"I consider suggestion as" or nil,
  14.271 +              label_attr = { style = "width: 100px; font-style: italic;" },
  14.272                content = function(record)
  14.273                  local degree
  14.274                  local opinion
  14.275 @@ -294,48 +283,38 @@
  14.276                    degree = opinion.degree
  14.277                  end
  14.278                  if opinion then
  14.279 -                  if not opinion.fulfilled then
  14.280 -                    local text = ""
  14.281 -                    if opinion.degree > 0 then
  14.282 -                      text = _"Mark suggestion as implemented and express satisfaction"
  14.283 -                    else
  14.284 -                      text = _"Mark suggestion as implemented and express dissatisfaction"
  14.285 -                    end
  14.286 -                    ui.link{
  14.287 -                      attr = { class = "action" },
  14.288 -                      text = text,
  14.289 -                      module = "opinion",
  14.290 -                      action = "update",
  14.291 -                      routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
  14.292 -                      params = {
  14.293 -                        suggestion_id = record.id,
  14.294 -                        fulfilled = true
  14.295 -                      },
  14.296 -                      partial = partial
  14.297 -                    }
  14.298 -                  else
  14.299 -                    if opinion.degree > 0 then
  14.300 -                      text = _"Mark suggestion as not implemented and express dissatisfaction"
  14.301 -                    else
  14.302 -                      text = _"Mark suggestion as not implemented and express satisfaction"
  14.303 -                    end
  14.304 -                    ui.link{
  14.305 -                      attr = { class = "action" },
  14.306 -                      text = text,
  14.307 -                      module = "opinion",
  14.308 -                      action = "update",
  14.309 -                      routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
  14.310 -                      params = {
  14.311 -                        suggestion_id = record.id,
  14.312 -                        fulfilled = false
  14.313 -                      },
  14.314 -                      partial = partial
  14.315 -                    }
  14.316 -                  end
  14.317 +
  14.318 +                  ui.link{
  14.319 +                    attr = { class = opinion.fulfilled and "action active" or "action" },
  14.320 +                    text = _"implemented",
  14.321 +                    module = "opinion",
  14.322 +                    action = "update",
  14.323 +                    routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
  14.324 +                    params = {
  14.325 +                      suggestion_id = record.id,
  14.326 +                      fulfilled = true
  14.327 +                    },
  14.328 +                    partial = partial
  14.329 +                  }
  14.330 +                  slot.put("<br />")
  14.331 +                  ui.link{
  14.332 +                    attr = { class = not opinion.fulfilled and "action active" or "action" },
  14.333 +                    text = _"not implemented",
  14.334 +                    module = "opinion",
  14.335 +                    action = "update",
  14.336 +                    routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
  14.337 +                    params = {
  14.338 +                      suggestion_id = record.id,
  14.339 +                      fulfilled = false
  14.340 +                    },
  14.341 +                    partial = partial
  14.342 +                  }
  14.343 +
  14.344                  end
  14.345                end
  14.346              },
  14.347              {
  14.348 +              label = app.session.member_id and _"So I'm" or nil,
  14.349                content = function(record)
  14.350                  local opinion
  14.351                  if app.session.member_id then
  14.352 @@ -343,9 +322,14 @@
  14.353                  end
  14.354                  if opinion then
  14.355                    if (opinion.fulfilled and opinion.degree > 0) or (not opinion.fulfilled and opinion.degree < 0) then
  14.356 -                    ui.image{ static = "icons/16/thumb_up_green.png" }
  14.357 +                    local title = _"satisfied"
  14.358 +                    ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_happy.png" }
  14.359 +                  elseif opinion.degree == 1 or opinion.degree == -1 then
  14.360 +                    local title = _"a bit unsatisfied"
  14.361 +                    ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_unhappy.png" }
  14.362                    else
  14.363 -                    ui.image{ static = "icons/16/thumb_down_red.png" }
  14.364 +                    local title = _"more unsatisfied"
  14.365 +                    ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_unhappy_red.png" }
  14.366                    end
  14.367                  end
  14.368                end
    15.1 --- a/app/main/vote/list.lua	Thu Aug 19 15:37:51 2010 +0200
    15.2 +++ b/app/main/vote/list.lua	Mon Aug 30 21:52:19 2010 +0200
    15.3 @@ -73,7 +73,7 @@
    15.4    end
    15.5  end
    15.6  
    15.7 -local initiatives = issue:get_reference_selector("initiatives"):add_where("initiative.admitted"):exec()
    15.8 +local initiatives = issue:get_reference_selector("initiatives"):add_where("initiative.admitted"):add_order_by("initiative.satisfied_supporter_count DESC"):exec()
    15.9  
   15.10  local min_grade = -1;
   15.11  local max_grade = 1;
    16.1 --- a/config/default.lua	Thu Aug 19 15:37:51 2010 +0200
    16.2 +++ b/config/default.lua	Mon Aug 30 21:52:19 2010 +0200
    16.3 @@ -1,5 +1,5 @@
    16.4  config.app_name = "LiquidFeedback"
    16.5 -config.app_version = "beta26"
    16.6 +config.app_version = "beta27"
    16.7  
    16.8  config.app_title = config.app_name .. " (" .. request.get_config_name() .. " environment)"
    16.9  
    17.1 --- a/locale/translations.de.lua	Thu Aug 19 15:37:51 2010 +0200
    17.2 +++ b/locale/translations.de.lua	Mon Aug 30 21:52:19 2010 +0200
    17.3 @@ -95,7 +95,7 @@
    17.4  ["Choose member"] = "Mitglied auswählen";
    17.5  ["Click for details"] = "Klicke für Details";
    17.6  ["Closed"] = "geschlossen";
    17.7 -["Collective opinion"] = "Meinungsbild";
    17.8 +["Collective opinion of supporters"] = "Meinungsbild der Unterstützer";
    17.9  ["Commit suggestion"] = "Anregung speichern";
   17.10  ["Compare"] = "Vergleichen";
   17.11  ["Confirm"] = "Bestätigen";
   17.12 @@ -155,9 +155,7 @@
   17.13  ["Email address confirmation"] = "Bestätigung der E-Mail-Adresse";
   17.14  ["Email address is confirmed now"] = "E-Mail-Adresse ist jetzt bestätigt";
   17.15  ["Email address too short!"] = "E-Mail-Adresse ist zu kurz!";
   17.16 -["Email confirmation request"] = "Bestätigung Deiner E-Mail-Adresse";
   17.17  ["Email unconfirmed"] = "Unbestätigte E-Mail-Adresse";
   17.18 -["Empty help text: #{id}.#{lang}.txt"] = "Leerer Hilfe-Text: #{id}.#{lang}.txt";
   17.19  ["Error while converting image. Please note, that only JPG files are supported!"] = "Fehler beim Konvertieren des Bilds. Bitte beachte, dass nur JPG-Dateien unterstützt werden.";
   17.20  ["Error while resolving openid. Internal message: '#{errmsg}'"] = "Fehler beim Auflösen der OpenID. Interne Fehlermeldung: '#{errmsg}'";
   17.21  ["Error while updating member, database reported:<br /><br /> (#{errormessage})"] = "Fehler beim aktualisieren des Mitglieds, die Datenbank berichtet folgenden Fehler:<br /><br /> (#{errormessage})";
   17.22 @@ -179,9 +177,8 @@
   17.23  ["Help for: #{text}"] = "Hilfe zu: #{text}";
   17.24  ["Hide"] = "Verstecken";
   17.25  ["Hide filter details"] = "Filter-Details verstecken";
   17.26 -["Hide this help message"] = "Diesen Hilfetext ausblenden";
   17.27  ["Home"] = "Startseite";
   17.28 -["I accept the terms of use by checking the following checkbox:"] = "Ich akzeptiere die Nutzungsbedingungen durch Auswahl der folgenden Ankreuzbox:";
   17.29 +["I consider suggestion as"] = "Ich halte die Anregung für";
   17.30  ["Id"] = "Id";
   17.31  ["Ident number"] = "Ident-Nummer";
   17.32  ["If this link is not working, please open following url in your web browser:\n\n"] = "Sollte der Link nicht funktionieren, öffne bitte die folgenden URL in Deinem Web-Browser:\n\n";
   17.33 @@ -235,7 +232,6 @@
   17.34  ["JavaScript is disabled or not available."] = "JavaScript ist abgeschaltet oder nicht verfügbar.";
   17.35  ["Last author"] = "Letzter Autor";
   17.36  ["Last snapshot:"] = "Letzte Auszählung:";
   17.37 -["Legend:"] = "Legende:";
   17.38  ["License"] = "Lizenz";
   17.39  ["Locked?"] = "Gesperrt?";
   17.40  ["Login"] = "Anmeldung";
   17.41 @@ -246,10 +242,6 @@
   17.42  ["Majority"] = "Mehrheit";
   17.43  ["Manage filter"] = "Filter verwalten";
   17.44  ["Manage timeline filters"] = "Zeitachsen-Filter verwalten";
   17.45 -["Mark suggestion as implemented and express dissatisfaction"] = "Anregung als umgesetzt markieren und Unzufriedenheit ausdrücken";
   17.46 -["Mark suggestion as implemented and express satisfaction"] = "Anregung als umgesetzt markieren und Zufriedenheit ausdrücken";
   17.47 -["Mark suggestion as not implemented and express dissatisfaction"] = "Anregung als nicht umgesetzt markieren und Unzufriedenheit ausdrücken";
   17.48 -["Mark suggestion as not implemented and express satisfaction"] = "Anregung als nicht umgesetzt markieren und Zufriedenheit ausdrücken";
   17.49  ["Max potential support"] = "Max. potentielle Unterstützer";
   17.50  ["Max support"] = "Max. Unterstützer";
   17.51  ["Member"] = "Mitglied";
   17.52 @@ -277,7 +269,6 @@
   17.53  ["Membership updated"] = "Mitgliedschaft aktualisiert";
   17.54  ["Memberships"] = "Mitgliedschaften";
   17.55  ["Message of the day"] = "Hinweise";
   17.56 -["Missing help text: #{id}.#{lang}.txt"] = "Fehlender Hilfe-Text: #{id}.#{lang}.txt";
   17.57  ["Mobile phone"] = "Mobiltelefon";
   17.58  ["Monday"] = "Montag";
   17.59  ["Move down"] = "Runter schieben";
   17.60 @@ -288,7 +279,6 @@
   17.61  ["New address"] = "Neue E-Mail-Adresse";
   17.62  ["New draft"] = "Neuer Entwurf";
   17.63  ["New draft has been added to initiative"] = "Neuer Entwurf wurde der Initiative hinzugefügt";
   17.64 -["New draft revision"] = "Neue Revision des Entwurfs";
   17.65  ["New initiative"] = "Neue Initiative";
   17.66  ["New issue"] = "Neues Thema";
   17.67  ["New password"] = "Neues Kennwort";
   17.68 @@ -317,11 +307,9 @@
   17.69  ["Number of incoming delegations, follow link to see more details"] = "Anzahl eingehender Delegationen, Link folgen für mehr Details";
   17.70  ["Number of initiatives to preview"] = "Anzahl der Initiativen in der Vorschau";
   17.71  ["OK"] = "OK";
   17.72 -["Old draft revision"] = "Alte Revision des Entwurfs";
   17.73  ["Old password"] = "Altes Kennwort";
   17.74  ["Old password is wrong"] = "Das alte Kennwort ist falsch";
   17.75  ["Oldest"] = "Älteste";
   17.76 -["On that page please enter the confirmation code:\n\n"] = "Auf dieser Seite gib bitte folgenden Bestätigungscode ein:\n\n";
   17.77  ["On that page please enter the reset code:\n\n"] = "Auf dieser Seite gib bitte den folgenden Rücksetzcode ein:\n\n";
   17.78  ["One issue"] = "Ein Thema";
   17.79  ["One issue you are interested in"] = "Ein Thema, das Dich interessiert";
   17.80 @@ -350,7 +338,6 @@
   17.81  ["Please choose a policy"] = "Bitte wähle ein Regelwerk";
   17.82  ["Please choose two different versions of the draft to compare"] = "Bitte wähle zwei verschiedene Versionen des Drafts, um sie zu vergleichen.";
   17.83  ["Please choose two versions of the draft to compare"] = "Bitte wähle zwei Versionen des Drafts, um sie zu vergleichen.";
   17.84 -["Please confirm your email address by clicking the following link:\n\n"] = "Bitte bestätige Deine E-Mail-Adresse, indem Du den folgenden Link anklickst:\n\n";
   17.85  ["Please enter the email reset code you have received:"] = "Bitte gib den Rücksetzcode ein, den Du erhalten hast:";
   17.86  ["Please enter the invite code you've received."] = "Bitte gib den Invite-Code ein, den Du erhalten hast.";
   17.87  ["Please enter your email address. This address will be used for automatic notifications (if you request them) and in case you've lost your password. This address will not be published. After registration you will receive an email with a confirmation link."] = "Bitte gib Deine E-Mail-Adresse ein. Diese Adresse wird für automatische Benachrichtigungen (wenn Du diese anforderst) sowie zum Zurücksetzen des Kennworts verwendet. Diese Adresse wird nicht veröffentlicht. Nach Abschluß der Registration wirst Du eine E-Mail mit einem Link zum Bestätigen der Adresse erhalten.";
   17.88 @@ -364,6 +351,7 @@
   17.89  ["Potential support"] = "Potentielle Unterstützung";
   17.90  ["Potential supported"] = "Potentiell unterstützt";
   17.91  ["Potential supporter"] = "Potentielle Unterstützer";
   17.92 +["Preview"] = "Vorschau";
   17.93  ["Previous initiative"] = "Vorherige Initiative";
   17.94  ["Previous issue"] = "Vorheriges Thema";
   17.95  ["Profession"] = "Beruf";
   17.96 @@ -431,6 +419,7 @@
   17.97  ["Show member"] = "Mitglied anzeigen";
   17.98  ["Show name history"] = "Namenshistorie zeigen";
   17.99  ["Show only events which match... (or associtated)"] = "Zeige nur Ereignisse welche folgendes erfüllen... (oder-verknüpft)";
  17.100 +["So I'm"] = "Also bin ich";
  17.101  ["Software"] = "Software";
  17.102  ["Some JavaScript based functions (voting in particular) will not work.\nFor this beta, please use a current version of Firefox, Safari, Opera(?), Konqueror or another (more) standard compliant browser.\nAlternative access without JavaScript will be available soon."] = "Einige auf JavaScript basierende Funktionen (insbesondere der Abstimmung) sind nicht benutzbar.\nFür diese Beta verwende bitte eine aktuelle Version von Firefox, Safari, Opera(?), Konqueror oder einen anderen (mehr) den Standards entsprechenden Browser.\nEin alternativer Zugriff ohne JavaScript wird bald zur Verfügung stehen.";
  17.103  ["Sorry, but there is not confirmed email address for your account. Please contact the administrator or support."] = "Sorry, aber für diesen Account ist keine bestätigte E-Mail-Adresse hinterlegt. Bitte wende Dich an den Administrator oder den Support.";
  17.104 @@ -462,7 +451,6 @@
  17.105  ["Supported initiatives"] = "Unterstützte Initiativen";
  17.106  ["Supporter"] = "Unterstützer";
  17.107  ["Tabs"] = "Registerkarten";
  17.108 -["Terms accepted"] = "Bedingungen akzeptiert";
  17.109  ["Terms of use"] = "Nutzungsbedingungen";
  17.110  ["The API key has been changed too fast."] = "Der API-Schlüssel wurde zu schnell geändert.";
  17.111  ["The code you've entered is invalid"] = "Der Code, den Du eingeben hast, ist nicht gültig!";
  17.112 @@ -510,7 +498,6 @@
  17.113  ["Tuesday"] = "Dienstag";
  17.114  ["Type of tabs"] = "Tabulatortyp";
  17.115  ["Unconfirmed address"] = "Unbestätigte E-Mail";
  17.116 -["Unknown author"] = "Unbekannter Autor";
  17.117  ["Updated drafts"] = "Neue Entwürfe";
  17.118  ["Upload images"] = "Bilder hochladen";
  17.119  ["Verification time"] = "Zeit für die Überprüfung";
  17.120 @@ -557,7 +544,6 @@
  17.121  ["You didn't saved any member as contact yet."] = "Du hast noch kein Mitglied als Kontakt gespeichert!";
  17.122  ["You have saved this member as contact"] = "Du hast das Mitglied als Kontakt gespeichert";
  17.123  ["You have saved this member as contact."] = "Du hast das Mitglied als Kontakt gespeichert.";
  17.124 -["You have to accept the terms of use to complete registration."] = "Du musst die Nutzungsbedingungen akzeptieren um die Registration abzuschliessen.";
  17.125  ["You have to mark 'Are you sure' to revoke!"] = "Zum Zurückziehen musst Du 'Sicher?' auswählen";
  17.126  ["You need to be logged in, to use all features of this system."] = "Du musst eingeloggt sein, um alle Funktionen dieses Systems nutzen zu können.";
  17.127  ["You want to vote later"] = "Du willst später abstimmen";
  17.128 @@ -576,10 +562,10 @@
  17.129  ["Your global delegation has been updated."] = "Deine globale Delegation wurde geändert";
  17.130  ["Your login has been changed to '#{login}'"] = "Dein Anmeldename wurde auf '#{login}' geändert";
  17.131  ["Your name has been changed"] = "Dein Name wurde geändert";
  17.132 -["Your opinion has been deleted"] = "Deine Meinung wurde gelöscht";
  17.133 -["Your opinion has been updated"] = "Deine Meinung wurde aktualisiert";
  17.134  ["Your page has been updated"] = "Deine Seite wurde aktualisiert";
  17.135  ["Your password has been updated successfully"] = "Das Kennwort wurde erfolgreich geändert";
  17.136 +["Your rating has been deleted"] = "Deine Bewertung wurde gelöscht";
  17.137 +["Your rating has been updated"] = "Deine Bewertung wurde aktualisiert";
  17.138  ["Your suggestion has been added"] = "Deine Anregung wurde hinzufügt";
  17.139  ["Your support has been added to this initiative"] = "Deine Unterstützung wurde der Initiative hinzugefügt";
  17.140  ["Your support has been removed from this initiative"] = "Deine Unterstützung wurde der Initiave entzogen";
  17.141 @@ -589,20 +575,24 @@
  17.142  ["Z-A"] = "Z-A";
  17.143  ["[Registered members only]"] = "[nur für Registrierte]";
  17.144  ["[not displayed public]"] = "[nicht öffentlich]";
  17.145 +["a bit unsatisfied"] = "etwas unzufrieden";
  17.146  ["activated"] = "aktiviert";
  17.147  ["and #{count} more initiatives"] = "und #{count} weitere Initiativen";
  17.148  ["deactivated"] = "deaktiviert";
  17.149 -["delete<br /><br />"] = "löschen<br /><br />";
  17.150  ["disabled"] = "ausgeschaltet";
  17.151  ["email"] = "E-Mail";
  17.152 +["implemented"] = "umgesetzt";
  17.153  ["last 24 hours"] = "letzte 24 Stunden";
  17.154  ["login name"] = "Anmeldename";
  17.155 +["more unsatisfied"] = "sehr unzufrieden";
  17.156  ["must"] = "muss";
  17.157  ["must not"] = "darf nicht";
  17.158  ["must/should"] = "muss/soll";
  17.159  ["must/should not"] = "muss/soll nicht";
  17.160  ["neutral"] = "neutral";
  17.161 +["not implemented"] = "nicht umgesetzt";
  17.162  ["requested"] = "angefragt";
  17.163 +["satisfied"] = "zufrieden";
  17.164  ["should"] = "soll";
  17.165  ["should not"] = "soll nicht";
  17.166  ["to reset your password please click on the following link:\n\n"] = "um Dein Kennwort zurückzusetzen klicke bitte den folgenden Link an:\n\n";
    18.1 --- a/locale/translations.en.lua	Thu Aug 19 15:37:51 2010 +0200
    18.2 +++ b/locale/translations.en.lua	Mon Aug 30 21:52:19 2010 +0200
    18.3 @@ -95,7 +95,7 @@
    18.4  ["Choose member"] = false;
    18.5  ["Click for details"] = false;
    18.6  ["Closed"] = false;
    18.7 -["Collective opinion"] = false;
    18.8 +["Collective opinion of supporters"] = false;
    18.9  ["Commit suggestion"] = false;
   18.10  ["Compare"] = false;
   18.11  ["Confirm"] = false;
   18.12 @@ -155,9 +155,7 @@
   18.13  ["Email address confirmation"] = false;
   18.14  ["Email address is confirmed now"] = false;
   18.15  ["Email address too short!"] = false;
   18.16 -["Email confirmation request"] = false;
   18.17  ["Email unconfirmed"] = false;
   18.18 -["Empty help text: #{id}.#{lang}.txt"] = false;
   18.19  ["Error while converting image. Please note, that only JPG files are supported!"] = false;
   18.20  ["Error while resolving openid. Internal message: '#{errmsg}'"] = false;
   18.21  ["Error while updating member, database reported:<br /><br /> (#{errormessage})"] = false;
   18.22 @@ -179,9 +177,8 @@
   18.23  ["Help for: #{text}"] = false;
   18.24  ["Hide"] = false;
   18.25  ["Hide filter details"] = false;
   18.26 -["Hide this help message"] = false;
   18.27  ["Home"] = false;
   18.28 -["I accept the terms of use by checking the following checkbox:"] = false;
   18.29 +["I consider suggestion as"] = false;
   18.30  ["Id"] = false;
   18.31  ["Ident number"] = false;
   18.32  ["If this link is not working, please open following url in your web browser:\n\n"] = false;
   18.33 @@ -235,7 +232,6 @@
   18.34  ["JavaScript is disabled or not available."] = false;
   18.35  ["Last author"] = false;
   18.36  ["Last snapshot:"] = false;
   18.37 -["Legend:"] = false;
   18.38  ["License"] = false;
   18.39  ["Locked?"] = false;
   18.40  ["Login"] = false;
   18.41 @@ -246,10 +242,6 @@
   18.42  ["Majority"] = false;
   18.43  ["Manage filter"] = false;
   18.44  ["Manage timeline filters"] = false;
   18.45 -["Mark suggestion as implemented and express dissatisfaction"] = false;
   18.46 -["Mark suggestion as implemented and express satisfaction"] = false;
   18.47 -["Mark suggestion as not implemented and express dissatisfaction"] = false;
   18.48 -["Mark suggestion as not implemented and express satisfaction"] = false;
   18.49  ["Max potential support"] = false;
   18.50  ["Max support"] = false;
   18.51  ["Member"] = false;
   18.52 @@ -277,7 +269,6 @@
   18.53  ["Membership updated"] = false;
   18.54  ["Memberships"] = false;
   18.55  ["Message of the day"] = false;
   18.56 -["Missing help text: #{id}.#{lang}.txt"] = false;
   18.57  ["Mobile phone"] = false;
   18.58  ["Monday"] = false;
   18.59  ["Move down"] = false;
   18.60 @@ -288,7 +279,6 @@
   18.61  ["New address"] = false;
   18.62  ["New draft"] = false;
   18.63  ["New draft has been added to initiative"] = false;
   18.64 -["New draft revision"] = false;
   18.65  ["New initiative"] = false;
   18.66  ["New issue"] = false;
   18.67  ["New password"] = false;
   18.68 @@ -317,11 +307,9 @@
   18.69  ["Number of incoming delegations, follow link to see more details"] = false;
   18.70  ["Number of initiatives to preview"] = false;
   18.71  ["OK"] = false;
   18.72 -["Old draft revision"] = false;
   18.73  ["Old password"] = false;
   18.74  ["Old password is wrong"] = false;
   18.75  ["Oldest"] = false;
   18.76 -["On that page please enter the confirmation code:\n\n"] = false;
   18.77  ["On that page please enter the reset code:\n\n"] = false;
   18.78  ["One issue"] = false;
   18.79  ["One issue you are interested in"] = false;
   18.80 @@ -350,7 +338,6 @@
   18.81  ["Please choose a policy"] = false;
   18.82  ["Please choose two different versions of the draft to compare"] = false;
   18.83  ["Please choose two versions of the draft to compare"] = false;
   18.84 -["Please confirm your email address by clicking the following link:\n\n"] = false;
   18.85  ["Please enter the email reset code you have received:"] = false;
   18.86  ["Please enter the invite code you've received."] = false;
   18.87  ["Please enter your email address. This address will be used for automatic notifications (if you request them) and in case you've lost your password. This address will not be published. After registration you will receive an email with a confirmation link."] = false;
   18.88 @@ -364,6 +351,7 @@
   18.89  ["Potential support"] = false;
   18.90  ["Potential supported"] = false;
   18.91  ["Potential supporter"] = false;
   18.92 +["Preview"] = false;
   18.93  ["Previous initiative"] = false;
   18.94  ["Previous issue"] = false;
   18.95  ["Profession"] = false;
   18.96 @@ -431,6 +419,7 @@
   18.97  ["Show member"] = false;
   18.98  ["Show name history"] = false;
   18.99  ["Show only events which match... (or associtated)"] = false;
  18.100 +["So I'm"] = false;
  18.101  ["Software"] = false;
  18.102  ["Some JavaScript based functions (voting in particular) will not work.\nFor this beta, please use a current version of Firefox, Safari, Opera(?), Konqueror or another (more) standard compliant browser.\nAlternative access without JavaScript will be available soon."] = false;
  18.103  ["Sorry, but there is not confirmed email address for your account. Please contact the administrator or support."] = false;
  18.104 @@ -462,7 +451,6 @@
  18.105  ["Supported initiatives"] = false;
  18.106  ["Supporter"] = false;
  18.107  ["Tabs"] = false;
  18.108 -["Terms accepted"] = false;
  18.109  ["Terms of use"] = false;
  18.110  ["The API key has been changed too fast."] = false;
  18.111  ["The code you've entered is invalid"] = false;
  18.112 @@ -510,7 +498,6 @@
  18.113  ["Tuesday"] = false;
  18.114  ["Type of tabs"] = false;
  18.115  ["Unconfirmed address"] = false;
  18.116 -["Unknown author"] = false;
  18.117  ["Updated drafts"] = false;
  18.118  ["Upload images"] = false;
  18.119  ["Verification time"] = false;
  18.120 @@ -557,7 +544,6 @@
  18.121  ["You didn't saved any member as contact yet."] = false;
  18.122  ["You have saved this member as contact"] = false;
  18.123  ["You have saved this member as contact."] = false;
  18.124 -["You have to accept the terms of use to complete registration."] = false;
  18.125  ["You have to mark 'Are you sure' to revoke!"] = false;
  18.126  ["You need to be logged in, to use all features of this system."] = false;
  18.127  ["You want to vote later"] = false;
  18.128 @@ -576,10 +562,10 @@
  18.129  ["Your global delegation has been updated."] = false;
  18.130  ["Your login has been changed to '#{login}'"] = false;
  18.131  ["Your name has been changed"] = false;
  18.132 -["Your opinion has been deleted"] = false;
  18.133 -["Your opinion has been updated"] = false;
  18.134  ["Your page has been updated"] = false;
  18.135  ["Your password has been updated successfully"] = false;
  18.136 +["Your rating has been deleted"] = false;
  18.137 +["Your rating has been updated"] = false;
  18.138  ["Your suggestion has been added"] = false;
  18.139  ["Your support has been added to this initiative"] = false;
  18.140  ["Your support has been removed from this initiative"] = false;
  18.141 @@ -589,20 +575,24 @@
  18.142  ["Z-A"] = false;
  18.143  ["[Registered members only]"] = false;
  18.144  ["[not displayed public]"] = false;
  18.145 +["a bit unsatisfied"] = false;
  18.146  ["activated"] = false;
  18.147  ["and #{count} more initiatives"] = false;
  18.148  ["deactivated"] = false;
  18.149 -["delete<br /><br />"] = false;
  18.150  ["disabled"] = false;
  18.151  ["email"] = false;
  18.152 +["implemented"] = false;
  18.153  ["last 24 hours"] = false;
  18.154  ["login name"] = false;
  18.155 +["more unsatisfied"] = false;
  18.156  ["must"] = false;
  18.157  ["must not"] = false;
  18.158  ["must/should"] = false;
  18.159  ["must/should not"] = false;
  18.160  ["neutral"] = false;
  18.161 +["not implemented"] = false;
  18.162  ["requested"] = false;
  18.163 +["satisfied"] = false;
  18.164  ["should"] = false;
  18.165  ["should not"] = false;
  18.166  ["to reset your password please click on the following link:\n\n"] = false;
    19.1 --- a/locale/translations.eo.lua	Thu Aug 19 15:37:51 2010 +0200
    19.2 +++ b/locale/translations.eo.lua	Mon Aug 30 21:52:19 2010 +0200
    19.3 @@ -95,7 +95,7 @@
    19.4  ["Choose member"] = "Elekti membron";
    19.5  ["Click for details"] = "Klaki por detaloj";
    19.6  ["Closed"] = "Fermita";
    19.7 -["Collective opinion"] = "Opinioresumo";
    19.8 +["Collective opinion of supporters"] = false;
    19.9  ["Commit suggestion"] = "Enmeti sugeston";
   19.10  ["Compare"] = "Kompari";
   19.11  ["Confirm"] = "Konfirmi";
   19.12 @@ -155,9 +155,7 @@
   19.13  ["Email address confirmation"] = "Konfirmo de la retadreson";
   19.14  ["Email address is confirmed now"] = "Retadreso nun estas konfirmita";
   19.15  ["Email address too short!"] = "Retadreso estas tro mallonga!";
   19.16 -["Email confirmation request"] = "Konfirmopeto de via retadreso";
   19.17  ["Email unconfirmed"] = false;
   19.18 -["Empty help text: #{id}.#{lang}.txt"] = "Malplena helpoteksto: #{id}.#{lang}.txt";
   19.19  ["Error while converting image. Please note, that only JPG files are supported!"] = false;
   19.20  ["Error while resolving openid. Internal message: '#{errmsg}'"] = "Eraro dum trovado de openid. Interna mesaĝo: '#{errmsg}'";
   19.21  ["Error while updating member, database reported:<br /><br /> (#{errormessage})"] = "Eraro dum ĝisdatigo de la membro, la datumbazo raportas sekvan eraron:<br /><br /> (#{errormessage})";
   19.22 @@ -179,9 +177,8 @@
   19.23  ["Help for: #{text}"] = "Helpo por: #{text}";
   19.24  ["Hide"] = "Kaŝi";
   19.25  ["Hide filter details"] = "Kaŝi filtrodetalojn";
   19.26 -["Hide this help message"] = "Kaŝi tiun ĉi helpotekston";
   19.27  ["Home"] = "Ĉefpaĝo";
   19.28 -["I accept the terms of use by checking the following checkbox:"] = "Mi akceptas la uzokondiĉojn per la selekto de la sekva markobutono:";
   19.29 +["I consider suggestion as"] = false;
   19.30  ["Id"] = "Identigilo";
   19.31  ["Ident number"] = "Identonumero";
   19.32  ["If this link is not working, please open following url in your web browser:\n\n"] = "Se tiu ligilo ne funkcias, bonvolu malfermi la sekvan URLon per via retumilo:\n\n";
   19.33 @@ -235,7 +232,6 @@
   19.34  ["JavaScript is disabled or not available."] = "JavaScript ne estas ŝaltita aŭ disponebla.";
   19.35  ["Last author"] = "Lasta aŭtoro";
   19.36  ["Last snapshot:"] = "Lasta fulmrigardo:";
   19.37 -["Legend:"] = "Legendo:";
   19.38  ["License"] = "Licenco";
   19.39  ["Locked?"] = "Ĉu blokita?";
   19.40  ["Login"] = "Ensaluti";
   19.41 @@ -246,10 +242,6 @@
   19.42  ["Majority"] = "Plimulto";
   19.43  ["Manage filter"] = "Administri filtrilojn";
   19.44  ["Manage timeline filters"] = "Administri tempolinio-filtrilojn";
   19.45 -["Mark suggestion as implemented and express dissatisfaction"] = "Marki sugeston kiel realigitan kaj esprimi malkontentecon";
   19.46 -["Mark suggestion as implemented and express satisfaction"] = "Marki sugeston kiel realigitan kaj esprimi kontentecon";
   19.47 -["Mark suggestion as not implemented and express dissatisfaction"] = "Marki sugeston kiel ne realigitan kaj esprimi malkontentecon";
   19.48 -["Mark suggestion as not implemented and express satisfaction"] = "Marki sugeston kiel ne realigitan kaj esprimi kontentecon";
   19.49  ["Max potential support"] = "Maksimumo da eblaj subtenantoj";
   19.50  ["Max support"] = "Maksimuma subteno";
   19.51  ["Member"] = "Membro";
   19.52 @@ -277,7 +269,6 @@
   19.53  ["Membership updated"] = "Membreco ĝisdatigita";
   19.54  ["Memberships"] = "Membrecoj";
   19.55  ["Message of the day"] = "Mesaĝoj";
   19.56 -["Missing help text: #{id}.#{lang}.txt"] = "Mankas helpoteksto: #{id}.#{lang}.txt";
   19.57  ["Mobile phone"] = "Poŝtelefono";
   19.58  ["Monday"] = "Lundo";
   19.59  ["Move down"] = "Movi malsupren";
   19.60 @@ -288,7 +279,6 @@
   19.61  ["New address"] = false;
   19.62  ["New draft"] = "Nova skizo";
   19.63  ["New draft has been added to initiative"] = "La nova skizo estas aldonita al la iniciato";
   19.64 -["New draft revision"] = "Nova revizio de la skizo";
   19.65  ["New initiative"] = "Nova iniciato";
   19.66  ["New issue"] = "Nova temo";
   19.67  ["New password"] = "Nova pasvorto";
   19.68 @@ -317,11 +307,9 @@
   19.69  ["Number of incoming delegations, follow link to see more details"] = "Nombro de alvenantaj delegacioj, sekvu ligilon por pli da detaloj";
   19.70  ["Number of initiatives to preview"] = "Nombro de iniciatoj por antaŭmontri";
   19.71  ["OK"] = "Bone";
   19.72 -["Old draft revision"] = "Malnova revizio de la skizo";
   19.73  ["Old password"] = "Malnova pasvorto";
   19.74  ["Old password is wrong"] = "La malnova pasvorto estas malĝusta";
   19.75  ["Oldest"] = "Plej malnova";
   19.76 -["On that page please enter the confirmation code:\n\n"] = "Bonvolu enigi sur tiu paĝo la konfirmokodon:\n\n";
   19.77  ["On that page please enter the reset code:\n\n"] = "Bonvolu enigu sur tiu paĝo la remetokodon:\n\n";
   19.78  ["One issue"] = "Unu temo";
   19.79  ["One issue you are interested in"] = "Unu temo, kiu vin interesas";
   19.80 @@ -350,7 +338,6 @@
   19.81  ["Please choose a policy"] = "Bonvolu elekti regularon";
   19.82  ["Please choose two different versions of the draft to compare"] = "Bonvolu elekti du malsamajn versiojn de la skizo por kompari ilin.";
   19.83  ["Please choose two versions of the draft to compare"] = "Bonvolu elekti du versiojn de la skizo por kompari ili.";
   19.84 -["Please confirm your email address by clicking the following link:\n\n"] = "Bonvolu konfirmi vian retadreson klakante sekvan ligilon:\n\n";
   19.85  ["Please enter the email reset code you have received:"] = "Bonvolu enigi retpoŝtoremetokodon, kiun vi ricevis:";
   19.86  ["Please enter the invite code you've received."] = "Bonvolu enigi la invitokodon, kiun vi ricevis.";
   19.87  ["Please enter your email address. This address will be used for automatic notifications (if you request them) and in case you've lost your password. This address will not be published. After registration you will receive an email with a confirmation link."] = "Bonvolu enigi vian retadreson. Tiu adreso estas uzita por aŭtomataj sciigoj (se vi petas tiajn) kaj por remeti la pasvorton. Tiu adreso ne estos publikigita. Post la fino de la registrado, vi ricevos retpoŝton kun ligilo al la konfirmo de la adreso.";
   19.88 @@ -364,6 +351,7 @@
   19.89  ["Potential support"] = "Eventuala subteno";
   19.90  ["Potential supported"] = "Eble subtenota";
   19.91  ["Potential supporter"] = "Eventuala subtenonto";
   19.92 +["Preview"] = false;
   19.93  ["Previous initiative"] = "Antaŭa initciato";
   19.94  ["Previous issue"] = "Antaŭa temo";
   19.95  ["Profession"] = "Profesio";
   19.96 @@ -431,6 +419,7 @@
   19.97  ["Show member"] = "Montri membron";
   19.98  ["Show name history"] = "Montri nomohistorion";
   19.99  ["Show only events which match... (or associtated)"] = "Montri nur eventojn, kiuj kongruas... (aŭ kunligitaj)";
  19.100 +["So I'm"] = false;
  19.101  ["Software"] = "Programaro";
  19.102  ["Some JavaScript based functions (voting in particular) will not work.\nFor this beta, please use a current version of Firefox, Safari, Opera(?), Konqueror or another (more) standard compliant browser.\nAlternative access without JavaScript will be available soon."] = "Kelkaj funkcioj bazitaj je JavaScript (precipe la voĉdono) ne funkcios.\nBonvolu, uzi por tiu betaversio aktualan version de Firefox, Safari, Opera(?), Konqueror aŭ alian (pli) normokonforman retumilon.\nAlternativa atingo sen JavaScript estos baldaŭ disponebla.";
  19.103  ["Sorry, but there is not confirmed email address for your account. Please contact the administrator or support."] = "Pardonu, por tiu konto ne ekzistas konfirmita retadreson. Bonvolu vin turni al administranto aŭ al la helpantaro.";
  19.104 @@ -462,7 +451,6 @@
  19.105  ["Supported initiatives"] = "Iniciatoj subtenitaj";
  19.106  ["Supporter"] = "Subtenantoj";
  19.107  ["Tabs"] = "Langetoj";
  19.108 -["Terms accepted"] = "Kondiĉoj akceptitaj";
  19.109  ["Terms of use"] = "Uzokondiĉoj";
  19.110  ["The API key has been changed too fast."] = "La API-ŝlosilo estas ŝanĝita tro rapide.";
  19.111  ["The code you've entered is invalid"] = "La kodo, kiun vi enigis ne estas valida!";
  19.112 @@ -510,7 +498,6 @@
  19.113  ["Tuesday"] = "Mardo";
  19.114  ["Type of tabs"] = "Tipo de langetoj";
  19.115  ["Unconfirmed address"] = false;
  19.116 -["Unknown author"] = "Aŭtoro nekonata";
  19.117  ["Updated drafts"] = "Skizoj ĝisdatigitaj";
  19.118  ["Upload images"] = "Alŝuti bildojn";
  19.119  ["Verification time"] = "Tempo por la kontrolo";
  19.120 @@ -557,7 +544,6 @@
  19.121  ["You didn't saved any member as contact yet."] = "Vi ankoraŭ ne konservis membron kiel kontakton!";
  19.122  ["You have saved this member as contact"] = "Vi konservis membron kiel kontakton";
  19.123  ["You have saved this member as contact."] = "Vi konservis membron kiel kontakton.";
  19.124 -["You have to accept the terms of use to complete registration."] = "Vi devas akcepti la uzokondiĉojn por fini la registradon.";
  19.125  ["You have to mark 'Are you sure' to revoke!"] = "Por nuligi vi devas elekti 'Certa?'";
  19.126  ["You need to be logged in, to use all features of this system."] = "Vi devas esti ensalutinta por uzi ĉiujn funkciojn de tiu sistemo.";
  19.127  ["You want to vote later"] = "Vi volas baloti pli malfrue";
  19.128 @@ -576,10 +562,10 @@
  19.129  ["Your global delegation has been updated."] = "Via ĝenerala delegacio estas ĝisdatigita";
  19.130  ["Your login has been changed to '#{login}'"] = "Via salutnomo estas ĝisdatigita al '#{login}'";
  19.131  ["Your name has been changed"] = "Via nomo estas ĝisdatigita";
  19.132 -["Your opinion has been deleted"] = "Via opinio estas viŝita";
  19.133 -["Your opinion has been updated"] = "Via opinio estas ĝisdatigita";
  19.134  ["Your page has been updated"] = "Via paĝo estas ĝisdatigita";
  19.135  ["Your password has been updated successfully"] = "Via pasvorto estas sukcese ĝisdatigita";
  19.136 +["Your rating has been deleted"] = false;
  19.137 +["Your rating has been updated"] = false;
  19.138  ["Your suggestion has been added"] = "Via sugesto estas aldonita";
  19.139  ["Your support has been added to this initiative"] = "Via subteno estas aldonita al la iniciato";
  19.140  ["Your support has been removed from this initiative"] = "Via subteno estas forigita de la iniciato";
  19.141 @@ -589,20 +575,24 @@
  19.142  ["Z-A"] = "Z-A";
  19.143  ["[Registered members only]"] = "[Nur registritaj membroj]";
  19.144  ["[not displayed public]"] = "[ne afiŝita publike]";
  19.145 +["a bit unsatisfied"] = false;
  19.146  ["activated"] = false;
  19.147  ["and #{count} more initiatives"] = "kaj #{count} pliaj iniciatoj";
  19.148  ["deactivated"] = false;
  19.149 -["delete<br /><br />"] = "forviŝi<br /><br />";
  19.150  ["disabled"] = "malaktiva";
  19.151  ["email"] = "retpoŝto";
  19.152 +["implemented"] = false;
  19.153  ["last 24 hours"] = "lastaj 24 horoj";
  19.154  ["login name"] = "Salutnomo";
  19.155 +["more unsatisfied"] = false;
  19.156  ["must"] = "devas";
  19.157  ["must not"] = "ne rajtas";
  19.158  ["must/should"] = "devus";
  19.159  ["must/should not"] = "ne devus";
  19.160  ["neutral"] = "neŭtrala";
  19.161 +["not implemented"] = false;
  19.162  ["requested"] = "petita";
  19.163 +["satisfied"] = false;
  19.164  ["should"] = "devus";
  19.165  ["should not"] = "ne devus";
  19.166  ["to reset your password please click on the following link:\n\n"] = "por remeti vian pasvorton bonvolu klaki sekvan ligilon:\n\n";
    20.1 --- a/locale/translations.fr.lua	Thu Aug 19 15:37:51 2010 +0200
    20.2 +++ b/locale/translations.fr.lua	Mon Aug 30 21:52:19 2010 +0200
    20.3 @@ -95,7 +95,7 @@
    20.4  ["Choose member"] = false;
    20.5  ["Click for details"] = false;
    20.6  ["Closed"] = false;
    20.7 -["Collective opinion"] = false;
    20.8 +["Collective opinion of supporters"] = false;
    20.9  ["Commit suggestion"] = false;
   20.10  ["Compare"] = false;
   20.11  ["Confirm"] = false;
   20.12 @@ -155,9 +155,7 @@
   20.13  ["Email address confirmation"] = false;
   20.14  ["Email address is confirmed now"] = false;
   20.15  ["Email address too short!"] = false;
   20.16 -["Email confirmation request"] = false;
   20.17  ["Email unconfirmed"] = false;
   20.18 -["Empty help text: #{id}.#{lang}.txt"] = false;
   20.19  ["Error while converting image. Please note, that only JPG files are supported!"] = false;
   20.20  ["Error while resolving openid. Internal message: '#{errmsg}'"] = false;
   20.21  ["Error while updating member, database reported:<br /><br /> (#{errormessage})"] = false;
   20.22 @@ -179,9 +177,8 @@
   20.23  ["Help for: #{text}"] = false;
   20.24  ["Hide"] = false;
   20.25  ["Hide filter details"] = false;
   20.26 -["Hide this help message"] = false;
   20.27  ["Home"] = false;
   20.28 -["I accept the terms of use by checking the following checkbox:"] = false;
   20.29 +["I consider suggestion as"] = false;
   20.30  ["Id"] = false;
   20.31  ["Ident number"] = false;
   20.32  ["If this link is not working, please open following url in your web browser:\n\n"] = false;
   20.33 @@ -235,7 +232,6 @@
   20.34  ["JavaScript is disabled or not available."] = false;
   20.35  ["Last author"] = false;
   20.36  ["Last snapshot:"] = false;
   20.37 -["Legend:"] = false;
   20.38  ["License"] = false;
   20.39  ["Locked?"] = false;
   20.40  ["Login"] = false;
   20.41 @@ -246,10 +242,6 @@
   20.42  ["Majority"] = false;
   20.43  ["Manage filter"] = false;
   20.44  ["Manage timeline filters"] = false;
   20.45 -["Mark suggestion as implemented and express dissatisfaction"] = false;
   20.46 -["Mark suggestion as implemented and express satisfaction"] = false;
   20.47 -["Mark suggestion as not implemented and express dissatisfaction"] = false;
   20.48 -["Mark suggestion as not implemented and express satisfaction"] = false;
   20.49  ["Max potential support"] = false;
   20.50  ["Max support"] = false;
   20.51  ["Member"] = false;
   20.52 @@ -277,7 +269,6 @@
   20.53  ["Membership updated"] = false;
   20.54  ["Memberships"] = false;
   20.55  ["Message of the day"] = false;
   20.56 -["Missing help text: #{id}.#{lang}.txt"] = false;
   20.57  ["Mobile phone"] = false;
   20.58  ["Monday"] = false;
   20.59  ["Move down"] = false;
   20.60 @@ -288,7 +279,6 @@
   20.61  ["New address"] = false;
   20.62  ["New draft"] = false;
   20.63  ["New draft has been added to initiative"] = false;
   20.64 -["New draft revision"] = false;
   20.65  ["New initiative"] = false;
   20.66  ["New issue"] = false;
   20.67  ["New password"] = false;
   20.68 @@ -317,11 +307,9 @@
   20.69  ["Number of incoming delegations, follow link to see more details"] = false;
   20.70  ["Number of initiatives to preview"] = false;
   20.71  ["OK"] = false;
   20.72 -["Old draft revision"] = false;
   20.73  ["Old password"] = false;
   20.74  ["Old password is wrong"] = false;
   20.75  ["Oldest"] = false;
   20.76 -["On that page please enter the confirmation code:\n\n"] = false;
   20.77  ["On that page please enter the reset code:\n\n"] = false;
   20.78  ["One issue"] = false;
   20.79  ["One issue you are interested in"] = false;
   20.80 @@ -350,7 +338,6 @@
   20.81  ["Please choose a policy"] = false;
   20.82  ["Please choose two different versions of the draft to compare"] = false;
   20.83  ["Please choose two versions of the draft to compare"] = false;
   20.84 -["Please confirm your email address by clicking the following link:\n\n"] = false;
   20.85  ["Please enter the email reset code you have received:"] = false;
   20.86  ["Please enter the invite code you've received."] = false;
   20.87  ["Please enter your email address. This address will be used for automatic notifications (if you request them) and in case you've lost your password. This address will not be published. After registration you will receive an email with a confirmation link."] = false;
   20.88 @@ -364,6 +351,7 @@
   20.89  ["Potential support"] = false;
   20.90  ["Potential supported"] = false;
   20.91  ["Potential supporter"] = false;
   20.92 +["Preview"] = false;
   20.93  ["Previous initiative"] = false;
   20.94  ["Previous issue"] = false;
   20.95  ["Profession"] = false;
   20.96 @@ -431,6 +419,7 @@
   20.97  ["Show member"] = false;
   20.98  ["Show name history"] = false;
   20.99  ["Show only events which match... (or associtated)"] = false;
  20.100 +["So I'm"] = false;
  20.101  ["Software"] = false;
  20.102  ["Some JavaScript based functions (voting in particular) will not work.\nFor this beta, please use a current version of Firefox, Safari, Opera(?), Konqueror or another (more) standard compliant browser.\nAlternative access without JavaScript will be available soon."] = false;
  20.103  ["Sorry, but there is not confirmed email address for your account. Please contact the administrator or support."] = false;
  20.104 @@ -462,7 +451,6 @@
  20.105  ["Supported initiatives"] = false;
  20.106  ["Supporter"] = false;
  20.107  ["Tabs"] = false;
  20.108 -["Terms accepted"] = false;
  20.109  ["Terms of use"] = false;
  20.110  ["The API key has been changed too fast."] = false;
  20.111  ["The code you've entered is invalid"] = false;
  20.112 @@ -510,7 +498,6 @@
  20.113  ["Tuesday"] = false;
  20.114  ["Type of tabs"] = false;
  20.115  ["Unconfirmed address"] = false;
  20.116 -["Unknown author"] = false;
  20.117  ["Updated drafts"] = false;
  20.118  ["Upload images"] = false;
  20.119  ["Verification time"] = false;
  20.120 @@ -557,7 +544,6 @@
  20.121  ["You didn't saved any member as contact yet."] = false;
  20.122  ["You have saved this member as contact"] = false;
  20.123  ["You have saved this member as contact."] = false;
  20.124 -["You have to accept the terms of use to complete registration."] = false;
  20.125  ["You have to mark 'Are you sure' to revoke!"] = false;
  20.126  ["You need to be logged in, to use all features of this system."] = false;
  20.127  ["You want to vote later"] = false;
  20.128 @@ -576,10 +562,10 @@
  20.129  ["Your global delegation has been updated."] = false;
  20.130  ["Your login has been changed to '#{login}'"] = false;
  20.131  ["Your name has been changed"] = false;
  20.132 -["Your opinion has been deleted"] = false;
  20.133 -["Your opinion has been updated"] = false;
  20.134  ["Your page has been updated"] = false;
  20.135  ["Your password has been updated successfully"] = false;
  20.136 +["Your rating has been deleted"] = false;
  20.137 +["Your rating has been updated"] = false;
  20.138  ["Your suggestion has been added"] = false;
  20.139  ["Your support has been added to this initiative"] = false;
  20.140  ["Your support has been removed from this initiative"] = false;
  20.141 @@ -589,20 +575,24 @@
  20.142  ["Z-A"] = false;
  20.143  ["[Registered members only]"] = false;
  20.144  ["[not displayed public]"] = false;
  20.145 +["a bit unsatisfied"] = false;
  20.146  ["activated"] = false;
  20.147  ["and #{count} more initiatives"] = false;
  20.148  ["deactivated"] = false;
  20.149 -["delete<br /><br />"] = false;
  20.150  ["disabled"] = false;
  20.151  ["email"] = false;
  20.152 +["implemented"] = false;
  20.153  ["last 24 hours"] = false;
  20.154  ["login name"] = false;
  20.155 +["more unsatisfied"] = false;
  20.156  ["must"] = false;
  20.157  ["must not"] = false;
  20.158  ["must/should"] = false;
  20.159  ["must/should not"] = false;
  20.160  ["neutral"] = false;
  20.161 +["not implemented"] = false;
  20.162  ["requested"] = false;
  20.163 +["satisfied"] = false;
  20.164  ["should"] = false;
  20.165  ["should not"] = false;
  20.166  ["to reset your password please click on the following link:\n\n"] = false;
    21.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2 +++ b/static/icons/emoticon_happy.png	Mon Aug 30 21:52:19 2010 +0200
    21.3 @@ -0,0 +1,37 @@
    21.4 +--- emoticon_happy.png
    21.5 ++++ emoticon_happy.png
    21.6 +GIT binary patch
    21.7 +literal 1646
    21.8 +zc$@)l29f!RP)<h;3K|Lk000e1NJLTq000>P000>X1^@s6#OZ}&00001b5ch_0Itp)
    21.9 +z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igc0
   21.10 +z5)U+k{Yei100r(zL_t(Y$DNjIjFi<G$A9O%@67DZ%+Bu4?1g0udttjQuq<0qHnCX!
   21.11 +zU?IgDR?^g%kcLmSH8zd0(ZsYQP1=|=HAQKSg;<P2l~{-(XhI?;*bs1mD$v4Sbngr7
   21.12 +z?#%4Y%zHnlAKqmvXf5_6|Gde`dCo8IbN=Ufj^JyIUB6FNOQjmL(1t)=-S&hvc{6e1
   21.13 +ze=XRvBegDBQTKHH;#=3GGi|AOqBbUl5RRSmveSdbD-*rLv)Pdym!@-XY~POhT9948
   21.14 +zD{HE6Sg~(q_tw>m7q=!2kw*tJC^ZM#1+5XX458}C&$`~Zj}MGZjP-7N<ni45HwD@I
   21.15 +zQr$ys?VJDD*?nJ~p+`acfCMyJ`=A}Pw$Q2ss(`RP45Nd|DXaL=$v?gJ@#NT#w{J&Z
   21.16 +z+t0WW@Yk1We)z4mkN$bZs&yHm#z4jpGJ%lg2pL0&2#C*xX$8UqYnYU<qKz#Nc6r%<
   21.17 +zweNd7ci>AQd!Mi9=;(T6e|yL3G-?VVlL(o_56bXW3^P)WzyKjYYf6@bVQ7R1Kn39D
   21.18 +ziP@7zebc=iJ)LJJ-#A=4&3q0PMtafeS68fBU!(m=5M?0BDOv{IJwIn<_oHO<AdDnJ
   21.19 +zl+*v|EUlftW#ji>M`MCvgi?8`?0-gAw%`AoSDr7cybiK&XYH0Xw>;db{YzmwgozLl
   21.20 +z4jul4OMSx(k4&=v%@gzRD7*HYAeS$3{O<#tIx~%yGL(=|8ltVPrM4<o|H5^U>P+)5
   21.21 +zs;d*R@Q_6)A?fQMU-;9DeWPKBkPHl7S(xt|D1O0CX114QEgLqz{9IL30=&8-ooZaV
   21.22 +zzFGT&fC>*&2Wah4U7cKr&7_m__Pu^SosNUnp{?h?Sd%o?v}9sJd|LuIp1U@aZmQJY
   21.23 +z^t@f&`OO?QZR{c%jbIp(`!=mbt0G$2Y`*sv0IDhztnbMnf&dW&pj0RzX$n~$jczsp
   21.24 +zV$sO*GSiF--$NS?C<m}WNLrS}dGFA(xNbn_iVC!vLo18#-QCFEmmj08wVaB00a5f9
   21.25 +zKq3f2>-uxVll7}jfQTWhrS=i7i#F}hEkZ&7$bj2#ivtEa$bt6I+5u(p;HDH>6%dY#
   21.26 +z@I3H5@ICPTFptVZ$XKNb;Cp&n`5K`dgkdmv#ipe>1fU%dkr1ji5TLaS%0ep(JPYAC
   21.27 +z2-iWnF2my%-$)7~h6Wi$d3Ig`6n*QQ?bx=k9i(khlQ7tSppU@Mqtq-q$cIw%-(VK4
   21.28 +z=D;l?Z5!d(2*=^{g*hgsV<7<W%nFKyiCzhy=d80=ulDC9RS3(XN)}kvx`=0feSwM5
   21.29 +zD`=HN2iKGbZx&${kya^`ZSl_W0>>^SxP6(o;NyZ91eUViGyo1A!+YS);{D5-?`jf-
   21.30 +z0fg4nS2{E<Y3Au?`xzW`z;h{=K9L|yi<Pq(8?iZY)@J8HpMsm@se4?6vO`9qiHo_J
   21.31 +z%a<p5pER#|eJVTt%gaUUP=hNHIw+z&k5$z}?0Tl1zr5?R^R;OV)5kPTq?9Nn@qLqc
   21.32 +z)ZhnqRB=z+5W@e@rF5&h89Kk?;MOPcuPgP3cej7=-P?Zj9dqn0v}vNv2-+~fEGHW*
   21.33 +z=9AGl6EooXP*Da;t8CWPUM1p=hZlIEd~|VoDm(s<!6V<?_IROWejYM0HTv*J{U4s}
   21.34 +zX}+^jT>b#z`(aa%B{E`$yV4q}K_KTZE#TbHE8<I-kPW52f!BYs?PrD3jip|^b<|^N
   21.35 +z-Prkx`i2dQ8rQ`|@lyn0saOy?EInT~Qp=erU+Elqf9Ia9Pt5$`+QKh1tz#!WJMae1
   21.36 +zB{FLL;^kWsravd}@?ZTBh@?;r8#tf03kTkLara}tnt2Ma|66Aa0PD;Jzj*xA=&@wQ
   21.37 +z*=94-nXYKOBNmO<&9?vpj53JTK&l-t)5D0$I7d(YZS=X_M}PXlp5lu@@n&BuwZM{F
   21.38 +zyNuR{HYT<#U)I`FSKF3KBr*|cn8GUMgKYM*!qD)=&))qo_sYTdyd%KK|MesSQuC?+
   21.39 +s;)`lXrc$Q7H0VzQb3hKre$@v52F?c3>?7=Ig8%>k07*qoM6N<$f~MFfCjbBd
   21.40 +
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/static/icons/emoticon_unhappy.png	Mon Aug 30 21:52:19 2010 +0200
    22.3 @@ -0,0 +1,39 @@
    22.4 +--- emoticon_unhappy.png
    22.5 ++++ emoticon_unhappy.png
    22.6 +GIT binary patch
    22.7 +literal 1735
    22.8 +zc$@*p1~~bNP)<h;3K|Lk000e1NJLTq000>P000>X1^@s6#OZ}&00001b5ch_0Itp)
    22.9 +z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igc0
   22.10 +z5)C$A#Y&+700u`%L_t(Y$BmY2j8#_^$A5dDbMBpc=fW^^XPC~Ena(gBUUdc#6bjTD
   22.11 +zpzYYkv=vmo5Nv7UE2dwJCPb6QsMS_#)DKo$454U&DpVAqEs8}_5S5`K%41;4Yj|Ad
   22.12 +z-g(@6Ui+NA{cwj1M1rj3<m|If_W!@K*MF_G1-G$v->;{tFK(;K)O~h*<KzX2)c8(I
   22.13 +zIGMmN<lWrB32*4)uSUG$?q@do#oOVCTRAtp2$?gjOYWYv<fZmmOJ<B4S7Tdo2@`n`
   22.14 +zhae<a3A|ElE}c0xeB!{?J%fdFtDjmQ6z+&*(=+wy=KB`BHgoB!CsNXr+P!-Hr;Z>F
   22.15 +zF_DK>J|Ze1qcqe`q5s(XgU9x7`P!4O<bH8ml5Nkn+|{|@)B8HR@9&^A09F-98zBVR
   22.16 +zfY1tJAEP`><YB@R_(jBshqUV$b+Z0}oiD%s*vsdi7B?VU*A|<<*pTU3^0~j?JFROn
   22.17 +zUJjfL!bu^WYJ{CaS_zOg2#F8^jKLTUL<kcjiUq2QLw0lbqg}h6KT@~p{nA@Ek^J<<
   22.18 +z3{xjPvSs>*7tS~CRfLlPry65dvv&PXJSFI8Z^cLp3}7^y{_r;r9lyZLjs}d55GsPe
   22.19 +zB~i%B?2M0pXkN{cqi-Azjsr-5#&Z*&?0Rt7<7W5_!g3IngR~R8`kTG1`QEEMvHBYf
   22.20 +z<b9-*Mmkme_2>njdhVBe{=3`Q-8+DAta1QCLXc;o4l_+1ANlc?71#jsXD=j~`oOa1
   22.21 +z?c!OCu*$sB1}njD-`)>E5Gr>4<#5?AZGQLe5sWba{QkgM0E{ItV~NnG4>7B|r$wgg
   22.22 +z)&R%}eG}%ibj+M;+#CW^NtQ8&d|{~aJy;m7_^%FKFN?t;?*{ehvYK>EI)6oGo2Rb?
   22.23 +zkhM)6%af*r)*7Q@FcIhop%pEYnkxHSnz9i22(4&quCMr8o9iIbNHhXd2~?ar%A}6@
   22.24 +z4eM4V8)a?t^o3^l;uv^{i4`UaFp<a8%a;Ps*pTHD4|J7f8+m-DXD-$0Bnii6#gb{|
   22.25 +zqf;7TVhA-D4aGd!x~B0GdyZY5$+qE+Ae;c=1X}q>X#>#n(N_Mr`G>SjtYw_^Fky&^
   22.26 +z0@|~Jy&KjL`Yv6K9-<f`LWNK<7>!irV{;H9Wvp3tGF3g!cms%7W26Vtfsk?y=!ivA
   22.27 +z(jXKj2tY^ZI7CDq(;E~<g&03Tx(dPwg0W}JY$TSk?y<em!ibf!Cg{LJTM{9P7!!ku
   22.28 +z!3r_LDi>d+tpw;;fpQUn2X24}6*3GFfkODILZVDeWb2c5sc^YpCL3Fg7a(JS21rB@
   22.29 +zE3kZ!HvPGfeJ5N7U4gG)d=l;%AFybm&xFWFlmdhwAbf=^BU~fVZWQ)fpPHfDCr|s>
   22.30 +zgIqoZ0%W8?7%(w$9I$Rrj`e@OLTDV)RY_7wi%~b?;HeV3PlilN1l%or7!9z3@VcDq
   22.31 +znmHYZ`47(j>+5!L@cb6fSl>*K`a)pPDn^6~ok*~D?<lnmjr?F`8+RpL2tx>cL@bEN
   22.32 +za`*~t?Y+QAs>nmt!A+glw03df@V1Lz*iam?y{YEt$>aNv%&wo@t#f_IWQ0jN{39Q*
   22.33 +zVs0z#RRzc&FK>(tLYIR`1d4fqVt!|ee~#92+4E_1;<1b;C?uS4Xz=XXN~{0%>iWe!
   22.34 +zkA3x>)WIFnBrHhU=tLSJRJk8j!YdctH5G|iRpg4a%fbNk?4|7K-SMA&XAa%>+-8gg
   22.35 +zuzaQ4KXiPsv$gw?ZtKDcWS|gHi10%QBSaV@{16dD2rodC0<1VjXme8l0H&#v)5^{D
   22.36 +z_3eNBD;xbwl~(`8ThNfq@2smyENkk#zd__aK*SmmYh)B7qiF0Mm;K__v)oK<=W@2m
   22.37 +zeS7z7-&(bCXglS>aD8aK*B?hJ9N3)Agr97l^Js&WzX(yt9hs1rX$$Dn@yMGyHvHtv
   22.38 +zTSs03)c;IIfWzmMd$8}~h9<ket!8e|luTo%Excg}+*^Y?RhYJ!xKrktcmKWT%DOjq
   22.39 +zJ^P(Mm3|I*|M#{6@TEoRMGwvH_|cSEi>I~Lx2CG36t?d|91$nSp`;*JDyS1D4~`x>
   22.40 +zbYS}n?+ktWs>`W6z7pMN3-7hsdOE8fZmdZz&eYV+aI9o{csO^pIO_Mlch=p${b<zd
   22.41 +dD=ys*<G(528i5!nsww~g002ovPDHLkV1n$RL~;NC
   22.42 +
    23.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.2 +++ b/static/icons/emoticon_unhappy_red.png	Mon Aug 30 21:52:19 2010 +0200
    23.3 @@ -0,0 +1,39 @@
    23.4 +--- emoticon_unhappy_red.png
    23.5 ++++ emoticon_unhappy_red.png
    23.6 +GIT binary patch
    23.7 +literal 1734
    23.8 +zc$@*o208hOP)<h;3K|Lk000e1NJLTq000>P000>X1^@s6#OZ}&00001b5ch_0Itp)
    23.9 +z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igc0
   23.10 +z5)LC7HT{VI00u@$L_t(Y$BmY2a8*|o$A5dDbDw$VCe5SGC66XFwBaGGq=YFQpp~}T
   23.11 +zht#%T94tDcqvQC+u``U$IF63mN*#5aYNt3#rKR8y#VS;A7%2l4<k6<IBqR+6$UFBY
   23.12 +zxsUVS+YdJ+bjl$6%RXnFv)9^dumAtQw%`V1`%kNg{xN8bmRCMqnrvPjE-7s_WT@E5
   23.13 +zq*M9f;XZ48<h5BVd+00ucJ@Yo#Py6jUV!2~$@RCcUH@X!n)ORc%F0Z`&Y^7!JQt*d
   23.14 +zP#DV&^l0DtnZEsd4^K^A`tq~APWq;T?CPkB*RNXr>awRcKOS=}sir3vJ_bH`F50$G
   23.15 +zj*YN$NF9eoZ4AEm?$r6e@BYpc=O%u4!yw(A4YjSG{ld}KPv6_Z#4v=TV44UaP#T2q
   23.16 +zfor2}3+-5FD+ie@V#-3sE6G$Q?00tl=JiM3y}U(S<Jq|S@WzVj;*O`k^q<@B>S!iC
   23.17 +z0r6r)B!-L?73NSFOcSI;2mxB7l>+S}RDejOiH=X3_4hyAabQbN<*rojt&atH>4jnz
   23.18 +zmwsk<duLatPER7@#Skq*$BNk2y&p>pS{5bI(f|!;#jYbKIX!fRW%bo)-$%GUWb=e4
   23.19 +zW@MuCzPnb9^_<(2a(V$IK+WD;p6GaV(_?z%zlcx>VTO?5Fs~du!q#8E!sFlmF2gw+
   23.20 +z8H*#MQT{!6g=b&h$yfi-&7px|M8qg;KuSnWaEmL7>z3a0%iXn@0P?rbM_BymrXQOl
   23.21 +zLxmrO1jB?-n7_Pz9014lIB@c8;kXQwzn<zrYYo7geM10fQ=sPxp-!J=`Mr-c$nwgq
   23.22 +z0J3~%`O1bR%NFa@1Oh!@EUh%D^z{7u)XdDheKNa1i>a)&P+_GCXbJ-2<I^(H(*8vN
   23.23 +zS<%??WW>&)ltKqV0j7bE2s|3<>*m)tR42f(5rIczb=AB*SzQU9LTZK38ZnolIM>T<
   23.24 +z9i7$N7e{JjMN4~^9vxZWfbXGQ2W?wyd1wOwHHicdt?Vek*0y-6>u!po5yBypXI9*S
   23.25 +zRvJ8oPyr~TkWng4qN=V`Vy-lc$`Xyt%pwd2yfDhPk%kGt#<nE?eCg*jBq}IzEwtyN
   23.26 +zU5BQK;K)z5;^y;oNDGm65w?eL0#E@`6_^ncricZ`ax+p?RH8?R5n+WkEHFbLC~zR~
   23.27 +zSyL4U>7g?Y1U|}j5w1nM;h{|zopq2|4=f*SAAA9GwKb)Qp^ZhRHJzR{gi)^Y7Rr<e
   23.28 +zkwvQjf}n7G(m=>L`uaY&4$Aky&Li>`WE_O;AuSi-f$$c<;{_gmNL?^<<70!ev?i%D
   23.29 +z4l)p^s~R;YAs8luIhUhTd8Pt^t)NuGBJHpyuqn^lh#3cwa}b_Hs%wL|Dj&FKjL#RT
   23.30 +zrshxGx0VY7AVK=7kgf^{JcsQA6a2n^9M=dDk3@)t3^K0IiByh5vo5ze4!34(a3qGi
   23.31 +z5P<qxK9bqg#f$GhXJ&^l@3su%d+}@_gtkylfUrGOEX=mC3>7ss{H(K)S}zZ_3zm&A
   23.32 +z1%7>kvmWfdbcI>p<pC%7nDXk5cCNhr`pDNl$j+M97JcqQ&+(oW&8<sS|9PbCqwNr<
   23.33 +zG7irqlQiYh@L_LZp{o%=VH07?W0eP;u@c^^sA9|>rzV)oBpfCk3f$?Dp>6Y0|EKn<
   23.34 +zbsIN7cQE$1!%`a>OpS`i5uR1hqiYx~v@RgX2jO}1aK$tWzyQ>SH5@+H{o&Eer|<lJ
   23.35 +zFWLZja%+BYdjDi=a_z%QjlMyo2f}p`Zo#1lK)4#=gK!kW(HH>;Ek7YCy0w{){Hcll
   23.36 +z_m4mJ&GYu?ywvY`3#zTu{>rf2RCjk*wYYc*p#(w+WT270F3f>0*stHU(M?Il>Pqwf
   23.37 +zc=OdCZ0?)hca<>nP3u@T@V(jLHxfGcx%v$otBsLya6N8nNQqv35B+3j|J=RfSKqie
   23.38 +z`y$|dqB8=V&3O3}BO^QNCI=eJ)~{<TZfP^cOa}7S^_@qf=w)}3U$tES>(qhq?FSEh
   23.39 +z>qn!xmjUbl-c|s<UK?NY!0j!+Xj{GRj$}<!EGkW5=3Vf8f|4RUp_!N&_xe6KkvV<x
   23.40 +zoqf*_P5*E*VBn^&MAwe4GNW;0N%X;*SY%ysMdgx^8HvxNCnmF5`^>Rie&4=n|BS5|
   23.41 +cy^)Xq0YuRrvY|Pk^#A|>07*qoM6N<$g4$w9?EnA(
   23.42 +
    24.1 --- a/static/style.css	Thu Aug 19 15:37:51 2010 +0200
    24.2 +++ b/static/style.css	Mon Aug 30 21:52:19 2010 +0200
    24.3 @@ -935,12 +935,14 @@
    24.4    padding: 1ex;
    24.5  }
    24.6  
    24.7 -.diff .added {
    24.8 +.diff_added {
    24.9    background-color: #cfc;
   24.10 +  text-decoration: underline;
   24.11  }
   24.12  
   24.13 -.diff .removed {
   24.14 +.diff_removed {
   24.15    background-color: #fcc;
   24.16 +  text-decoration: line-through;
   24.17  }
   24.18  
   24.19  .slot_issue_info {

Impressum / About Us