liquid_feedback_frontend
annotate env/ui/tabs.lua @ 157:24e47baf5f9b
strip html from fallback title
if the slot is used for title, make sure the html is stripped from it
if the slot is used for title, make sure the html is stripped from it
author | Daniel Poelzleithner <poelzi@poelzi.org> |
---|---|
date | Fri Oct 08 20:31:09 2010 +0200 (2010-10-08) |
parents | 7d0f4721d2f3 |
children | fecd4c13054a |
rev | line source |
---|---|
bsw/jbe@19 | 1 if config.user_tab_mode == "accordeon" or config.user_tab_mode == "accordeon_first_expanded" or config.user_tab_mode == "accordeon_all_expanded" then |
bsw/jbe@19 | 2 |
bsw/jbe@19 | 3 function ui.tabs(tabs) |
bsw/jbe@19 | 4 local params = param.get_all_cgi() |
bsw/jbe@19 | 5 local current_tabs_string = params["tab"] |
bsw/jbe@19 | 6 local current_tabs = {} |
bsw/jbe@19 | 7 if current_tabs_string then |
bsw/jbe@19 | 8 for current_tab in current_tabs_string:gmatch("([^%|]+)") do |
bsw/jbe@19 | 9 current_tabs[current_tab] = current_tab |
bsw/jbe@19 | 10 end |
bsw/jbe@19 | 11 end |
bsw/jbe@19 | 12 |
bsw/jbe@19 | 13 local unique_string = param.get("tab_id") or multirand.string(16, '0123456789abcdef') |
bsw/jbe@19 | 14 |
bsw/jbe@19 | 15 function render_tab(tab, first) |
bsw/jbe@0 | 16 local params = param.get_all_cgi() |
bsw/jbe@19 | 17 local active = false |
bsw/jbe@19 | 18 for current_tab in pairs(current_tabs) do |
bsw/jbe@19 | 19 if tab.name == current_tab then |
bsw/jbe@19 | 20 active = true |
bsw/jbe@19 | 21 end |
bsw/jbe@19 | 22 end |
bsw/jbe@19 | 23 if config.user_tab_mode == "accordeon_first_expanded" then |
bsw/jbe@19 | 24 if first and current_tabs_string == nil then |
bsw/jbe@19 | 25 active = true |
bsw/jbe@19 | 26 end |
bsw/jbe@19 | 27 end |
jorges@102 | 28 |
jorges@103 | 29 if active and not first then |
jorges@103 | 30 app.html_title.prefix = tab.label |
jorges@103 | 31 end |
jorges@103 | 32 |
bsw/jbe@19 | 33 local link_tabs = {} |
bsw/jbe@19 | 34 if config.user_tab_mode == "accordeon" |
bsw/jbe@19 | 35 or config.user_tab_mode == "accordeon_first_expanded" |
bsw/jbe@19 | 36 or config.user_tab_mode == "accordeon_all_expanded" and current_tabs_string |
bsw/jbe@19 | 37 then |
bsw/jbe@19 | 38 if not current_tabs_string and not first then |
bsw/jbe@19 | 39 link_tabs[tabs[1].name] = true |
bsw/jbe@19 | 40 end |
bsw/jbe@19 | 41 for current_tab in pairs(current_tabs) do |
bsw/jbe@19 | 42 if current_tab ~= tab.name then |
bsw/jbe@19 | 43 link_tabs[current_tab] = true |
bsw/jbe@19 | 44 end |
bsw/jbe@19 | 45 end |
bsw/jbe@19 | 46 elseif config.user_tab_mode == "accordeon_all_expanded" and not current_tabs_string then |
bsw/jbe@19 | 47 for i, current_tab in ipairs(tabs) do |
bsw/jbe@19 | 48 if current_tab.name ~= tab.name then |
bsw/jbe@19 | 49 link_tabs[current_tab.name] = true |
bsw/jbe@19 | 50 end |
bsw/jbe@19 | 51 end |
bsw/jbe@19 | 52 end |
bsw/jbe@19 | 53 if not active then |
bsw/jbe@19 | 54 link_tabs[tab.name] = true |
bsw/jbe@19 | 55 end |
jorges@102 | 56 |
jorges@102 | 57 params["tab"] = tab.name |
bsw/jbe@19 | 58 local onclick |
bsw/jbe@19 | 59 if not tab.content then |
bsw/jbe@19 | 60 onclick = |
bsw/jbe@19 | 61 'if (ui_tabs_active["' .. unique_string .. '"]["' .. tab.name .. '"]) {' .. |
bsw/jbe@19 | 62 'el=document.getElementById("tab' .. unique_string .. '_content_' .. tab.name .. '");' .. |
bsw/jbe@19 | 63 'el.innerHTML="";' .. |
bsw/jbe@19 | 64 'el.style.display="none";' .. |
bsw/jbe@19 | 65 'ui_tabs_active["' .. unique_string .. '"]["' .. tab.name .. '"]=false' .. |
bsw/jbe@19 | 66 '} else {' .. |
bsw/jbe@19 | 67 'ui_tabs_active["' .. unique_string .. '"]["' .. tab.name .. '"]=true;' .. |
bsw/jbe@19 | 68 'document.getElementById("tab' .. unique_string .. '_content_' .. tab.name .. '").style.display="block"; ' .. |
bsw/jbe@19 | 69 ui._partial_load_js{ |
bsw/jbe@19 | 70 params = { tab = tab.name } |
bsw/jbe@19 | 71 } .. |
bsw/jbe@19 | 72 '};' .. |
bsw/jbe@19 | 73 'return(false);' |
bsw/jbe@19 | 74 end |
bsw/jbe@19 | 75 ui.link{ |
bsw/jbe@19 | 76 attr = { |
bsw/jbe@19 | 77 name = "tab_" .. tab.name, |
bsw/jbe@19 | 78 class = ( |
bsw@57 | 79 tab.name == current_tab and "ui_tabs_accordeon_head selected" .. (tab.class and (" " .. tab.class) or "") or |
bsw@57 | 80 not current_tab and i == 1 and "ui_tabs_accordeon_head selected" .. (tab.class and (" " .. tab.class) or "") or |
bsw@57 | 81 "ui_tabs_accordeon_head" .. (tab.class and (" " .. tab.class) or "") |
bsw/jbe@19 | 82 ), |
bsw/jbe@19 | 83 id = "tab" .. unique_string .. "_head_" .. tab.name, |
bsw/jbe@19 | 84 onclick = onclick, |
bsw/jbe@19 | 85 }, |
bsw/jbe@19 | 86 module = request.get_module(), |
bsw/jbe@19 | 87 view = request.get_view(), |
bsw/jbe@19 | 88 id = param.get_id_cgi(), |
bsw/jbe@19 | 89 params = params, |
bsw/jbe@19 | 90 anchor = "tab" .. unique_string .. "_" .. tab.name, |
bsw/jbe@0 | 91 content = function() |
bsw/jbe@19 | 92 if tab.icon then |
bsw/jbe@19 | 93 if not tab.icon.attr then |
bsw/jbe@19 | 94 tab.icon.attr = {} |
bsw/jbe@19 | 95 end |
bsw/jbe@19 | 96 tab.icon.attr.id = "tab" .. unique_string .. "_icon_" .. tab.name |
bsw/jbe@19 | 97 tab.icon.attr.width = 16 |
bsw/jbe@19 | 98 tab.icon.attr.height = 16 |
bsw/jbe@19 | 99 ui.image(tab.icon) |
bsw/jbe@19 | 100 end |
bsw/jbe@19 | 101 slot.put(tab.label) |
bsw/jbe@19 | 102 end |
bsw/jbe@19 | 103 } |
bsw/jbe@19 | 104 local expanded = active or not request.get_json_request_slots() and config.user_tab_mode == "accordeon_all_expanded" and not current_tabs_string |
bsw/jbe@19 | 105 ui.container{ |
bsw/jbe@19 | 106 attr = { |
bsw@57 | 107 class = "ui_tabs_accordeon_content" .. (tab.class and (" " .. tab.class) or ""), |
bsw/jbe@19 | 108 style = not expanded and "display: none;" or nil, |
bsw/jbe@19 | 109 id = "tab" .. unique_string .. "_content_" .. tab.name |
bsw/jbe@19 | 110 }, |
bsw/jbe@19 | 111 content = function() |
bsw/jbe@19 | 112 if expanded then |
bsw/jbe@19 | 113 ui.script{ script = 'ui_tabs_active["' .. unique_string .. '"]["' .. tab.name .. '"] = true;' } |
bsw/jbe@19 | 114 execute.view{ |
bsw/jbe@19 | 115 module = tab.module, |
bsw/jbe@19 | 116 view = tab.view, |
bsw/jbe@19 | 117 id = tab.id, |
bsw/jbe@19 | 118 params = tab.params |
bsw/jbe@0 | 119 } |
bsw/jbe@19 | 120 else |
bsw/jbe@19 | 121 slot.put(" ") |
bsw/jbe@0 | 122 end |
bsw/jbe@0 | 123 end |
bsw/jbe@0 | 124 } |
bsw/jbe@19 | 125 end |
bsw/jbe@19 | 126 |
bsw/jbe@19 | 127 if not request.get_json_request_slots() or not current_tabs_string then |
bsw/jbe@19 | 128 ui.script{ script = "ui_tabs_active['" .. unique_string .. "'] = {};" } |
bsw/jbe@19 | 129 ui.container{ |
bsw/jbe@19 | 130 attr = { class = "ui_tabs" }, |
bsw/jbe@19 | 131 content = function() |
bsw/jbe@19 | 132 for i, tab in ipairs(tabs) do |
bsw/jbe@19 | 133 local static_params = tabs.static_params or {} |
bsw/jbe@19 | 134 static_params.tab = tab.name |
bsw/jbe@19 | 135 static_params.tab_id = unique_string |
bsw/jbe@19 | 136 ui.partial{ |
bsw/jbe@19 | 137 module = tabs.module, |
bsw/jbe@19 | 138 view = tabs.view, |
bsw/jbe@19 | 139 id = tabs.id, |
bsw/jbe@19 | 140 params = static_params, |
bsw/jbe@19 | 141 param_names = { "page" }, |
bsw/jbe@19 | 142 hourglass_target = "tab" .. unique_string .. "_icon_" .. tab.name, |
bsw/jbe@19 | 143 target = "tab" .. unique_string .. "_content_" .. tab.name, |
bsw/jbe@19 | 144 content = function() |
bsw/jbe@19 | 145 render_tab(tab, i == 1) |
bsw/jbe@19 | 146 end |
bsw/jbe@19 | 147 } |
bsw/jbe@19 | 148 end |
bsw/jbe@19 | 149 end |
bsw/jbe@19 | 150 } |
bsw/jbe@19 | 151 else |
bsw/jbe@19 | 152 local dyntab |
bsw/jbe@0 | 153 for i, tab in ipairs(tabs) do |
bsw/jbe@19 | 154 if tab.name == current_tabs_string then |
bsw/jbe@19 | 155 dyntab = tab |
bsw/jbe@0 | 156 end |
bsw/jbe@0 | 157 end |
bsw/jbe@19 | 158 if dyntab then |
bsw/jbe@19 | 159 local static_params = tabs.static_params or {} |
bsw/jbe@19 | 160 static_params.tab = dyntab.name |
bsw/jbe@19 | 161 static_params.tab_id = unique_string |
bsw/jbe@19 | 162 dyntab.params.tab_id = unique_string |
bsw/jbe@19 | 163 ui.partial{ |
bsw/jbe@19 | 164 module = tabs.module, |
bsw/jbe@19 | 165 view = tabs.view, |
bsw/jbe@19 | 166 id = tabs.id, |
bsw/jbe@19 | 167 params = static_params, |
bsw/jbe@19 | 168 param_names = { "page" }, |
bsw/jbe@19 | 169 hourglass_target = "tab" .. unique_string .. "_icon_" .. dyntab.name, |
bsw/jbe@19 | 170 target = "tab" .. unique_string .. "_content_" .. dyntab.name, |
bsw/jbe@19 | 171 content = function() |
bsw/jbe@19 | 172 execute.view{ |
bsw/jbe@19 | 173 module = dyntab.module, |
bsw/jbe@19 | 174 view = dyntab.view, |
bsw/jbe@19 | 175 id = dyntab.id, |
bsw/jbe@19 | 176 params = dyntab.params, |
bsw/jbe@19 | 177 } |
bsw/jbe@19 | 178 end |
bsw/jbe@19 | 179 } |
bsw/jbe@19 | 180 end |
bsw/jbe@0 | 181 end |
bsw/jbe@19 | 182 end |
bsw/jbe@19 | 183 |
bsw/jbe@19 | 184 else -- 'classic tab' |
bsw/jbe@0 | 185 |
bsw/jbe@19 | 186 function ui.tabs(tabs) |
bsw/jbe@19 | 187 ui.container{ |
bsw/jbe@19 | 188 attr = { class = "ui_tabs" }, |
bsw/jbe@19 | 189 content = function() |
bsw/jbe@19 | 190 local params = param.get_all_cgi() |
bsw/jbe@19 | 191 local current_tab = params["tab"] |
bsw/jbe@19 | 192 ui.container{ |
bsw/jbe@19 | 193 attr = { class = "ui_tabs_links" }, |
bsw/jbe@19 | 194 content = function() |
bsw/jbe@19 | 195 for i, tab in ipairs(tabs) do |
bsw/jbe@19 | 196 params["tab"] = i > 1 and tab.name or nil |
bsw/jbe@19 | 197 ui.link{ |
bsw/jbe@19 | 198 attr = { |
bsw/jbe@19 | 199 class = ( |
bsw@57 | 200 tab.name == current_tab and "selected" .. (tab.class and (" " .. tab.class) or "") or |
bsw@57 | 201 not current_tab and i == 1 and "selected" .. (tab.class and (" " .. tab.class) or "") or |
bsw@57 | 202 "" .. (tab.class and (" " .. tab.class) or "") |
bsw/jbe@19 | 203 ) |
bsw/jbe@19 | 204 }, |
bsw/jbe@19 | 205 module = request.get_module(), |
bsw/jbe@19 | 206 view = request.get_view(), |
bsw/jbe@19 | 207 id = param.get_id_cgi(), |
bsw/jbe@19 | 208 content = tab.label, |
bsw/jbe@19 | 209 params = params |
bsw/jbe@19 | 210 } |
bsw/jbe@19 | 211 slot.put(" ") |
bsw/jbe@19 | 212 end |
bsw/jbe@19 | 213 end |
bsw/jbe@19 | 214 } |
bsw/jbe@19 | 215 for i, tab in ipairs(tabs) do |
jorges@103 | 216 if tab.name == current_tab and i > 1 then |
jorges@103 | 217 app.html_title.prefix = tab.label |
jorges@103 | 218 end |
bsw/jbe@19 | 219 if tab.name == current_tab or not current_tab and i == 1 then |
bsw/jbe@19 | 220 ui.container{ |
bsw/jbe@19 | 221 attr = { class = "ui_tabs_content" }, |
bsw/jbe@19 | 222 content = function() |
bsw/jbe@19 | 223 if tab.content then |
bsw/jbe@19 | 224 tab.content() |
bsw/jbe@19 | 225 else |
bsw/jbe@19 | 226 execute.view{ |
bsw/jbe@19 | 227 module = tab.module, |
bsw/jbe@19 | 228 view = tab.view, |
bsw/jbe@19 | 229 id = tab.id, |
bsw/jbe@19 | 230 params = tab.params, |
bsw/jbe@19 | 231 } |
bsw/jbe@19 | 232 end |
bsw/jbe@19 | 233 end |
bsw/jbe@19 | 234 } |
bsw/jbe@19 | 235 end |
bsw/jbe@19 | 236 end |
bsw/jbe@19 | 237 end |
bsw/jbe@19 | 238 } |
bsw/jbe@19 | 239 end |
bsw/jbe@19 | 240 |
jorges@102 | 241 end |