liquid_feedback_frontend

annotate env/ui/tabs.lua @ 111:bf885faf3452

add initiator support in delegation

if a delegation is issued from the initiative view, the initiators
from that one are added to the delegation target list. this makes it easier to delegate to the author without the need to add him to the contact list.
author Daniel Poelzleithner <poelzi@poelzi.org>
date Mon Sep 20 20:32:04 2010 +0200 (2010-09-20)
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("&nbsp;")
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