rev |
line source |
bsw/jbe@1309
|
1 local function filters(args)
|
bsw/jbe@1309
|
2
|
bsw@295
|
3 local el_id = ui.create_unique_id()
|
bsw/jbe@1309
|
4 local class = "lf-filter"
|
bsw/jbe@1309
|
5 if args.class then
|
bsw/jbe@1309
|
6 class = class .. " " .. args.class
|
bsw/jbe@1309
|
7 end
|
bsw@1489
|
8 ui.tag{
|
bsw@1489
|
9 tag = "fieldset",
|
bsw/jbe@1309
|
10 attr = { class = { class } },
|
bsw@295
|
11 content = function()
|
bsw@1489
|
12 local legend = args.legend
|
bsw@1489
|
13 if legend then
|
bsw@1489
|
14 ui.tag{ tag = "legend", attr = { style = "display: none;" }, content = legend }
|
bsw@1489
|
15 end
|
bsw@852
|
16 for idx, filter in ipairs(args) do
|
bsw@852
|
17 local filter_name = filter.name or "filter"
|
bsw@1570
|
18 if filter.selector_modifier then
|
bsw@1570
|
19 filter.selector_modifier(args.selector)
|
bsw@1570
|
20 end
|
bsw/jbe@1309
|
21 local current_option_name = atom.string:load(request.get_param{ name = filter_name })
|
bsw/jbe@1309
|
22 if not current_option_name then
|
bsw/jbe@1309
|
23 current_option_name = param.get(filter_name)
|
bsw@852
|
24 end
|
bsw/jbe@1309
|
25 local current_option = filter[1]
|
bsw@852
|
26 for idx, option in ipairs(filter) do
|
bsw/jbe@1309
|
27 if current_option_name == option.name then
|
bsw/jbe@1309
|
28 current_option = option
|
bsw@295
|
29 end
|
bsw@295
|
30 end
|
bsw/jbe@1309
|
31 if not current_option_name or #current_option_name == 0 or not current_option then
|
bsw/jbe@1309
|
32 current_option_name = filter[1].name
|
bsw@852
|
33 end
|
bsw/jbe@1309
|
34 ui.tag{ tag = "button", attr = { id = "filter-" .. filter_name .. "-menu", class = "mdl-button mdl-js-button" }, content = function()
|
bsw/jbe@1309
|
35 ui.tag{ content = current_option.label }
|
bsw/jbe@1309
|
36 slot.put(" ")
|
bsw@1489
|
37 ui.tag{ tag = "i", attr = { class = "material-icons", ["aria-hidden"] = "true" }, content = "arrow_drop_down" }
|
bsw/jbe@1309
|
38 end }
|
bsw@1145
|
39 local id = request.get_id_string()
|
bsw@1145
|
40 local params = request.get_param_strings()
|
bsw/jbe@1309
|
41 local class = "mdl-menu mdl-js-menu mdl-js-ripple-effect"
|
bsw@1045
|
42 if filter.class then
|
bsw@1045
|
43 class = class .. " " .. filter.class
|
bsw@1045
|
44 end
|
bsw/jbe@1309
|
45 ui.tag{
|
bsw/jbe@1309
|
46 tag = "ul",
|
bsw/jbe@1309
|
47 attr = { class = class, ["data-mdl-for"] = "filter-" .. filter_name .. "-menu" },
|
bsw@852
|
48 content = function()
|
bsw@852
|
49 for idx, option in ipairs(filter) do
|
bsw@852
|
50 params[filter_name] = option.name
|
bsw@852
|
51 local attr = {}
|
bsw/jbe@1309
|
52 attr.class = "mdl-menu__link"
|
bsw/jbe@1309
|
53 if current_option_name == option.name then
|
bsw/jbe@1309
|
54 attr.class = attr.class .. " active"
|
bsw@852
|
55 option.selector_modifier(args.selector)
|
bsw@852
|
56 end
|
bsw@852
|
57 if idx > 1 then
|
bsw@852
|
58 slot.put(" ")
|
bsw@852
|
59 end
|
bsw/jbe@1309
|
60 ui.tag{
|
bsw/jbe@1309
|
61 tag = "li",
|
bsw/jbe@1309
|
62 attr = { class = "mdl-menu__item" },
|
bsw/jbe@1309
|
63 content = function()
|
bsw/jbe@1309
|
64 ui.link{
|
bsw/jbe@1309
|
65 attr = attr,
|
bsw/jbe@1309
|
66 module = request.get_module(),
|
bsw/jbe@1309
|
67 view = request.get_view(),
|
bsw/jbe@1309
|
68 id = id,
|
bsw/jbe@1309
|
69 params = params,
|
bsw/jbe@1309
|
70 content = option.label,
|
bsw/jbe@1309
|
71 partial = {
|
bsw/jbe@1309
|
72 params = {
|
bsw/jbe@1309
|
73 [filter_name] = idx > 1 and option.name or nil
|
bsw/jbe@1309
|
74 }
|
bsw/jbe@1309
|
75 }
|
bsw@852
|
76 }
|
bsw/jbe@1309
|
77 end
|
bsw@852
|
78 }
|
bsw@295
|
79 end
|
bsw@295
|
80 end
|
bsw@852
|
81 }
|
bsw@852
|
82 end
|
bsw@295
|
83 end
|
bsw@295
|
84 }
|
bsw/jbe@1309
|
85 end
|
bsw/jbe@1309
|
86
|
bsw/jbe@1309
|
87 function ui.filters(args)
|
bsw/jbe@1309
|
88 if args.slot then
|
bsw/jbe@1309
|
89 slot.select(args.slot, function()
|
bsw/jbe@1309
|
90 filters(args)
|
bsw/jbe@1309
|
91 end)
|
bsw/jbe@1309
|
92 else
|
bsw/jbe@1309
|
93 filters(args)
|
bsw/jbe@1309
|
94 end
|
bsw@295
|
95 ui.container{
|
bsw@295
|
96 attr = { class = "ui_filter_content" },
|
bsw@295
|
97 content = function()
|
bsw@295
|
98 args.content()
|
bsw@295
|
99 end
|
bsw@295
|
100 }
|
bsw@295
|
101 end
|