liquid_feedback_frontend

view app/main/issue/_list.lua @ 315:2e404166c9a1

Added small delegation arrow, small color changes
author bsw
date Tue Feb 28 11:08:12 2012 +0100 (2012-02-28)
parents 5e6bdf07e3a1
children 7d6a3c411f99
line source
1 local issues_selector = param.get("issues_selector", "table")
2 local for_member = param.get("for_member", "table") or app.session.member
4 if app.session.member_id then
5 issues_selector
6 :left_join("interest", "_interest", { "_interest.issue_id = issue.id AND _interest.member_id = ?", for_member.id } )
7 :add_field("(_interest.member_id NOTNULL)", "is_interested")
8 issues_selector
9 :left_join("delegating_interest_snapshot", "_delegating_interest", { "_delegating_interest.issue_id = issue.id AND _delegating_interest.member_id = ? AND _delegating_interest.event = issue.latest_snapshot_event", for_member.id } )
10 :add_field("_delegating_interest.delegate_member_ids[1]", "is_interested_by_delegation_to_member_id")
11 :add_field("_delegating_interest.delegate_member_ids[array_upper(_delegating_interest.delegate_member_ids, 1)]", "is_interested_via_member_id")
12 :add_field("array_length(_delegating_interest.delegate_member_ids, 1)", "delegation_chain_length")
13 end
15 ui.add_partial_param_names{
16 "filter",
17 "filter_open",
18 "filter_voting",
19 "filter_interest",
20 "issue_list"
21 }
23 local filters = execute.load_chunk{module="issue", chunk="_filters.lua", params = { member = for_member }}
25 filters.content = function()
26 ui.paginate{
27 per_page = tonumber(param.get("per_page")),
28 selector = issues_selector,
29 content = function()
30 local highlight_string = param.get("highlight_string", "string")
31 local issues = issues or issues_selector:exec()
32 -- issues:load(initiatives)
33 ui.container{ attr = { class = "issues" }, content = function()
35 for i, issue in ipairs(issues) do
37 local class = "issue"
38 if issue.is_interested then
39 class = class .. " interested"
40 elseif issue.is_interested_by_delegation_to_member_id then
41 class = class .. " interested_by_delegation"
42 end
43 ui.container{ attr = { class = class }, content = function()
45 ui.container{ attr = { class = "issue_info" }, content = function()
47 if issue.is_interested then
48 ui.tag{
49 tag = "div", attr = { class = "interest_by_delegation"},
50 content = function()
51 local text = "You are interested in this issue"
52 ui.image{ attr = { alt = text, title = text }, static = "icons/16/eye.png" }
53 end
54 }
56 elseif issue.is_interested_by_delegation_to_member_id then
57 ui.tag{
58 tag = "div", attr = { class = "interest_by_delegation"},
59 content = function()
60 local member = Member:by_id(issue.is_interested_by_delegation_to_member_id)
61 local text = _"delegated to"
62 ui.image{
63 attr = { class = "delegation_arrow", alt = text, title = text },
64 static = "delegation_arrow_24_horizontal.png"
65 }
66 execute.view{
67 module = "member_image",
68 view = "_show",
69 params = {
70 member = member,
71 image_type = "avatar",
72 show_dummy = true,
73 class = "micro_avatar",
74 popup_text = member.name
75 }
76 }
77 if issue.is_interested_by_delegation_to_member_id ~= issue.is_interested_via_member_id then
78 if issue.delegation_chain_length > 2 then
79 local text = _"delegated to"
80 ui.image{
81 attr = { class = "delegation_arrow", alt = text, title = text },
82 static = "delegation_arrow_24_horizontal.png"
83 }
84 ui.tag{ content = "..." }
85 end
86 local text = _"delegated to"
87 ui.image{
88 attr = { class = "delegation_arrow", alt = text, title = text },
89 static = "delegation_arrow_24_horizontal.png"
90 }
91 local member = Member:by_id(issue.is_interested_via_member_id)
92 execute.view{
93 module = "member_image",
94 view = "_show",
95 params = {
96 member = member,
97 image_type = "avatar",
98 show_dummy = true,
99 class = "micro_avatar",
100 popup_text = member.name
101 }
102 }
103 end
104 end
105 }
106 end
108 ui.tag{
109 tag = "div",
110 content = function()
111 ui.link{
112 attr = { class = "issue_id" },
113 text = _("Issue ##{id}", { id = tostring(issue.id) }),
114 module = "issue",
115 view = "show",
116 id = issue.id
117 }
119 slot.put(" · ")
120 ui.tag{ content = issue.area.name }
121 slot.put(" · ")
122 ui.tag{ content = issue.area.unit.name }
124 end
125 }
126 ui.tag{
127 attr = { class = "issue_policy_info" },
128 tag = "div",
129 content = function()
131 ui.tag{ content = issue.policy.name }
133 slot.put(" · ")
134 ui.tag{ content = issue.state_name }
136 if issue.state_time_left then
137 slot.put(" · ")
138 ui.tag{ content = _("#{time_left} left", { time_left = issue.state_time_left }) }
139 end
141 end
142 }
145 if issue.old_state then
146 ui.field.text{ value = format.time(issue.sort) }
147 ui.field.text{ value = Issue:get_state_name_for_state(issue.old_state) .. " > " .. Issue:get_state_name_for_state(issue.new_state) }
148 else
149 end
150 end }
152 ui.container{ attr = { class = "initiative_list" }, content = function()
154 local initiatives_selector = issue:get_reference_selector("initiatives")
155 local highlight_string = param.get("highlight_string")
156 if highlight_string then
157 initiatives_selector:add_field( {'"highlight"("initiative"."name", ?)', highlight_string }, "name_highlighted")
158 end
159 execute.view{
160 module = "initiative",
161 view = "_list",
162 params = {
163 issue = issue,
164 initiatives_selector = initiatives_selector,
165 highlight_string = highlight_string,
166 per_page = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3,
167 no_sort = true,
168 limit = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3,
169 for_member = for_member
170 }
171 }
172 end }
173 end }
174 end
175 end }
176 end
177 }
178 end
180 filters.opened = true
181 filters.selector = issues_selector
183 if param.get("no_filter", atom.boolean) then
184 filters.content()
185 else
186 ui.filters(filters)
187 end
189 --[[
190 if param.get("legend", atom.boolean) ~= false then
191 local filter = param.get_all_cgi().filter
192 if not filter or filter == "any" or filter ~= "finished" then
193 ui.bargraph_legend{
194 width = 25,
195 bars = {
196 { color = "#0a0", label = _"Supporter" },
197 { color = "#777", label = _"Potential supporter" },
198 { color = "#ddd", label = _"No support at all" },
199 }
200 }
201 end
202 if not filter or filter == "any" or filter == "finished" then
203 ui.bargraph_legend{
204 width = 25,
205 bars = {
206 { color = "#0a0", label = _"Yes" },
207 { color = "#aaa", label = _"Abstention" },
208 { color = "#a00", label = _"No" },
209 }
210 }
211 end
212 end
214 --]]

Impressum / About Us