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/jbe@4
|
111 local opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw/jbe@4
|
112 if opinion then
|
bsw/jbe@4
|
113 degree = opinion.degree
|
bsw@3
|
114 end
|
bsw/jbe@5
|
115 ui.container{
|
bsw/jbe@5
|
116 attr = { class = "suggestion_my_opinion" },
|
bsw/jbe@5
|
117 content = function()
|
bsw/jbe@19
|
118 if initiative.issue.state == "voting" or initiative.issue.state == "closed" then
|
bsw/jbe@19
|
119 ui.tag{
|
bsw/jbe@19
|
120 tag = "span",
|
bsw/jbe@19
|
121 attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
|
bsw/jbe@19
|
122 content = _"must not"
|
bsw/jbe@19
|
123 }
|
bsw/jbe@19
|
124 ui.tag{
|
bsw/jbe@19
|
125 tag = "span",
|
bsw/jbe@19
|
126 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
|
bsw/jbe@19
|
127 content = _"should not"
|
bsw/jbe@19
|
128 }
|
bsw/jbe@19
|
129 ui.tag{
|
bsw/jbe@19
|
130 tag = "span",
|
bsw/jbe@19
|
131 attr = { class = "action" .. (degree == nil and " active" or "") },
|
bsw/jbe@19
|
132 content = _"neutral"
|
bsw/jbe@5
|
133 }
|
bsw/jbe@19
|
134 ui.tag{
|
bsw/jbe@19
|
135 tag = "span",
|
bsw/jbe@19
|
136 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
|
bsw/jbe@19
|
137 content = _"should"
|
bsw/jbe@19
|
138 }
|
bsw/jbe@19
|
139 ui.tag{
|
bsw/jbe@19
|
140 tag = "span",
|
bsw/jbe@19
|
141 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
|
bsw/jbe@19
|
142 content = _"must"
|
bsw/jbe@19
|
143 }
|
bsw/jbe@19
|
144 else
|
bsw/jbe@19
|
145 ui.link{
|
bsw/jbe@19
|
146 attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
|
bsw/jbe@19
|
147 text = _"must not",
|
bsw/jbe@19
|
148 module = "opinion",
|
bsw/jbe@19
|
149 action = "update",
|
bsw/jbe@19
|
150 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw/jbe@19
|
151 params = {
|
bsw/jbe@19
|
152 suggestion_id = record.id,
|
bsw/jbe@19
|
153 degree = -2
|
bsw/jbe@19
|
154 },
|
bsw/jbe@19
|
155 partial = partial
|
bsw/jbe@5
|
156 }
|
bsw/jbe@19
|
157 slot.put(" ")
|
bsw/jbe@19
|
158 ui.link{
|
bsw/jbe@19
|
159 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
|
bsw/jbe@19
|
160 text = _"should not",
|
bsw/jbe@19
|
161 module = "opinion",
|
bsw/jbe@19
|
162 action = "update",
|
bsw/jbe@19
|
163 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw/jbe@19
|
164 params = {
|
bsw/jbe@19
|
165 suggestion_id = record.id,
|
bsw/jbe@19
|
166 degree = -1
|
bsw/jbe@19
|
167 },
|
bsw/jbe@19
|
168 partial = partial
|
bsw/jbe@19
|
169 }
|
bsw/jbe@19
|
170 slot.put(" ")
|
bsw/jbe@19
|
171 ui.link{
|
bsw/jbe@19
|
172 attr = { class = "action" .. (degree == nil and " active" or "") },
|
bsw/jbe@19
|
173 text = _"neutral",
|
bsw/jbe@19
|
174 module = "opinion",
|
bsw/jbe@19
|
175 action = "update",
|
bsw/jbe@19
|
176 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw/jbe@19
|
177 params = {
|
bsw/jbe@19
|
178 suggestion_id = record.id,
|
bsw/jbe@19
|
179 delete = true
|
bsw/jbe@19
|
180 },
|
bsw/jbe@19
|
181 partial = partial
|
bsw/jbe@5
|
182 }
|
bsw/jbe@19
|
183 slot.put(" ")
|
bsw/jbe@19
|
184 ui.link{
|
bsw/jbe@19
|
185 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
|
bsw/jbe@19
|
186 text = _"should",
|
bsw/jbe@19
|
187 module = "opinion",
|
bsw/jbe@19
|
188 action = "update",
|
bsw/jbe@19
|
189 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw/jbe@19
|
190 params = {
|
bsw/jbe@19
|
191 suggestion_id = record.id,
|
bsw/jbe@19
|
192 degree = 1
|
bsw/jbe@19
|
193 },
|
bsw/jbe@19
|
194 partial = partial
|
bsw/jbe@5
|
195 }
|
bsw/jbe@19
|
196 slot.put(" ")
|
bsw/jbe@19
|
197 ui.link{
|
bsw/jbe@19
|
198 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
|
bsw/jbe@19
|
199 text = _"must",
|
bsw/jbe@19
|
200 module = "opinion",
|
bsw/jbe@19
|
201 action = "update",
|
bsw/jbe@19
|
202 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw/jbe@19
|
203 params = {
|
bsw/jbe@19
|
204 suggestion_id = record.id,
|
bsw/jbe@19
|
205 degree = 2
|
bsw/jbe@19
|
206 },
|
bsw/jbe@19
|
207 partial = partial
|
bsw/jbe@5
|
208 }
|
bsw/jbe@19
|
209 end
|
bsw/jbe@5
|
210 end
|
bsw/jbe@0
|
211 }
|
bsw/jbe@0
|
212 end
|
bsw/jbe@4
|
213 },
|
bsw/jbe@4
|
214 {
|
bsw/jbe@4
|
215 content = function(record)
|
bsw/jbe@4
|
216 local opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw/jbe@4
|
217 if opinion and not opinion.fulfilled then
|
bsw/jbe@4
|
218 ui.image{ static = "icons/16/cross.png" }
|
bsw/jbe@4
|
219 end
|
bsw/jbe@4
|
220 end
|
bsw/jbe@4
|
221 },
|
bsw/jbe@4
|
222 {
|
bsw/jbe@4
|
223 label = _"Suggestion currently not implemented",
|
bsw/jbe@4
|
224 label_attr = { style = "width: 101px;" },
|
bsw/jbe@4
|
225 content = function(record)
|
bsw/jbe@4
|
226 if record.minus2_unfulfilled_count then
|
bsw/jbe@4
|
227 local max_value = record.initiative.issue.population
|
bsw/jbe@4
|
228 ui.bargraph{
|
bsw/jbe@4
|
229 max_value = max_value,
|
bsw/jbe@4
|
230 width = 50,
|
bsw/jbe@4
|
231 bars = {
|
bsw/jbe@4
|
232 { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count },
|
bsw/jbe@4
|
233 { color = "#f88", value = record.minus1_unfulfilled_count },
|
bsw/jbe@4
|
234 { color = "#a00", value = record.minus2_unfulfilled_count },
|
bsw/jbe@4
|
235 { color = "#0a0", value = record.plus2_unfulfilled_count },
|
bsw/jbe@4
|
236 { color = "#8f8", value = record.plus1_unfulfilled_count },
|
bsw/jbe@4
|
237 { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count },
|
bsw/jbe@4
|
238 }
|
bsw/jbe@4
|
239 }
|
bsw/jbe@4
|
240 end
|
bsw/jbe@4
|
241 end
|
bsw/jbe@4
|
242 },
|
bsw/jbe@4
|
243 {
|
bsw/jbe@4
|
244 content = function(record)
|
bsw/jbe@4
|
245 local opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw/jbe@4
|
246 if opinion and opinion.fulfilled then
|
bsw/jbe@4
|
247 ui.image{ static = "icons/16/tick.png" }
|
bsw/jbe@4
|
248 end
|
bsw/jbe@4
|
249 end
|
bsw/jbe@4
|
250 },
|
bsw/jbe@4
|
251 {
|
bsw/jbe@4
|
252 label = _"Suggestion currently implemented",
|
bsw/jbe@4
|
253 label_attr = { style = "width: 101px;" },
|
bsw/jbe@4
|
254 content = function(record)
|
bsw/jbe@4
|
255 if record.minus2_fulfilled_count then
|
bsw/jbe@4
|
256 local max_value = record.initiative.issue.population
|
bsw/jbe@4
|
257 ui.bargraph{
|
bsw/jbe@4
|
258 max_value = max_value,
|
bsw/jbe@4
|
259 width = 50,
|
bsw/jbe@4
|
260 bars = {
|
bsw/jbe@4
|
261 { color = "#ddd", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count },
|
bsw/jbe@4
|
262 { color = "#f88", value = record.minus1_fulfilled_count },
|
bsw/jbe@4
|
263 { color = "#a00", value = record.minus2_fulfilled_count },
|
bsw/jbe@4
|
264 { color = "#0a0", value = record.plus2_fulfilled_count },
|
bsw/jbe@4
|
265 { color = "#8f8", value = record.plus1_fulfilled_count },
|
bsw/jbe@4
|
266 { color = "#ddd", value = max_value - record.plus1_fulfilled_count - record.plus2_fulfilled_count },
|
bsw/jbe@4
|
267 }
|
bsw/jbe@4
|
268 }
|
bsw/jbe@4
|
269 end
|
bsw@3
|
270 end
|
bsw/jbe@4
|
271 },
|
bsw/jbe@4
|
272 {
|
bsw/jbe@4
|
273 label_attr = { style = "width: 200px;" },
|
bsw/jbe@4
|
274 content = function(record)
|
bsw/jbe@4
|
275 local degree
|
bsw/jbe@4
|
276 local opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw/jbe@4
|
277 if opinion then
|
bsw/jbe@4
|
278 degree = opinion.degree
|
bsw/jbe@4
|
279 end
|
bsw/jbe@4
|
280 if opinion then
|
bsw/jbe@4
|
281 if not opinion.fulfilled then
|
bsw/jbe@4
|
282 local text = ""
|
bsw/jbe@4
|
283 if opinion.degree > 0 then
|
bsw/jbe@4
|
284 text = _"Mark suggestion as implemented and express satisfaction"
|
bsw/jbe@4
|
285 else
|
bsw/jbe@4
|
286 text = _"Mark suggestion as implemented and express dissatisfaction"
|
bsw/jbe@4
|
287 end
|
bsw/jbe@4
|
288 ui.link{
|
bsw/jbe@4
|
289 attr = { class = "action" },
|
bsw/jbe@4
|
290 text = text,
|
bsw/jbe@4
|
291 module = "opinion",
|
bsw/jbe@4
|
292 action = "update",
|
bsw/jbe@4
|
293 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
|
294 params = {
|
bsw/jbe@4
|
295 suggestion_id = record.id,
|
bsw/jbe@4
|
296 fulfilled = true
|
bsw/jbe@19
|
297 },
|
bsw/jbe@19
|
298 partial = partial
|
bsw/jbe@4
|
299 }
|
bsw/jbe@4
|
300 else
|
bsw/jbe@4
|
301 if opinion.degree > 0 then
|
bsw/jbe@4
|
302 text = _"Mark suggestion as not implemented and express dissatisfaction"
|
bsw/jbe@4
|
303 else
|
bsw/jbe@4
|
304 text = _"Mark suggestion as not implemented and express satisfaction"
|
bsw/jbe@4
|
305 end
|
bsw/jbe@4
|
306 ui.link{
|
bsw/jbe@4
|
307 attr = { class = "action" },
|
bsw/jbe@4
|
308 text = text,
|
bsw/jbe@4
|
309 module = "opinion",
|
bsw/jbe@4
|
310 action = "update",
|
bsw/jbe@4
|
311 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
|
312 params = {
|
bsw/jbe@4
|
313 suggestion_id = record.id,
|
bsw/jbe@4
|
314 fulfilled = false
|
bsw/jbe@19
|
315 },
|
bsw/jbe@19
|
316 partial = partial
|
bsw/jbe@4
|
317 }
|
bsw/jbe@4
|
318 end
|
bsw/jbe@4
|
319 end
|
bsw/jbe@4
|
320 end
|
bsw/jbe@4
|
321 },
|
bsw/jbe@4
|
322 {
|
bsw/jbe@4
|
323 content = function(record)
|
bsw/jbe@4
|
324 local opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw/jbe@4
|
325 if opinion then
|
bsw/jbe@4
|
326 if (opinion.fulfilled and opinion.degree > 0) or (not opinion.fulfilled and opinion.degree < 0) then
|
bsw/jbe@4
|
327 ui.image{ static = "icons/16/thumb_up_green.png" }
|
bsw/jbe@4
|
328 else
|
bsw/jbe@4
|
329 ui.image{ static = "icons/16/thumb_down_red.png" }
|
bsw/jbe@4
|
330 end
|
bsw/jbe@4
|
331 end
|
bsw/jbe@4
|
332 end
|
bsw/jbe@4
|
333 },
|
bsw/jbe@4
|
334 }
|
bsw/jbe@4
|
335 }
|
bsw/jbe@4
|
336 end
|
bsw/jbe@0
|
337 }
|
bsw/jbe@0
|
338 end
|
bsw/jbe@0
|
339 }
|