webmcp
annotate framework/env/ui/filters.lua @ 14:a29c8ffb3f82
New function ui.filters{...}
Also changed version information to "1.0.8"
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 |