CBI: Cancelaction and event callbacks for Delegators

LuCId: Send Keep-Alive headers to avoid browser quirks
This commit is contained in:
Steven Barth 2009-10-26 17:40:44 +00:00
parent c47765a611
commit 36e18e87ef
3 changed files with 25 additions and 3 deletions

View file

@ -506,6 +506,7 @@ function Delegator.__init__(self, ...)
self.pageaction = false
self.readinput = true
self.allow_reset = false
self.allow_cancel = false
self.allow_back = false
self.allow_finish = false
self.template = "cbi/delegator"
@ -559,6 +560,17 @@ function Delegator.get(self, name)
end
function Delegator.parse(self, ...)
if self.allow_cancel and Map.formvalue(self, "cbi.cancel") then
if self.on_cancel then
self:on_cancel()
return FORM_DONE
end
end
if self.on_init and not Map.formvalue(self, "cbi.delg.current") then
self:on_init()
end
local newcurrent
self.chain = self.chain or self:get_chain()
self.current = self.current or self:get_active()
@ -587,6 +599,9 @@ function Delegator.parse(self, ...)
if not Map.formvalue(self, "cbi.submit") then
return FORM_NODATA
elseif not newcurrent or not self:get(newcurrent) then
if self.on_done then
self:on_done()
end
return FORM_DONE
else
self.current = newcurrent

View file

@ -23,6 +23,9 @@ $Id$
<% if self.allow_reset then %>
<input class="cbi-button cbi-button-reset" type="reset" value="<%:reset%>" />
<% end %>
<% if self.allow_cancel then %>
<input class="cbi-button cbi-button-cancel" type="submit" name="cbi.cancel" value="<%:cancel%>" />
<% end %>
<% if self.allow_finish and not self:get_next(self.current) then %>
<input class="cbi-button cbi-button-finish" type="submit" value="<%:cbi_finish Finish%>" />
<% elseif self:get_next(self.current) then %>

View file

@ -419,8 +419,8 @@ function Server.process(self, client, env)
set_memory_limit(env.config.memlimit)
end
client:setsockopt("socket", "rcvtimeo", 60)
client:setsockopt("socket", "sndtimeo", 60)
client:setsockopt("socket", "rcvtimeo", 5)
client:setsockopt("socket", "sndtimeo", 5)
repeat
-- parse headers
@ -531,7 +531,11 @@ function Server.process(self, client, env)
headers["Connection"] = "close"
elseif message.env.SERVER_PROTOCOL == "HTTP/1.0" then
headers["Connection"] = "Keep-Alive"
end
end
if not close then
headers["Keep-Alive"] = "timeout=5, max=50"
end
headers["Date"] = date.to_http(os.time())
local header = {