liquid_feedback_frontend
annotate app/main/issue/_show_head.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
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 | eaf3db89a6e1 |
children | 6725c13b6ce0 |
rev | line source |
---|---|
bsw/jbe@4 | 1 local issue = param.get("issue", "table") |
poelzi@111 | 2 local initiative = param.get("initiative", "table") |
bsw/jbe@4 | 3 |
bsw@51 | 4 local direct_voter |
bsw@51 | 5 |
bsw@51 | 6 if app.session.member_id then |
bsw@51 | 7 direct_voter = DirectVoter:by_pk(issue.id, app.session.member.id) |
bsw@51 | 8 end |
bsw/jbe@19 | 9 |
bsw/jbe@52 | 10 if config.feature_rss_enabled then |
bsw/jbe@52 | 11 util.html_rss_head{ title = _"Initiatives in this issue (last created first)", module = "initiative", view = "list_rss", params = { issue_id = issue.id } } |
bsw/jbe@52 | 12 util.html_rss_head{ title = _"Initiatives in this issue (last updated first)", module = "initiative", view = "list_rss", params = { issue_id = issue.id, order = "last_updated" } } |
bsw/jbe@52 | 13 end |
bsw/jbe@4 | 14 |
bsw/jbe@4 | 15 slot.select("path", function() |
bsw/jbe@19 | 16 end) |
bsw/jbe@19 | 17 |
bsw/jbe@19 | 18 slot.select("title", function() |
bsw/jbe@4 | 19 ui.link{ |
bsw/jbe@19 | 20 content = issue.area.name, |
bsw/jbe@4 | 21 module = "area", |
bsw/jbe@4 | 22 view = "show", |
bsw/jbe@4 | 23 id = issue.area.id |
bsw/jbe@4 | 24 } |
bsw/jbe@19 | 25 slot.put(" · ") |
bsw/jbe@5 | 26 ui.link{ |
bsw/jbe@19 | 27 content = _("Issue ##{id}", { id = issue.id }), |
bsw/jbe@5 | 28 module = "issue", |
bsw/jbe@5 | 29 view = "show", |
bsw/jbe@5 | 30 id = issue.id |
bsw/jbe@5 | 31 } |
bsw/jbe@19 | 32 slot.put(" · ") |
bsw/jbe@19 | 33 ui.tag{ |
bsw/jbe@19 | 34 tag = "span", |
bsw/jbe@19 | 35 content = issue.state_name, |
bsw/jbe@19 | 36 } |
bsw/jbe@5 | 37 end) |
bsw/jbe@5 | 38 |
bsw/jbe@4 | 39 |
poelzi@127 | 40 slot.select("content_navigation", function() |
poelzi@127 | 41 |
poelzi@127 | 42 if app.session.member_id then |
poelzi@150 | 43 local records |
poelzi@127 | 44 local this = 0 |
poelzi@127 | 45 local issues_selector = Issue:new_selector() |
poelzi@127 | 46 |
poelzi@127 | 47 -- FIXME: !DRY |
poelzi@127 | 48 local issue_filter_map = { |
poelzi@127 | 49 new = "new.png", |
poelzi@127 | 50 accepted = "comments.png", |
poelzi@127 | 51 half_frozen = "lock.png", |
poelzi@127 | 52 frozen ="email_open.png", |
poelzi@127 | 53 finished = "tick.png", |
poelzi@127 | 54 cancelled = "cross.png", |
poelzi@127 | 55 } |
poelzi@127 | 56 |
poelzi@127 | 57 |
poelzi@150 | 58 local mk_link = function(index, text, icon, module) |
poelzi@127 | 59 content = function() |
poelzi@150 | 60 if index > 0 then |
poelzi@127 | 61 slot.put(text) |
poelzi@127 | 62 ui.image{ static = "icons/16/"..icon } |
poelzi@127 | 63 else |
poelzi@127 | 64 ui.image{ static = "icons/16/"..icon } |
poelzi@127 | 65 slot.put(text) |
poelzi@127 | 66 end |
poelzi@127 | 67 end |
poelzi@127 | 68 if records[this+index] then |
poelzi@127 | 69 ui.link{ |
poelzi@127 | 70 content = content, |
poelzi@150 | 71 module = module, |
poelzi@127 | 72 view = "show", |
poelzi@127 | 73 id = records[this+index].id, |
poelzi@127 | 74 } |
poelzi@127 | 75 else |
poelzi@127 | 76 ui.container{ |
poelzi@127 | 77 content = content, |
poelzi@127 | 78 } |
poelzi@127 | 79 end |
poelzi@127 | 80 end |
poelzi@127 | 81 |
poelzi@127 | 82 issues_selector |
poelzi@127 | 83 :add_where{"issue.area_id = ?", issue.area.id} |
poelzi@127 | 84 |
poelzi@127 | 85 local filters = execute.load_chunk{module="issue", chunk="_filters.lua", params = {filter = "frozen"}} |
poelzi@127 | 86 |
poelzi@127 | 87 local state = issue.state |
poelzi@127 | 88 |
poelzi@127 | 89 -- FIXME: fix filter names to reflect issue.state values |
poelzi@127 | 90 if state == "voting" then |
poelzi@127 | 91 state = "frozen" |
poelzi@127 | 92 elseif state == "frozen" then |
poelzi@127 | 93 state = "half_frozen" |
poelzi@127 | 94 end |
poelzi@127 | 95 |
poelzi@127 | 96 filter = filters:get_filter("filter", state) |
poelzi@127 | 97 if filter then |
poelzi@127 | 98 filter.selector_modifier(issues_selector) |
poelzi@127 | 99 |
poelzi@127 | 100 -- add subfilter to voting pager, so only not voted entries will be shown |
poelzi@127 | 101 -- as this seems the most usefull exception |
poelzi@127 | 102 if filter.name == "frozen" then |
poelzi@127 | 103 filter_voting_name = "not_voted" |
poelzi@127 | 104 local vfilter = filters:get_filter("filter_voting", "not_voted") |
poelzi@127 | 105 if vfilter then |
poelzi@127 | 106 vfilter.selector_modifier(issues_selector) |
poelzi@127 | 107 end |
poelzi@127 | 108 end |
poelzi@127 | 109 end |
poelzi@127 | 110 |
poelzi@127 | 111 records = issues_selector:exec() |
poelzi@127 | 112 |
poelzi@127 | 113 for i,cissue in ipairs(records) do |
poelzi@127 | 114 if cissue.id == issue.id then |
poelzi@127 | 115 this = i |
poelzi@127 | 116 break |
poelzi@127 | 117 end |
poelzi@127 | 118 end |
poelzi@127 | 119 |
poelzi@150 | 120 mk_link(-1, _("Previous issue"), "resultset_previous.png", "issue") |
poelzi@127 | 121 if issue.area then |
poelzi@127 | 122 ui.link{ |
poelzi@127 | 123 content = function() |
poelzi@127 | 124 if issue_filter_map[state] then |
poelzi@127 | 125 ui.image{ static = "icons/16/"..issue_filter_map[state] } |
poelzi@127 | 126 end |
poelzi@127 | 127 slot.put(issue.area.name) |
poelzi@127 | 128 end, |
poelzi@127 | 129 module = "area", |
poelzi@127 | 130 view = "show", |
poelzi@127 | 131 id = issue.area.id, |
poelzi@127 | 132 params = { |
poelzi@127 | 133 filter = filter and filter.name or nil, |
poelzi@127 | 134 filter_voting = filter_voting_name, |
poelzi@127 | 135 tab = "issues" |
poelzi@127 | 136 } |
poelzi@127 | 137 } |
poelzi@127 | 138 end |
poelzi@150 | 139 mk_link(1, _("Next issue"), "resultset_next.png", "issue") |
poelzi@150 | 140 |
poelzi@150 | 141 -- show pager for initiatives if available |
poelzi@150 | 142 if initiative then |
poelzi@150 | 143 ui.container{ content = function() end, attr = {class = "content_navigation_seperator"}} |
poelzi@150 | 144 |
poelzi@150 | 145 records = issue:get_reference_selector("initiatives"):exec() |
poelzi@150 | 146 for i,cissue in ipairs(records) do |
poelzi@150 | 147 if cissue.id == initiative.id then |
poelzi@150 | 148 this = i |
poelzi@150 | 149 break |
poelzi@150 | 150 end |
poelzi@150 | 151 end |
poelzi@150 | 152 mk_link(-1, _("Previous initiative"), "resultset_previous.png", "initiative") |
poelzi@150 | 153 mk_link(1, _("Next initiative"), "resultset_next.png", "initiative") |
poelzi@150 | 154 end |
poelzi@127 | 155 end |
poelzi@127 | 156 end |
poelzi@127 | 157 |
poelzi@127 | 158 ) |
poelzi@127 | 159 |
bsw/jbe@4 | 160 slot.select("actions", function() |
bsw/jbe@5 | 161 |
bsw@51 | 162 if app.session.member_id then |
bsw@51 | 163 |
bsw@51 | 164 if issue.state == 'voting' then |
bsw@51 | 165 local text |
bsw@51 | 166 if not direct_voter then |
bsw@51 | 167 text = _"Vote now" |
bsw@51 | 168 else |
bsw@51 | 169 text = _"Change vote" |
bsw@51 | 170 end |
bsw@51 | 171 ui.link{ |
bsw@51 | 172 content = function() |
bsw@51 | 173 ui.image{ static = "icons/16/email_open.png" } |
bsw@51 | 174 slot.put(text) |
bsw@51 | 175 end, |
bsw@51 | 176 module = "vote", |
bsw@51 | 177 view = "list", |
bsw@51 | 178 params = { issue_id = issue.id } |
bsw@51 | 179 } |
bsw/jbe@19 | 180 end |
bsw/jbe@5 | 181 |
bsw/jbe@5 | 182 execute.view{ |
bsw@51 | 183 module = "interest", |
bsw/jbe@5 | 184 view = "_show_box", |
bsw@51 | 185 params = { issue = issue } |
bsw/jbe@5 | 186 } |
bsw@7 | 187 |
bsw@51 | 188 if not issue.closed then |
bsw@51 | 189 execute.view{ |
bsw@51 | 190 module = "delegation", |
bsw@51 | 191 view = "_show_box", |
poelzi@111 | 192 params = { issue_id = issue.id, |
poelzi@111 | 193 initiative_id = initiative and initiative.id or nil} |
bsw@51 | 194 } |
bsw@51 | 195 end |
bsw@51 | 196 |
bsw@51 | 197 execute.view{ |
bsw@51 | 198 module = "issue", |
bsw@51 | 199 view = "_show_vote_later_box", |
bsw@51 | 200 params = { issue = issue } |
bsw@51 | 201 } |
bsw@51 | 202 |
bsw@51 | 203 end |
bsw/jbe@4 | 204 |
bsw@10 | 205 if config.issue_discussion_url_func then |
bsw@10 | 206 local url = config.issue_discussion_url_func(issue) |
bsw@10 | 207 ui.link{ |
bsw@10 | 208 attr = { target = "_blank" }, |
bsw@10 | 209 external = url, |
bsw@10 | 210 content = function() |
bsw@10 | 211 ui.image{ static = "icons/16/comments.png" } |
bsw@10 | 212 slot.put(_"Discussion on issue") |
bsw@10 | 213 end, |
bsw@10 | 214 } |
bsw@10 | 215 end |
bsw/jbe@4 | 216 end) |
bsw/jbe@4 | 217 |
bsw/jbe@4 | 218 |
bsw/jbe@4 | 219 execute.view{ |
bsw/jbe@4 | 220 module = "issue", |
bsw/jbe@4 | 221 view = "_show_box", |
bsw/jbe@4 | 222 params = { issue = issue } |
bsw/jbe@4 | 223 } |
bsw/jbe@4 | 224 |
bsw/jbe@4 | 225 -- ui.twitter("http://example.com/t" .. tostring(issue.id)) |
bsw/jbe@6 | 226 |
bsw@60 | 227 if config.public_access_issue_head and not app.session.member_id then |
bsw@60 | 228 config.public_access_issue_head(issue) |
bsw@60 | 229 end |
bsw/jbe@6 | 230 |
bsw@60 | 231 if app.session.member_id and issue.state == 'voting' and not direct_voter then |
bsw/jbe@6 | 232 ui.container{ |
bsw/jbe@6 | 233 attr = { class = "voting_active_info" }, |
bsw/jbe@6 | 234 content = function() |
bsw/jbe@6 | 235 slot.put(_"Voting for this issue is currently running!") |
bsw/jbe@6 | 236 slot.put(" ") |
bsw@51 | 237 if app.session.member_id then |
bsw@51 | 238 ui.link{ |
bsw@51 | 239 content = function() |
bsw@51 | 240 slot.put(_"Vote now") |
bsw@51 | 241 end, |
bsw@51 | 242 module = "vote", |
bsw@51 | 243 view = "list", |
bsw@51 | 244 params = { issue_id = issue.id } |
bsw@51 | 245 } |
bsw@51 | 246 end |
bsw/jbe@6 | 247 end |
bsw/jbe@6 | 248 } |
bsw/jbe@6 | 249 slot.put("<br />") |
bsw/jbe@6 | 250 end |
bsw/jbe@6 | 251 |