diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua
index 69342de0c..f05358ea0 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua
@@ -2,9 +2,11 @@ local api = require "luci.passwall.api"
local appname = "passwall"
m = Map(appname)
+m.redirect = api.url("acl")
+api.set_apply_on_parse(m)
if not arg[1] or not m:get(arg[1]) then
- luci.http.redirect(api.url("acl"))
+ luci.http.redirect(m.redirect)
end
local fs = api.fs
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua
index e2fda69ea..25cd1705a 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_config.lua
@@ -2,10 +2,11 @@ local api = require "luci.passwall.api"
local appname = "passwall"
m = Map(appname, translate("Node Config"))
-m.redirect = api.url()
+m.redirect = api.url("node_list")
+api.set_apply_on_parse(m)
if not arg[1] or not m:get(arg[1]) then
- luci.http.redirect(api.url("node_list"))
+ luci.http.redirect(m.redirect)
end
s = m:section(NamedSection, arg[1], "nodes", "")
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua
index 79da4f05f..b8d67f393 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe.lua
@@ -144,6 +144,7 @@ s.sortable = true
s.template = "cbi/tblsection"
s.extedit = api.url("node_subscribe_config", "%s")
function s.create(e, t)
+ m.no_commit = true
local id = TypedSection.create(e, t)
luci.http.redirect(e.extedit:format(id))
end
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua
index d620270f3..7e5c05ee5 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_subscribe_config.lua
@@ -1,4 +1,5 @@
local api = require "luci.passwall.api"
+local uci = require "luci.model.uci".cursor()
local appname = "passwall"
m = Map(appname)
@@ -8,6 +9,25 @@ if not arg[1] or not m:get(arg[1]) then
luci.http.redirect(m.redirect)
end
+function m.commit_handler(self)
+ self:del(arg[1], "md5")
+end
+
+if api.is_js_luci() then
+ m.apply_on_parse = false
+ m.on_after_apply = function(self)
+ uci:delete(appname, arg[1], "md5")
+ uci:commit(appname)
+ luci.http.write([[
+
+ ]])
+ end
+end
+
local has_ss = api.is_finded("ss-redir")
local has_ss_rust = api.is_finded("sslocal")
local has_trojan_plus = api.is_finded("trojan-plus")
@@ -55,10 +75,6 @@ s = m:section(NamedSection, arg[1])
s.addremove = false
s.dynamic = false
-function m.commit_handler(self)
- self:del(arg[1], "md5")
-end
-
o = s:option(Value, "remark", translate("Subscribe Remark"))
o.rmempty = false
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua
index a0df0c553..84a4ab269 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/socks_config.lua
@@ -2,9 +2,11 @@ local api = require "luci.passwall.api"
local appname = "passwall"
m = Map(appname)
+m.redirect = api.url()
+api.set_apply_on_parse(m)
if not arg[1] or not m:get(arg[1]) then
- luci.http.redirect(api.url())
+ luci.http.redirect(m.redirect)
end
local has_singbox = api.finded_com("singbox")
diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua b/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua
index 6affd2c7d..a42a0ac5e 100644
--- a/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua
+++ b/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua
@@ -4,6 +4,11 @@ local types_dir = "/usr/lib/lua/luci/model/cbi/passwall/server/type/"
m = Map("passwall_server", translate("Server Config"))
m.redirect = api.url("server")
+api.set_apply_on_parse(m)
+
+if not arg[1] or not m:get(arg[1]) then
+ luci.http.redirect(m.redirect)
+end
s = m:section(NamedSection, arg[1], "user", "")
s.addremove = false
diff --git a/luci-app-passwall/luasrc/passwall/api.lua b/luci-app-passwall/luasrc/passwall/api.lua
index c1a7a283d..d9ffe502b 100644
--- a/luci-app-passwall/luasrc/passwall/api.lua
+++ b/luci-app-passwall/luasrc/passwall/api.lua
@@ -38,6 +38,26 @@ function is_old_uci()
return sys.call("grep 'require \"uci\"' /usr/lib/lua/luci/model/uci.lua >/dev/null 2>&1") == 0
end
+function set_apply_on_parse(map)
+ if not map then
+ return
+ end
+ if is_js_luci() then
+ map.apply_on_parse = false
+ map.on_after_apply = function(self)
+ if self.redirect then
+ luci.http.write([[
+
+ ]])
+ end
+ end
+ end
+end
+
function uci_save(cursor, config, commit, apply)
if is_old_uci() then
cursor:save(config)