liquid_feedback_frontend
annotate app/main/suggestion/_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
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 | 00d1004545f1 |
rev | line source |
---|---|
bsw/jbe@4 | 1 |
bsw/jbe@4 | 2 local initiative = param.get("initiative", "table") |
bsw/jbe@0 | 3 local suggestions_selector = param.get("suggestions_selector", "table") |
bsw/jbe@0 | 4 |
bsw/jbe@4 | 5 ui.order{ |
bsw/jbe@4 | 6 name = name, |
bsw/jbe@0 | 7 selector = suggestions_selector, |
bsw/jbe@4 | 8 options = { |
bsw/jbe@4 | 9 { |
bsw/jbe@4 | 10 name = "all", |
bsw/jbe@4 | 11 label = _"all", |
bsw/jbe@4 | 12 order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count + minus2_fulfilled_count + minus1_fulfilled_count + plus2_unfulfilled_count + plus1_unfulfilled_count + plus2_fulfilled_count + plus1_fulfilled_count DESC, id" |
bsw/jbe@4 | 13 }, |
bsw/jbe@4 | 14 { |
bsw/jbe@4 | 15 name = "plus2", |
bsw/jbe@4 | 16 label = _"must", |
bsw/jbe@4 | 17 order_by = "plus2_unfulfilled_count + plus2_fulfilled_count DESC, id" |
bsw/jbe@4 | 18 }, |
bsw/jbe@4 | 19 { |
bsw/jbe@4 | 20 name = "plus", |
bsw/jbe@4 | 21 label = _"must/should", |
bsw/jbe@4 | 22 order_by = "plus2_unfulfilled_count + plus1_unfulfilled_count + plus2_fulfilled_count + plus1_fulfilled_count DESC, id" |
bsw/jbe@4 | 23 }, |
bsw/jbe@4 | 24 { |
bsw/jbe@4 | 25 name = "minus", |
bsw/jbe@4 | 26 label = _"must/should not", |
bsw/jbe@4 | 27 order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count + minus2_fulfilled_count + minus1_fulfilled_count DESC, id" |
bsw/jbe@4 | 28 }, |
bsw/jbe@4 | 29 { |
bsw/jbe@4 | 30 name = "minus2", |
bsw/jbe@4 | 31 label = _"must not", |
bsw/jbe@4 | 32 order_by = "minus2_unfulfilled_count + minus2_fulfilled_count DESC, id" |
bsw/jbe@4 | 33 }, |
bsw/jbe@4 | 34 { |
bsw/jbe@4 | 35 name = "unfulfilled", |
bsw/jbe@4 | 36 label = _"not implemented", |
bsw/jbe@4 | 37 order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count + plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id" |
bsw/jbe@4 | 38 }, |
bsw/jbe@4 | 39 { |
bsw/jbe@4 | 40 name = "plus2_unfulfilled", |
bsw/jbe@4 | 41 label = _"must", |
bsw/jbe@4 | 42 order_by = "plus2_unfulfilled_count DESC, id" |
bsw/jbe@4 | 43 }, |
bsw/jbe@4 | 44 { |
bsw/jbe@4 | 45 name = "plus_unfulfilled", |
bsw/jbe@4 | 46 label = _"must/should", |
bsw/jbe@4 | 47 order_by = "plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id" |
bsw/jbe@4 | 48 }, |
bsw/jbe@4 | 49 { |
bsw/jbe@4 | 50 name = "minus_unfulfilled", |
bsw/jbe@4 | 51 label = _"must/should not", |
bsw/jbe@4 | 52 order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count DESC, id" |
bsw/jbe@4 | 53 }, |
bsw/jbe@4 | 54 { |
bsw/jbe@4 | 55 name = "minus2_unfulfilled", |
bsw/jbe@4 | 56 label = _"must not", |
bsw/jbe@4 | 57 order_by = "minus2_unfulfilled_count DESC, id" |
bsw/jbe@4 | 58 }, |
bsw/jbe@4 | 59 }, |
bsw/jbe@0 | 60 content = function() |
bsw/jbe@4 | 61 ui.paginate{ |
bsw/jbe@4 | 62 selector = suggestions_selector, |
bsw/jbe@4 | 63 content = function() |
bsw/jbe@4 | 64 ui.list{ |
bsw/jbe@4 | 65 attr = { style = "table-layout: fixed;" }, |
bsw/jbe@4 | 66 records = suggestions_selector:exec(), |
bsw/jbe@4 | 67 columns = { |
bsw/jbe@4 | 68 { |
bsw/jbe@4 | 69 label = _"Suggestion", |
bsw/jbe@4 | 70 content = function(record) |
bsw/jbe@4 | 71 ui.link{ |
bsw/jbe@4 | 72 text = record.name, |
bsw/jbe@4 | 73 module = "suggestion", |
bsw/jbe@4 | 74 view = "show", |
bsw/jbe@4 | 75 id = record.id |
bsw/jbe@0 | 76 } |
bsw/jbe@4 | 77 end |
bsw/jbe@4 | 78 }, |
bsw/jbe@4 | 79 { |
bsw/jbe@4 | 80 label = _"Collective opinion", |
bsw/jbe@4 | 81 label_attr = { style = "width: 101px;" }, |
bsw/jbe@4 | 82 content = function(record) |
bsw/jbe@4 | 83 if record.minus2_unfulfilled_count then |
bsw/jbe@4 | 84 local max_value = record.initiative.issue.population |
bsw/jbe@4 | 85 ui.bargraph{ |
bsw/jbe@4 | 86 max_value = max_value, |
bsw/jbe@4 | 87 width = 50, |
bsw/jbe@4 | 88 bars = { |
bsw/jbe@4 | 89 { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.minus2_fulfilled_count - record.minus1_fulfilled_count }, |
bsw/jbe@4 | 90 { color = "#f88", value = record.minus1_unfulfilled_count + record.minus1_fulfilled_count }, |
bsw/jbe@4 | 91 { color = "#a00", value = record.minus2_unfulfilled_count + record.minus2_fulfilled_count }, |
bsw/jbe@4 | 92 { color = "#0a0", value = record.plus2_unfulfilled_count + record.plus2_fulfilled_count }, |
bsw/jbe@4 | 93 { color = "#8f8", value = record.plus1_unfulfilled_count + record.plus1_fulfilled_count }, |
bsw/jbe@4 | 94 { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count }, |
bsw/jbe@4 | 95 } |
bsw/jbe@4 | 96 } |
bsw/jbe@4 | 97 end |
bsw/jbe@4 | 98 end |
bsw/jbe@4 | 99 }, |
bsw/jbe@4 | 100 { |
bsw/jbe@4 | 101 label = _"My opinion", |
bsw/jbe@4 | 102 content = function(record) |
bsw/jbe@4 | 103 local degree |
bsw/jbe@4 | 104 local opinion = Opinion:by_pk(app.session.member.id, record.id) |
bsw/jbe@4 | 105 if opinion then |
bsw/jbe@4 | 106 degree = opinion.degree |
bsw@3 | 107 end |
bsw/jbe@5 | 108 ui.container{ |
bsw/jbe@5 | 109 attr = { class = "suggestion_my_opinion" }, |
bsw/jbe@5 | 110 content = function() |
bsw/jbe@5 | 111 ui.link{ |
bsw/jbe@5 | 112 attr = { class = "action" .. (degree == -2 and " active_red2" or "") }, |
bsw/jbe@5 | 113 text = _"must not", |
bsw/jbe@5 | 114 module = "opinion", |
bsw/jbe@5 | 115 action = "update", |
bsw/jbe@5 | 116 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
bsw/jbe@5 | 117 params = { |
bsw/jbe@5 | 118 suggestion_id = record.id, |
bsw/jbe@5 | 119 degree = -2 |
bsw/jbe@5 | 120 } |
bsw/jbe@5 | 121 } |
bsw/jbe@5 | 122 slot.put(" ") |
bsw/jbe@5 | 123 ui.link{ |
bsw/jbe@5 | 124 attr = { class = "action" .. (degree == -1 and " active_red1" or "") }, |
bsw/jbe@5 | 125 text = _"should not", |
bsw/jbe@5 | 126 module = "opinion", |
bsw/jbe@5 | 127 action = "update", |
bsw/jbe@5 | 128 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
bsw/jbe@5 | 129 params = { |
bsw/jbe@5 | 130 suggestion_id = record.id, |
bsw/jbe@5 | 131 degree = -1 |
bsw/jbe@5 | 132 } |
bsw/jbe@5 | 133 } |
bsw/jbe@5 | 134 slot.put(" ") |
bsw/jbe@5 | 135 ui.link{ |
bsw/jbe@5 | 136 attr = { class = "action" .. (degree == nil and " active" or "") }, |
bsw/jbe@5 | 137 text = _"neutral", |
bsw/jbe@5 | 138 module = "opinion", |
bsw/jbe@5 | 139 action = "update", |
bsw/jbe@5 | 140 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
bsw/jbe@5 | 141 params = { |
bsw/jbe@5 | 142 suggestion_id = record.id, |
bsw/jbe@5 | 143 delete = true |
bsw/jbe@5 | 144 } |
bsw/jbe@5 | 145 } |
bsw/jbe@5 | 146 slot.put(" ") |
bsw/jbe@5 | 147 ui.link{ |
bsw/jbe@5 | 148 attr = { class = "action" .. (degree == 1 and " active_green1" or "") }, |
bsw/jbe@5 | 149 text = _"should", |
bsw/jbe@5 | 150 module = "opinion", |
bsw/jbe@5 | 151 action = "update", |
bsw/jbe@5 | 152 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
bsw/jbe@5 | 153 params = { |
bsw/jbe@5 | 154 suggestion_id = record.id, |
bsw/jbe@5 | 155 degree = 1 |
bsw/jbe@5 | 156 } |
bsw/jbe@5 | 157 } |
bsw/jbe@5 | 158 slot.put(" ") |
bsw/jbe@5 | 159 ui.link{ |
bsw/jbe@5 | 160 attr = { class = "action" .. (degree == 2 and " active_green2" or "") }, |
bsw/jbe@5 | 161 text = _"must", |
bsw/jbe@5 | 162 module = "opinion", |
bsw/jbe@5 | 163 action = "update", |
bsw/jbe@5 | 164 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
bsw/jbe@5 | 165 params = { |
bsw/jbe@5 | 166 suggestion_id = record.id, |
bsw/jbe@5 | 167 degree = 2 |
bsw/jbe@5 | 168 } |
bsw/jbe@5 | 169 } |
bsw/jbe@5 | 170 end |
bsw/jbe@0 | 171 } |
bsw/jbe@0 | 172 end |
bsw/jbe@4 | 173 }, |
bsw/jbe@4 | 174 { |
bsw/jbe@4 | 175 content = function(record) |
bsw/jbe@4 | 176 local opinion = Opinion:by_pk(app.session.member.id, record.id) |
bsw/jbe@4 | 177 if opinion and not opinion.fulfilled then |
bsw/jbe@4 | 178 ui.image{ static = "icons/16/cross.png" } |
bsw/jbe@4 | 179 end |
bsw/jbe@4 | 180 end |
bsw/jbe@4 | 181 }, |
bsw/jbe@4 | 182 { |
bsw/jbe@4 | 183 label = _"Suggestion currently not implemented", |
bsw/jbe@4 | 184 label_attr = { style = "width: 101px;" }, |
bsw/jbe@4 | 185 content = function(record) |
bsw/jbe@4 | 186 if record.minus2_unfulfilled_count then |
bsw/jbe@4 | 187 local max_value = record.initiative.issue.population |
bsw/jbe@4 | 188 ui.bargraph{ |
bsw/jbe@4 | 189 max_value = max_value, |
bsw/jbe@4 | 190 width = 50, |
bsw/jbe@4 | 191 bars = { |
bsw/jbe@4 | 192 { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count }, |
bsw/jbe@4 | 193 { color = "#f88", value = record.minus1_unfulfilled_count }, |
bsw/jbe@4 | 194 { color = "#a00", value = record.minus2_unfulfilled_count }, |
bsw/jbe@4 | 195 { color = "#0a0", value = record.plus2_unfulfilled_count }, |
bsw/jbe@4 | 196 { color = "#8f8", value = record.plus1_unfulfilled_count }, |
bsw/jbe@4 | 197 { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count }, |
bsw/jbe@4 | 198 } |
bsw/jbe@4 | 199 } |
bsw/jbe@4 | 200 end |
bsw/jbe@4 | 201 end |
bsw/jbe@4 | 202 }, |
bsw/jbe@4 | 203 { |
bsw/jbe@4 | 204 content = function(record) |
bsw/jbe@4 | 205 local opinion = Opinion:by_pk(app.session.member.id, record.id) |
bsw/jbe@4 | 206 if opinion and opinion.fulfilled then |
bsw/jbe@4 | 207 ui.image{ static = "icons/16/tick.png" } |
bsw/jbe@4 | 208 end |
bsw/jbe@4 | 209 end |
bsw/jbe@4 | 210 }, |
bsw/jbe@4 | 211 { |
bsw/jbe@4 | 212 label = _"Suggestion currently implemented", |
bsw/jbe@4 | 213 label_attr = { style = "width: 101px;" }, |
bsw/jbe@4 | 214 content = function(record) |
bsw/jbe@4 | 215 if record.minus2_fulfilled_count then |
bsw/jbe@4 | 216 local max_value = record.initiative.issue.population |
bsw/jbe@4 | 217 ui.bargraph{ |
bsw/jbe@4 | 218 max_value = max_value, |
bsw/jbe@4 | 219 width = 50, |
bsw/jbe@4 | 220 bars = { |
bsw/jbe@4 | 221 { color = "#ddd", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count }, |
bsw/jbe@4 | 222 { color = "#f88", value = record.minus1_fulfilled_count }, |
bsw/jbe@4 | 223 { color = "#a00", value = record.minus2_fulfilled_count }, |
bsw/jbe@4 | 224 { color = "#0a0", value = record.plus2_fulfilled_count }, |
bsw/jbe@4 | 225 { color = "#8f8", value = record.plus1_fulfilled_count }, |
bsw/jbe@4 | 226 { color = "#ddd", value = max_value - record.plus1_fulfilled_count - record.plus2_fulfilled_count }, |
bsw/jbe@4 | 227 } |
bsw/jbe@4 | 228 } |
bsw/jbe@4 | 229 end |
bsw@3 | 230 end |
bsw/jbe@4 | 231 }, |
bsw/jbe@4 | 232 { |
bsw/jbe@4 | 233 label_attr = { style = "width: 200px;" }, |
bsw/jbe@4 | 234 content = function(record) |
bsw/jbe@4 | 235 local degree |
bsw/jbe@4 | 236 local opinion = Opinion:by_pk(app.session.member.id, record.id) |
bsw/jbe@4 | 237 if opinion then |
bsw/jbe@4 | 238 degree = opinion.degree |
bsw/jbe@4 | 239 end |
bsw/jbe@4 | 240 if opinion then |
bsw/jbe@4 | 241 if not opinion.fulfilled then |
bsw/jbe@4 | 242 local text = "" |
bsw/jbe@4 | 243 if opinion.degree > 0 then |
bsw/jbe@4 | 244 text = _"Mark suggestion as implemented and express satisfaction" |
bsw/jbe@4 | 245 else |
bsw/jbe@4 | 246 text = _"Mark suggestion as implemented and express dissatisfaction" |
bsw/jbe@4 | 247 end |
bsw/jbe@4 | 248 ui.link{ |
bsw/jbe@4 | 249 attr = { class = "action" }, |
bsw/jbe@4 | 250 text = text, |
bsw/jbe@4 | 251 module = "opinion", |
bsw/jbe@4 | 252 action = "update", |
bsw/jbe@4 | 253 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
bsw/jbe@4 | 254 params = { |
bsw/jbe@4 | 255 suggestion_id = record.id, |
bsw/jbe@4 | 256 fulfilled = true |
bsw/jbe@4 | 257 } |
bsw/jbe@4 | 258 } |
bsw/jbe@4 | 259 else |
bsw/jbe@4 | 260 if opinion.degree > 0 then |
bsw/jbe@4 | 261 text = _"Mark suggestion as not implemented and express dissatisfaction" |
bsw/jbe@4 | 262 else |
bsw/jbe@4 | 263 text = _"Mark suggestion as not implemented and express satisfaction" |
bsw/jbe@4 | 264 end |
bsw/jbe@4 | 265 ui.link{ |
bsw/jbe@4 | 266 attr = { class = "action" }, |
bsw/jbe@4 | 267 text = text, |
bsw/jbe@4 | 268 module = "opinion", |
bsw/jbe@4 | 269 action = "update", |
bsw/jbe@4 | 270 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
bsw/jbe@4 | 271 params = { |
bsw/jbe@4 | 272 suggestion_id = record.id, |
bsw/jbe@4 | 273 fulfilled = false |
bsw/jbe@4 | 274 } |
bsw/jbe@4 | 275 } |
bsw/jbe@4 | 276 end |
bsw/jbe@4 | 277 end |
bsw/jbe@4 | 278 end |
bsw/jbe@4 | 279 }, |
bsw/jbe@4 | 280 { |
bsw/jbe@4 | 281 content = function(record) |
bsw/jbe@4 | 282 local opinion = Opinion:by_pk(app.session.member.id, record.id) |
bsw/jbe@4 | 283 if opinion then |
bsw/jbe@4 | 284 if (opinion.fulfilled and opinion.degree > 0) or (not opinion.fulfilled and opinion.degree < 0) then |
bsw/jbe@4 | 285 ui.image{ static = "icons/16/thumb_up_green.png" } |
bsw/jbe@4 | 286 else |
bsw/jbe@4 | 287 ui.image{ static = "icons/16/thumb_down_red.png" } |
bsw/jbe@4 | 288 end |
bsw/jbe@4 | 289 end |
bsw/jbe@4 | 290 end |
bsw/jbe@4 | 291 }, |
bsw/jbe@4 | 292 } |
bsw/jbe@4 | 293 } |
bsw/jbe@4 | 294 end |
bsw/jbe@0 | 295 } |
bsw/jbe@0 | 296 end |
bsw/jbe@0 | 297 } |
bsw/jbe@4 | 298 |
bsw/jbe@4 | 299 if initiative then |
bsw/jbe@4 | 300 ui.field.timestamp{ label = _"Last snapshot:", value = initiative.issue.snapshot } |
bsw/jbe@4 | 301 end |