diff options
author | Steven Barth <steven@midlink.org> | 2009-10-26 17:40:44 +0000 |
---|---|---|
committer | Steven Barth <steven@midlink.org> | 2009-10-26 17:40:44 +0000 |
commit | 36e18e87ef0f9fc81124c9e0ee46127ee755af19 (patch) | |
tree | 73ca95b681e15ecb22460c602b446f9a1b6e8589 | |
parent | c47765a6118b2a6eb0d74b95f5cb4abda23fe6db (diff) |
CBI: Cancelaction and event callbacks for Delegators
LuCId: Send Keep-Alive headers to avoid browser quirks
-rw-r--r-- | libs/cbi/luasrc/cbi.lua | 15 | ||||
-rw-r--r-- | libs/cbi/luasrc/view/cbi/delegator.htm | 3 | ||||
-rw-r--r-- | libs/lucid-http/luasrc/lucid/http/server.lua | 10 |
3 files changed, 25 insertions, 3 deletions
diff --git a/libs/cbi/luasrc/cbi.lua b/libs/cbi/luasrc/cbi.lua index 1b22db0a8a..13aad8d9ec 100644 --- a/libs/cbi/luasrc/cbi.lua +++ b/libs/cbi/luasrc/cbi.lua @@ -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 diff --git a/libs/cbi/luasrc/view/cbi/delegator.htm b/libs/cbi/luasrc/view/cbi/delegator.htm index 95fd270f8b..f2c87b460b 100644 --- a/libs/cbi/luasrc/view/cbi/delegator.htm +++ b/libs/cbi/luasrc/view/cbi/delegator.htm @@ -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 %> diff --git a/libs/lucid-http/luasrc/lucid/http/server.lua b/libs/lucid-http/luasrc/lucid/http/server.lua index 450417995d..284c6a03ed 100644 --- a/libs/lucid-http/luasrc/lucid/http/server.lua +++ b/libs/lucid-http/luasrc/lucid/http/server.lua @@ -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 = { |