liquid_feedback_frontend

annotate app/main/area/_list.lua @ 159:5d797c6706d5

implement quorum display

show the initiative quorum as a small 1px line in bargraph
allow to update your support on the diff page
better linked title in diff page
show absolute quorum numbers in detail pages of issue and initiative
author Daniel Poelzleithner <poelzi@poelzi.org>
date Sat Oct 09 03:42:48 2010 +0200 (2010-10-09)
parents 0849be391140
children 910bbf6bc6b1
rev   line source
bsw/jbe@0 1 local areas_selector = param.get("areas_selector", "table")
bsw/jbe@0 2
bsw@9 3 areas_selector
bsw@9 4 :reset_fields()
bsw@9 5 :add_field("area.id", nil, { "grouped" })
bsw@9 6 :add_field("area.name", nil, { "grouped" })
bsw@9 7 :add_field("member_weight", nil, { "grouped" })
bsw@9 8 :add_field("direct_member_count", nil, { "grouped" })
bsw@9 9 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.accepted ISNULL AND issue.closed ISNULL)", "issues_new_count")
bsw@9 10 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.closed ISNULL)", "issues_discussion_count")
bsw@9 11 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL AND issue.closed ISNULL)", "issues_frozen_count")
bsw@9 12 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed ISNULL)", "issues_voting_count")
bsw@10 13 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed NOTNULL)", "issues_finished_count")
bsw@10 14 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen ISNULL AND issue.closed NOTNULL)", "issues_cancelled_count")
bsw@51 15
bsw@51 16 if app.session.member_id then
bsw@51 17 areas_selector
bsw@51 18 :add_field({ "(SELECT COUNT(*) FROM issue LEFT JOIN direct_voter ON direct_voter.issue_id = issue.id AND direct_voter.member_id = ? WHERE issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed ISNULL AND direct_voter.member_id ISNULL)", app.session.member.id }, "issues_to_vote_count")
bsw@51 19 :left_join("membership", "_membership", { "_membership.area_id = area.id AND _membership.member_id = ?", app.session.member.id })
bsw@51 20 :add_field("_membership.member_id NOTNULL", "is_member", { "grouped" })
bsw@51 21 else
bsw@51 22 areas_selector:add_field("0", "issues_to_vote_count")
bsw@51 23 end
bsw@9 24
bsw/jbe@19 25 local label_attr = { style = "text-align: right; width: 4em;" }
bsw/jbe@19 26 local field_attr = { style = "text-align: right; width: 4em;" }
bsw/jbe@19 27
bsw/jbe@19 28 ui.filters{
bsw/jbe@19 29 label = _"Change order",
bsw/jbe@0 30 selector = areas_selector,
bsw/jbe@19 31 {
bsw/jbe@19 32 label = _"Order by",
bsw/jbe@0 33 {
bsw/jbe@0 34 name = "member_weight",
bsw/jbe@0 35 label = _"Population",
bsw/jbe@19 36 selector_modifier = function(selector) selector:add_order_by("area.member_weight DESC") end
bsw/jbe@0 37 },
bsw/jbe@0 38 {
bsw/jbe@0 39 name = "direct_member_count",
bsw/jbe@0 40 label = _"Direct member count",
bsw/jbe@19 41 selector_modifier = function(selector) selector:add_order_by("area.direct_member_count DESC") end
bsw/jbe@0 42 },
bsw/jbe@0 43 {
bsw/jbe@0 44 name = "az",
bsw/jbe@0 45 label = _"A-Z",
bsw/jbe@19 46 selector_modifier = function(selector) selector:add_order_by("area.name") end
bsw/jbe@0 47 },
bsw/jbe@0 48 {
bsw/jbe@0 49 name = "za",
bsw/jbe@0 50 label = _"Z-A",
bsw/jbe@19 51 selector_modifier = function(selector) selector:add_order_by("area.name DESC") end
bsw/jbe@0 52 }
bsw/jbe@0 53 },
bsw/jbe@0 54 content = function()
bsw/jbe@0 55 ui.list{
bsw/jbe@19 56 attr = { class = "area_list" },
bsw/jbe@0 57 records = areas_selector:exec(),
bsw/jbe@0 58 columns = {
bsw/jbe@0 59 {
bsw/jbe@0 60 content = function(record)
bsw/jbe@19 61 if record.is_member then
bsw/jbe@19 62 local text = _"Member of area"
bsw/jbe@19 63 ui.image{
bsw/jbe@19 64 attr = { title = text, alt = text, style = "vertical-align: middle;" },
bsw/jbe@19 65 static = "icons/16/user_gray.png",
bsw/jbe@19 66 }
bsw/jbe@19 67 end
bsw/jbe@19 68 end
bsw/jbe@19 69 },
bsw/jbe@19 70 {
bsw/jbe@19 71 content = function(record)
bsw/jbe@0 72 if record.member_weight and record.direct_member_count then
bsw/jbe@0 73 local max_value = MemberCount:get()
bsw/jbe@0 74 ui.bargraph{
bsw/jbe@0 75 max_value = max_value,
bsw/jbe@4 76 width = 100,
bsw/jbe@0 77 bars = {
bsw/jbe@0 78 { color = "#444", value = record.direct_member_count },
bsw/jbe@0 79 { color = "#777", value = record.member_weight - record.direct_member_count },
bsw/jbe@0 80 { color = "#ddd", value = max_value - record.member_weight },
bsw/jbe@0 81 }
bsw/jbe@0 82 }
bsw/jbe@0 83 end
bsw/jbe@0 84 end
bsw/jbe@0 85 },
bsw/jbe@0 86 {
bsw/jbe@0 87 content = function(record)
bsw/jbe@0 88 ui.link{
bsw/jbe@0 89 text = record.name,
bsw/jbe@0 90 module = "area",
bsw/jbe@0 91 view = "show",
bsw/jbe@0 92 id = record.id
bsw/jbe@0 93 }
bsw/jbe@0 94 end
bsw@9 95 },
bsw@9 96 {
bsw/jbe@19 97 label = function()
bsw/jbe@19 98 local title = _"New"
bsw/jbe@19 99 ui.image{
bsw/jbe@19 100 attr = { title = title, alt = title },
bsw/jbe@19 101 static = "icons/16/new.png"
bsw/jbe@19 102 }
bsw/jbe@19 103 end,
bsw/jbe@19 104 field_attr = field_attr,
bsw/jbe@19 105 label_attr = label_attr,
bsw@9 106 content = function(record)
bsw@9 107 ui.link{
bsw@9 108 text = tostring(record.issues_new_count),
bsw@9 109 module = "area",
bsw@9 110 view = "show",
bsw@9 111 id = record.id,
bsw/jbe@19 112 params = { filter = "new", tab = "issues" }
bsw@9 113 }
bsw@9 114 end
bsw@9 115 },
bsw@9 116 {
bsw/jbe@19 117 label = function()
bsw/jbe@19 118 local title = _"Discussion"
bsw/jbe@19 119 ui.image{
bsw/jbe@19 120 attr = { title = title, alt = title },
bsw/jbe@19 121 static = "icons/16/comments.png"
bsw/jbe@19 122 }
bsw/jbe@19 123 end,
bsw/jbe@19 124 field_attr = field_attr,
bsw/jbe@19 125 label_attr = label_attr,
bsw@9 126 content = function(record)
bsw@9 127 ui.link{
bsw@9 128 text = tostring(record.issues_discussion_count),
bsw@9 129 module = "area",
bsw@9 130 view = "show",
bsw@9 131 id = record.id,
bsw/jbe@19 132 params = { filter = "accepted", tab = "issues" }
bsw@9 133 }
bsw@9 134 end
bsw@9 135 },
bsw@9 136 {
bsw/jbe@19 137 label = function()
bsw/jbe@19 138 local title = _"Frozen"
bsw/jbe@19 139 ui.image{
bsw/jbe@19 140 attr = { title = title, alt = title },
bsw/jbe@19 141 static = "icons/16/lock.png"
bsw/jbe@19 142 }
bsw/jbe@19 143 end,
bsw/jbe@19 144 field_attr = field_attr,
bsw/jbe@19 145 label_attr = label_attr,
bsw@9 146 content = function(record)
bsw@9 147 ui.link{
bsw@9 148 text = tostring(record.issues_frozen_count),
bsw@9 149 module = "area",
bsw@9 150 view = "show",
bsw@9 151 id = record.id,
bsw/jbe@19 152 params = { filter = "half_frozen", tab = "issues" }
bsw@9 153 }
bsw@9 154 end
bsw@9 155 },
bsw@9 156 {
bsw/jbe@19 157 label = function()
bsw/jbe@19 158 local title = _"Voting"
bsw/jbe@19 159 ui.image{
bsw/jbe@19 160 attr = { title = title, alt = title },
bsw/jbe@19 161 static = "icons/16/email_open.png"
bsw/jbe@19 162 }
bsw/jbe@19 163 end,
bsw/jbe@19 164 field_attr = field_attr,
bsw/jbe@19 165 label_attr = label_attr,
bsw@9 166 content = function(record)
bsw@9 167 ui.link{
bsw@9 168 text = tostring(record.issues_voting_count),
bsw@9 169 module = "area",
bsw@9 170 view = "show",
bsw@9 171 id = record.id,
bsw/jbe@19 172 params = { filter = "frozen", tab = "issues" }
bsw@9 173 }
bsw@9 174 end
bsw@9 175 },
bsw@9 176 {
bsw/jbe@19 177 label = function()
bsw/jbe@19 178 local title = _"Finished"
bsw/jbe@19 179 ui.image{
bsw/jbe@19 180 attr = { title = title, alt = title },
bsw/jbe@19 181 static = "icons/16/tick.png"
bsw@9 182 }
bsw/jbe@19 183 end,
bsw/jbe@19 184 field_attr = field_attr,
bsw/jbe@19 185 label_attr = label_attr,
bsw@10 186 content = function(record)
bsw@10 187 ui.link{
bsw@10 188 text = tostring(record.issues_finished_count),
bsw@10 189 module = "area",
bsw@10 190 view = "show",
bsw@10 191 id = record.id,
bsw/jbe@19 192 params = { filter = "finished", issue_list = "newest", tab = "issues" }
bsw@10 193 }
bsw@10 194 end
bsw@10 195 },
bsw@10 196 {
bsw/jbe@19 197 label = function()
bsw/jbe@19 198 local title = _"Cancelled"
bsw/jbe@19 199 ui.image{
bsw/jbe@19 200 attr = { title = title, alt = title },
bsw/jbe@19 201 static = "icons/16/cross.png"
bsw/jbe@19 202 }
bsw/jbe@19 203 end,
bsw/jbe@19 204 field_attr = field_attr,
bsw/jbe@19 205 label_attr = label_attr,
bsw@10 206 content = function(record)
bsw@10 207 ui.link{
bsw@10 208 text = tostring(record.issues_cancelled_count),
bsw@10 209 module = "area",
bsw@10 210 view = "show",
bsw@10 211 id = record.id,
bsw/jbe@19 212 params = { filter = "cancelled", issue_list = "newest", tab = "issues" }
bsw@10 213 }
bsw@10 214 end
bsw@10 215 },
bsw/jbe@19 216 {
bsw/jbe@19 217 content = function(record)
bsw/jbe@19 218 if record.issues_to_vote_count > 0 then
bsw/jbe@19 219 ui.link{
bsw/jbe@19 220 attr = { class = "not_voted" },
bsw/jbe@19 221 text = _"Not yet voted" .. ": " .. tostring(record.issues_to_vote_count),
bsw/jbe@19 222 module = "area",
bsw/jbe@19 223 view = "show",
bsw/jbe@19 224 id = record.id,
bsw/jbe@19 225 params = {
bsw/jbe@19 226 filter = "frozen",
bsw/jbe@19 227 filter_voting = "not_voted",
bsw/jbe@19 228 tab = "issues"
bsw/jbe@19 229 }
bsw/jbe@19 230 }
bsw/jbe@19 231 end
bsw/jbe@19 232 end
bsw/jbe@19 233 },
bsw/jbe@0 234 }
bsw/jbe@0 235 }
bsw/jbe@0 236 end
bsw/jbe@4 237 }
bsw/jbe@4 238
bsw/jbe@4 239 ui.bargraph_legend{
bsw/jbe@4 240 width = 25,
bsw/jbe@4 241 bars = {
bsw/jbe@4 242 { color = "#444", label = _"Direct membership" },
bsw/jbe@4 243 { color = "#777", label = _"Membership by delegation" },
bsw/jbe@4 244 { color = "#ddd", label = _"No membership at all" },
bsw/jbe@4 245 }
bsw/jbe@4 246 }
bsw/jbe@4 247
bsw/jbe@19 248 slot.put("<br /> &nbsp; ")
bsw/jbe@19 249
bsw/jbe@19 250
bsw@51 251 if app.session.member_id then
bsw@51 252 ui.image{
bsw@51 253 attr = { title = title, alt = title },
bsw@51 254 static = "icons/16/user_gray.png"
bsw@51 255 }
bsw@51 256 slot.put(" ")
bsw@51 257 slot.put(_"Member of area")
bsw@51 258 slot.put(" &nbsp; ")
bsw@51 259 end
bsw/jbe@19 260
bsw/jbe@19 261 ui.image{
bsw/jbe@19 262 attr = { title = title, alt = title },
bsw/jbe@19 263 static = "icons/16/new.png"
bsw/jbe@19 264 }
bsw/jbe@19 265 slot.put(" ")
bsw/jbe@19 266 slot.put(_"New")
bsw/jbe@19 267 slot.put(" &nbsp; ")
bsw/jbe@19 268
bsw/jbe@19 269 ui.image{
bsw/jbe@19 270 attr = { title = title, alt = title },
bsw/jbe@19 271 static = "icons/16/comments.png"
bsw/jbe@19 272 }
bsw/jbe@19 273 slot.put(" ")
bsw/jbe@19 274 slot.put(_"Discussion")
bsw/jbe@19 275 slot.put(" &nbsp; ")
bsw/jbe@19 276
bsw/jbe@19 277 ui.image{
bsw/jbe@19 278 attr = { title = title, alt = title },
bsw/jbe@19 279 static = "icons/16/lock.png"
bsw/jbe@19 280 }
bsw/jbe@19 281 slot.put(" ")
bsw/jbe@19 282 slot.put(_"Frozen")
bsw/jbe@19 283 slot.put(" &nbsp; ")
bsw/jbe@19 284
bsw/jbe@19 285 ui.image{
bsw/jbe@19 286 attr = { title = title, alt = title },
bsw/jbe@19 287 static = "icons/16/email_open.png"
bsw/jbe@19 288 }
bsw/jbe@19 289 slot.put(" ")
bsw/jbe@19 290 slot.put(_"Voting")
bsw/jbe@19 291 slot.put(" &nbsp; ")
bsw/jbe@19 292
bsw/jbe@19 293 ui.image{
bsw/jbe@19 294 attr = { title = title, alt = title },
bsw/jbe@19 295 static = "icons/16/tick.png"
bsw/jbe@19 296 }
bsw/jbe@19 297 slot.put(" ")
bsw/jbe@19 298 slot.put(_"Finished")
bsw/jbe@19 299 slot.put(" &nbsp; ")
bsw/jbe@19 300
bsw/jbe@19 301 ui.image{
bsw/jbe@19 302 attr = { title = title, alt = title },
bsw/jbe@19 303 static = "icons/16/cross.png"
bsw/jbe@19 304 }
bsw/jbe@19 305 slot.put(" ")
bsw/jbe@19 306 slot.put(_"Cancelled")
bsw/jbe@19 307

Impressum / About Us