liquid_feedback_frontend

annotate app/main/suggestion/_list.lua @ 30:abcac05b1091

Added tag beta11 for changeset b195682957dc
author jbe
date Sun Feb 21 17:34:37 2010 +0100 (2010-02-21)
parents 00d1004545f1
children 0849be391140
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/jbe@4 111 local opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw/jbe@4 112 if opinion then
bsw/jbe@4 113 degree = opinion.degree
bsw@3 114 end
bsw/jbe@5 115 ui.container{
bsw/jbe@5 116 attr = { class = "suggestion_my_opinion" },
bsw/jbe@5 117 content = function()
bsw/jbe@19 118 if initiative.issue.state == "voting" or initiative.issue.state == "closed" then
bsw/jbe@19 119 ui.tag{
bsw/jbe@19 120 tag = "span",
bsw/jbe@19 121 attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
bsw/jbe@19 122 content = _"must not"
bsw/jbe@19 123 }
bsw/jbe@19 124 ui.tag{
bsw/jbe@19 125 tag = "span",
bsw/jbe@19 126 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
bsw/jbe@19 127 content = _"should not"
bsw/jbe@19 128 }
bsw/jbe@19 129 ui.tag{
bsw/jbe@19 130 tag = "span",
bsw/jbe@19 131 attr = { class = "action" .. (degree == nil and " active" or "") },
bsw/jbe@19 132 content = _"neutral"
bsw/jbe@5 133 }
bsw/jbe@19 134 ui.tag{
bsw/jbe@19 135 tag = "span",
bsw/jbe@19 136 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
bsw/jbe@19 137 content = _"should"
bsw/jbe@19 138 }
bsw/jbe@19 139 ui.tag{
bsw/jbe@19 140 tag = "span",
bsw/jbe@19 141 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
bsw/jbe@19 142 content = _"must"
bsw/jbe@19 143 }
bsw/jbe@19 144 else
bsw/jbe@19 145 ui.link{
bsw/jbe@19 146 attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
bsw/jbe@19 147 text = _"must not",
bsw/jbe@19 148 module = "opinion",
bsw/jbe@19 149 action = "update",
bsw/jbe@19 150 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw/jbe@19 151 params = {
bsw/jbe@19 152 suggestion_id = record.id,
bsw/jbe@19 153 degree = -2
bsw/jbe@19 154 },
bsw/jbe@19 155 partial = partial
bsw/jbe@5 156 }
bsw/jbe@19 157 slot.put(" ")
bsw/jbe@19 158 ui.link{
bsw/jbe@19 159 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
bsw/jbe@19 160 text = _"should not",
bsw/jbe@19 161 module = "opinion",
bsw/jbe@19 162 action = "update",
bsw/jbe@19 163 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw/jbe@19 164 params = {
bsw/jbe@19 165 suggestion_id = record.id,
bsw/jbe@19 166 degree = -1
bsw/jbe@19 167 },
bsw/jbe@19 168 partial = partial
bsw/jbe@19 169 }
bsw/jbe@19 170 slot.put(" ")
bsw/jbe@19 171 ui.link{
bsw/jbe@19 172 attr = { class = "action" .. (degree == nil and " active" or "") },
bsw/jbe@19 173 text = _"neutral",
bsw/jbe@19 174 module = "opinion",
bsw/jbe@19 175 action = "update",
bsw/jbe@19 176 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw/jbe@19 177 params = {
bsw/jbe@19 178 suggestion_id = record.id,
bsw/jbe@19 179 delete = true
bsw/jbe@19 180 },
bsw/jbe@19 181 partial = partial
bsw/jbe@5 182 }
bsw/jbe@19 183 slot.put(" ")
bsw/jbe@19 184 ui.link{
bsw/jbe@19 185 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
bsw/jbe@19 186 text = _"should",
bsw/jbe@19 187 module = "opinion",
bsw/jbe@19 188 action = "update",
bsw/jbe@19 189 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw/jbe@19 190 params = {
bsw/jbe@19 191 suggestion_id = record.id,
bsw/jbe@19 192 degree = 1
bsw/jbe@19 193 },
bsw/jbe@19 194 partial = partial
bsw/jbe@5 195 }
bsw/jbe@19 196 slot.put(" ")
bsw/jbe@19 197 ui.link{
bsw/jbe@19 198 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
bsw/jbe@19 199 text = _"must",
bsw/jbe@19 200 module = "opinion",
bsw/jbe@19 201 action = "update",
bsw/jbe@19 202 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw/jbe@19 203 params = {
bsw/jbe@19 204 suggestion_id = record.id,
bsw/jbe@19 205 degree = 2
bsw/jbe@19 206 },
bsw/jbe@19 207 partial = partial
bsw/jbe@5 208 }
bsw/jbe@19 209 end
bsw/jbe@5 210 end
bsw/jbe@0 211 }
bsw/jbe@0 212 end
bsw/jbe@4 213 },
bsw/jbe@4 214 {
bsw/jbe@4 215 content = function(record)
bsw/jbe@4 216 local opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw/jbe@4 217 if opinion and not opinion.fulfilled then
bsw/jbe@4 218 ui.image{ static = "icons/16/cross.png" }
bsw/jbe@4 219 end
bsw/jbe@4 220 end
bsw/jbe@4 221 },
bsw/jbe@4 222 {
bsw/jbe@4 223 label = _"Suggestion currently not implemented",
bsw/jbe@4 224 label_attr = { style = "width: 101px;" },
bsw/jbe@4 225 content = function(record)
bsw/jbe@4 226 if record.minus2_unfulfilled_count then
bsw/jbe@4 227 local max_value = record.initiative.issue.population
bsw/jbe@4 228 ui.bargraph{
bsw/jbe@4 229 max_value = max_value,
bsw/jbe@4 230 width = 50,
bsw/jbe@4 231 bars = {
bsw/jbe@4 232 { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count },
bsw/jbe@4 233 { color = "#f88", value = record.minus1_unfulfilled_count },
bsw/jbe@4 234 { color = "#a00", value = record.minus2_unfulfilled_count },
bsw/jbe@4 235 { color = "#0a0", value = record.plus2_unfulfilled_count },
bsw/jbe@4 236 { color = "#8f8", value = record.plus1_unfulfilled_count },
bsw/jbe@4 237 { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count },
bsw/jbe@4 238 }
bsw/jbe@4 239 }
bsw/jbe@4 240 end
bsw/jbe@4 241 end
bsw/jbe@4 242 },
bsw/jbe@4 243 {
bsw/jbe@4 244 content = function(record)
bsw/jbe@4 245 local opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw/jbe@4 246 if opinion and opinion.fulfilled then
bsw/jbe@4 247 ui.image{ static = "icons/16/tick.png" }
bsw/jbe@4 248 end
bsw/jbe@4 249 end
bsw/jbe@4 250 },
bsw/jbe@4 251 {
bsw/jbe@4 252 label = _"Suggestion currently implemented",
bsw/jbe@4 253 label_attr = { style = "width: 101px;" },
bsw/jbe@4 254 content = function(record)
bsw/jbe@4 255 if record.minus2_fulfilled_count then
bsw/jbe@4 256 local max_value = record.initiative.issue.population
bsw/jbe@4 257 ui.bargraph{
bsw/jbe@4 258 max_value = max_value,
bsw/jbe@4 259 width = 50,
bsw/jbe@4 260 bars = {
bsw/jbe@4 261 { color = "#ddd", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count },
bsw/jbe@4 262 { color = "#f88", value = record.minus1_fulfilled_count },
bsw/jbe@4 263 { color = "#a00", value = record.minus2_fulfilled_count },
bsw/jbe@4 264 { color = "#0a0", value = record.plus2_fulfilled_count },
bsw/jbe@4 265 { color = "#8f8", value = record.plus1_fulfilled_count },
bsw/jbe@4 266 { color = "#ddd", value = max_value - record.plus1_fulfilled_count - record.plus2_fulfilled_count },
bsw/jbe@4 267 }
bsw/jbe@4 268 }
bsw/jbe@4 269 end
bsw@3 270 end
bsw/jbe@4 271 },
bsw/jbe@4 272 {
bsw/jbe@4 273 label_attr = { style = "width: 200px;" },
bsw/jbe@4 274 content = function(record)
bsw/jbe@4 275 local degree
bsw/jbe@4 276 local opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw/jbe@4 277 if opinion then
bsw/jbe@4 278 degree = opinion.degree
bsw/jbe@4 279 end
bsw/jbe@4 280 if opinion then
bsw/jbe@4 281 if not opinion.fulfilled then
bsw/jbe@4 282 local text = ""
bsw/jbe@4 283 if opinion.degree > 0 then
bsw/jbe@4 284 text = _"Mark suggestion as implemented and express satisfaction"
bsw/jbe@4 285 else
bsw/jbe@4 286 text = _"Mark suggestion as implemented and express dissatisfaction"
bsw/jbe@4 287 end
bsw/jbe@4 288 ui.link{
bsw/jbe@4 289 attr = { class = "action" },
bsw/jbe@4 290 text = text,
bsw/jbe@4 291 module = "opinion",
bsw/jbe@4 292 action = "update",
bsw/jbe@4 293 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 294 params = {
bsw/jbe@4 295 suggestion_id = record.id,
bsw/jbe@4 296 fulfilled = true
bsw/jbe@19 297 },
bsw/jbe@19 298 partial = partial
bsw/jbe@4 299 }
bsw/jbe@4 300 else
bsw/jbe@4 301 if opinion.degree > 0 then
bsw/jbe@4 302 text = _"Mark suggestion as not implemented and express dissatisfaction"
bsw/jbe@4 303 else
bsw/jbe@4 304 text = _"Mark suggestion as not implemented and express satisfaction"
bsw/jbe@4 305 end
bsw/jbe@4 306 ui.link{
bsw/jbe@4 307 attr = { class = "action" },
bsw/jbe@4 308 text = text,
bsw/jbe@4 309 module = "opinion",
bsw/jbe@4 310 action = "update",
bsw/jbe@4 311 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 312 params = {
bsw/jbe@4 313 suggestion_id = record.id,
bsw/jbe@4 314 fulfilled = false
bsw/jbe@19 315 },
bsw/jbe@19 316 partial = partial
bsw/jbe@4 317 }
bsw/jbe@4 318 end
bsw/jbe@4 319 end
bsw/jbe@4 320 end
bsw/jbe@4 321 },
bsw/jbe@4 322 {
bsw/jbe@4 323 content = function(record)
bsw/jbe@4 324 local opinion = Opinion:by_pk(app.session.member.id, record.id)
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/jbe@4 327 ui.image{ static = "icons/16/thumb_up_green.png" }
bsw/jbe@4 328 else
bsw/jbe@4 329 ui.image{ static = "icons/16/thumb_down_red.png" }
bsw/jbe@4 330 end
bsw/jbe@4 331 end
bsw/jbe@4 332 end
bsw/jbe@4 333 },
bsw/jbe@4 334 }
bsw/jbe@4 335 }
bsw/jbe@4 336 end
bsw/jbe@0 337 }
bsw/jbe@0 338 end
bsw/jbe@0 339 }

Impressum / About Us