liquid_feedback_frontend

annotate app/main/suggestion/_list_element.lua @ 718:cc64a4fc6ab6

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

Impressum / About Us