rev |
line source |
bsw/jbe@4
|
1
|
bsw/jbe@4
|
2 local initiative = param.get("initiative", "table")
|
bsw/jbe@0
|
3 local suggestions_selector = param.get("suggestions_selector", "table")
|
bsw/jbe@19
|
4 local tab_id = param.get("tab_id")
|
bsw/jbe@19
|
5 local show_name = param.get("show_name", atom.boolean)
|
bsw/jbe@19
|
6 if show_name == nil then
|
bsw/jbe@19
|
7 show_name = true
|
bsw/jbe@19
|
8 end
|
bsw/jbe@19
|
9 local show_filter = param.get("show_filter", atom.boolean)
|
bsw/jbe@19
|
10 if show_filter == nil then
|
bsw/jbe@19
|
11 show_filter = true
|
bsw/jbe@19
|
12 end
|
bsw/jbe@0
|
13
|
bsw/jbe@19
|
14 local partial = {
|
bsw/jbe@19
|
15 routing = {
|
bsw/jbe@19
|
16 default = {
|
bsw/jbe@19
|
17 mode = "redirect",
|
bsw/jbe@19
|
18 module = "initiative",
|
bsw/jbe@19
|
19 view = "show_tab",
|
bsw/jbe@19
|
20 params = {
|
bsw/jbe@19
|
21 initiative_id = initiative.id,
|
bsw/jbe@19
|
22 tab = "suggestions",
|
bsw/jbe@19
|
23 tab_id = tab_id
|
bsw/jbe@19
|
24 },
|
bsw/jbe@19
|
25 }
|
bsw/jbe@19
|
26 }
|
bsw/jbe@19
|
27 }
|
bsw/jbe@19
|
28
|
bsw/jbe@19
|
29 local ui_filters = ui.filters
|
bsw/jbe@19
|
30 if not show_filter then
|
bsw/jbe@19
|
31 ui_filters = function(args) args.content() end
|
bsw/jbe@19
|
32 end
|
bsw/jbe@19
|
33
|
bsw/jbe@19
|
34 ui_filters{
|
bsw/jbe@19
|
35 label = _"Show filter",
|
bsw/jbe@0
|
36 selector = suggestions_selector,
|
bsw/jbe@19
|
37 {
|
bsw/jbe@19
|
38 label = _"Order by",
|
bsw/jbe@4
|
39 {
|
bsw/jbe@19
|
40 name = "plus_unfulfilled",
|
bsw/jbe@19
|
41 label = _"requested",
|
bsw/jbe@19
|
42 selector_modifier = function(selector) selector:add_order_by("plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id") end
|
bsw/jbe@4
|
43 },
|
bsw/jbe@4
|
44 {
|
bsw/jbe@4
|
45 name = "plus2",
|
bsw/jbe@4
|
46 label = _"must",
|
bsw/jbe@19
|
47 selector_modifier = function(selector) selector:add_order_by("plus2_unfulfilled_count + plus2_fulfilled_count DESC, id") end
|
bsw/jbe@4
|
48 },
|
bsw/jbe@4
|
49 {
|
bsw/jbe@4
|
50 name = "plus",
|
bsw/jbe@4
|
51 label = _"must/should",
|
bsw/jbe@19
|
52 selector_modifier = function(selector) selector:add_order_by("plus2_unfulfilled_count + plus1_unfulfilled_count + plus2_fulfilled_count + plus1_fulfilled_count DESC, id") end
|
bsw/jbe@4
|
53 },
|
bsw/jbe@4
|
54 {
|
bsw/jbe@4
|
55 name = "minus",
|
bsw/jbe@4
|
56 label = _"must/should not",
|
bsw/jbe@19
|
57 selector_modifier = function(selector) selector:add_order_by("minus2_unfulfilled_count + minus1_unfulfilled_count + minus2_fulfilled_count + minus1_fulfilled_count DESC, id") end
|
bsw/jbe@4
|
58 },
|
bsw/jbe@4
|
59 {
|
bsw/jbe@4
|
60 name = "minus2",
|
bsw/jbe@4
|
61 label = _"must not",
|
bsw/jbe@19
|
62 selector_modifier = function(selector) selector:add_order_by("minus2_unfulfilled_count + minus2_fulfilled_count DESC, id") end
|
bsw/jbe@19
|
63 }
|
bsw/jbe@4
|
64 },
|
bsw/jbe@0
|
65 content = function()
|
bsw/jbe@4
|
66 ui.paginate{
|
bsw/jbe@4
|
67 selector = suggestions_selector,
|
bsw/jbe@4
|
68 content = function()
|
bsw/jbe@4
|
69 ui.list{
|
bsw/jbe@4
|
70 attr = { style = "table-layout: fixed;" },
|
bsw/jbe@4
|
71 records = suggestions_selector:exec(),
|
bsw/jbe@4
|
72 columns = {
|
bsw/jbe@4
|
73 {
|
bsw/jbe@19
|
74 label = show_name and _"Suggestion" or nil,
|
bsw/jbe@4
|
75 content = function(record)
|
bsw/jbe@19
|
76 if show_name then
|
bsw/jbe@19
|
77 ui.link{
|
bsw/jbe@19
|
78 text = record.name,
|
bsw/jbe@19
|
79 module = "suggestion",
|
bsw/jbe@19
|
80 view = "show",
|
bsw/jbe@19
|
81 id = record.id
|
bsw/jbe@19
|
82 }
|
bsw/jbe@19
|
83 end
|
bsw/jbe@4
|
84 end
|
bsw/jbe@4
|
85 },
|
bsw/jbe@4
|
86 {
|
bsw/jbe@4
|
87 label = _"Collective opinion",
|
bsw/jbe@4
|
88 label_attr = { style = "width: 101px;" },
|
bsw/jbe@4
|
89 content = function(record)
|
bsw/jbe@4
|
90 if record.minus2_unfulfilled_count then
|
bsw/jbe@4
|
91 local max_value = record.initiative.issue.population
|
bsw/jbe@4
|
92 ui.bargraph{
|
bsw/jbe@4
|
93 max_value = max_value,
|
bsw/jbe@4
|
94 width = 50,
|
bsw/jbe@4
|
95 bars = {
|
bsw/jbe@4
|
96 { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.minus2_fulfilled_count - record.minus1_fulfilled_count },
|
bsw/jbe@4
|
97 { color = "#f88", value = record.minus1_unfulfilled_count + record.minus1_fulfilled_count },
|
bsw/jbe@4
|
98 { color = "#a00", value = record.minus2_unfulfilled_count + record.minus2_fulfilled_count },
|
bsw/jbe@4
|
99 { color = "#0a0", value = record.plus2_unfulfilled_count + record.plus2_fulfilled_count },
|
bsw/jbe@4
|
100 { color = "#8f8", value = record.plus1_unfulfilled_count + record.plus1_fulfilled_count },
|
bsw/jbe@4
|
101 { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count },
|
bsw/jbe@4
|
102 }
|
bsw/jbe@4
|
103 }
|
bsw/jbe@4
|
104 end
|
bsw/jbe@4
|
105 end
|
bsw/jbe@4
|
106 },
|
bsw/jbe@4
|
107 {
|
bsw/jbe@4
|
108 label = _"My opinion",
|
bsw/jbe@4
|
109 content = function(record)
|
bsw/jbe@4
|
110 local degree
|
bsw@51
|
111 local opinion
|
bsw@51
|
112 if app.session.member_id then
|
bsw@51
|
113 opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw@51
|
114 end
|
bsw/jbe@4
|
115 if opinion then
|
bsw/jbe@4
|
116 degree = opinion.degree
|
bsw@3
|
117 end
|
bsw/jbe@5
|
118 ui.container{
|
bsw/jbe@5
|
119 attr = { class = "suggestion_my_opinion" },
|
bsw/jbe@5
|
120 content = function()
|
bsw@51
|
121 if app.session.member_id then
|
bsw@51
|
122 if initiative.issue.state == "voting" or initiative.issue.state == "closed" then
|
bsw@51
|
123 ui.tag{
|
bsw@51
|
124 tag = "span",
|
bsw@51
|
125 attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
|
bsw@51
|
126 content = _"must not"
|
bsw@51
|
127 }
|
bsw@51
|
128 ui.tag{
|
bsw@51
|
129 tag = "span",
|
bsw@51
|
130 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
|
bsw@51
|
131 content = _"should not"
|
bsw@51
|
132 }
|
bsw@51
|
133 ui.tag{
|
bsw@51
|
134 tag = "span",
|
bsw@51
|
135 attr = { class = "action" .. (degree == nil and " active" or "") },
|
bsw@51
|
136 content = _"neutral"
|
bsw@51
|
137 }
|
bsw@51
|
138 ui.tag{
|
bsw@51
|
139 tag = "span",
|
bsw@51
|
140 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
|
bsw@51
|
141 content = _"should"
|
bsw@51
|
142 }
|
bsw@51
|
143 ui.tag{
|
bsw@51
|
144 tag = "span",
|
bsw@51
|
145 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
|
bsw@51
|
146 content = _"must"
|
bsw@51
|
147 }
|
bsw@51
|
148 else
|
bsw@51
|
149 ui.link{
|
bsw@51
|
150 attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
|
bsw@51
|
151 text = _"must not",
|
bsw@51
|
152 module = "opinion",
|
bsw@51
|
153 action = "update",
|
bsw@51
|
154 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw@51
|
155 params = {
|
bsw@51
|
156 suggestion_id = record.id,
|
bsw@51
|
157 degree = -2
|
bsw@51
|
158 },
|
bsw@51
|
159 partial = partial
|
bsw@51
|
160 }
|
bsw@51
|
161 slot.put(" ")
|
bsw@51
|
162 ui.link{
|
bsw@51
|
163 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
|
bsw@51
|
164 text = _"should not",
|
bsw@51
|
165 module = "opinion",
|
bsw@51
|
166 action = "update",
|
bsw@51
|
167 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw@51
|
168 params = {
|
bsw@51
|
169 suggestion_id = record.id,
|
bsw@51
|
170 degree = -1
|
bsw@51
|
171 },
|
bsw@51
|
172 partial = partial
|
bsw@51
|
173 }
|
bsw@51
|
174 slot.put(" ")
|
bsw@51
|
175 ui.link{
|
bsw@51
|
176 attr = { class = "action" .. (degree == nil and " active" or "") },
|
bsw@51
|
177 text = _"neutral",
|
bsw@51
|
178 module = "opinion",
|
bsw@51
|
179 action = "update",
|
bsw@51
|
180 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw@51
|
181 params = {
|
bsw@51
|
182 suggestion_id = record.id,
|
bsw@51
|
183 delete = true
|
bsw@51
|
184 },
|
bsw@51
|
185 partial = partial
|
bsw@51
|
186 }
|
bsw@51
|
187 slot.put(" ")
|
bsw@51
|
188 ui.link{
|
bsw@51
|
189 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
|
bsw@51
|
190 text = _"should",
|
bsw@51
|
191 module = "opinion",
|
bsw@51
|
192 action = "update",
|
bsw@51
|
193 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw@51
|
194 params = {
|
bsw@51
|
195 suggestion_id = record.id,
|
bsw@51
|
196 degree = 1
|
bsw@51
|
197 },
|
bsw@51
|
198 partial = partial
|
bsw@51
|
199 }
|
bsw@51
|
200 slot.put(" ")
|
bsw@51
|
201 ui.link{
|
bsw@51
|
202 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
|
bsw@51
|
203 text = _"must",
|
bsw@51
|
204 module = "opinion",
|
bsw@51
|
205 action = "update",
|
bsw@51
|
206 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw@51
|
207 params = {
|
bsw@51
|
208 suggestion_id = record.id,
|
bsw@51
|
209 degree = 2
|
bsw@51
|
210 },
|
bsw@51
|
211 partial = partial
|
bsw@51
|
212 }
|
bsw@51
|
213 end
|
bsw/jbe@19
|
214 else
|
bsw@51
|
215 ui.field.text{ value = _"[Registered members only]" }
|
bsw/jbe@19
|
216 end
|
bsw/jbe@5
|
217 end
|
bsw/jbe@0
|
218 }
|
bsw/jbe@0
|
219 end
|
bsw/jbe@4
|
220 },
|
bsw/jbe@4
|
221 {
|
bsw/jbe@4
|
222 content = function(record)
|
bsw@51
|
223 local opinion
|
bsw@51
|
224 if app.session.member_id then
|
bsw@51
|
225 opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw@51
|
226 end
|
bsw/jbe@4
|
227 if opinion and not opinion.fulfilled then
|
bsw/jbe@4
|
228 ui.image{ static = "icons/16/cross.png" }
|
bsw/jbe@4
|
229 end
|
bsw/jbe@4
|
230 end
|
bsw/jbe@4
|
231 },
|
bsw/jbe@4
|
232 {
|
bsw/jbe@4
|
233 label = _"Suggestion currently not implemented",
|
bsw/jbe@4
|
234 label_attr = { style = "width: 101px;" },
|
bsw/jbe@4
|
235 content = function(record)
|
bsw/jbe@4
|
236 if record.minus2_unfulfilled_count then
|
bsw/jbe@4
|
237 local max_value = record.initiative.issue.population
|
bsw/jbe@4
|
238 ui.bargraph{
|
bsw/jbe@4
|
239 max_value = max_value,
|
bsw/jbe@4
|
240 width = 50,
|
bsw/jbe@4
|
241 bars = {
|
bsw/jbe@4
|
242 { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count },
|
bsw/jbe@4
|
243 { color = "#f88", value = record.minus1_unfulfilled_count },
|
bsw/jbe@4
|
244 { color = "#a00", value = record.minus2_unfulfilled_count },
|
bsw/jbe@4
|
245 { color = "#0a0", value = record.plus2_unfulfilled_count },
|
bsw/jbe@4
|
246 { color = "#8f8", value = record.plus1_unfulfilled_count },
|
bsw/jbe@4
|
247 { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count },
|
bsw/jbe@4
|
248 }
|
bsw/jbe@4
|
249 }
|
bsw/jbe@4
|
250 end
|
bsw/jbe@4
|
251 end
|
bsw/jbe@4
|
252 },
|
bsw/jbe@4
|
253 {
|
bsw/jbe@4
|
254 content = function(record)
|
bsw@51
|
255 local opinion
|
bsw@51
|
256 if app.session.member_id then
|
bsw@51
|
257 opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw@51
|
258 end
|
bsw/jbe@4
|
259 if opinion and opinion.fulfilled then
|
bsw/jbe@4
|
260 ui.image{ static = "icons/16/tick.png" }
|
bsw/jbe@4
|
261 end
|
bsw/jbe@4
|
262 end
|
bsw/jbe@4
|
263 },
|
bsw/jbe@4
|
264 {
|
bsw/jbe@4
|
265 label = _"Suggestion currently implemented",
|
bsw/jbe@4
|
266 label_attr = { style = "width: 101px;" },
|
bsw/jbe@4
|
267 content = function(record)
|
bsw/jbe@4
|
268 if record.minus2_fulfilled_count then
|
bsw/jbe@4
|
269 local max_value = record.initiative.issue.population
|
bsw/jbe@4
|
270 ui.bargraph{
|
bsw/jbe@4
|
271 max_value = max_value,
|
bsw/jbe@4
|
272 width = 50,
|
bsw/jbe@4
|
273 bars = {
|
bsw/jbe@4
|
274 { color = "#ddd", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count },
|
bsw/jbe@4
|
275 { color = "#f88", value = record.minus1_fulfilled_count },
|
bsw/jbe@4
|
276 { color = "#a00", value = record.minus2_fulfilled_count },
|
bsw/jbe@4
|
277 { color = "#0a0", value = record.plus2_fulfilled_count },
|
bsw/jbe@4
|
278 { color = "#8f8", value = record.plus1_fulfilled_count },
|
bsw/jbe@4
|
279 { color = "#ddd", value = max_value - record.plus1_fulfilled_count - record.plus2_fulfilled_count },
|
bsw/jbe@4
|
280 }
|
bsw/jbe@4
|
281 }
|
bsw/jbe@4
|
282 end
|
bsw@3
|
283 end
|
bsw/jbe@4
|
284 },
|
bsw/jbe@4
|
285 {
|
bsw/jbe@4
|
286 label_attr = { style = "width: 200px;" },
|
bsw/jbe@4
|
287 content = function(record)
|
bsw/jbe@4
|
288 local degree
|
bsw@51
|
289 local opinion
|
bsw@51
|
290 if app.session.member_id then
|
bsw@51
|
291 opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw@51
|
292 end
|
bsw/jbe@4
|
293 if opinion then
|
bsw/jbe@4
|
294 degree = opinion.degree
|
bsw/jbe@4
|
295 end
|
bsw/jbe@4
|
296 if opinion then
|
bsw/jbe@4
|
297 if not opinion.fulfilled then
|
bsw/jbe@4
|
298 local text = ""
|
bsw/jbe@4
|
299 if opinion.degree > 0 then
|
bsw/jbe@4
|
300 text = _"Mark suggestion as implemented and express satisfaction"
|
bsw/jbe@4
|
301 else
|
bsw/jbe@4
|
302 text = _"Mark suggestion as implemented and express dissatisfaction"
|
bsw/jbe@4
|
303 end
|
bsw/jbe@4
|
304 ui.link{
|
bsw/jbe@4
|
305 attr = { class = "action" },
|
bsw/jbe@4
|
306 text = text,
|
bsw/jbe@4
|
307 module = "opinion",
|
bsw/jbe@4
|
308 action = "update",
|
bsw/jbe@4
|
309 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw/jbe@4
|
310 params = {
|
bsw/jbe@4
|
311 suggestion_id = record.id,
|
bsw/jbe@4
|
312 fulfilled = true
|
bsw/jbe@19
|
313 },
|
bsw/jbe@19
|
314 partial = partial
|
bsw/jbe@4
|
315 }
|
bsw/jbe@4
|
316 else
|
bsw/jbe@4
|
317 if opinion.degree > 0 then
|
bsw/jbe@4
|
318 text = _"Mark suggestion as not implemented and express dissatisfaction"
|
bsw/jbe@4
|
319 else
|
bsw/jbe@4
|
320 text = _"Mark suggestion as not implemented and express satisfaction"
|
bsw/jbe@4
|
321 end
|
bsw/jbe@4
|
322 ui.link{
|
bsw/jbe@4
|
323 attr = { class = "action" },
|
bsw/jbe@4
|
324 text = text,
|
bsw/jbe@4
|
325 module = "opinion",
|
bsw/jbe@4
|
326 action = "update",
|
bsw/jbe@4
|
327 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw/jbe@4
|
328 params = {
|
bsw/jbe@4
|
329 suggestion_id = record.id,
|
bsw/jbe@4
|
330 fulfilled = false
|
bsw/jbe@19
|
331 },
|
bsw/jbe@19
|
332 partial = partial
|
bsw/jbe@4
|
333 }
|
bsw/jbe@4
|
334 end
|
bsw/jbe@4
|
335 end
|
bsw/jbe@4
|
336 end
|
bsw/jbe@4
|
337 },
|
bsw/jbe@4
|
338 {
|
bsw/jbe@4
|
339 content = function(record)
|
bsw@51
|
340 local opinion
|
bsw@51
|
341 if app.session.member_id then
|
bsw@51
|
342 opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw@51
|
343 end
|
bsw/jbe@4
|
344 if opinion then
|
bsw/jbe@4
|
345 if (opinion.fulfilled and opinion.degree > 0) or (not opinion.fulfilled and opinion.degree < 0) then
|
bsw/jbe@4
|
346 ui.image{ static = "icons/16/thumb_up_green.png" }
|
bsw/jbe@4
|
347 else
|
bsw/jbe@4
|
348 ui.image{ static = "icons/16/thumb_down_red.png" }
|
bsw/jbe@4
|
349 end
|
bsw/jbe@4
|
350 end
|
bsw/jbe@4
|
351 end
|
bsw/jbe@4
|
352 },
|
bsw/jbe@4
|
353 }
|
bsw/jbe@4
|
354 }
|
bsw/jbe@4
|
355 end
|
bsw/jbe@0
|
356 }
|
bsw/jbe@0
|
357 end
|
bsw/jbe@0
|
358 }
|