liquid_feedback_frontend
annotate env/ui/tabs.lua @ 139:bc2570b97c09
fix spelling
fixed bug #330
fixed bug #330
author | Daniel Poelzleithner <poelzi@poelzi.org> |
---|---|
date | Wed Oct 06 13:52:23 2010 +0200 (2010-10-06) |
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 |