libs/web: combine apply actions of all maps on a page, prevents concurrent XHR
This commit is contained in:
parent
cf6bda5c96
commit
9c3db58ee4
3 changed files with 34 additions and 16 deletions
|
@ -322,10 +322,10 @@ function Map.parse(self, readinput, ...)
|
|||
self.uci:apply(self.parsechain)
|
||||
self:_run_hooks("on_apply", "on_after_apply")
|
||||
else
|
||||
self._apply = function()
|
||||
local cmd = self.uci:apply(self.parsechain, true)
|
||||
return io.popen(cmd)
|
||||
end
|
||||
-- This is evaluated by the dispatcher and delegated to the
|
||||
-- template which in turn fires XHR to perform the actual
|
||||
-- apply actions.
|
||||
self.apply_needed = true
|
||||
end
|
||||
|
||||
-- Reparse sections
|
||||
|
@ -358,12 +358,6 @@ end
|
|||
function Map.render(self, ...)
|
||||
self:_run_hooks("on_init")
|
||||
Node.render(self, ...)
|
||||
if false and self._apply then
|
||||
local fp = self._apply()
|
||||
fp:read("*a")
|
||||
fp:close()
|
||||
self:_run_hooks("on_apply")
|
||||
end
|
||||
end
|
||||
|
||||
-- Creates a child section
|
||||
|
|
|
@ -718,21 +718,45 @@ local function _cbi(self, ...)
|
|||
end
|
||||
end
|
||||
|
||||
local redirect
|
||||
local pageaction = true
|
||||
http.header("X-CBI-State", state or 0)
|
||||
|
||||
if not config.noheader then
|
||||
tpl.render("cbi/header", {state = state})
|
||||
end
|
||||
|
||||
local redirect
|
||||
local applymap = false
|
||||
local pageaction = true
|
||||
local parsechain = { }
|
||||
|
||||
for i, res in ipairs(maps) do
|
||||
res:render()
|
||||
if res.pageaction == false then
|
||||
pageaction = false
|
||||
if res.apply_needed and res.parsechain then
|
||||
local c
|
||||
for _, c in ipairs(res.parsechain) do
|
||||
parsechain[#parsechain+1] = c
|
||||
end
|
||||
applymap = true
|
||||
end
|
||||
|
||||
if res.redirect then
|
||||
redirect = redirect or res.redirect
|
||||
end
|
||||
|
||||
if res.pageaction == false then
|
||||
pageaction = false
|
||||
end
|
||||
end
|
||||
|
||||
for i, res in ipairs(maps) do
|
||||
res:render({
|
||||
firstmap = (i == 1),
|
||||
applymap = applymap,
|
||||
redirect = redirect,
|
||||
pageaction = pageaction,
|
||||
parsechain = parsechain
|
||||
})
|
||||
end
|
||||
|
||||
if not config.nofooter then
|
||||
tpl.render("cbi/footer", {
|
||||
flow = config,
|
||||
|
|
|
@ -18,7 +18,7 @@ $Id$
|
|||
<div class="cbi-map" id="cbi-<%=self.config%>">
|
||||
<% if self.title and #self.title > 0 then %><h2><a id="content" name="content"><%=self.title%></a></h2><% end %>
|
||||
<% if self.description and #self.description > 0 then %><div class="cbi-map-descr"><%=self.description%></div><% end %>
|
||||
<%- if self._apply then cbi_apply_xhr(self.config, self.parsechain, self.redirect) end -%>
|
||||
<%- if firstmap and applymap then cbi_apply_xhr(self.config, parsechain, redirect) end -%>
|
||||
<%- self:render_children() %>
|
||||
<br />
|
||||
</div>
|
||||
|
|
Loading…
Reference in a new issue