liquid_feedback_frontend

annotate env/ui/tabs.lua @ 100:90c16be9731a

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

Impressum / About Us