liquid_feedback_frontend

annotate app/main/suggestion/_list.lua @ 104:a9ea02807b94

voting result also with percent values
author jorges
date Mon Sep 20 01:43:19 2010 +0200 (2010-09-20)
parents 6a12fb7e4963
children 44ba79952610
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@95 87 label = _"Collective opinion of supporters",
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@95 91 local max_value = record.initiative.supporter_count
bsw/jbe@4 92 ui.bargraph{
bsw/jbe@4 93 max_value = max_value,
bsw@95 94 width = 100,
bsw/jbe@4 95 bars = {
bsw@95 96 { color = "#0a0", value = record.plus2_unfulfilled_count + record.plus2_fulfilled_count },
bsw@95 97 { color = "#8f8", value = record.plus1_unfulfilled_count + record.plus1_fulfilled_count },
bsw@95 98 { 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 99 { color = "#f88", value = record.minus1_unfulfilled_count + record.minus1_fulfilled_count },
bsw/jbe@4 100 { color = "#a00", value = record.minus2_unfulfilled_count + record.minus2_fulfilled_count },
bsw/jbe@4 101 }
bsw/jbe@4 102 }
bsw/jbe@4 103 end
bsw/jbe@4 104 end
bsw/jbe@4 105 },
bsw/jbe@4 106 {
bsw/jbe@4 107 label = _"My opinion",
bsw@95 108 label_attr = { style = "width: 130px; font-style: italic;" },
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@95 123 if degree == -2 then
bsw@95 124 ui.tag{
bsw@95 125 tag = "span",
bsw@95 126 attr = {
bsw@95 127 class = "action" .. (degree == -2 and " active_red2" or "")
bsw@95 128 },
bsw@95 129 content = _"must not"
bsw@95 130 }
bsw@95 131 end
bsw@95 132 if degree == -1 then
bsw@95 133 ui.tag{
bsw@95 134 tag = "span",
bsw@95 135 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
bsw@95 136 content = _"should not"
bsw@95 137 }
bsw@95 138 end
bsw@95 139 if degree == nil then
bsw@95 140 ui.tag{
bsw@95 141 tag = "span",
bsw@95 142 attr = { class = "action" .. (degree == nil and " active" or "") },
bsw@95 143 content = _"neutral"
bsw@95 144 }
bsw@95 145 end
bsw@95 146 if degree == 1 then
bsw@95 147 ui.tag{
bsw@95 148 tag = "span",
bsw@95 149 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
bsw@95 150 content = _"should"
bsw@95 151 }
bsw@95 152 end
bsw@95 153 if degree == 2 then
bsw@95 154 ui.tag{
bsw@95 155 tag = "span",
bsw@95 156 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
bsw@95 157 content = _"must"
bsw@95 158 }
bsw@95 159 end
bsw@51 160 else
bsw@51 161 ui.link{
bsw@95 162 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
bsw@95 163 text = _"must",
bsw@51 164 module = "opinion",
bsw@51 165 action = "update",
bsw@51 166 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw@51 167 params = {
bsw@51 168 suggestion_id = record.id,
bsw@95 169 degree = 2
bsw@51 170 },
bsw@51 171 partial = partial
bsw@51 172 }
bsw@51 173 slot.put(" ")
bsw@51 174 ui.link{
bsw@51 175 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
bsw@51 176 text = _"should",
bsw@51 177 module = "opinion",
bsw@51 178 action = "update",
bsw@51 179 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw@51 180 params = {
bsw@51 181 suggestion_id = record.id,
bsw@51 182 degree = 1
bsw@51 183 },
bsw@51 184 partial = partial
bsw@51 185 }
bsw@51 186 slot.put(" ")
bsw@51 187 ui.link{
bsw@95 188 attr = { class = "action" .. (degree == nil and " active" or "") },
bsw@95 189 text = _"neutral",
bsw@51 190 module = "opinion",
bsw@51 191 action = "update",
bsw@51 192 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw@51 193 params = {
bsw@51 194 suggestion_id = record.id,
bsw@95 195 delete = true
bsw@95 196 },
bsw@95 197 partial = partial
bsw@95 198 }
bsw@95 199 slot.put(" ")
bsw@95 200 ui.link{
bsw@95 201 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
bsw@95 202 text = _"should not",
bsw@95 203 module = "opinion",
bsw@95 204 action = "update",
bsw@95 205 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw@95 206 params = {
bsw@95 207 suggestion_id = record.id,
bsw@95 208 degree = -1
bsw@95 209 },
bsw@95 210 partial = partial
bsw@95 211 }
bsw@95 212 slot.put(" ")
bsw@95 213 ui.link{
bsw@95 214 attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
bsw@95 215 text = _"must not",
bsw@95 216 module = "opinion",
bsw@95 217 action = "update",
bsw@95 218 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw@95 219 params = {
bsw@95 220 suggestion_id = record.id,
bsw@95 221 degree = -2
bsw@51 222 },
bsw@51 223 partial = partial
bsw@51 224 }
bsw@51 225 end
bsw/jbe@19 226 else
bsw@51 227 ui.field.text{ value = _"[Registered members only]" }
bsw/jbe@19 228 end
bsw/jbe@5 229 end
bsw/jbe@0 230 }
bsw/jbe@0 231 end
bsw/jbe@4 232 },
bsw/jbe@4 233 {
bsw/jbe@4 234 label = _"Suggestion currently not implemented",
bsw/jbe@4 235 label_attr = { style = "width: 101px;" },
bsw/jbe@4 236 content = function(record)
bsw/jbe@4 237 if record.minus2_unfulfilled_count then
bsw@95 238 local max_value = record.initiative.supporter_count
bsw/jbe@4 239 ui.bargraph{
bsw/jbe@4 240 max_value = max_value,
bsw@95 241 width = 100,
bsw/jbe@4 242 bars = {
bsw/jbe@4 243 { color = "#0a0", value = record.plus2_unfulfilled_count },
bsw/jbe@4 244 { color = "#8f8", value = record.plus1_unfulfilled_count },
bsw@95 245 { color = "#eee", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count },
bsw@95 246 { color = "#f88", value = record.minus1_unfulfilled_count },
bsw@95 247 { color = "#a00", value = record.minus2_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 label = _"Suggestion currently implemented",
bsw/jbe@4 255 label_attr = { style = "width: 101px;" },
bsw/jbe@4 256 content = function(record)
bsw/jbe@4 257 if record.minus2_fulfilled_count then
bsw@95 258 local max_value = record.initiative.supporter_count
bsw/jbe@4 259 ui.bargraph{
bsw/jbe@4 260 max_value = max_value,
bsw@95 261 width = 100,
bsw/jbe@4 262 bars = {
bsw@95 263 { color = "#0a0", value = record.plus2_fulfilled_count },
bsw@95 264 { color = "#8f8", value = record.plus1_fulfilled_count },
bsw@95 265 { color = "#eee", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count},
bsw/jbe@4 266 { color = "#f88", value = record.minus1_fulfilled_count },
bsw/jbe@4 267 { color = "#a00", value = record.minus2_fulfilled_count },
bsw/jbe@4 268 }
bsw/jbe@4 269 }
bsw/jbe@4 270 end
bsw@3 271 end
bsw/jbe@4 272 },
bsw/jbe@4 273 {
bsw@95 274 label = app.session.member_id and _"I consider suggestion as" or nil,
bsw@95 275 label_attr = { style = "width: 100px; font-style: italic;" },
bsw/jbe@4 276 content = function(record)
bsw/jbe@4 277 local degree
bsw@51 278 local opinion
bsw@51 279 if app.session.member_id then
bsw@51 280 opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw@51 281 end
bsw/jbe@4 282 if opinion then
bsw/jbe@4 283 degree = opinion.degree
bsw/jbe@4 284 end
bsw/jbe@4 285 if opinion then
bsw@95 286
bsw@95 287 ui.link{
bsw@95 288 attr = { class = opinion.fulfilled and "action active" or "action" },
bsw@95 289 text = _"implemented",
bsw@95 290 module = "opinion",
bsw@95 291 action = "update",
bsw@95 292 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw@95 293 params = {
bsw@95 294 suggestion_id = record.id,
bsw@95 295 fulfilled = true
bsw@95 296 },
bsw@95 297 partial = partial
bsw@95 298 }
bsw@95 299 slot.put("<br />")
bsw@95 300 ui.link{
bsw@95 301 attr = { class = not opinion.fulfilled and "action active" or "action" },
bsw@95 302 text = _"not implemented",
bsw@95 303 module = "opinion",
bsw@95 304 action = "update",
bsw@95 305 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw@95 306 params = {
bsw@95 307 suggestion_id = record.id,
bsw@95 308 fulfilled = false
bsw@95 309 },
bsw@95 310 partial = partial
bsw@95 311 }
bsw@95 312
bsw/jbe@4 313 end
bsw/jbe@4 314 end
bsw/jbe@4 315 },
bsw/jbe@4 316 {
bsw@95 317 label = app.session.member_id and _"So I'm" or nil,
bsw/jbe@4 318 content = function(record)
bsw@51 319 local opinion
bsw@51 320 if app.session.member_id then
bsw@51 321 opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw@51 322 end
bsw/jbe@4 323 if opinion then
bsw/jbe@4 324 if (opinion.fulfilled and opinion.degree > 0) or (not opinion.fulfilled and opinion.degree < 0) then
bsw@95 325 local title = _"satisfied"
bsw@95 326 ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_happy.png" }
bsw@95 327 elseif opinion.degree == 1 or opinion.degree == -1 then
bsw@95 328 local title = _"a bit unsatisfied"
bsw@95 329 ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_unhappy.png" }
bsw/jbe@4 330 else
bsw@95 331 local title = _"more unsatisfied"
bsw@95 332 ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_unhappy_red.png" }
bsw/jbe@4 333 end
bsw/jbe@4 334 end
bsw/jbe@4 335 end
bsw/jbe@4 336 },
bsw/jbe@4 337 }
bsw/jbe@4 338 }
bsw/jbe@4 339 end
bsw/jbe@0 340 }
bsw/jbe@0 341 end
bsw/jbe@0 342 }

Impressum / About Us