rev |
line source |
jbe/bsw@14
|
1 --[[--
|
jbe/bsw@14
|
2 ui.filters{
|
jbe/bsw@14
|
3 selector = selector, -- selector to be modified
|
jbe/bsw@14
|
4 label = label, -- text to be displayed when filters are collapsed
|
jbe/bsw@14
|
5 {
|
jbe/bsw@14
|
6 name = name1, -- name of first filter (used as GET param)
|
jbe/bsw@14
|
7 label = label1, -- label of first filter
|
jbe/bsw@14
|
8 {
|
jbe/bsw@14
|
9 name = name1a, -- name of first option of first filter
|
jbe/bsw@14
|
10 label = label1a, -- label of first option of first filter
|
jbe/bsw@14
|
11 selector_modifier = function(selector)
|
jbe/bsw@14
|
12 ...
|
jbe/bsw@14
|
13 end
|
jbe/bsw@14
|
14 },
|
jbe/bsw@14
|
15 {
|
jbe/bsw@14
|
16 name = name1b, -- name of second option of first filter
|
jbe/bsw@14
|
17 label = label1b, -- label of second option of first filter
|
jbe/bsw@14
|
18 selector_modifier = function(selector)
|
jbe/bsw@14
|
19 ...
|
jbe/bsw@14
|
20 end
|
jbe/bsw@14
|
21 },
|
jbe/bsw@14
|
22 ...
|
jbe/bsw@14
|
23 },
|
jbe/bsw@14
|
24 {
|
jbe/bsw@14
|
25 name = name2, -- name of second filter (used as GET param)
|
jbe/bsw@14
|
26 label = label2, -- label of second filter
|
jbe/bsw@14
|
27 {
|
jbe/bsw@14
|
28 ...
|
jbe/bsw@14
|
29 }, {
|
jbe/bsw@14
|
30 ...
|
jbe/bsw@14
|
31 },
|
jbe/bsw@14
|
32 ...
|
jbe/bsw@14
|
33 },
|
jbe/bsw@14
|
34 ...
|
jbe/bsw@14
|
35 content = function()
|
jbe/bsw@14
|
36 ... -- inner code where filter is to be applied
|
jbe/bsw@14
|
37 end
|
jbe/bsw@14
|
38 }
|
jbe/bsw@14
|
39
|
jbe/bsw@14
|
40 --]]--
|
jbe/bsw@14
|
41
|
jbe/bsw@14
|
42 function ui.filters(args)
|
jbe/bsw@14
|
43 local el_id = ui.create_unique_id()
|
jbe/bsw@14
|
44 ui.container{
|
jbe/bsw@14
|
45 attr = { class = "ui_filter" },
|
jbe/bsw@14
|
46 content = function()
|
jbe/bsw@14
|
47 ui.container{
|
jbe/bsw@14
|
48 attr = {
|
jbe/bsw@14
|
49 class = "ui_filter_closed_head"
|
jbe/bsw@14
|
50 },
|
jbe/bsw@14
|
51 content = function()
|
jbe/bsw@14
|
52 ui.tag{
|
jbe/bsw@14
|
53 tag = "span",
|
jbe/bsw@14
|
54 content = function()
|
jbe/bsw@14
|
55 local current_options = {}
|
jbe/bsw@14
|
56 for idx, filter in ipairs(args) do
|
jbe/bsw@14
|
57 local filter_name = filter.name or "filter"
|
jbe@223
|
58 local current_option = atom.string:load(request.get_param{name=filter_name})
|
jbe/bsw@14
|
59 if not current_option then
|
jbe/bsw@14
|
60 current_option = param.get(filter_name)
|
jbe/bsw@14
|
61 end
|
jbe/bsw@14
|
62 if not current_option or #current_option == 0 then
|
jbe/bsw@14
|
63 current_option = filter[1].name
|
jbe/bsw@14
|
64 end
|
jbe/bsw@14
|
65 for idx, option in ipairs(filter) do
|
jbe/bsw@14
|
66 if current_option == option.name then
|
jbe/bsw@14
|
67 current_options[#current_options+1] = encode.html(filter.label) .. ": " .. encode.html(option.label)
|
jbe/bsw@14
|
68 end
|
jbe/bsw@14
|
69 end
|
jbe/bsw@14
|
70 end
|
jbe/bsw@14
|
71 slot.put(table.concat(current_options, "; "))
|
jbe/bsw@14
|
72 end
|
jbe/bsw@14
|
73 }
|
jbe/bsw@14
|
74 slot.put(" (")
|
jbe/bsw@14
|
75 ui.link{
|
jbe/bsw@14
|
76 attr = {
|
jbe/bsw@14
|
77 onclick = "this.parentNode.style.display='none'; document.getElementById('" .. el_id .. "_head').style.display='block'; return(false);"
|
jbe/bsw@14
|
78 },
|
jbe/bsw@14
|
79 text = args.label,
|
jbe/bsw@14
|
80 external = "#"
|
jbe/bsw@14
|
81 }
|
jbe/bsw@14
|
82 slot.put(")")
|
jbe/bsw@14
|
83 end
|
jbe/bsw@14
|
84 }
|
jbe/bsw@14
|
85 ui.container{
|
jbe/bsw@14
|
86 attr = {
|
jbe/bsw@14
|
87 id = el_id .. "_head",
|
jbe/bsw@14
|
88 style = "display: none;"
|
jbe/bsw@14
|
89 },
|
jbe/bsw@14
|
90 content = function()
|
jbe/bsw@14
|
91 for idx, filter in ipairs(args) do
|
jbe/bsw@14
|
92 local filter_name = filter.name or "filter"
|
jbe@223
|
93 local current_option = atom.string:load(request.get_param{name=filter_name})
|
jbe/bsw@14
|
94 if not current_option then
|
jbe/bsw@14
|
95 current_option = param.get(filter_name)
|
jbe/bsw@14
|
96 end
|
jbe/bsw@14
|
97 if not current_option or #current_option == 0 then
|
jbe/bsw@14
|
98 current_option = filter[1].name
|
jbe/bsw@14
|
99 end
|
jbe@92
|
100 local id = request.get_id_string()
|
jbe@92
|
101 local params = request.get_param_strings()
|
jbe/bsw@14
|
102 ui.container{
|
jbe/bsw@14
|
103 attr = { class = "ui_filter_head" },
|
jbe/bsw@14
|
104 content = function()
|
jbe/bsw@14
|
105 slot.put(filter.label or "Filter", ": ")
|
jbe/bsw@14
|
106 for idx, option in ipairs(filter) do
|
jbe/bsw@14
|
107 params[filter_name] = option.name
|
jbe/bsw@14
|
108 local attr = {}
|
jbe/bsw@14
|
109 if current_option == option.name then
|
jbe/bsw@14
|
110 attr.class = "active"
|
jbe/bsw@14
|
111 option.selector_modifier(args.selector)
|
jbe/bsw@14
|
112 end
|
jbe/bsw@14
|
113 ui.link{
|
jbe/bsw@14
|
114 attr = attr,
|
jbe/bsw@14
|
115 module = request.get_module(),
|
jbe/bsw@14
|
116 view = request.get_view(),
|
jbe/bsw@14
|
117 id = id,
|
jbe/bsw@14
|
118 params = params,
|
jbe@223
|
119 text = option.label
|
jbe/bsw@14
|
120 }
|
jbe/bsw@14
|
121 end
|
jbe/bsw@14
|
122 end
|
jbe/bsw@14
|
123 }
|
jbe/bsw@14
|
124 end
|
jbe/bsw@14
|
125 end
|
jbe/bsw@14
|
126 }
|
jbe/bsw@14
|
127 end
|
jbe/bsw@14
|
128 }
|
jbe/bsw@14
|
129 ui.container{
|
jbe/bsw@14
|
130 attr = { class = "ui_filter_content" },
|
jbe/bsw@14
|
131 content = function()
|
jbe/bsw@14
|
132 args.content()
|
jbe/bsw@14
|
133 end
|
jbe/bsw@14
|
134 }
|
jbe/bsw@14
|
135 end
|