webmcp

annotate framework/env/ui/filters.lua @ 14:a29c8ffb3f82

New function ui.filters{...}

Also changed version information to "1.0.8"
author jbe/bsw
date Sat Feb 20 21:00:58 2010 +0100 (2010-02-20)
parents
children 2f8d8edd1836
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/bsw@14 58 local current_option = atom.string:load(cgi.params[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/bsw@14 93 local current_option = atom.string:load(cgi.params[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/bsw@14 100 local id = param.get_id_cgi()
jbe/bsw@14 101 local params = param.get_all_cgi()
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/bsw@14 119 text = option.label,
jbe/bsw@14 120 partial = {
jbe/bsw@14 121 params = {
jbe/bsw@14 122 [filter_name] = option.name
jbe/bsw@14 123 }
jbe/bsw@14 124 }
jbe/bsw@14 125 }
jbe/bsw@14 126 end
jbe/bsw@14 127 end
jbe/bsw@14 128 }
jbe/bsw@14 129 end
jbe/bsw@14 130 end
jbe/bsw@14 131 }
jbe/bsw@14 132 end
jbe/bsw@14 133 }
jbe/bsw@14 134 ui.container{
jbe/bsw@14 135 attr = { class = "ui_filter_content" },
jbe/bsw@14 136 content = function()
jbe/bsw@14 137 args.content()
jbe/bsw@14 138 end
jbe/bsw@14 139 }
jbe/bsw@14 140 end

Impressum / About Us