liquid_feedback_frontend

annotate app/main/initiative/_list.lua @ 5:afd9f769c7ae

Version beta1

Final voting with Schulze-Method is now possible

Many bug fixes and code cleanup

Registration with invite codes

More sort and filter options

Seperated display of "supporters" and "potential supporters"

Optical changes

Flood limit / initiative contigent is now checked by frontend

Neccessary changes to access core beta11
author bsw/jbe
date Fri Dec 25 12:00:00 2009 +0100 (2009-12-25)
parents 80c215dbf076
children 72c5e0ee7c98
rev   line source
bsw/jbe@0 1 local initiatives_selector = param.get("initiatives_selector", "table")
bsw/jbe@0 2 initiatives_selector:join("issue", nil, "issue.id = initiative.issue_id")
bsw/jbe@0 3
bsw/jbe@0 4 local issue = param.get("issue", "table")
bsw/jbe@0 5
bsw/jbe@0 6 local order_options = {}
bsw/jbe@0 7
bsw/jbe@0 8 if issue and issue.ranks_available then
bsw/jbe@0 9 order_options[#order_options+1] = {
bsw/jbe@0 10 name = "rank",
bsw/jbe@0 11 label = _"Rank",
bsw/jbe@5 12 order_by = "initiative.rank, initiative.admitted DESC, vote_ratio(initiative.positive_votes, initiative.negative_votes) DESC, initiative.id"
bsw/jbe@0 13 }
bsw/jbe@0 14 end
bsw/jbe@0 15
bsw/jbe@0 16 order_options[#order_options+1] = {
bsw/jbe@5 17 name = "potential_support",
bsw/jbe@5 18 label = _"Potential support",
bsw/jbe@5 19 order_by = "initiative.supporter_count::float / issue.population::float DESC, initiative.id"
bsw/jbe@5 20 }
bsw/jbe@5 21
bsw/jbe@5 22 order_options[#order_options+1] = {
bsw/jbe@0 23 name = "support",
bsw/jbe@0 24 label = _"Support",
bsw/jbe@5 25 order_by = "initiative.satisfied_supporter_count::float / issue.population::float DESC, initiative.id"
bsw/jbe@0 26 }
bsw/jbe@0 27
bsw/jbe@0 28 order_options[#order_options+1] = {
bsw/jbe@0 29 name = "newest",
bsw/jbe@0 30 label = _"Newest",
bsw/jbe@5 31 order_by = "initiative.created DESC, initiative.id"
bsw/jbe@0 32 }
bsw/jbe@0 33
bsw/jbe@0 34 order_options[#order_options+1] = {
bsw/jbe@0 35 name = "oldest",
bsw/jbe@0 36 label = _"Oldest",
bsw/jbe@5 37 order_by = "initiative.created, initiative.id"
bsw/jbe@0 38 }
bsw/jbe@0 39
bsw/jbe@0 40 local name = "initiative_list"
bsw/jbe@0 41 if issue then
bsw/jbe@0 42 name = "issue_" .. tostring(issue.id) .. "_initiative_list"
bsw/jbe@0 43 end
bsw/jbe@0 44
bsw/jbe@0 45 ui.order{
bsw/jbe@0 46 name = name,
bsw/jbe@0 47 selector = initiatives_selector,
bsw/jbe@0 48 options = order_options,
bsw/jbe@0 49 content = function()
bsw/jbe@0 50 ui.paginate{
bsw/jbe@0 51 selector = initiatives_selector,
bsw/jbe@0 52 content = function()
bsw/jbe@0 53 local initiatives = initiatives_selector:exec()
bsw/jbe@0 54 local columns = {}
bsw@2 55 columns[#columns+1] = {
bsw@2 56 content = function(record)
bsw@2 57 if record.issue.accepted and record.issue.closed and record.issue.ranks_available then
bsw@3 58 ui.field.rank{ attr = { class = "rank" }, value = record.rank }
bsw@3 59 end
bsw@3 60 end
bsw@3 61 }
bsw@3 62 columns[#columns+1] = {
bsw@3 63 content = function(record)
bsw/jbe@5 64 if record.issue.accepted and record.issue.closed then
bsw/jbe@5 65 if record.issue.ranks_available then
bsw/jbe@5 66 if record.negative_votes and record.positive_votes then
bsw/jbe@5 67 local max_value = record.issue.voter_count
bsw/jbe@5 68 ui.bargraph{
bsw/jbe@5 69 max_value = max_value,
bsw/jbe@5 70 width = 100,
bsw/jbe@5 71 bars = {
bsw/jbe@5 72 { color = "#0a0", value = record.positive_votes },
bsw/jbe@5 73 { color = "#aaa", value = max_value - record.negative_votes - record.positive_votes },
bsw/jbe@5 74 { color = "#a00", value = record.negative_votes },
bsw/jbe@5 75 }
bsw/jbe@0 76 }
bsw/jbe@5 77 end
bsw/jbe@5 78 else
bsw/jbe@5 79 slot.put(_"Counting of votes")
bsw/jbe@0 80 end
bsw@2 81 else
bsw/jbe@0 82 local max_value = (record.issue.population or 0)
bsw/jbe@0 83 ui.bargraph{
bsw/jbe@0 84 max_value = max_value,
bsw/jbe@4 85 width = 100,
bsw/jbe@0 86 bars = {
bsw@2 87 { color = "#0a0", value = (record.satisfied_supporter_count or 0) },
bsw/jbe@5 88 { color = "#777", value = (record.supporter_count or 0) - (record.satisfied_supporter_count or 0) },
bsw/jbe@0 89 { color = "#ddd", value = max_value - (record.supporter_count or 0) },
bsw/jbe@0 90 }
bsw/jbe@0 91 }
bsw/jbe@0 92 end
bsw@2 93 end
bsw@2 94 }
bsw/jbe@0 95 columns[#columns+1] = {
bsw/jbe@0 96 content = function(record)
bsw/jbe@0 97 ui.link{
bsw/jbe@0 98 content = function()
bsw@2 99 local name
bsw@2 100 if record.name_highlighted then
bsw@2 101 name = encode.highlight(record.name_highlighted)
bsw@2 102 else
bsw@2 103 name = encode.html(record.name)
bsw@2 104 end
bsw@2 105 slot.put(name)
bsw/jbe@0 106 end,
bsw/jbe@0 107 module = "initiative",
bsw/jbe@0 108 view = "show",
bsw/jbe@0 109 id = record.id
bsw/jbe@0 110 }
bsw@2 111 if record.issue.state == "new" then
bsw@2 112 ui.image{
bsw@2 113 static = "icons/16/new.png"
bsw@2 114 }
bsw@2 115 end
bsw/jbe@0 116 end
bsw/jbe@0 117 }
bsw/jbe@0 118
bsw/jbe@0 119 ui.list{
bsw/jbe@0 120 attr = { class = "initiatives" },
bsw/jbe@0 121 records = initiatives,
bsw/jbe@0 122 columns = columns
bsw/jbe@0 123 }
bsw/jbe@0 124 end
bsw/jbe@0 125 }
bsw/jbe@0 126 end
bsw/jbe@0 127 }

Impressum / About Us