liquid_feedback_frontend
diff app/main/suggestion/_list.lua @ 4:80c215dbf076
Version alpha5
Many optical changes and improved usability
Support for different wiki-formatting-engines
Help system
Many optical changes and improved usability
Support for different wiki-formatting-engines
Help system
| author | bsw/jbe |
|---|---|
| date | Thu Dec 10 12:00:00 2009 +0100 (2009-12-10) |
| parents | 768faea1096d |
| children | afd9f769c7ae |
line diff
1.1 --- a/app/main/suggestion/_list.lua Mon Nov 30 12:00:00 2009 +0100 1.2 +++ b/app/main/suggestion/_list.lua Thu Dec 10 12:00:00 2009 +0100 1.3 @@ -1,228 +1,292 @@ 1.4 + 1.5 +local initiative = param.get("initiative", "table") 1.6 local suggestions_selector = param.get("suggestions_selector", "table") 1.7 1.8 -ui.paginate{ 1.9 +ui.order{ 1.10 + name = name, 1.11 selector = suggestions_selector, 1.12 + options = { 1.13 + { 1.14 + name = "all", 1.15 + label = _"all", 1.16 + 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" 1.17 + }, 1.18 + { 1.19 + name = "plus2", 1.20 + label = _"must", 1.21 + order_by = "plus2_unfulfilled_count + plus2_fulfilled_count DESC, id" 1.22 + }, 1.23 + { 1.24 + name = "plus", 1.25 + label = _"must/should", 1.26 + order_by = "plus2_unfulfilled_count + plus1_unfulfilled_count + plus2_fulfilled_count + plus1_fulfilled_count DESC, id" 1.27 + }, 1.28 + { 1.29 + name = "minus", 1.30 + label = _"must/should not", 1.31 + order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count + minus2_fulfilled_count + minus1_fulfilled_count DESC, id" 1.32 + }, 1.33 + { 1.34 + name = "minus2", 1.35 + label = _"must not", 1.36 + order_by = "minus2_unfulfilled_count + minus2_fulfilled_count DESC, id" 1.37 + }, 1.38 + { 1.39 + name = "unfulfilled", 1.40 + label = _"not implemented", 1.41 + order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count + plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id" 1.42 + }, 1.43 + { 1.44 + name = "plus2_unfulfilled", 1.45 + label = _"must", 1.46 + order_by = "plus2_unfulfilled_count DESC, id" 1.47 + }, 1.48 + { 1.49 + name = "plus_unfulfilled", 1.50 + label = _"must/should", 1.51 + order_by = "plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id" 1.52 + }, 1.53 + { 1.54 + name = "minus_unfulfilled", 1.55 + label = _"must/should not", 1.56 + order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count DESC, id" 1.57 + }, 1.58 + { 1.59 + name = "minus2_unfulfilled", 1.60 + label = _"must not", 1.61 + order_by = "minus2_unfulfilled_count DESC, id" 1.62 + }, 1.63 + }, 1.64 content = function() 1.65 - ui.list{ 1.66 - attr = { style = "table-layout: fixed;" }, 1.67 - records = suggestions_selector:exec(), 1.68 - columns = { 1.69 - { 1.70 - label = _"Suggestion", 1.71 - content = function(record) 1.72 - ui.link{ 1.73 - text = record.name, 1.74 - module = "suggestion", 1.75 - view = "show", 1.76 - id = record.id 1.77 - } 1.78 - end 1.79 - }, 1.80 - { 1.81 - label = _"Collective opinion", 1.82 - label_attr = { style = "width: 101px;" }, 1.83 - content = function(record) 1.84 - if record.minus2_unfulfilled_count then 1.85 - local max_value = record.initiative.issue.population 1.86 - ui.bargraph{ 1.87 - max_value = max_value, 1.88 - width = 100, 1.89 - bars = { 1.90 - { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.minus2_fulfilled_count - record.minus1_fulfilled_count }, 1.91 - { color = "#f88", value = record.minus1_unfulfilled_count + record.minus1_fulfilled_count }, 1.92 - { color = "#a00", value = record.minus2_unfulfilled_count + record.minus2_fulfilled_count }, 1.93 - { color = "#0a0", value = record.plus2_unfulfilled_count + record.plus2_fulfilled_count }, 1.94 - { color = "#8f8", value = record.plus1_unfulfilled_count + record.plus1_fulfilled_count }, 1.95 - { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count }, 1.96 + ui.paginate{ 1.97 + selector = suggestions_selector, 1.98 + content = function() 1.99 + ui.list{ 1.100 + attr = { style = "table-layout: fixed;" }, 1.101 + records = suggestions_selector:exec(), 1.102 + columns = { 1.103 + { 1.104 + label = _"Suggestion", 1.105 + content = function(record) 1.106 + ui.link{ 1.107 + text = record.name, 1.108 + module = "suggestion", 1.109 + view = "show", 1.110 + id = record.id 1.111 } 1.112 - } 1.113 - end 1.114 - end 1.115 - }, 1.116 - { 1.117 - label = _"My opinion", 1.118 - content = function(record) 1.119 - local degree 1.120 - local opinion = Opinion:by_pk(app.session.member.id, record.id) 1.121 - if opinion then 1.122 - degree = opinion.degree 1.123 - end 1.124 - ui.link{ 1.125 - attr = { class = "action" .. (degree == -2 and " active_red2" or "") }, 1.126 - text = _"must not", 1.127 - module = "opinion", 1.128 - action = "update", 1.129 - routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, 1.130 - params = { 1.131 - suggestion_id = record.id, 1.132 - degree = -2 1.133 - } 1.134 - } 1.135 - ui.link{ 1.136 - attr = { class = "action" .. (degree == -1 and " active_red1" or "") }, 1.137 - text = _"should not", 1.138 - module = "opinion", 1.139 - action = "update", 1.140 - routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, 1.141 - params = { 1.142 - suggestion_id = record.id, 1.143 - degree = -1 1.144 - } 1.145 - } 1.146 - ui.link{ 1.147 - attr = { class = "action" .. (degree == nil and " active" or "") }, 1.148 - text = _"neutral", 1.149 - module = "opinion", 1.150 - action = "update", 1.151 - routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, 1.152 - params = { 1.153 - suggestion_id = record.id, 1.154 - delete = true 1.155 - } 1.156 - } 1.157 - ui.link{ 1.158 - attr = { class = "action" .. (degree == 1 and " active_green1" or "") }, 1.159 - text = _"should", 1.160 - module = "opinion", 1.161 - action = "update", 1.162 - routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, 1.163 - params = { 1.164 - suggestion_id = record.id, 1.165 - degree = 1 1.166 - } 1.167 - } 1.168 - ui.link{ 1.169 - attr = { class = "action" .. (degree == 2 and " active_green2" or "") }, 1.170 - text = _"must", 1.171 - module = "opinion", 1.172 - action = "update", 1.173 - routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, 1.174 - params = { 1.175 - suggestion_id = record.id, 1.176 - degree = 2 1.177 - } 1.178 - } 1.179 - end 1.180 - }, 1.181 - { 1.182 - content = function(record) 1.183 - local opinion = Opinion:by_pk(app.session.member.id, record.id) 1.184 - if opinion and not opinion.fulfilled then 1.185 - ui.image{ static = "icons/16/cross.png" } 1.186 - end 1.187 - end 1.188 - }, 1.189 - { 1.190 - label = _"Suggestion currently not implemented", 1.191 - label_attr = { style = "width: 101px;" }, 1.192 - content = function(record) 1.193 - if record.minus2_unfulfilled_count then 1.194 - local max_value = record.initiative.issue.population 1.195 - ui.bargraph{ 1.196 - max_value = max_value, 1.197 - width = 100, 1.198 - bars = { 1.199 - { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count }, 1.200 - { color = "#f88", value = record.minus1_unfulfilled_count }, 1.201 - { color = "#a00", value = record.minus2_unfulfilled_count }, 1.202 - { color = "#0a0", value = record.plus2_unfulfilled_count }, 1.203 - { color = "#8f8", value = record.plus1_unfulfilled_count }, 1.204 - { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count }, 1.205 - } 1.206 - } 1.207 - end 1.208 - end 1.209 - }, 1.210 - { 1.211 - content = function(record) 1.212 - local opinion = Opinion:by_pk(app.session.member.id, record.id) 1.213 - if opinion and opinion.fulfilled then 1.214 - ui.image{ static = "icons/16/tick.png" } 1.215 - end 1.216 - end 1.217 - }, 1.218 - { 1.219 - label = _"Suggestion currently implemented", 1.220 - label_attr = { style = "width: 101px;" }, 1.221 - content = function(record) 1.222 - if record.minus2_fulfilled_count then 1.223 - local max_value = record.initiative.issue.population 1.224 - ui.bargraph{ 1.225 - max_value = max_value, 1.226 - width = 100, 1.227 - bars = { 1.228 - { color = "#ddd", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count }, 1.229 - { color = "#f88", value = record.minus1_fulfilled_count }, 1.230 - { color = "#a00", value = record.minus2_fulfilled_count }, 1.231 - { color = "#0a0", value = record.plus2_fulfilled_count }, 1.232 - { color = "#8f8", value = record.plus1_fulfilled_count }, 1.233 - { color = "#ddd", value = max_value - record.plus1_fulfilled_count - record.plus2_fulfilled_count }, 1.234 - } 1.235 - } 1.236 - end 1.237 - end 1.238 - }, 1.239 - { 1.240 - label_attr = { style = "width: 200px;" }, 1.241 - content = function(record) 1.242 - local degree 1.243 - local opinion = Opinion:by_pk(app.session.member.id, record.id) 1.244 - if opinion then 1.245 - degree = opinion.degree 1.246 - end 1.247 - if opinion then 1.248 - if not opinion.fulfilled then 1.249 - local text = "" 1.250 - if opinion.degree > 0 then 1.251 - text = _"Mark suggestion as implemented and express satisfaction" 1.252 - else 1.253 - text = _"Mark suggestion as implemented and express dissatisfaction" 1.254 + end 1.255 + }, 1.256 + { 1.257 + label = _"Collective opinion", 1.258 + label_attr = { style = "width: 101px;" }, 1.259 + content = function(record) 1.260 + if record.minus2_unfulfilled_count then 1.261 + local max_value = record.initiative.issue.population 1.262 + ui.bargraph{ 1.263 + max_value = max_value, 1.264 + width = 50, 1.265 + bars = { 1.266 + { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.minus2_fulfilled_count - record.minus1_fulfilled_count }, 1.267 + { color = "#f88", value = record.minus1_unfulfilled_count + record.minus1_fulfilled_count }, 1.268 + { color = "#a00", value = record.minus2_unfulfilled_count + record.minus2_fulfilled_count }, 1.269 + { color = "#0a0", value = record.plus2_unfulfilled_count + record.plus2_fulfilled_count }, 1.270 + { color = "#8f8", value = record.plus1_unfulfilled_count + record.plus1_fulfilled_count }, 1.271 + { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count }, 1.272 + } 1.273 + } 1.274 + end 1.275 + end 1.276 + }, 1.277 + { 1.278 + label = _"My opinion", 1.279 + content = function(record) 1.280 + local degree 1.281 + local opinion = Opinion:by_pk(app.session.member.id, record.id) 1.282 + if opinion then 1.283 + degree = opinion.degree 1.284 end 1.285 ui.link{ 1.286 - attr = { class = "action" }, 1.287 - text = text, 1.288 + attr = { class = "action" .. (degree == -2 and " active_red2" or "") }, 1.289 + text = _"must not", 1.290 + module = "opinion", 1.291 + action = "update", 1.292 + routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, 1.293 + params = { 1.294 + suggestion_id = record.id, 1.295 + degree = -2 1.296 + } 1.297 + } 1.298 + ui.link{ 1.299 + attr = { class = "action" .. (degree == -1 and " active_red1" or "") }, 1.300 + text = _"should not", 1.301 + module = "opinion", 1.302 + action = "update", 1.303 + routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, 1.304 + params = { 1.305 + suggestion_id = record.id, 1.306 + degree = -1 1.307 + } 1.308 + } 1.309 + ui.link{ 1.310 + attr = { class = "action" .. (degree == nil and " active" or "") }, 1.311 + text = _"neutral", 1.312 module = "opinion", 1.313 action = "update", 1.314 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, 1.315 params = { 1.316 suggestion_id = record.id, 1.317 - fulfilled = true 1.318 + delete = true 1.319 } 1.320 } 1.321 - else 1.322 - if opinion.degree > 0 then 1.323 - text = _"Mark suggestion as not implemented and express dissatisfaction" 1.324 - else 1.325 - text = _"Mark suggestion as not implemented and express satisfaction" 1.326 - end 1.327 ui.link{ 1.328 - attr = { class = "action" }, 1.329 - text = text, 1.330 + attr = { class = "action" .. (degree == 1 and " active_green1" or "") }, 1.331 + text = _"should", 1.332 + module = "opinion", 1.333 + action = "update", 1.334 + routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, 1.335 + params = { 1.336 + suggestion_id = record.id, 1.337 + degree = 1 1.338 + } 1.339 + } 1.340 + ui.link{ 1.341 + attr = { class = "action" .. (degree == 2 and " active_green2" or "") }, 1.342 + text = _"must", 1.343 module = "opinion", 1.344 action = "update", 1.345 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, 1.346 params = { 1.347 suggestion_id = record.id, 1.348 - fulfilled = false 1.349 + degree = 2 1.350 } 1.351 } 1.352 end 1.353 - end 1.354 - end 1.355 - }, 1.356 - { 1.357 - content = function(record) 1.358 - local opinion = Opinion:by_pk(app.session.member.id, record.id) 1.359 - if opinion then 1.360 - if (opinion.fulfilled and opinion.degree > 0) or (not opinion.fulfilled and opinion.degree < 0) then 1.361 - ui.image{ static = "icons/16/thumb_up_green.png" } 1.362 - else 1.363 - ui.image{ static = "icons/16/thumb_down_red.png" } 1.364 + }, 1.365 + { 1.366 + content = function(record) 1.367 + local opinion = Opinion:by_pk(app.session.member.id, record.id) 1.368 + if opinion and not opinion.fulfilled then 1.369 + ui.image{ static = "icons/16/cross.png" } 1.370 + end 1.371 + end 1.372 + }, 1.373 + { 1.374 + label = _"Suggestion currently not implemented", 1.375 + label_attr = { style = "width: 101px;" }, 1.376 + content = function(record) 1.377 + if record.minus2_unfulfilled_count then 1.378 + local max_value = record.initiative.issue.population 1.379 + ui.bargraph{ 1.380 + max_value = max_value, 1.381 + width = 50, 1.382 + bars = { 1.383 + { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count }, 1.384 + { color = "#f88", value = record.minus1_unfulfilled_count }, 1.385 + { color = "#a00", value = record.minus2_unfulfilled_count }, 1.386 + { color = "#0a0", value = record.plus2_unfulfilled_count }, 1.387 + { color = "#8f8", value = record.plus1_unfulfilled_count }, 1.388 + { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count }, 1.389 + } 1.390 + } 1.391 + end 1.392 + end 1.393 + }, 1.394 + { 1.395 + content = function(record) 1.396 + local opinion = Opinion:by_pk(app.session.member.id, record.id) 1.397 + if opinion and opinion.fulfilled then 1.398 + ui.image{ static = "icons/16/tick.png" } 1.399 + end 1.400 + end 1.401 + }, 1.402 + { 1.403 + label = _"Suggestion currently implemented", 1.404 + label_attr = { style = "width: 101px;" }, 1.405 + content = function(record) 1.406 + if record.minus2_fulfilled_count then 1.407 + local max_value = record.initiative.issue.population 1.408 + ui.bargraph{ 1.409 + max_value = max_value, 1.410 + width = 50, 1.411 + bars = { 1.412 + { color = "#ddd", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count }, 1.413 + { color = "#f88", value = record.minus1_fulfilled_count }, 1.414 + { color = "#a00", value = record.minus2_fulfilled_count }, 1.415 + { color = "#0a0", value = record.plus2_fulfilled_count }, 1.416 + { color = "#8f8", value = record.plus1_fulfilled_count }, 1.417 + { color = "#ddd", value = max_value - record.plus1_fulfilled_count - record.plus2_fulfilled_count }, 1.418 + } 1.419 + } 1.420 + end 1.421 end 1.422 - end 1.423 - end 1.424 - }, 1.425 - } 1.426 + }, 1.427 + { 1.428 + label_attr = { style = "width: 200px;" }, 1.429 + content = function(record) 1.430 + local degree 1.431 + local opinion = Opinion:by_pk(app.session.member.id, record.id) 1.432 + if opinion then 1.433 + degree = opinion.degree 1.434 + end 1.435 + if opinion then 1.436 + if not opinion.fulfilled then 1.437 + local text = "" 1.438 + if opinion.degree > 0 then 1.439 + text = _"Mark suggestion as implemented and express satisfaction" 1.440 + else 1.441 + text = _"Mark suggestion as implemented and express dissatisfaction" 1.442 + end 1.443 + ui.link{ 1.444 + attr = { class = "action" }, 1.445 + text = text, 1.446 + module = "opinion", 1.447 + action = "update", 1.448 + routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, 1.449 + params = { 1.450 + suggestion_id = record.id, 1.451 + fulfilled = true 1.452 + } 1.453 + } 1.454 + else 1.455 + if opinion.degree > 0 then 1.456 + text = _"Mark suggestion as not implemented and express dissatisfaction" 1.457 + else 1.458 + text = _"Mark suggestion as not implemented and express satisfaction" 1.459 + end 1.460 + ui.link{ 1.461 + attr = { class = "action" }, 1.462 + text = text, 1.463 + module = "opinion", 1.464 + action = "update", 1.465 + routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, 1.466 + params = { 1.467 + suggestion_id = record.id, 1.468 + fulfilled = false 1.469 + } 1.470 + } 1.471 + end 1.472 + end 1.473 + end 1.474 + }, 1.475 + { 1.476 + content = function(record) 1.477 + local opinion = Opinion:by_pk(app.session.member.id, record.id) 1.478 + if opinion then 1.479 + if (opinion.fulfilled and opinion.degree > 0) or (not opinion.fulfilled and opinion.degree < 0) then 1.480 + ui.image{ static = "icons/16/thumb_up_green.png" } 1.481 + else 1.482 + ui.image{ static = "icons/16/thumb_down_red.png" } 1.483 + end 1.484 + end 1.485 + end 1.486 + }, 1.487 + } 1.488 + } 1.489 + end 1.490 } 1.491 end 1.492 } 1.493 + 1.494 +if initiative then 1.495 + ui.field.timestamp{ label = _"Last snapshot:", value = initiative.issue.snapshot } 1.496 +end