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@95
|
87 label = _"Collective opinion of supporters",
|
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@95
|
91 local max_value = record.initiative.supporter_count
|
bsw/jbe@4
|
92 ui.bargraph{
|
bsw/jbe@4
|
93 max_value = max_value,
|
bsw@95
|
94 width = 100,
|
bsw/jbe@4
|
95 bars = {
|
bsw@95
|
96 { color = "#0a0", value = record.plus2_unfulfilled_count + record.plus2_fulfilled_count },
|
bsw@95
|
97 { color = "#8f8", value = record.plus1_unfulfilled_count + record.plus1_fulfilled_count },
|
bsw@95
|
98 { color = "#eee", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.minus2_fulfilled_count - record.minus1_fulfilled_count - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count},
|
bsw/jbe@4
|
99 { color = "#f88", value = record.minus1_unfulfilled_count + record.minus1_fulfilled_count },
|
bsw/jbe@4
|
100 { color = "#a00", value = record.minus2_unfulfilled_count + record.minus2_fulfilled_count },
|
bsw/jbe@4
|
101 }
|
bsw/jbe@4
|
102 }
|
bsw/jbe@4
|
103 end
|
bsw/jbe@4
|
104 end
|
bsw/jbe@4
|
105 },
|
bsw/jbe@4
|
106 {
|
bsw/jbe@4
|
107 label = _"My opinion",
|
bsw@95
|
108 label_attr = { style = "width: 130px; font-style: italic;" },
|
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@95
|
123 if degree == -2 then
|
bsw@95
|
124 ui.tag{
|
bsw@95
|
125 tag = "span",
|
bsw@95
|
126 attr = {
|
bsw@95
|
127 class = "action" .. (degree == -2 and " active_red2" or "")
|
bsw@95
|
128 },
|
bsw@95
|
129 content = _"must not"
|
bsw@95
|
130 }
|
bsw@95
|
131 end
|
bsw@95
|
132 if degree == -1 then
|
bsw@95
|
133 ui.tag{
|
bsw@95
|
134 tag = "span",
|
bsw@95
|
135 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
|
bsw@95
|
136 content = _"should not"
|
bsw@95
|
137 }
|
bsw@95
|
138 end
|
bsw@95
|
139 if degree == nil then
|
bsw@95
|
140 ui.tag{
|
bsw@95
|
141 tag = "span",
|
bsw@95
|
142 attr = { class = "action" .. (degree == nil and " active" or "") },
|
bsw@95
|
143 content = _"neutral"
|
bsw@95
|
144 }
|
bsw@95
|
145 end
|
bsw@95
|
146 if degree == 1 then
|
bsw@95
|
147 ui.tag{
|
bsw@95
|
148 tag = "span",
|
bsw@95
|
149 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
|
bsw@95
|
150 content = _"should"
|
bsw@95
|
151 }
|
bsw@95
|
152 end
|
bsw@95
|
153 if degree == 2 then
|
bsw@95
|
154 ui.tag{
|
bsw@95
|
155 tag = "span",
|
bsw@95
|
156 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
|
bsw@95
|
157 content = _"must"
|
bsw@95
|
158 }
|
bsw@95
|
159 end
|
bsw@51
|
160 else
|
bsw@51
|
161 ui.link{
|
bsw@95
|
162 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
|
bsw@95
|
163 text = _"must",
|
bsw@51
|
164 module = "opinion",
|
bsw@51
|
165 action = "update",
|
bsw@51
|
166 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw@51
|
167 params = {
|
bsw@51
|
168 suggestion_id = record.id,
|
bsw@95
|
169 degree = 2
|
bsw@51
|
170 },
|
bsw@51
|
171 partial = partial
|
bsw@51
|
172 }
|
bsw@51
|
173 slot.put(" ")
|
bsw@51
|
174 ui.link{
|
bsw@51
|
175 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
|
bsw@51
|
176 text = _"should",
|
bsw@51
|
177 module = "opinion",
|
bsw@51
|
178 action = "update",
|
bsw@51
|
179 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw@51
|
180 params = {
|
bsw@51
|
181 suggestion_id = record.id,
|
bsw@51
|
182 degree = 1
|
bsw@51
|
183 },
|
bsw@51
|
184 partial = partial
|
bsw@51
|
185 }
|
bsw@51
|
186 slot.put(" ")
|
bsw@51
|
187 ui.link{
|
bsw@95
|
188 attr = { class = "action" .. (degree == nil and " active" or "") },
|
bsw@95
|
189 text = _"neutral",
|
bsw@51
|
190 module = "opinion",
|
bsw@51
|
191 action = "update",
|
bsw@51
|
192 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw@51
|
193 params = {
|
bsw@51
|
194 suggestion_id = record.id,
|
bsw@95
|
195 delete = true
|
bsw@95
|
196 },
|
bsw@95
|
197 partial = partial
|
bsw@95
|
198 }
|
bsw@95
|
199 slot.put(" ")
|
bsw@95
|
200 ui.link{
|
bsw@95
|
201 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
|
bsw@95
|
202 text = _"should not",
|
bsw@95
|
203 module = "opinion",
|
bsw@95
|
204 action = "update",
|
bsw@95
|
205 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw@95
|
206 params = {
|
bsw@95
|
207 suggestion_id = record.id,
|
bsw@95
|
208 degree = -1
|
bsw@95
|
209 },
|
bsw@95
|
210 partial = partial
|
bsw@95
|
211 }
|
bsw@95
|
212 slot.put(" ")
|
bsw@95
|
213 ui.link{
|
bsw@95
|
214 attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
|
bsw@95
|
215 text = _"must not",
|
bsw@95
|
216 module = "opinion",
|
bsw@95
|
217 action = "update",
|
bsw@95
|
218 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw@95
|
219 params = {
|
bsw@95
|
220 suggestion_id = record.id,
|
bsw@95
|
221 degree = -2
|
bsw@51
|
222 },
|
bsw@51
|
223 partial = partial
|
bsw@51
|
224 }
|
bsw@51
|
225 end
|
bsw/jbe@19
|
226 else
|
bsw@51
|
227 ui.field.text{ value = _"[Registered members only]" }
|
bsw/jbe@19
|
228 end
|
bsw/jbe@5
|
229 end
|
bsw/jbe@0
|
230 }
|
bsw/jbe@0
|
231 end
|
bsw/jbe@4
|
232 },
|
bsw/jbe@4
|
233 {
|
bsw/jbe@4
|
234 label = _"Suggestion currently not implemented",
|
bsw/jbe@4
|
235 label_attr = { style = "width: 101px;" },
|
bsw/jbe@4
|
236 content = function(record)
|
bsw/jbe@4
|
237 if record.minus2_unfulfilled_count then
|
bsw@95
|
238 local max_value = record.initiative.supporter_count
|
bsw/jbe@4
|
239 ui.bargraph{
|
bsw/jbe@4
|
240 max_value = max_value,
|
bsw@95
|
241 width = 100,
|
bsw/jbe@4
|
242 bars = {
|
bsw/jbe@4
|
243 { color = "#0a0", value = record.plus2_unfulfilled_count },
|
bsw/jbe@4
|
244 { color = "#8f8", value = record.plus1_unfulfilled_count },
|
bsw@95
|
245 { color = "#eee", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count },
|
bsw@95
|
246 { color = "#f88", value = record.minus1_unfulfilled_count },
|
bsw@95
|
247 { color = "#a00", value = record.minus2_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 label = _"Suggestion currently implemented",
|
bsw/jbe@4
|
255 label_attr = { style = "width: 101px;" },
|
bsw/jbe@4
|
256 content = function(record)
|
bsw/jbe@4
|
257 if record.minus2_fulfilled_count then
|
bsw@95
|
258 local max_value = record.initiative.supporter_count
|
bsw/jbe@4
|
259 ui.bargraph{
|
bsw/jbe@4
|
260 max_value = max_value,
|
bsw@95
|
261 width = 100,
|
bsw/jbe@4
|
262 bars = {
|
bsw@95
|
263 { color = "#0a0", value = record.plus2_fulfilled_count },
|
bsw@95
|
264 { color = "#8f8", value = record.plus1_fulfilled_count },
|
bsw@95
|
265 { color = "#eee", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count},
|
bsw/jbe@4
|
266 { color = "#f88", value = record.minus1_fulfilled_count },
|
bsw/jbe@4
|
267 { color = "#a00", value = record.minus2_fulfilled_count },
|
bsw/jbe@4
|
268 }
|
bsw/jbe@4
|
269 }
|
bsw/jbe@4
|
270 end
|
bsw@3
|
271 end
|
bsw/jbe@4
|
272 },
|
bsw/jbe@4
|
273 {
|
bsw@95
|
274 label = app.session.member_id and _"I consider suggestion as" or nil,
|
bsw@95
|
275 label_attr = { style = "width: 100px; font-style: italic;" },
|
bsw/jbe@4
|
276 content = function(record)
|
bsw/jbe@4
|
277 local degree
|
bsw@51
|
278 local opinion
|
bsw@51
|
279 if app.session.member_id then
|
bsw@51
|
280 opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw@51
|
281 end
|
bsw/jbe@4
|
282 if opinion then
|
bsw/jbe@4
|
283 degree = opinion.degree
|
bsw/jbe@4
|
284 end
|
bsw/jbe@4
|
285 if opinion then
|
bsw@95
|
286
|
bsw@95
|
287 ui.link{
|
bsw@95
|
288 attr = { class = opinion.fulfilled and "action active" or "action" },
|
bsw@95
|
289 text = _"implemented",
|
bsw@95
|
290 module = "opinion",
|
bsw@95
|
291 action = "update",
|
bsw@95
|
292 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw@95
|
293 params = {
|
bsw@95
|
294 suggestion_id = record.id,
|
bsw@95
|
295 fulfilled = true
|
bsw@95
|
296 },
|
bsw@95
|
297 partial = partial
|
bsw@95
|
298 }
|
bsw@95
|
299 slot.put("<br />")
|
bsw@95
|
300 ui.link{
|
bsw@95
|
301 attr = { class = not opinion.fulfilled and "action active" or "action" },
|
bsw@95
|
302 text = _"not implemented",
|
bsw@95
|
303 module = "opinion",
|
bsw@95
|
304 action = "update",
|
bsw@95
|
305 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw@95
|
306 params = {
|
bsw@95
|
307 suggestion_id = record.id,
|
bsw@95
|
308 fulfilled = false
|
bsw@95
|
309 },
|
bsw@95
|
310 partial = partial
|
bsw@95
|
311 }
|
bsw@95
|
312
|
bsw/jbe@4
|
313 end
|
bsw/jbe@4
|
314 end
|
bsw/jbe@4
|
315 },
|
bsw/jbe@4
|
316 {
|
bsw@95
|
317 label = app.session.member_id and _"So I'm" or nil,
|
bsw/jbe@4
|
318 content = function(record)
|
bsw@51
|
319 local opinion
|
bsw@51
|
320 if app.session.member_id then
|
bsw@51
|
321 opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw@51
|
322 end
|
bsw/jbe@4
|
323 if opinion then
|
bsw/jbe@4
|
324 if (opinion.fulfilled and opinion.degree > 0) or (not opinion.fulfilled and opinion.degree < 0) then
|
bsw@95
|
325 local title = _"satisfied"
|
bsw@95
|
326 ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_happy.png" }
|
bsw@95
|
327 elseif opinion.degree == 1 or opinion.degree == -1 then
|
bsw@95
|
328 local title = _"a bit unsatisfied"
|
bsw@95
|
329 ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_unhappy.png" }
|
bsw/jbe@4
|
330 else
|
bsw@95
|
331 local title = _"more unsatisfied"
|
bsw@95
|
332 ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_unhappy_red.png" }
|
bsw/jbe@4
|
333 end
|
bsw/jbe@4
|
334 end
|
bsw/jbe@4
|
335 end
|
bsw/jbe@4
|
336 },
|
bsw/jbe@4
|
337 }
|
bsw/jbe@4
|
338 }
|
bsw/jbe@4
|
339 end
|
bsw/jbe@0
|
340 }
|
bsw/jbe@0
|
341 end
|
bsw/jbe@0
|
342 }
|