liquid_feedback_frontend
annotate app/main/vote/list.lua @ 156:74f1d4abf19e
fix that bailout can not be seen after the vote
linkify title
linkify title
| author | Daniel Poelzleithner <poelzi@poelzi.org> |
|---|---|
| date | Fri Oct 08 20:06:23 2010 +0200 (2010-10-08) |
| parents | 7e7d629390d5 |
| children | 39d49cf933d8 |
| rev | line source |
|---|---|
| bsw/jbe@19 | 1 local issue = Issue:by_id(param.get("issue_id"), atom.integer) |
| bsw/jbe@19 | 2 |
| bsw/jbe@19 | 3 local member_id = param.get("member_id", atom.integer) |
| bsw/jbe@19 | 4 local member |
| bsw/jbe@19 | 5 |
| bsw/jbe@19 | 6 local readonly = false |
| poelzi@156 | 7 |
| bsw/jbe@19 | 8 if member_id then |
| bsw/jbe@19 | 9 if not issue.closed then |
| bsw/jbe@19 | 10 error("access denied") |
| bsw/jbe@19 | 11 end |
| bsw/jbe@19 | 12 member = Member:by_id(member_id) |
| bsw/jbe@19 | 13 readonly = true |
| bsw/jbe@19 | 14 end |
| bsw/jbe@19 | 15 |
| poelzi@138 | 16 if issue.closed then |
| poelzi@156 | 17 if not member then |
| poelzi@156 | 18 slot.put_into("error", _"This issue is already closed.") |
| poelzi@156 | 19 end |
| poelzi@156 | 20 member = app.session.member |
| poelzi@156 | 21 readonly = true |
| poelzi@138 | 22 end |
| poelzi@138 | 23 |
| bsw/jbe@19 | 24 if member then |
| poelzi@156 | 25 local str = _("Ballot of '#{member_name}' for issue ##{issue_id}", |
| poelzi@156 | 26 {member_name = string.format('<a href="%s">%s</a>', |
| poelzi@156 | 27 encode.url{ |
| poelzi@156 | 28 module = "member", |
| poelzi@156 | 29 view = "show", |
| poelzi@156 | 30 id = member.id, |
| poelzi@156 | 31 }, |
| poelzi@156 | 32 encode.html(member.name)), |
| poelzi@156 | 33 issue_id = string.format('<a href="%s">%s</a>', |
| poelzi@156 | 34 encode.url{ |
| poelzi@156 | 35 module = "issue", |
| poelzi@156 | 36 view = "show", |
| poelzi@156 | 37 id = issue.id, |
| poelzi@156 | 38 }, |
| poelzi@156 | 39 encode.html(tostring(issue.id))) |
| poelzi@156 | 40 } |
| poelzi@156 | 41 ) |
| poelzi@156 | 42 slot.put_into("title", str) |
| bsw/jbe@19 | 43 else |
| bsw/jbe@19 | 44 member = app.session.member |
| bsw/jbe@19 | 45 slot.put_into("title", _"Voting") |
| bsw/jbe@19 | 46 |
| bsw/jbe@19 | 47 slot.select("actions", function() |
| bsw/jbe@19 | 48 ui.link{ |
| bsw/jbe@19 | 49 content = function() |
| bsw/jbe@19 | 50 ui.image{ static = "icons/16/cancel.png" } |
| bsw/jbe@19 | 51 slot.put(_"Cancel") |
| bsw/jbe@19 | 52 end, |
| bsw/jbe@19 | 53 module = "issue", |
| bsw/jbe@19 | 54 view = "show", |
| bsw/jbe@19 | 55 id = issue.id |
| bsw/jbe@19 | 56 } |
| bsw@26 | 57 ui.link{ |
| bsw@86 | 58 text = _"Discard voting", |
| bsw@26 | 59 content = function() |
| bsw@26 | 60 ui.image{ static = "icons/16/email_delete.png" } |
| bsw@26 | 61 slot.put(_"Discard voting") |
| bsw@26 | 62 end, |
| bsw@26 | 63 module = "vote", |
| bsw@26 | 64 action = "update", |
| bsw@26 | 65 params = { |
| bsw@26 | 66 issue_id = issue.id, |
| bsw@26 | 67 discard = true |
| bsw@26 | 68 }, |
| bsw@26 | 69 routing = { |
| bsw@26 | 70 default = { |
| bsw@26 | 71 mode = "redirect", |
| bsw@26 | 72 module = "issue", |
| bsw@26 | 73 view = "show", |
| bsw@26 | 74 id = issue.id |
| bsw@26 | 75 } |
| bsw@26 | 76 } |
| bsw@26 | 77 } |
| bsw/jbe@19 | 78 end) |
| bsw/jbe@19 | 79 end |
| bsw/jbe@19 | 80 |
| bsw/jbe@19 | 81 |
| bsw/jbe@5 | 82 local warning_text = _"Some JavaScript based functions (voting in particular) will not work.\nFor this beta, please use a current version of Firefox, Safari, Opera(?), Konqueror or another (more) standard compliant browser.\nAlternative access without JavaScript will be available soon." |
| bsw/jbe@5 | 83 |
| bsw/jbe@5 | 84 ui.script{ static = "js/browser_warning.js" } |
| bsw/jbe@5 | 85 ui.script{ script = "checkBrowser(" .. encode.json(_"Your web browser is not fully supported yet." .. " " .. warning_text:gsub("\n", "\n\n")) .. ");" } |
| bsw/jbe@5 | 86 |
| bsw/jbe@19 | 87 |
| bsw/jbe@19 | 88 local tempvoting_string = param.get("scoring") |
| bsw/jbe@19 | 89 |
| bsw/jbe@19 | 90 local tempvotings = {} |
| bsw/jbe@19 | 91 if tempvoting_string then |
| bsw/jbe@19 | 92 for match in tempvoting_string:gmatch("([^;]+)") do |
| bsw/jbe@19 | 93 for initiative_id, grade in match:gmatch("([^:;]+):([^:;]+)") do |
| bsw/jbe@19 | 94 tempvotings[tonumber(initiative_id)] = tonumber(grade) |
| bsw/jbe@19 | 95 end |
| bsw/jbe@5 | 96 end |
| bsw/jbe@19 | 97 end |
| bsw/jbe@5 | 98 |
| bsw@95 | 99 local initiatives = issue:get_reference_selector("initiatives"):add_where("initiative.admitted"):add_order_by("initiative.satisfied_supporter_count DESC"):exec() |
| bsw/jbe@5 | 100 |
| bsw/jbe@5 | 101 local min_grade = -1; |
| bsw/jbe@5 | 102 local max_grade = 1; |
| bsw/jbe@5 | 103 |
| bsw/jbe@5 | 104 for i, initiative in ipairs(initiatives) do |
| bsw/jbe@5 | 105 -- TODO performance |
| bsw/jbe@19 | 106 initiative.vote = Vote:by_pk(initiative.id, member.id) |
| bsw/jbe@19 | 107 if tempvotings[initiative.id] then |
| bsw/jbe@19 | 108 initiative.vote = {} |
| bsw/jbe@19 | 109 initiative.vote.grade = tempvotings[initiative.id] |
| bsw/jbe@19 | 110 end |
| bsw/jbe@5 | 111 if initiative.vote then |
| bsw/jbe@5 | 112 if initiative.vote.grade > max_grade then |
| bsw/jbe@5 | 113 max_grade = initiative.vote.grade |
| bsw/jbe@5 | 114 end |
| bsw/jbe@5 | 115 if initiative.vote.grade < min_grade then |
| bsw/jbe@5 | 116 min_grade = initiative.vote.grade |
| bsw/jbe@5 | 117 end |
| bsw/jbe@5 | 118 end |
| bsw/jbe@5 | 119 end |
| bsw/jbe@5 | 120 |
| bsw/jbe@5 | 121 local sections = {} |
| bsw/jbe@5 | 122 for i = min_grade, max_grade do |
| bsw/jbe@5 | 123 sections[i] = {} |
| bsw/jbe@5 | 124 for j, initiative in ipairs(initiatives) do |
| bsw/jbe@5 | 125 if (initiative.vote and initiative.vote.grade == i) or (not initiative.vote and i == 0) then |
| bsw/jbe@5 | 126 sections[i][#(sections[i])+1] = initiative |
| bsw/jbe@5 | 127 end |
| bsw/jbe@5 | 128 end |
| bsw/jbe@5 | 129 end |
| bsw/jbe@5 | 130 |
| bsw/jbe@19 | 131 local approval_count, disapproval_count = 0, 0 |
| bsw/jbe@19 | 132 for i = min_grade, -1 do |
| bsw/jbe@19 | 133 if #sections[i] > 0 then |
| bsw/jbe@19 | 134 disapproval_count = disapproval_count + 1 |
| bsw/jbe@19 | 135 end |
| bsw/jbe@19 | 136 end |
| bsw/jbe@19 | 137 local approval_count = 0 |
| bsw/jbe@19 | 138 for i = 1, max_grade do |
| bsw/jbe@19 | 139 if #sections[i] > 0 then |
| bsw/jbe@19 | 140 approval_count = approval_count + 1 |
| bsw/jbe@19 | 141 end |
| bsw/jbe@19 | 142 end |
| bsw/jbe@5 | 143 |
| bsw/jbe@5 | 144 |
| bsw/jbe@5 | 145 |
| bsw/jbe@19 | 146 if not readonly then |
| bsw/jbe@19 | 147 util.help("vote.list", _"Voting") |
| bsw/jbe@19 | 148 slot.put('<script src="' .. request.get_relative_baseurl() .. 'static/js/dragdrop.js"></script>') |
| bsw/jbe@19 | 149 slot.put('<script src="' .. request.get_relative_baseurl() .. 'static/js/voting.js"></script>') |
| bsw/jbe@19 | 150 end |
| bsw/jbe@19 | 151 |
| bsw/jbe@19 | 152 ui.script{ |
| bsw/jbe@19 | 153 script = function() |
| bsw/jbe@19 | 154 slot.put( |
| bsw/jbe@19 | 155 "voting_text_approval_single = ", encode.json(_"Approval [single entry]"), ";\n", |
| bsw/jbe@19 | 156 "voting_text_approval_multi = ", encode.json(_"Approval [many entries]"), ";\n", |
| bsw/jbe@19 | 157 "voting_text_first_preference_single = ", encode.json(_"Approval (first preference) [single entry]"), ";\n", |
| bsw/jbe@19 | 158 "voting_text_first_preference_multi = ", encode.json(_"Approval (first preference) [many entries]"), ";\n", |
| bsw/jbe@19 | 159 "voting_text_second_preference_single = ", encode.json(_"Approval (second preference) [single entry]"), ";\n", |
| bsw/jbe@19 | 160 "voting_text_second_preference_multi = ", encode.json(_"Approval (second preference) [many entries]"), ";\n", |
| bsw/jbe@19 | 161 "voting_text_third_preference_single = ", encode.json(_"Approval (third preference) [single entry]"), ";\n", |
| bsw/jbe@19 | 162 "voting_text_third_preference_multi = ", encode.json(_"Approval (third preference) [many entries]"), ";\n", |
| bsw/jbe@19 | 163 "voting_text_numeric_preference_single = ", encode.json(_"Approval (#th preference) [single entry]"), ";\n", |
| bsw/jbe@19 | 164 "voting_text_numeric_preference_multi = ", encode.json(_"Approval (#th preference) [many entries]"), ";\n", |
| bsw/jbe@19 | 165 "voting_text_abstention_single = ", encode.json(_"Abstention [single entry]"), ";\n", |
| bsw/jbe@19 | 166 "voting_text_abstention_multi = ", encode.json(_"Abstention [many entries]"), ";\n", |
| bsw/jbe@19 | 167 "voting_text_disapproval_above_one_single = ", encode.json(_"Disapproval (prefer to lower block) [single entry]"), ";\n", |
| bsw/jbe@19 | 168 "voting_text_disapproval_above_one_multi = ", encode.json(_"Disapproval (prefer to lower block) [many entries]"), ";\n", |
| bsw/jbe@19 | 169 "voting_text_disapproval_above_many_single = ", encode.json(_"Disapproval (prefer to lower blocks) [single entry]"), ";\n", |
| bsw/jbe@19 | 170 "voting_text_disapproval_above_many_multi = ", encode.json(_"Disapproval (prefer to lower blocks) [many entries]"), ";\n", |
| bsw/jbe@19 | 171 "voting_text_disapproval_above_last_single = ", encode.json(_"Disapproval (prefer to last block) [single entry]"), ";\n", |
| bsw/jbe@19 | 172 "voting_text_disapproval_above_last_multi = ", encode.json(_"Disapproval (prefer to last block) [many entries]"), ";\n", |
| bsw/jbe@19 | 173 "voting_text_disapproval_single = ", encode.json(_"Disapproval [single entry]"), ";\n", |
| bsw/jbe@19 | 174 "voting_text_disapproval_multi = ", encode.json(_"Disapproval [many entries]"), ";\n" |
| bsw/jbe@19 | 175 ) |
| bsw/jbe@19 | 176 end |
| bsw/jbe@19 | 177 } |
| bsw/jbe@5 | 178 |
| bsw/jbe@5 | 179 ui.form{ |
| bsw/jbe@19 | 180 attr = { |
| bsw/jbe@19 | 181 id = "voting_form", |
| bsw/jbe@19 | 182 class = readonly and "voting_form_readonly" or "voting_form_active" |
| bsw/jbe@19 | 183 }, |
| bsw/jbe@5 | 184 module = "vote", |
| bsw/jbe@5 | 185 action = "update", |
| bsw/jbe@5 | 186 params = { issue_id = issue.id }, |
| bsw/jbe@5 | 187 routing = { |
| bsw/jbe@5 | 188 default = { |
| bsw/jbe@5 | 189 mode = "redirect", |
| bsw/jbe@5 | 190 module = "issue", |
| bsw/jbe@5 | 191 view = "show", |
| bsw/jbe@5 | 192 id = issue.id |
| bsw/jbe@5 | 193 } |
| bsw/jbe@5 | 194 }, |
| bsw/jbe@5 | 195 content = function() |
| bsw/jbe@19 | 196 if not readonly then |
| bsw/jbe@19 | 197 local scoring = param.get("scoring") |
| bsw/jbe@19 | 198 if not scoring then |
| bsw/jbe@19 | 199 for i, initiative in ipairs(initiatives) do |
| bsw/jbe@19 | 200 local vote = initiative.vote |
| bsw/jbe@19 | 201 if vote then |
| bsw/jbe@19 | 202 tempvotings[initiative.id] = vote.grade |
| bsw/jbe@19 | 203 end |
| bsw/jbe@19 | 204 end |
| bsw/jbe@19 | 205 local tempvotings_list = {} |
| bsw/jbe@19 | 206 for key, val in pairs(tempvotings) do |
| bsw/jbe@19 | 207 tempvotings_list[#tempvotings_list+1] = tostring(key) .. ":" .. tostring(val) |
| bsw/jbe@19 | 208 end |
| bsw/jbe@19 | 209 if #tempvotings_list > 0 then |
| bsw/jbe@19 | 210 scoring = table.concat(tempvotings_list, ";") |
| bsw/jbe@19 | 211 else |
| bsw/jbe@19 | 212 scoring = "" |
| bsw/jbe@19 | 213 end |
| bsw/jbe@19 | 214 end |
| bsw/jbe@19 | 215 slot.put('<input type="hidden" name="scoring" value="' .. scoring .. '"/>') |
| bsw/jbe@19 | 216 -- TODO abstrahieren |
| bsw/jbe@19 | 217 ui.tag{ |
| bsw/jbe@19 | 218 tag = "input", |
| bsw/jbe@19 | 219 attr = { |
| bsw@86 | 220 type = "submit", |
| bsw/jbe@19 | 221 class = "voting_done", |
| bsw/jbe@19 | 222 value = _"Finish voting" |
| bsw/jbe@19 | 223 } |
| bsw/jbe@5 | 224 } |
| bsw/jbe@19 | 225 end |
| bsw/jbe@5 | 226 ui.container{ |
| bsw/jbe@5 | 227 attr = { id = "voting" }, |
| bsw/jbe@5 | 228 content = function() |
| bsw/jbe@19 | 229 local approval_index, disapproval_index = 0, 0 |
| bsw/jbe@5 | 230 for grade = max_grade, min_grade, -1 do |
| bsw/jbe@19 | 231 local entries = sections[grade] |
| bsw/jbe@5 | 232 local class |
| bsw/jbe@5 | 233 if grade > 0 then |
| bsw/jbe@5 | 234 class = "approval" |
| bsw/jbe@5 | 235 elseif grade < 0 then |
| bsw/jbe@5 | 236 class = "disapproval" |
| bsw/jbe@5 | 237 else |
| bsw/jbe@5 | 238 class = "abstention" |
| bsw/jbe@5 | 239 end |
| bsw/jbe@19 | 240 if |
| bsw/jbe@19 | 241 #entries > 0 or |
| bsw/jbe@19 | 242 (grade == 1 and not approval_used) or |
| bsw/jbe@19 | 243 (grade == -1 and not disapproval_used) or |
| bsw/jbe@19 | 244 grade == 0 |
| bsw/jbe@19 | 245 then |
| bsw/jbe@19 | 246 ui.container{ |
| bsw/jbe@19 | 247 attr = { class = class }, |
| bsw/jbe@19 | 248 content = function() |
| bsw/jbe@19 | 249 local heading |
| bsw/jbe@19 | 250 if class == "approval" then |
| bsw/jbe@19 | 251 approval_used = true |
| bsw/jbe@19 | 252 approval_index = approval_index + 1 |
| bsw/jbe@19 | 253 if approval_count > 1 then |
| bsw/jbe@19 | 254 if approval_index == 1 then |
| bsw/jbe@19 | 255 if #entries == 1 then |
| bsw/jbe@19 | 256 heading = _"Approval (first preference) [single entry]" |
| bsw/jbe@19 | 257 else |
| bsw/jbe@19 | 258 heading = _"Approval (first preference) [many entries]" |
| bsw/jbe@19 | 259 end |
| bsw/jbe@19 | 260 elseif approval_index == 2 then |
| bsw/jbe@19 | 261 if #entries == 1 then |
| bsw/jbe@19 | 262 heading = _"Approval (second preference) [single entry]" |
| bsw/jbe@19 | 263 else |
| bsw/jbe@19 | 264 heading = _"Approval (second preference) [many entries]" |
| bsw/jbe@19 | 265 end |
| bsw/jbe@19 | 266 elseif approval_index == 3 then |
| bsw/jbe@19 | 267 if #entries == 1 then |
| bsw/jbe@19 | 268 heading = _"Approval (third preference) [single entry]" |
| bsw/jbe@19 | 269 else |
| bsw/jbe@19 | 270 heading = _"Approval (third preference) [many entries]" |
| bsw/jbe@19 | 271 end |
| bsw/jbe@19 | 272 else |
| bsw/jbe@19 | 273 if #entries == 1 then |
| bsw/jbe@19 | 274 heading = _"Approval (#th preference) [single entry]" |
| bsw/jbe@19 | 275 else |
| bsw/jbe@19 | 276 heading = _"Approval (#th preference) [many entries]" |
| bsw/jbe@19 | 277 end |
| bsw/jbe@19 | 278 end |
| bsw/jbe@19 | 279 else |
| bsw/jbe@19 | 280 if #entries == 1 then |
| bsw/jbe@19 | 281 heading = _"Approval [single entry]" |
| bsw/jbe@19 | 282 else |
| bsw/jbe@19 | 283 heading = _"Approval [many entries]" |
| bsw/jbe@19 | 284 end |
| bsw/jbe@19 | 285 end |
| bsw/jbe@19 | 286 elseif class == "abstention" then |
| bsw/jbe@19 | 287 if #entries == 1 then |
| bsw/jbe@19 | 288 heading = _"Abstention [single entry]" |
| bsw/jbe@19 | 289 else |
| bsw/jbe@19 | 290 heading = _"Abstention [many entries]" |
| bsw/jbe@19 | 291 end |
| bsw/jbe@19 | 292 elseif class == "disapproval" then |
| bsw/jbe@19 | 293 disapproval_used = true |
| bsw/jbe@19 | 294 disapproval_index = disapproval_index + 1 |
| bsw/jbe@19 | 295 if disapproval_count > disapproval_index + 1 then |
| bsw/jbe@19 | 296 if #entries == 1 then |
| bsw/jbe@19 | 297 heading = _"Disapproval (prefer to lower blocks) [single entry]" |
| bsw/jbe@19 | 298 else |
| bsw/jbe@19 | 299 heading = _"Disapproval (prefer to lower blocks) [many entries]" |
| bsw/jbe@19 | 300 end |
| bsw/jbe@19 | 301 elseif disapproval_count == 2 and disapproval_index == 1 then |
| bsw/jbe@19 | 302 if #entries == 1 then |
| bsw/jbe@19 | 303 heading = _"Disapproval (prefer to lower block) [single entry]" |
| bsw/jbe@19 | 304 else |
| bsw/jbe@19 | 305 heading = _"Disapproval (prefer to lower block) [many entries]" |
| bsw/jbe@19 | 306 end |
| bsw/jbe@19 | 307 elseif disapproval_index == disapproval_count - 1 then |
| bsw/jbe@19 | 308 if #entries == 1 then |
| bsw/jbe@19 | 309 heading = _"Disapproval (prefer to last block) [single entry]" |
| bsw/jbe@19 | 310 else |
| bsw/jbe@19 | 311 heading = _"Disapproval (prefer to last block) [many entries]" |
| bsw/jbe@19 | 312 end |
| bsw/jbe@19 | 313 else |
| bsw/jbe@19 | 314 if #entries == 1 then |
| bsw/jbe@19 | 315 heading = _"Disapproval [single entry]" |
| bsw/jbe@19 | 316 else |
| bsw/jbe@19 | 317 heading = _"Disapproval [many entries]" |
| bsw/jbe@6 | 318 end |
| bsw/jbe@19 | 319 end |
| bsw/jbe@19 | 320 end |
| bsw/jbe@19 | 321 ui.tag { |
| bsw/jbe@19 | 322 tag = "div", |
| bsw/jbe@19 | 323 attr = { class = "cathead" }, |
| bsw/jbe@19 | 324 content = heading |
| bsw/jbe@19 | 325 } |
| bsw/jbe@19 | 326 for i, initiative in ipairs(entries) do |
| bsw/jbe@19 | 327 ui.container{ |
| bsw/jbe@19 | 328 attr = { |
| bsw/jbe@19 | 329 class = "movable", |
| bsw/jbe@19 | 330 id = "entry_" .. tostring(initiative.id) |
| bsw/jbe@19 | 331 }, |
| bsw/jbe@19 | 332 content = function() |
| bsw/jbe@19 | 333 local initiators_selector = initiative:get_reference_selector("initiating_members") |
| bsw/jbe@19 | 334 :add_where("accepted") |
| bsw/jbe@19 | 335 local initiators = initiators_selector:exec() |
| bsw/jbe@19 | 336 local initiator_names = {} |
| bsw/jbe@19 | 337 for i, initiator in ipairs(initiators) do |
| bsw/jbe@19 | 338 initiator_names[#initiator_names+1] = initiator.name |
| bsw/jbe@19 | 339 end |
| bsw/jbe@19 | 340 local initiator_names_string = table.concat(initiator_names, ", ") |
| bsw/jbe@19 | 341 ui.container{ |
| bsw/jbe@19 | 342 attr = { style = "float: right;" }, |
| bsw/jbe@19 | 343 content = function() |
| bsw/jbe@19 | 344 ui.link{ |
| bsw/jbe@19 | 345 attr = { class = "clickable" }, |
| bsw/jbe@19 | 346 content = _"Show", |
| bsw/jbe@19 | 347 module = "initiative", |
| bsw/jbe@19 | 348 view = "show", |
| bsw/jbe@19 | 349 id = initiative.id |
| bsw/jbe@19 | 350 } |
| bsw/jbe@19 | 351 slot.put(" ") |
| bsw/jbe@19 | 352 ui.link{ |
| bsw/jbe@19 | 353 attr = { class = "clickable", target = "_blank" }, |
| bsw/jbe@19 | 354 content = _"(new window)", |
| bsw/jbe@19 | 355 module = "initiative", |
| bsw/jbe@19 | 356 view = "show", |
| bsw/jbe@19 | 357 id = initiative.id |
| bsw/jbe@19 | 358 } |
| bsw/jbe@19 | 359 if not readonly then |
| bsw/jbe@19 | 360 slot.put(" ") |
| bsw/jbe@19 | 361 ui.image{ attr = { class = "grabber" }, static = "icons/grabber.png" } |
| bsw/jbe@19 | 362 end |
| bsw/jbe@19 | 363 end |
| bsw/jbe@19 | 364 } |
| bsw/jbe@19 | 365 if not readonly then |
| bsw/jbe@19 | 366 ui.container{ |
| bsw/jbe@19 | 367 attr = { style = "float: left;" }, |
| bsw/jbe@19 | 368 content = function() |
| bsw/jbe@19 | 369 ui.tag{ |
| bsw/jbe@19 | 370 tag = "input", |
| bsw/jbe@19 | 371 attr = { |
| bsw/jbe@19 | 372 onclick = "voting_moveUp(this.parentNode.parentNode); return(false);", |
| bsw/jbe@19 | 373 name = "move_up", |
| bsw/jbe@19 | 374 value = initiative.id, |
| bsw/jbe@19 | 375 class = not disabled and "clickable" or nil, |
| bsw/jbe@19 | 376 type = "image", |
| bsw/jbe@19 | 377 src = encode.url{ static = "icons/move_up.png" }, |
| bsw/jbe@19 | 378 alt = _"Move up" |
| bsw/jbe@19 | 379 } |
| bsw/jbe@19 | 380 } |
| bsw/jbe@19 | 381 slot.put(" ") |
| bsw/jbe@19 | 382 ui.tag{ |
| bsw/jbe@19 | 383 tag = "input", |
| bsw/jbe@19 | 384 attr = { |
| bsw/jbe@19 | 385 onclick = "voting_moveDown(this.parentNode.parentNode); return(false);", |
| bsw/jbe@19 | 386 name = "move_down", |
| bsw/jbe@19 | 387 value = initiative.id, |
| bsw/jbe@19 | 388 class = not disabled and "clickable" or nil, |
| bsw/jbe@19 | 389 type = "image", |
| bsw/jbe@19 | 390 src = encode.url{ static = "icons/move_down.png" }, |
| bsw/jbe@19 | 391 alt = _"Move down" |
| bsw/jbe@19 | 392 } |
| bsw/jbe@19 | 393 } |
| bsw/jbe@19 | 394 slot.put(" ") |
| bsw/jbe@19 | 395 end |
| bsw/jbe@6 | 396 } |
| bsw/jbe@6 | 397 end |
| bsw/jbe@6 | 398 ui.container{ |
| bsw/jbe@19 | 399 content = function() |
| bsw/jbe@19 | 400 slot.put(encode.html(initiative.shortened_name)) |
| bsw/jbe@19 | 401 if #initiators > 1 then |
| bsw/jbe@19 | 402 ui.container{ |
| bsw/jbe@19 | 403 attr = { style = "font-size: 80%;" }, |
| bsw/jbe@19 | 404 content = _"Initiators" .. ": " .. initiator_names_string |
| bsw/jbe@19 | 405 } |
| bsw/jbe@19 | 406 else |
| bsw/jbe@19 | 407 ui.container{ |
| bsw/jbe@19 | 408 attr = { style = "font-size: 80%;" }, |
| bsw/jbe@19 | 409 content = _"Initiator" .. ": " .. initiator_names_string |
| bsw/jbe@19 | 410 } |
| bsw/jbe@19 | 411 end |
| bsw/jbe@19 | 412 end |
| bsw/jbe@6 | 413 } |
| bsw/jbe@6 | 414 end |
| bsw/jbe@19 | 415 } |
| bsw/jbe@19 | 416 end |
| bsw/jbe@5 | 417 end |
| bsw/jbe@19 | 418 } |
| bsw/jbe@19 | 419 end |
| bsw/jbe@5 | 420 end |
| bsw/jbe@5 | 421 end |
| bsw/jbe@5 | 422 } |
| bsw/jbe@19 | 423 if not readonly then |
| bsw/jbe@19 | 424 ui.tag{ |
| bsw/jbe@19 | 425 tag = "input", |
| bsw/jbe@19 | 426 attr = { |
| bsw@86 | 427 type = "submit", |
| bsw/jbe@19 | 428 class = "voting_done", |
| bsw/jbe@19 | 429 value = _"Finish voting" |
| bsw/jbe@19 | 430 } |
| bsw/jbe@5 | 431 } |
| bsw/jbe@19 | 432 end |
| bsw/jbe@5 | 433 end |
| bsw/jbe@5 | 434 } |
| bsw/jbe@5 | 435 |
| bsw/jbe@5 | 436 |