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