liquid_feedback_frontend

annotate env/ui/tabs.lua @ 291:71eed60f6a41

Closed branch of experimental frontend
author jbe
date Sat Feb 25 15:56:55 2012 +0100 (2012-02-25)
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

Impressum / About Us