liquid_feedback_frontend

annotate app/main/delegation/_info.lua @ 1853:9c298b5832e7

Correctly determine own voting weight
author bsw
date Tue Mar 22 13:52:26 2022 +0100 (2022-03-22)
parents 4b74a177884b
children 220653575083
rev   line source
bsw@526 1 if not app.session.member_id then
bsw@526 2 return
bsw@526 3 end
bsw@526 4
bsw@774 5 local member = param.get("member", "table") or app.session.member
bsw@774 6
bsw@525 7 local unit = param.get("unit", "table")
bsw@525 8 local area = param.get("area", "table")
bsw@525 9 local issue = param.get("issue", "table")
bsw@525 10
bsw@1045 11 local for_title = param.get("for_title", "boolean")
bsw@1045 12
bsw@525 13 local unit_id = unit and unit.id or nil
bsw@525 14 local area_id = area and area.id or nil
bsw@525 15 local issue_id = issue and issue.id or nil
bsw@525 16
bsw@525 17 local info
bsw@525 18 local delegation_text
bsw@525 19
bsw@525 20 if unit then
bsw@525 21 info = unit.delegation_info
bsw@525 22 delegation_text = _"Delegate unit"
bsw@525 23 end
bsw@525 24
bsw@525 25 if area then
bsw@525 26 info = area.delegation_info
bsw@525 27 delegation_text = _"Delegate area"
bsw@525 28 end
bsw@525 29
bsw@525 30 if issue then
bsw@774 31 info = issue.member_info
bsw@525 32 delegation_text = _"Delegate issue"
bsw@525 33 end
bsw@525 34
bsw@1045 35 if not info then
bsw@1045 36 --return
bsw@1045 37 end
bsw@1045 38
bsw@780 39 local function print_delegation_info()
bsw@1045 40 local participant_occured = info.own_participation
bsw@780 41
bsw@780 42 if not (issue and issue.state == "voting" and info.own_participation) then
bsw@780 43
bsw@780 44 if info.first_trustee_id then
bsw@780 45
bsw@780 46 local text = _"delegates to"
bsw@780 47 ui.image{
bsw@780 48 attr = { class = "delegation_arrow", alt = text, title = text },
bsw@780 49 static = "delegation_arrow_24_horizontal.png"
bsw@780 50 }
bsw@780 51
bsw@780 52 local class = "micro_avatar"
bsw@780 53 if not participant_occured and info.first_trustee_participation then
bsw@780 54 participant_occured = true
bsw@780 55 class = class .. " highlighted"
bsw@780 56 end
bsw@525 57
bsw@780 58 execute.view{ module = "member_image", view = "_show", params = {
bsw@780 59 member_id = info.first_trustee_id, class = class, popup_text = info.first_trustee_name,
bsw@780 60 image_type = "avatar", show_dummy = true,
bsw@780 61 } }
bsw@780 62
bsw@780 63 end
bsw@780 64
bsw@780 65 if info.first_trustee_ellipsis then
bsw@780 66
bsw@780 67 local text = _"delegates to"
bsw@780 68 ui.image{
bsw@780 69 attr = { class = "delegation_arrow", alt = text, title = text },
bsw@780 70 static = "delegation_arrow_24_horizontal.png"
bsw@780 71 }
bsw@525 72
bsw@780 73 slot.put("...")
bsw@780 74
bsw@780 75 end
bsw@780 76
bsw@780 77 if info.other_trustee_id then
bsw@780 78
bsw@780 79 local text = _"delegates to"
bsw@780 80 ui.image{
bsw@780 81 attr = { class = "delegation_arrow", alt = text, title = text },
bsw@780 82 static = "delegation_arrow_24_horizontal.png"
bsw@780 83 }
bsw@525 84
bsw@780 85 local class = "micro_avatar"
bsw@780 86 if not participant_occured and info.other_trustee_participation then
bsw@780 87 participant_occured = true
bsw@780 88 class = class .. " highlighted"
bsw@780 89 end
bsw@780 90
bsw@780 91 execute.view{ module = "member_image", view = "_show", params = {
bsw@780 92 member_id = info.other_trustee_id, class = class, popup_text = info.other_trustee_name,
bsw@780 93 image_type = "avatar", show_dummy = true,
bsw@780 94 } }
bsw@780 95
bsw@780 96 end
bsw@780 97
bsw@780 98 if info.other_trustee_ellipsis then
bsw@525 99
bsw@780 100 local text = _"delegates to"
bsw@780 101 ui.image{
bsw@780 102 attr = { class = "delegation_arrow", alt = text, title = text },
bsw@780 103 static = "delegation_arrow_24_horizontal.png"
bsw@780 104 }
bsw@529 105
bsw@780 106 slot.put("...")
bsw@780 107
bsw@780 108 end
bsw@780 109
bsw@780 110 local trailing_ellipsis = info.other_trustee_ellipsis or
bsw@780 111 (info.first_trustee_ellipsis and not info.other_trustee_id)
bsw@780 112
bsw@780 113 if info.delegation_loop == "own" then
bsw@780 114
bsw@780 115 local text = _"delegates to"
bsw@780 116 ui.image{
bsw@780 117 attr = { class = "delegation_arrow", alt = text, title = text },
bsw@780 118 static = "delegation_arrow_24_horizontal.png"
bsw@780 119 }
bsw@780 120
bsw@780 121 execute.view{ module = "member_image", view = "_show", params = {
bsw@780 122 member = member, class = "micro_avatar", popup_text = member.name,
bsw@780 123 image_type = "avatar", show_dummy = true,
bsw@780 124 } }
bsw@780 125
bsw@780 126 elseif info.delegation_loop == "first" then
bsw@780 127 if info.first_trustee_ellipsis then
bsw@780 128 if not trailing_ellipsis then
bsw@529 129
bsw@529 130 local text = _"delegates to"
bsw@529 131 ui.image{
bsw@529 132 attr = { class = "delegation_arrow", alt = text, title = text },
bsw@529 133 static = "delegation_arrow_24_horizontal.png"
bsw@529 134 }
bsw@529 135
bsw@529 136 slot.put("...")
bsw@780 137 end
bsw@529 138
bsw@780 139 else
bsw@529 140
bsw@780 141 local text = _"delegates to"
bsw@780 142 ui.image{
bsw@780 143 attr = { class = "delegation_arrow", alt = text, title = text },
bsw@780 144 static = "delegation_arrow_24_horizontal.png"
bsw@780 145 }
bsw@525 146
bsw@1045 147 execute.view{
bsw@1045 148 module = "member_image", view = "_show", params = {
bsw@1045 149 member_id = info.first_trustee_id,
bsw@1045 150 class = "micro_avatar",
bsw@1045 151 popup_text = info.first_trustee_name,
bsw@1045 152 image_type = "avatar",
bsw@1045 153 show_dummy = true,
bsw@1045 154 }
bsw@1045 155 }
bsw@780 156 end
bsw@780 157
bsw@529 158
bsw@780 159 elseif info.delegation_loop and not trailing_ellipsis then
bsw@780 160 local text = _"delegates to"
bsw@780 161 ui.image{
bsw@780 162 attr = { class = "delegation_arrow", alt = text, title = text },
bsw@780 163 static = "delegation_arrow_24_horizontal.png"
bsw@780 164 }
bsw@525 165
bsw@780 166 slot.put("...")
bsw@780 167 end
bsw@529 168
bsw@780 169 end
bsw@780 170 end
bsw@529 171
bsw@1603 172 if not param.get("no_star", "boolean") and issue then
bsw@1603 173 local redirect_unit = request.get_param{ name = "unit" }
bsw@1603 174 local redirect_area = request.get_param{ name = "area" }
bsw@1603 175
bsw@1603 176 if issue.fully_frozen and info.own_participation then
bsw@1603 177 ui.link{
bsw@1603 178 attr = { class = "mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--underlined" },
bsw@1603 179 module = "vote", view = "list", params = {
bsw@1603 180 issue_id = issue.id
bsw@1603 181 },
bsw@1603 182 content = function ()
bsw@1603 183 ui.tag { content = _"you voted" }
bsw@1603 184 end
bsw@1603 185 }
bsw@1659 186 elseif not issue.half_frozen and not issue.closed and not info.own_participation then
bsw@1603 187 ui.link{
bsw@1618 188 attr = {
bsw@1619 189 id = "issue_" .. issue.id .. "_interest_link",
bsw@1619 190 class = "float-right mdl-button mdl-js-button mdl-button--icon mdl-button--feature-off",
bsw@1618 191 },
bsw@1618 192 form_attr = {
bsw@1618 193 onsubmit = "toggleInterest(" .. issue.id .. ", 'issue_" .. issue.id .. "_interest_icon'); return false;"
bsw@1618 194 },
bsw@1618 195 module = "interest", action = "update", params = { issue_id = issue.id, interested = true },
bsw@1603 196 routing = { default = {
bsw@1603 197 mode = "redirect", module = "index", view = "index", params = {
bsw@1603 198 unit = redirect_unit, area = redirect_area
bsw@1045 199 },
bsw@1603 200 anchor = "issue_" .. issue.id
bsw@1603 201 } },
bsw@1603 202 content = function()
bsw@1618 203 ui.tag{ tag = "i", attr = { id = "issue_" .. issue.id .. "_interest_icon", class = "material-icons" }, content = "star_outline" }
bsw@1603 204 end
bsw@1603 205 }
bsw@1659 206 elseif not issue.half_frozen and not issue.closed and info.own_participation then
bsw@1603 207 ui.link{
bsw@1618 208 attr = {
bsw@1619 209 id = "issue_" .. issue.id .. "_interest_link",
bsw@1618 210 class = "float-right mdl-button mdl-js-button mdl-button--icon mdl-button--accent"
bsw@1618 211 },
bsw@1618 212 form_attr = {
bsw@1618 213 onsubmit = "toggleInterest(" .. issue.id .. ", 'issue_" .. issue.id .. "_interest_icon'); return false;"
bsw@1618 214 },
bsw@1618 215 module = "interest", action = "update", params = { issue_id = issue.id, interested = false },
bsw@1603 216 routing = { default = {
bsw@1603 217 mode = "redirect", module = "index", view = "index", params = {
bsw@1603 218 unit = redirect_unit, area = redirect_area
bsw@1603 219 },
bsw@1603 220 anchor = "issue_" .. issue.id
bsw@1603 221 } },
bsw@1603 222 content = function()
bsw@1618 223 ui.tag{ tag = "i", attr = { id = "issue_" .. issue.id .. "_interest_icon", class = "material-icons" }, content = "star" }
bsw@1045 224 end
bsw@1603 225 }
bsw@1853 226
bsw@1853 227 local privilege = Privilege:new_selector()
bsw@1853 228 :add_where{ "member_id = ?", member.id }
bsw@1853 229 :add_where{ "unit_id = ?", issue.area.unit_id }
bsw@1853 230 :optional_object_mode()
bsw@1853 231 :exec()
bsw@1853 232
bsw@1853 233 local own_weight = privilege and privilege.weight or 0
bsw@1853 234
bsw@1853 235 if not issue.closed and info.own_participation and info.weight and info.weight > own_weight then
bsw/jbe@1309 236 slot.put(" ")
bsw@1603 237 ui.link {
bsw@1853 238 attr = { class = "right" }, content = "+" .. (info.weight - own_weight),
bsw@1603 239 module = "interest", view = "show_incoming", params = {
bsw@1603 240 issue_id = issue.id, member_id = member.id
bsw@1603 241 }
bsw@1603 242 }
bsw@1045 243 end
bsw@1603 244 slot.put(" ")
bsw@1045 245 end
bsw@1045 246 end
bsw@1045 247
bsw@529 248
bsw@780 249 if info.own_participation or info.first_trustee_id then
bsw@1045 250 local class = "delegation_info"
bsw@1045 251 if info.own_participation then
bsw@1045 252 class = class .. " suspended"
bsw@1045 253 end
bsw@1045 254
bsw@1045 255 local voting_member_id
bsw@1045 256 local voting_member_name
bsw@1045 257 if issue and issue.fully_frozen and issue.closed then
bsw@1045 258 if issue.member_info.first_trustee_participation then
bsw@1045 259 voting_member_id = issue.member_info.first_trustee_id
bsw@1045 260 voting_member_name = issue.member_info.first_trustee_name
bsw@1045 261 elseif issue.member_info.other_trustee_participation then
bsw@1045 262 voting_member_id = issue.member_info.other_trustee_id
bsw@1045 263 voting_member_name = issue.member_info.other_trustee_name
bsw@1045 264 end
bsw@1045 265 end
bsw@1045 266
bsw@780 267 if app.session.member_id == member.id then
bsw@1045 268
bsw@1045 269 if voting_member_id then
bsw@1045 270 ui.link{
bsw@1045 271 module = "vote", view = "list", params = {
bsw@1045 272 issue_id = issue.id,
bsw@1045 273 member_id = voting_member_id
bsw@1045 274 },
bsw@1045 275 attr = { class = class }, content = function()
bsw@1045 276 print_delegation_info()
bsw@1045 277 end
bsw@1045 278 }
bsw@1045 279
bsw@1045 280 else
bsw@1045 281 ui.link{
bsw@1045 282 module = "delegation", view = "show", params = {
bsw@1045 283 unit_id = unit_id,
bsw@1045 284 area_id = area_id,
bsw@1045 285 issue_id = issue_id
bsw@1045 286 },
bsw@1045 287 attr = { class = class }, content = function()
bsw@1045 288 print_delegation_info()
bsw@1045 289 end
bsw@1045 290 }
bsw@1045 291 end
bsw@780 292 else
bsw@780 293 ui.container{
bsw@1045 294 attr = { class = class }, content = function()
bsw@780 295 print_delegation_info()
bsw@780 296 end
bsw@780 297 }
bsw@780 298 end
bsw@551 299 end
bsw@1045 300
bsw/jbe@1309 301 if issue and app.session.member and issue.fully_frozen and not issue.closed and not issue.member_info.direct_voted and app.session.member:has_voting_right_for_unit_id(issue.area.unit_id) then
bsw/jbe@1309 302 ui.link{
bsw/jbe@1309 303 attr = { class = "mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--underlined" },
bsw/jbe@1309 304 module = "vote", view = "list", params = {
bsw/jbe@1309 305 issue_id = issue.id
bsw/jbe@1309 306 },
bsw/jbe@1309 307 content = function ()
bsw/jbe@1309 308 ui.tag { content = _"vote now" }
bsw/jbe@1309 309 end
bsw/jbe@1309 310 }
bsw/jbe@1309 311 else
bsw/jbe@1309 312 end

Impressum / About Us