liquid_feedback_frontend

annotate app/main/suggestion/_list.lua @ 276:f460555c9896

Code cleanup
author bsw
date Sun Feb 12 20:03:26 2012 +0100 (2012-02-12)
parents 44ba79952610
children b77e6a17ca77
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@0 35 selector = suggestions_selector,
bsw/jbe@19 36 {
bsw/jbe@4 37 {
bsw/jbe@19 38 name = "plus_unfulfilled",
bsw/jbe@19 39 label = _"requested",
bsw/jbe@19 40 selector_modifier = function(selector) selector:add_order_by("plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id") end
bsw/jbe@4 41 },
bsw/jbe@4 42 {
bsw/jbe@4 43 name = "plus2",
bsw/jbe@4 44 label = _"must",
bsw/jbe@19 45 selector_modifier = function(selector) selector:add_order_by("plus2_unfulfilled_count + plus2_fulfilled_count DESC, id") end
bsw/jbe@4 46 },
bsw/jbe@4 47 {
bsw/jbe@4 48 name = "plus",
bsw/jbe@4 49 label = _"must/should",
bsw/jbe@19 50 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 51 },
bsw/jbe@4 52 {
bsw/jbe@4 53 name = "minus",
bsw/jbe@4 54 label = _"must/should not",
bsw/jbe@19 55 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 56 },
bsw/jbe@4 57 {
bsw/jbe@4 58 name = "minus2",
bsw/jbe@4 59 label = _"must not",
bsw/jbe@19 60 selector_modifier = function(selector) selector:add_order_by("minus2_unfulfilled_count + minus2_fulfilled_count DESC, id") end
bsw/jbe@19 61 }
bsw/jbe@4 62 },
bsw/jbe@0 63 content = function()
bsw/jbe@4 64 ui.paginate{
bsw/jbe@4 65 selector = suggestions_selector,
bsw/jbe@4 66 content = function()
bsw/jbe@4 67 ui.list{
bsw/jbe@4 68 attr = { style = "table-layout: fixed;" },
bsw/jbe@4 69 records = suggestions_selector:exec(),
bsw/jbe@4 70 columns = {
bsw/jbe@4 71 {
bsw/jbe@19 72 label = show_name and _"Suggestion" or nil,
bsw/jbe@4 73 content = function(record)
bsw/jbe@19 74 if show_name then
bsw/jbe@19 75 ui.link{
bsw/jbe@19 76 text = record.name,
bsw/jbe@19 77 module = "suggestion",
bsw/jbe@19 78 view = "show",
bsw/jbe@19 79 id = record.id
bsw/jbe@19 80 }
bsw/jbe@19 81 end
bsw/jbe@4 82 end
bsw/jbe@4 83 },
bsw/jbe@4 84 {
bsw@95 85 label = _"Collective opinion of supporters",
bsw/jbe@4 86 label_attr = { style = "width: 101px;" },
bsw/jbe@4 87 content = function(record)
bsw/jbe@4 88 if record.minus2_unfulfilled_count then
bsw@95 89 local max_value = record.initiative.supporter_count
bsw/jbe@4 90 ui.bargraph{
bsw/jbe@4 91 max_value = max_value,
bsw@95 92 width = 100,
bsw/jbe@4 93 bars = {
bsw@95 94 { color = "#0a0", value = record.plus2_unfulfilled_count + record.plus2_fulfilled_count },
bsw@95 95 { color = "#8f8", value = record.plus1_unfulfilled_count + record.plus1_fulfilled_count },
bsw@95 96 { 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},
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 }
bsw/jbe@4 100 }
bsw/jbe@4 101 end
bsw/jbe@4 102 end
bsw/jbe@4 103 },
bsw/jbe@4 104 {
bsw/jbe@4 105 label = _"My opinion",
bsw@95 106 label_attr = { style = "width: 130px; font-style: italic;" },
bsw/jbe@4 107 content = function(record)
bsw/jbe@4 108 local degree
bsw@51 109 local opinion
bsw@51 110 if app.session.member_id then
bsw@51 111 opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw@51 112 end
bsw/jbe@4 113 if opinion then
bsw/jbe@4 114 degree = opinion.degree
bsw@3 115 end
bsw/jbe@5 116 ui.container{
bsw/jbe@5 117 attr = { class = "suggestion_my_opinion" },
bsw/jbe@5 118 content = function()
bsw@51 119 if app.session.member_id then
bsw@51 120 if initiative.issue.state == "voting" or initiative.issue.state == "closed" then
bsw@95 121 if degree == -2 then
bsw@95 122 ui.tag{
bsw@95 123 tag = "span",
bsw@95 124 attr = {
bsw@95 125 class = "action" .. (degree == -2 and " active_red2" or "")
bsw@95 126 },
bsw@95 127 content = _"must not"
bsw@95 128 }
bsw@95 129 end
bsw@95 130 if degree == -1 then
bsw@95 131 ui.tag{
bsw@95 132 tag = "span",
bsw@95 133 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
bsw@95 134 content = _"should not"
bsw@95 135 }
bsw@95 136 end
bsw@95 137 if degree == nil then
bsw@95 138 ui.tag{
bsw@95 139 tag = "span",
bsw@95 140 attr = { class = "action" .. (degree == nil and " active" or "") },
bsw@95 141 content = _"neutral"
bsw@95 142 }
bsw@95 143 end
bsw@95 144 if degree == 1 then
bsw@95 145 ui.tag{
bsw@95 146 tag = "span",
bsw@95 147 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
bsw@95 148 content = _"should"
bsw@95 149 }
bsw@95 150 end
bsw@95 151 if degree == 2 then
bsw@95 152 ui.tag{
bsw@95 153 tag = "span",
bsw@95 154 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
bsw@95 155 content = _"must"
bsw@95 156 }
bsw@95 157 end
bsw@51 158 else
poelzi@142 159 -- we need to put initiative_id into the parameters to have a redirect target in case the suggestion is gone after the action
poelzi@142 160 params = param.get_all_cgi()
poelzi@142 161 params['initiative_id'] = initiative.id
poelzi@142 162
bsw@51 163 ui.link{
bsw@95 164 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
bsw@95 165 text = _"must",
bsw@51 166 module = "opinion",
bsw@51 167 action = "update",
poelzi@142 168 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = params } },
bsw@51 169 params = {
bsw@51 170 suggestion_id = record.id,
bsw@95 171 degree = 2
bsw@51 172 },
bsw@51 173 partial = partial
bsw@51 174 }
bsw@51 175 slot.put(" ")
bsw@51 176 ui.link{
bsw@51 177 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
bsw@51 178 text = _"should",
bsw@51 179 module = "opinion",
bsw@51 180 action = "update",
poelzi@142 181 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = params} },
bsw@51 182 params = {
bsw@51 183 suggestion_id = record.id,
bsw@51 184 degree = 1
bsw@51 185 },
bsw@51 186 partial = partial
bsw@51 187 }
bsw@51 188 slot.put(" ")
bsw@51 189 ui.link{
bsw@95 190 attr = { class = "action" .. (degree == nil and " active" or "") },
bsw@95 191 text = _"neutral",
bsw@51 192 module = "opinion",
bsw@51 193 action = "update",
poelzi@142 194 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = params } },
bsw@51 195 params = {
bsw@51 196 suggestion_id = record.id,
bsw@95 197 delete = true
bsw@95 198 },
bsw@95 199 partial = partial
bsw@95 200 }
bsw@95 201 slot.put(" ")
bsw@95 202 ui.link{
bsw@95 203 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
bsw@95 204 text = _"should not",
bsw@95 205 module = "opinion",
bsw@95 206 action = "update",
poelzi@142 207 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = params } },
bsw@95 208 params = {
bsw@95 209 suggestion_id = record.id,
bsw@95 210 degree = -1
bsw@95 211 },
bsw@95 212 partial = partial
bsw@95 213 }
bsw@95 214 slot.put(" ")
bsw@95 215 ui.link{
bsw@95 216 attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
bsw@95 217 text = _"must not",
bsw@95 218 module = "opinion",
bsw@95 219 action = "update",
poelzi@142 220 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = params } },
bsw@95 221 params = {
bsw@95 222 suggestion_id = record.id,
bsw@95 223 degree = -2
bsw@51 224 },
bsw@51 225 partial = partial
bsw@51 226 }
bsw@51 227 end
bsw/jbe@19 228 else
bsw@51 229 ui.field.text{ value = _"[Registered members only]" }
bsw/jbe@19 230 end
bsw/jbe@5 231 end
bsw/jbe@0 232 }
bsw/jbe@0 233 end
bsw/jbe@4 234 },
bsw/jbe@4 235 {
bsw/jbe@4 236 label = _"Suggestion currently not implemented",
bsw/jbe@4 237 label_attr = { style = "width: 101px;" },
bsw/jbe@4 238 content = function(record)
bsw/jbe@4 239 if record.minus2_unfulfilled_count then
bsw@95 240 local max_value = record.initiative.supporter_count
bsw/jbe@4 241 ui.bargraph{
bsw/jbe@4 242 max_value = max_value,
bsw@95 243 width = 100,
bsw/jbe@4 244 bars = {
bsw/jbe@4 245 { color = "#0a0", value = record.plus2_unfulfilled_count },
bsw/jbe@4 246 { color = "#8f8", value = record.plus1_unfulfilled_count },
bsw@95 247 { color = "#eee", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count },
bsw@95 248 { color = "#f88", value = record.minus1_unfulfilled_count },
bsw@95 249 { color = "#a00", value = record.minus2_unfulfilled_count },
bsw/jbe@4 250 }
bsw/jbe@4 251 }
bsw/jbe@4 252 end
bsw/jbe@4 253 end
bsw/jbe@4 254 },
bsw/jbe@4 255 {
bsw/jbe@4 256 label = _"Suggestion currently implemented",
bsw/jbe@4 257 label_attr = { style = "width: 101px;" },
bsw/jbe@4 258 content = function(record)
bsw/jbe@4 259 if record.minus2_fulfilled_count then
bsw@95 260 local max_value = record.initiative.supporter_count
bsw/jbe@4 261 ui.bargraph{
bsw/jbe@4 262 max_value = max_value,
bsw@95 263 width = 100,
bsw/jbe@4 264 bars = {
bsw@95 265 { color = "#0a0", value = record.plus2_fulfilled_count },
bsw@95 266 { color = "#8f8", value = record.plus1_fulfilled_count },
bsw@95 267 { color = "#eee", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count},
bsw/jbe@4 268 { color = "#f88", value = record.minus1_fulfilled_count },
bsw/jbe@4 269 { color = "#a00", value = record.minus2_fulfilled_count },
bsw/jbe@4 270 }
bsw/jbe@4 271 }
bsw/jbe@4 272 end
bsw@3 273 end
bsw/jbe@4 274 },
bsw/jbe@4 275 {
bsw@95 276 label = app.session.member_id and _"I consider suggestion as" or nil,
bsw@95 277 label_attr = { style = "width: 100px; font-style: italic;" },
bsw/jbe@4 278 content = function(record)
bsw/jbe@4 279 local degree
bsw@51 280 local opinion
bsw@51 281 if app.session.member_id then
bsw@51 282 opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw@51 283 end
bsw/jbe@4 284 if opinion then
bsw/jbe@4 285 degree = opinion.degree
bsw/jbe@4 286 end
bsw/jbe@4 287 if opinion then
bsw@95 288
bsw@95 289 ui.link{
bsw@95 290 attr = { class = opinion.fulfilled and "action active" or "action" },
bsw@95 291 text = _"implemented",
bsw@95 292 module = "opinion",
bsw@95 293 action = "update",
bsw@95 294 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw@95 295 params = {
bsw@95 296 suggestion_id = record.id,
bsw@95 297 fulfilled = true
bsw@95 298 },
bsw@95 299 partial = partial
bsw@95 300 }
bsw@95 301 slot.put("<br />")
bsw@95 302 ui.link{
bsw@95 303 attr = { class = not opinion.fulfilled and "action active" or "action" },
bsw@95 304 text = _"not implemented",
bsw@95 305 module = "opinion",
bsw@95 306 action = "update",
bsw@95 307 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw@95 308 params = {
bsw@95 309 suggestion_id = record.id,
bsw@95 310 fulfilled = false
bsw@95 311 },
bsw@95 312 partial = partial
bsw@95 313 }
bsw@95 314
bsw/jbe@4 315 end
bsw/jbe@4 316 end
bsw/jbe@4 317 },
bsw/jbe@4 318 {
bsw@95 319 label = app.session.member_id and _"So I'm" or nil,
bsw/jbe@4 320 content = function(record)
bsw@51 321 local opinion
bsw@51 322 if app.session.member_id then
bsw@51 323 opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw@51 324 end
bsw/jbe@4 325 if opinion then
bsw/jbe@4 326 if (opinion.fulfilled and opinion.degree > 0) or (not opinion.fulfilled and opinion.degree < 0) then
bsw@95 327 local title = _"satisfied"
bsw@95 328 ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_happy.png" }
bsw@95 329 elseif opinion.degree == 1 or opinion.degree == -1 then
bsw@95 330 local title = _"a bit unsatisfied"
bsw@95 331 ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_unhappy.png" }
bsw/jbe@4 332 else
bsw@95 333 local title = _"more unsatisfied"
bsw@95 334 ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_unhappy_red.png" }
bsw/jbe@4 335 end
bsw/jbe@4 336 end
bsw/jbe@4 337 end
bsw/jbe@4 338 },
bsw/jbe@4 339 }
bsw/jbe@4 340 }
bsw/jbe@4 341 end
bsw/jbe@0 342 }
bsw/jbe@0 343 end
bsw/jbe@0 344 }

Impressum / About Us