bsw@295: function ui.filters(args) bsw@295: local el_id = ui.create_unique_id() bsw@295: ui.container{ bsw@295: attr = { class = "ui_filter" }, bsw@295: content = function() bsw@852: for idx, filter in ipairs(args) do bsw@852: local filter_name = filter.name or "filter" bsw@1145: local current_option = atom.string:load(request.get_param{ name = filter_name }) bsw@852: if not current_option then bsw@852: current_option = param.get(filter_name) bsw@852: end bsw@852: local current_option_valid = false bsw@852: for idx, option in ipairs(filter) do bsw@852: if current_option == option.name then bsw@852: current_option_valid = true bsw@295: end bsw@295: end bsw@852: if not current_option or #current_option == 0 or not current_option_valid then bsw@852: current_option = filter[1].name bsw@852: end bsw@1145: local id = request.get_id_string() bsw@1145: local params = request.get_param_strings() bsw@1045: local class = "ui_filter_head" bsw@1045: if filter.class then bsw@1045: class = class .. " " .. filter.class bsw@1045: end bsw@852: ui.container{ bsw@1045: attr = { class = class }, bsw@852: content = function() bsw@852: slot.put(filter.label) bsw@852: for idx, option in ipairs(filter) do bsw@852: params[filter_name] = option.name bsw@852: local attr = {} bsw@852: if current_option == option.name then bsw@852: attr.class = "active" bsw@852: option.selector_modifier(args.selector) bsw@852: end bsw@852: if idx > 1 then bsw@852: slot.put(" ") bsw@852: end bsw@852: ui.link{ bsw@852: attr = attr, bsw@852: module = request.get_module(), bsw@852: view = request.get_view(), bsw@852: id = id, bsw@852: params = params, bsw@852: text = option.label, bsw@852: partial = { bsw@852: params = { bsw@852: [filter_name] = option.name bsw@852: } bsw@852: } bsw@852: } bsw@295: end bsw@295: end bsw@852: } bsw@852: end bsw@295: end bsw@295: } bsw@295: ui.container{ bsw@295: attr = { class = "ui_filter_content" }, bsw@295: content = function() bsw@295: args.content() bsw@295: end bsw@295: } bsw@295: end