liquid_feedback_frontend
annotate app/main/suggestion/_list.lua @ 57:4f39f0a0d5b5
Listing of updated drafts on start page; Code cleanup; Minor bugfix
MOTD, initiator invite, issues to vote and listing of updated drafts shown as tabs on start page;
Bugfix: Initiator icon only shown when initiatorship has been accepted
MOTD, initiator invite, issues to vote and listing of updated drafts shown as tabs on start page;
Bugfix: Initiator icon only shown when initiatorship has been accepted
| author | bsw |
|---|---|
| date | Sat Apr 17 21:59:02 2010 +0200 (2010-04-17) |
| parents | 0849be391140 |
| children | 6a12fb7e4963 |
| 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@19 | 4 local tab_id = param.get("tab_id") |
| bsw/jbe@19 | 5 local show_name = param.get("show_name", atom.boolean) |
| bsw/jbe@19 | 6 if show_name == nil then |
| bsw/jbe@19 | 7 show_name = true |
| bsw/jbe@19 | 8 end |
| bsw/jbe@19 | 9 local show_filter = param.get("show_filter", atom.boolean) |
| bsw/jbe@19 | 10 if show_filter == nil then |
| bsw/jbe@19 | 11 show_filter = true |
| bsw/jbe@19 | 12 end |
| bsw/jbe@0 | 13 |
| bsw/jbe@19 | 14 local partial = { |
| bsw/jbe@19 | 15 routing = { |
| bsw/jbe@19 | 16 default = { |
| bsw/jbe@19 | 17 mode = "redirect", |
| bsw/jbe@19 | 18 module = "initiative", |
| bsw/jbe@19 | 19 view = "show_tab", |
| bsw/jbe@19 | 20 params = { |
| bsw/jbe@19 | 21 initiative_id = initiative.id, |
| bsw/jbe@19 | 22 tab = "suggestions", |
| bsw/jbe@19 | 23 tab_id = tab_id |
| bsw/jbe@19 | 24 }, |
| bsw/jbe@19 | 25 } |
| bsw/jbe@19 | 26 } |
| bsw/jbe@19 | 27 } |
| bsw/jbe@19 | 28 |
| bsw/jbe@19 | 29 local ui_filters = ui.filters |
| bsw/jbe@19 | 30 if not show_filter then |
| bsw/jbe@19 | 31 ui_filters = function(args) args.content() end |
| bsw/jbe@19 | 32 end |
| bsw/jbe@19 | 33 |
| bsw/jbe@19 | 34 ui_filters{ |
| bsw/jbe@19 | 35 label = _"Show filter", |
| bsw/jbe@0 | 36 selector = suggestions_selector, |
| bsw/jbe@19 | 37 { |
| bsw/jbe@19 | 38 label = _"Order by", |
| bsw/jbe@4 | 39 { |
| bsw/jbe@19 | 40 name = "plus_unfulfilled", |
| bsw/jbe@19 | 41 label = _"requested", |
| bsw/jbe@19 | 42 selector_modifier = function(selector) selector:add_order_by("plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id") end |
| bsw/jbe@4 | 43 }, |
| bsw/jbe@4 | 44 { |
| bsw/jbe@4 | 45 name = "plus2", |
| bsw/jbe@4 | 46 label = _"must", |
| bsw/jbe@19 | 47 selector_modifier = function(selector) selector:add_order_by("plus2_unfulfilled_count + plus2_fulfilled_count DESC, id") end |
| bsw/jbe@4 | 48 }, |
| bsw/jbe@4 | 49 { |
| bsw/jbe@4 | 50 name = "plus", |
| bsw/jbe@4 | 51 label = _"must/should", |
| bsw/jbe@19 | 52 selector_modifier = function(selector) selector:add_order_by("plus2_unfulfilled_count + plus1_unfulfilled_count + plus2_fulfilled_count + plus1_fulfilled_count DESC, id") end |
| bsw/jbe@4 | 53 }, |
| bsw/jbe@4 | 54 { |
| bsw/jbe@4 | 55 name = "minus", |
| bsw/jbe@4 | 56 label = _"must/should not", |
| bsw/jbe@19 | 57 selector_modifier = function(selector) selector:add_order_by("minus2_unfulfilled_count + minus1_unfulfilled_count + minus2_fulfilled_count + minus1_fulfilled_count DESC, id") end |
| bsw/jbe@4 | 58 }, |
| bsw/jbe@4 | 59 { |
| bsw/jbe@4 | 60 name = "minus2", |
| bsw/jbe@4 | 61 label = _"must not", |
| bsw/jbe@19 | 62 selector_modifier = function(selector) selector:add_order_by("minus2_unfulfilled_count + minus2_fulfilled_count DESC, id") end |
| bsw/jbe@19 | 63 } |
| bsw/jbe@4 | 64 }, |
| bsw/jbe@0 | 65 content = function() |
| bsw/jbe@4 | 66 ui.paginate{ |
| bsw/jbe@4 | 67 selector = suggestions_selector, |
| bsw/jbe@4 | 68 content = function() |
| bsw/jbe@4 | 69 ui.list{ |
| bsw/jbe@4 | 70 attr = { style = "table-layout: fixed;" }, |
| bsw/jbe@4 | 71 records = suggestions_selector:exec(), |
| bsw/jbe@4 | 72 columns = { |
| bsw/jbe@4 | 73 { |
| bsw/jbe@19 | 74 label = show_name and _"Suggestion" or nil, |
| bsw/jbe@4 | 75 content = function(record) |
| bsw/jbe@19 | 76 if show_name then |
| bsw/jbe@19 | 77 ui.link{ |
| bsw/jbe@19 | 78 text = record.name, |
| bsw/jbe@19 | 79 module = "suggestion", |
| bsw/jbe@19 | 80 view = "show", |
| bsw/jbe@19 | 81 id = record.id |
| bsw/jbe@19 | 82 } |
| bsw/jbe@19 | 83 end |
| bsw/jbe@4 | 84 end |
| bsw/jbe@4 | 85 }, |
| bsw/jbe@4 | 86 { |
| bsw/jbe@4 | 87 label = _"Collective opinion", |
| bsw/jbe@4 | 88 label_attr = { style = "width: 101px;" }, |
| bsw/jbe@4 | 89 content = function(record) |
| bsw/jbe@4 | 90 if record.minus2_unfulfilled_count then |
| bsw/jbe@4 | 91 local max_value = record.initiative.issue.population |
| bsw/jbe@4 | 92 ui.bargraph{ |
| bsw/jbe@4 | 93 max_value = max_value, |
| bsw/jbe@4 | 94 width = 50, |
| bsw/jbe@4 | 95 bars = { |
| bsw/jbe@4 | 96 { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.minus2_fulfilled_count - record.minus1_fulfilled_count }, |
| bsw/jbe@4 | 97 { color = "#f88", value = record.minus1_unfulfilled_count + record.minus1_fulfilled_count }, |
| bsw/jbe@4 | 98 { color = "#a00", value = record.minus2_unfulfilled_count + record.minus2_fulfilled_count }, |
| bsw/jbe@4 | 99 { color = "#0a0", value = record.plus2_unfulfilled_count + record.plus2_fulfilled_count }, |
| bsw/jbe@4 | 100 { color = "#8f8", value = record.plus1_unfulfilled_count + record.plus1_fulfilled_count }, |
| bsw/jbe@4 | 101 { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count }, |
| bsw/jbe@4 | 102 } |
| bsw/jbe@4 | 103 } |
| bsw/jbe@4 | 104 end |
| bsw/jbe@4 | 105 end |
| bsw/jbe@4 | 106 }, |
| bsw/jbe@4 | 107 { |
| bsw/jbe@4 | 108 label = _"My opinion", |
| bsw/jbe@4 | 109 content = function(record) |
| bsw/jbe@4 | 110 local degree |
| bsw@51 | 111 local opinion |
| bsw@51 | 112 if app.session.member_id then |
| bsw@51 | 113 opinion = Opinion:by_pk(app.session.member.id, record.id) |
| bsw@51 | 114 end |
| bsw/jbe@4 | 115 if opinion then |
| bsw/jbe@4 | 116 degree = opinion.degree |
| bsw@3 | 117 end |
| bsw/jbe@5 | 118 ui.container{ |
| bsw/jbe@5 | 119 attr = { class = "suggestion_my_opinion" }, |
| bsw/jbe@5 | 120 content = function() |
| bsw@51 | 121 if app.session.member_id then |
| bsw@51 | 122 if initiative.issue.state == "voting" or initiative.issue.state == "closed" then |
| bsw@51 | 123 ui.tag{ |
| bsw@51 | 124 tag = "span", |
| bsw@51 | 125 attr = { class = "action" .. (degree == -2 and " active_red2" or "") }, |
| bsw@51 | 126 content = _"must not" |
| bsw@51 | 127 } |
| bsw@51 | 128 ui.tag{ |
| bsw@51 | 129 tag = "span", |
| bsw@51 | 130 attr = { class = "action" .. (degree == -1 and " active_red1" or "") }, |
| bsw@51 | 131 content = _"should not" |
| bsw@51 | 132 } |
| bsw@51 | 133 ui.tag{ |
| bsw@51 | 134 tag = "span", |
| bsw@51 | 135 attr = { class = "action" .. (degree == nil and " active" or "") }, |
| bsw@51 | 136 content = _"neutral" |
| bsw@51 | 137 } |
| bsw@51 | 138 ui.tag{ |
| bsw@51 | 139 tag = "span", |
| bsw@51 | 140 attr = { class = "action" .. (degree == 1 and " active_green1" or "") }, |
| bsw@51 | 141 content = _"should" |
| bsw@51 | 142 } |
| bsw@51 | 143 ui.tag{ |
| bsw@51 | 144 tag = "span", |
| bsw@51 | 145 attr = { class = "action" .. (degree == 2 and " active_green2" or "") }, |
| bsw@51 | 146 content = _"must" |
| bsw@51 | 147 } |
| bsw@51 | 148 else |
| bsw@51 | 149 ui.link{ |
| bsw@51 | 150 attr = { class = "action" .. (degree == -2 and " active_red2" or "") }, |
| bsw@51 | 151 text = _"must not", |
| bsw@51 | 152 module = "opinion", |
| bsw@51 | 153 action = "update", |
| bsw@51 | 154 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
| bsw@51 | 155 params = { |
| bsw@51 | 156 suggestion_id = record.id, |
| bsw@51 | 157 degree = -2 |
| bsw@51 | 158 }, |
| bsw@51 | 159 partial = partial |
| bsw@51 | 160 } |
| bsw@51 | 161 slot.put(" ") |
| bsw@51 | 162 ui.link{ |
| bsw@51 | 163 attr = { class = "action" .. (degree == -1 and " active_red1" or "") }, |
| bsw@51 | 164 text = _"should not", |
| bsw@51 | 165 module = "opinion", |
| bsw@51 | 166 action = "update", |
| bsw@51 | 167 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
| bsw@51 | 168 params = { |
| bsw@51 | 169 suggestion_id = record.id, |
| bsw@51 | 170 degree = -1 |
| bsw@51 | 171 }, |
| bsw@51 | 172 partial = partial |
| bsw@51 | 173 } |
| bsw@51 | 174 slot.put(" ") |
| bsw@51 | 175 ui.link{ |
| bsw@51 | 176 attr = { class = "action" .. (degree == nil and " active" or "") }, |
| bsw@51 | 177 text = _"neutral", |
| bsw@51 | 178 module = "opinion", |
| bsw@51 | 179 action = "update", |
| bsw@51 | 180 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
| bsw@51 | 181 params = { |
| bsw@51 | 182 suggestion_id = record.id, |
| bsw@51 | 183 delete = true |
| bsw@51 | 184 }, |
| bsw@51 | 185 partial = partial |
| bsw@51 | 186 } |
| bsw@51 | 187 slot.put(" ") |
| bsw@51 | 188 ui.link{ |
| bsw@51 | 189 attr = { class = "action" .. (degree == 1 and " active_green1" or "") }, |
| bsw@51 | 190 text = _"should", |
| bsw@51 | 191 module = "opinion", |
| bsw@51 | 192 action = "update", |
| bsw@51 | 193 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
| bsw@51 | 194 params = { |
| bsw@51 | 195 suggestion_id = record.id, |
| bsw@51 | 196 degree = 1 |
| bsw@51 | 197 }, |
| bsw@51 | 198 partial = partial |
| bsw@51 | 199 } |
| bsw@51 | 200 slot.put(" ") |
| bsw@51 | 201 ui.link{ |
| bsw@51 | 202 attr = { class = "action" .. (degree == 2 and " active_green2" or "") }, |
| bsw@51 | 203 text = _"must", |
| bsw@51 | 204 module = "opinion", |
| bsw@51 | 205 action = "update", |
| bsw@51 | 206 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
| bsw@51 | 207 params = { |
| bsw@51 | 208 suggestion_id = record.id, |
| bsw@51 | 209 degree = 2 |
| bsw@51 | 210 }, |
| bsw@51 | 211 partial = partial |
| bsw@51 | 212 } |
| bsw@51 | 213 end |
| bsw/jbe@19 | 214 else |
| bsw@51 | 215 ui.field.text{ value = _"[Registered members only]" } |
| bsw/jbe@19 | 216 end |
| bsw/jbe@5 | 217 end |
| bsw/jbe@0 | 218 } |
| bsw/jbe@0 | 219 end |
| bsw/jbe@4 | 220 }, |
| bsw/jbe@4 | 221 { |
| bsw/jbe@4 | 222 content = function(record) |
| bsw@51 | 223 local opinion |
| bsw@51 | 224 if app.session.member_id then |
| bsw@51 | 225 opinion = Opinion:by_pk(app.session.member.id, record.id) |
| bsw@51 | 226 end |
| bsw/jbe@4 | 227 if opinion and not opinion.fulfilled then |
| bsw/jbe@4 | 228 ui.image{ static = "icons/16/cross.png" } |
| bsw/jbe@4 | 229 end |
| bsw/jbe@4 | 230 end |
| bsw/jbe@4 | 231 }, |
| bsw/jbe@4 | 232 { |
| bsw/jbe@4 | 233 label = _"Suggestion currently not implemented", |
| bsw/jbe@4 | 234 label_attr = { style = "width: 101px;" }, |
| bsw/jbe@4 | 235 content = function(record) |
| bsw/jbe@4 | 236 if record.minus2_unfulfilled_count then |
| bsw/jbe@4 | 237 local max_value = record.initiative.issue.population |
| bsw/jbe@4 | 238 ui.bargraph{ |
| bsw/jbe@4 | 239 max_value = max_value, |
| bsw/jbe@4 | 240 width = 50, |
| bsw/jbe@4 | 241 bars = { |
| bsw/jbe@4 | 242 { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count }, |
| bsw/jbe@4 | 243 { color = "#f88", value = record.minus1_unfulfilled_count }, |
| bsw/jbe@4 | 244 { color = "#a00", value = record.minus2_unfulfilled_count }, |
| bsw/jbe@4 | 245 { color = "#0a0", value = record.plus2_unfulfilled_count }, |
| bsw/jbe@4 | 246 { color = "#8f8", value = record.plus1_unfulfilled_count }, |
| bsw/jbe@4 | 247 { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count }, |
| bsw/jbe@4 | 248 } |
| bsw/jbe@4 | 249 } |
| bsw/jbe@4 | 250 end |
| bsw/jbe@4 | 251 end |
| bsw/jbe@4 | 252 }, |
| bsw/jbe@4 | 253 { |
| bsw/jbe@4 | 254 content = function(record) |
| bsw@51 | 255 local opinion |
| bsw@51 | 256 if app.session.member_id then |
| bsw@51 | 257 opinion = Opinion:by_pk(app.session.member.id, record.id) |
| bsw@51 | 258 end |
| bsw/jbe@4 | 259 if opinion and opinion.fulfilled then |
| bsw/jbe@4 | 260 ui.image{ static = "icons/16/tick.png" } |
| bsw/jbe@4 | 261 end |
| bsw/jbe@4 | 262 end |
| bsw/jbe@4 | 263 }, |
| bsw/jbe@4 | 264 { |
| bsw/jbe@4 | 265 label = _"Suggestion currently implemented", |
| bsw/jbe@4 | 266 label_attr = { style = "width: 101px;" }, |
| bsw/jbe@4 | 267 content = function(record) |
| bsw/jbe@4 | 268 if record.minus2_fulfilled_count then |
| bsw/jbe@4 | 269 local max_value = record.initiative.issue.population |
| bsw/jbe@4 | 270 ui.bargraph{ |
| bsw/jbe@4 | 271 max_value = max_value, |
| bsw/jbe@4 | 272 width = 50, |
| bsw/jbe@4 | 273 bars = { |
| bsw/jbe@4 | 274 { color = "#ddd", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count }, |
| bsw/jbe@4 | 275 { color = "#f88", value = record.minus1_fulfilled_count }, |
| bsw/jbe@4 | 276 { color = "#a00", value = record.minus2_fulfilled_count }, |
| bsw/jbe@4 | 277 { color = "#0a0", value = record.plus2_fulfilled_count }, |
| bsw/jbe@4 | 278 { color = "#8f8", value = record.plus1_fulfilled_count }, |
| bsw/jbe@4 | 279 { color = "#ddd", value = max_value - record.plus1_fulfilled_count - record.plus2_fulfilled_count }, |
| bsw/jbe@4 | 280 } |
| bsw/jbe@4 | 281 } |
| bsw/jbe@4 | 282 end |
| bsw@3 | 283 end |
| bsw/jbe@4 | 284 }, |
| bsw/jbe@4 | 285 { |
| bsw/jbe@4 | 286 label_attr = { style = "width: 200px;" }, |
| bsw/jbe@4 | 287 content = function(record) |
| bsw/jbe@4 | 288 local degree |
| bsw@51 | 289 local opinion |
| bsw@51 | 290 if app.session.member_id then |
| bsw@51 | 291 opinion = Opinion:by_pk(app.session.member.id, record.id) |
| bsw@51 | 292 end |
| bsw/jbe@4 | 293 if opinion then |
| bsw/jbe@4 | 294 degree = opinion.degree |
| bsw/jbe@4 | 295 end |
| bsw/jbe@4 | 296 if opinion then |
| bsw/jbe@4 | 297 if not opinion.fulfilled then |
| bsw/jbe@4 | 298 local text = "" |
| bsw/jbe@4 | 299 if opinion.degree > 0 then |
| bsw/jbe@4 | 300 text = _"Mark suggestion as implemented and express satisfaction" |
| bsw/jbe@4 | 301 else |
| bsw/jbe@4 | 302 text = _"Mark suggestion as implemented and express dissatisfaction" |
| bsw/jbe@4 | 303 end |
| bsw/jbe@4 | 304 ui.link{ |
| bsw/jbe@4 | 305 attr = { class = "action" }, |
| bsw/jbe@4 | 306 text = text, |
| bsw/jbe@4 | 307 module = "opinion", |
| bsw/jbe@4 | 308 action = "update", |
| bsw/jbe@4 | 309 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 | 310 params = { |
| bsw/jbe@4 | 311 suggestion_id = record.id, |
| bsw/jbe@4 | 312 fulfilled = true |
| bsw/jbe@19 | 313 }, |
| bsw/jbe@19 | 314 partial = partial |
| bsw/jbe@4 | 315 } |
| bsw/jbe@4 | 316 else |
| bsw/jbe@4 | 317 if opinion.degree > 0 then |
| bsw/jbe@4 | 318 text = _"Mark suggestion as not implemented and express dissatisfaction" |
| bsw/jbe@4 | 319 else |
| bsw/jbe@4 | 320 text = _"Mark suggestion as not implemented and express satisfaction" |
| bsw/jbe@4 | 321 end |
| bsw/jbe@4 | 322 ui.link{ |
| bsw/jbe@4 | 323 attr = { class = "action" }, |
| bsw/jbe@4 | 324 text = text, |
| bsw/jbe@4 | 325 module = "opinion", |
| bsw/jbe@4 | 326 action = "update", |
| bsw/jbe@4 | 327 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 | 328 params = { |
| bsw/jbe@4 | 329 suggestion_id = record.id, |
| bsw/jbe@4 | 330 fulfilled = false |
| bsw/jbe@19 | 331 }, |
| bsw/jbe@19 | 332 partial = partial |
| bsw/jbe@4 | 333 } |
| bsw/jbe@4 | 334 end |
| bsw/jbe@4 | 335 end |
| bsw/jbe@4 | 336 end |
| bsw/jbe@4 | 337 }, |
| bsw/jbe@4 | 338 { |
| bsw/jbe@4 | 339 content = function(record) |
| bsw@51 | 340 local opinion |
| bsw@51 | 341 if app.session.member_id then |
| bsw@51 | 342 opinion = Opinion:by_pk(app.session.member.id, record.id) |
| bsw@51 | 343 end |
| bsw/jbe@4 | 344 if opinion then |
| bsw/jbe@4 | 345 if (opinion.fulfilled and opinion.degree > 0) or (not opinion.fulfilled and opinion.degree < 0) then |
| bsw/jbe@4 | 346 ui.image{ static = "icons/16/thumb_up_green.png" } |
| bsw/jbe@4 | 347 else |
| bsw/jbe@4 | 348 ui.image{ static = "icons/16/thumb_down_red.png" } |
| bsw/jbe@4 | 349 end |
| bsw/jbe@4 | 350 end |
| bsw/jbe@4 | 351 end |
| bsw/jbe@4 | 352 }, |
| bsw/jbe@4 | 353 } |
| bsw/jbe@4 | 354 } |
| bsw/jbe@4 | 355 end |
| bsw/jbe@0 | 356 } |
| bsw/jbe@0 | 357 end |
| bsw/jbe@0 | 358 } |