update 2026-08-25 00:29:42

This commit is contained in:
action committed 2026-08-25 00:29:42 +08:00
1 parent 0f2308381e
commit c37bb21446
34 files changed
+153 -151

No files matched your search

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 319 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 389 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 640 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 550 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 547 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 659 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 650 KiB

@@ -25,25 +25,25 @@ o:value("https://wifi.vivo.com.cn/generate_204", "VIVO (CN)")
o.default = o.keylist[3] o.default = o.keylist[3]
if true then if true then
m:appendTemplate("/node_list/node_list") m:appendTemplate("/node_list/node_list")
if luci.http.formvalue("cbi.submit") == "1" then if luci.http.formvalue("cbi.submit") == "1" then
local group_order = {} local group_order = {}
group_order = luci.http.formvaluetable("group.order") group_order = luci.http.formvaluetable("group.order")
if group_order then if group_order then
for k, v in pairs(group_order) do for k, v in pairs(group_order) do
if v and v~= "" then if v and v~= "" then
local new_order = {} local new_order = {}
string.gsub(v, "[^" .. " " .. "]+", function(w) string.gsub(v, "[^" .. " " .. "]+", function(w)
new_order[#new_order + 1] = w new_order[#new_order + 1] = w
end) end)
for idx, name in ipairs(new_order) do for idx, name in ipairs(new_order) do
m.uci:reorder(m.config, name, idx - 1) m.uci:reorder(m.config, name, idx - 1)
end end
end end
end end
end end
end end
end end
return api.return_map(m) return api.return_map(m)
@@ -117,9 +117,9 @@ end
o = s:option(DummyValue, "_update", translate("Manual subscription All")) o = s:option(DummyValue, "_update", translate("Manual subscription All"))
o.rawhtml = true o.rawhtml = true
o.cfgvalue = function(self, section) o.cfgvalue = function(self, section)
return string.format([[ return string.format([[
<input type="button" class="btn cbi-button cbi-button-apply" onclick="ManualSubscribeAll()" value="%s" />]], <input type="button" class="btn cbi-button cbi-button-apply" onclick="ManualSubscribeAll()" value="%s" />]],
translate("Manual subscription All")) translate("Manual subscription All"))
end end
s = m:section(TypedSection, "subscribe_list", "", "<font color='red'>" .. translate("When adding a new subscription, please save and apply before manually subscribing. If you only change the subscription URL, you can subscribe manually, and the system will save it automatically.") .. "</font>") s = m:section(TypedSection, "subscribe_list", "", "<font color='red'>" .. translate("When adding a new subscription, please save and apply before manually subscribing. If you only change the subscription URL, you can subscribe manually, and the system will save it automatically.") .. "</font>")
@@ -215,9 +215,9 @@ end
o = s:option(DummyValue, "_update", translate("Manual subscription")) o = s:option(DummyValue, "_update", translate("Manual subscription"))
o.rawhtml = true o.rawhtml = true
o.cfgvalue = function(self, section) o.cfgvalue = function(self, section)
return string.format([[ return string.format([[
<input type="button" class="btn cbi-button cbi-button-apply" onclick="ManualSubscribe('%s')" value="%s" />]], <input type="button" class="btn cbi-button cbi-button-apply" onclick="ManualSubscribe('%s')" value="%s" />]],
section, translate("Manual subscription")) section, translate("Manual subscription"))
end end
m:appendTemplate("/cbi/sortable", {sectiontype = s.sectiontype}) m:appendTemplate("/cbi/sortable", {sectiontype = s.sectiontype})
@@ -161,6 +161,7 @@ local function start()
end) end)
if firewall_num > 0 then if firewall_num > 0 then
api.uci_save(uci, "firewall", true, true) api.uci_save(uci, "firewall", true, true)
cmd("/etc/init.d/firewall reload >/dev/null 2>&1")
end end
end end
@@ -176,6 +177,7 @@ local function stop()
end) end)
if num > 0 then if num > 0 then
api.uci_save(uci, "firewall", true, true) api.uci_save(uci, "firewall", true, true)
cmd("/etc/init.d/firewall reload >/dev/null 2>&1")
end end
end end
cmd(string.format("rm -rf %s %s", CONFIG_PATH, LOG_APP_FILE)) cmd(string.format("rm -rf %s %s", CONFIG_PATH, LOG_APP_FILE))
@@ -916,12 +916,12 @@ function gen_config(var)
if xray_settings.fragment == "1" then if xray_settings.fragment == "1" then
local lengths, delays = {}, {} local lengths, delays = {}, {}
api.trim(xray_settings.fragment_lengths):gsub("[^,]+", function(w) api.trim(xray_settings.fragment_lengths):gsub("[^,]+", function(w)
w = w:gsub("%s+", "") w = w:gsub("%s+", "")
if w ~= "" then lengths[#lengths+1] = w end if w ~= "" then lengths[#lengths+1] = w end
end) end)
api.trim(xray_settings.fragment_delays):gsub("[^,]+", function(w) api.trim(xray_settings.fragment_delays):gsub("[^,]+", function(w)
w = w:gsub("%s+", "") w = w:gsub("%s+", "")
if w ~= "" then delays[#delays+1] = w end if w ~= "" then delays[#delays+1] = w end
end) end)
fragment_table = { fragment_table = {
type = "fragment", type = "fragment",
@@ -534,7 +534,7 @@
//自定义框 //自定义框
function v_customEnter(cbid, labelSpan, hiddenInput, searchInput, panel, listContainer, customInput) { function v_customEnter(cbid, labelSpan, hiddenInput, searchInput, panel, listContainer, customInput) {
let inputValue = customInput.value.trim(); let inputValue = customInput.value.trim();
if (!inputValue) { if (!inputValue) {
return; return;
} }
const existingItems = listContainer.querySelectorAll('li[data-key="' + inputValue + '"]'); const existingItems = listContainer.querySelectorAll('li[data-key="' + inputValue + '"]');
@@ -3,42 +3,42 @@ local map = self.map
local api = map.api local api = map.api
-%> -%>
<style> <style>
.dns-con { .dns-con {
padding: 1rem; padding: 1rem;
} }
.faq-title { .faq-title {
color: var(--primary); color: var(--primary);
font-weight: bolder; font-weight: bolder;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
display: inline-block; display: inline-block;
} }
.reset-title { .reset-title {
color: var(--primary); color: var(--primary);
font-weight: bolder; font-weight: bolder;
margin-bottom: 0.3rem; margin-bottom: 0.3rem;
display: inline-block; display: inline-block;
margin-top: 1.2rem; margin-top: 1.2rem;
text-decoration: underline; text-decoration: underline;
} }
.dns-item { .dns-item {
margin-bottom: 0.8rem; margin-bottom: 0.8rem;
line-height:1.2rem; line-height:1.2rem;
} }
.dns-list { .dns-list {
text-indent:1rem; text-indent:1rem;
line-height: 1.2rem; line-height: 1.2rem;
} }
</style> </style>
<div class="dns-con"> <div class="dns-con">
<div id="faq_dns"> <div id="faq_dns">
<ul> <ul>
<b class="faq-title"><%:DNS related issues:%></b> <b class="faq-title"><%:DNS related issues:%></b>
<li class="dns-item">1. <span><%:Certain browsers such as Chrome have built-in DNS service, which may affect DNS resolution settings. You can go to 'Settings -> Privacy and security -> Use secure DNS' menu to turn it off.%></span></li> <li class="dns-item">1. <span><%:Certain browsers such as Chrome have built-in DNS service, which may affect DNS resolution settings. You can go to 'Settings -> Privacy and security -> Use secure DNS' menu to turn it off.%></span></li>
<li class="dns-item">2. <span><%:If you are unable to access the internet after reboot, please try clearing the cache of your terminal devices (make sure to close all open browser application windows first, this step is especially important):%></span> <li class="dns-item">2. <span><%:If you are unable to access the internet after reboot, please try clearing the cache of your terminal devices (make sure to close all open browser application windows first, this step is especially important):%></span>
<ul><li class="dns-list"> ◦ <span><%:For Windows systems, open Command Prompt and run the command 'ipconfig /flushdns'.%></span></li> <ul><li class="dns-list"> ◦ <span><%:For Windows systems, open Command Prompt and run the command 'ipconfig /flushdns'.%></span></li>
<li class="dns-list"> ◦ <span><%:For Mac systems, open Terminal and run the command 'sudo killall -HUP mDNSResponder'.%></span></li> <li class="dns-list"> ◦ <span><%:For Mac systems, open Terminal and run the command 'sudo killall -HUP mDNSResponder'.%></span></li>
<li class="dns-list"> ◦ <span><%:For mobile devices, you can clear it by reconnecting to the network, such as toggling Airplane Mode and reconnecting to WiFi.%></span></li> <li class="dns-list"> ◦ <span><%:For mobile devices, you can clear it by reconnecting to the network, such as toggling Airplane Mode and reconnecting to WiFi.%></span></li>
</ul> </ul>
</li> </li>
<li class="dns-item">3. <span><%:Please make sure your device's network settings point both the DNS server and default gateway to this router, to ensure DNS queries are properly routed.%></span></li> <li class="dns-item">3. <span><%:Please make sure your device's network settings point both the DNS server and default gateway to this router, to ensure DNS queries are properly routed.%></span></li>
</ul> </ul>
@@ -58,7 +58,7 @@ local api = map.api
} }
var dom = document.getElementById("faq_reset"); var dom = document.getElementById("faq_reset");
if (dom) { if (dom) {
var li = ""; var li = "";
li += "<a href='#' class='reset-title' onclick='hide()'>" + "<%: Hide in main menu:%>"+ "</a>" + "<br />" + "<%: Browser access: %>" + "<a href='#' onclick='hide()'>" + hide_url + "</a>" + "<br />"; li += "<a href='#' class='reset-title' onclick='hide()'>" + "<%: Hide in main menu:%>"+ "</a>" + "<br />" + "<%: Browser access: %>" + "<a href='#' onclick='hide()'>" + hide_url + "</a>" + "<br />";
li += "<a href='#' class='reset-title'>" + "<%: Show in main menu:%>"+ "</a>" + "<br />" +"<%: Browser access: %>" + "<a href='#'>" + show_url + "</a>" + "<br />"; li += "<a href='#' class='reset-title'>" + "<%: Show in main menu:%>"+ "</a>" + "<br />" +"<%: Browser access: %>" + "<a href='#'>" + show_url + "</a>" + "<br />";
@@ -43,7 +43,7 @@ table td, .table .td {
z-index: 99; z-index: 99;
text-align: center; text-align: center;
background: white; background: white;
box-shadow: darkgrey 10px 10px 30px 5px; box-shadow: darkgrey 10px 10px 30px 5px;
text-align: center; text-align: center;
padding: 0.5em; padding: 0.5em;
} }
@@ -55,8 +55,8 @@ table td, .table .td {
.ping a, .ping a,
.ping_value a, .ping_value a,
.tcping_value a { .tcping_value a {
text-decoration: none; text-decoration: none;
cursor: pointer; cursor: pointer;
} }
@media (prefers-color-scheme: dark) { @media (prefers-color-scheme: dark) {
@@ -15,8 +15,8 @@ table th, .table .th {
table td, .table .td { table td, .table .td {
text-align: center; text-align: center;
/* white-space: nowrap; */ /* white-space: nowrap; */
word-break: keep-all; word-break: keep-all;
} }
.td.cbi-section-actions { .td.cbi-section-actions {
@@ -75,7 +75,7 @@ local api = map.api
if (!value) { if (!value) {
alert("<%:Please enter query content!%>"); alert("<%:Please enter query content!%>");
return; return;
} }
lookup_btn.disabled = true; lookup_btn.disabled = true;
extract_btn.disabled = true; extract_btn.disabled = true;
btn.value = '<%:Querying%>'; btn.value = '<%:Querying%>';
@@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
if [ -e "/etc/config/ucitrack" ]; then if [ -e "/etc/config/ucitrack" ]; then
uci -q batch <<-EOF uci -q batch <<-EOF
delete ucitrack.@passwall[-1] delete ucitrack.@passwall[-1]
add ucitrack passwall add ucitrack passwall
set ucitrack.@passwall[-1].init=passwall set ucitrack.@passwall[-1].init=passwall
@@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
if [ -e "/etc/config/ucitrack" ]; then if [ -e "/etc/config/ucitrack" ]; then
uci -q batch <<-EOF uci -q batch <<-EOF
delete ucitrack.@passwall_server[-1] delete ucitrack.@passwall_server[-1]
add ucitrack passwall_server add ucitrack passwall_server
set ucitrack.@passwall_server[-1].init=passwall_server set ucitrack.@passwall_server[-1].init=passwall_server
@@ -6,13 +6,13 @@ local geo_dir = (api.uci_get_c("@global_rules[0]", "v2ray_location_asset") or "/
local geosite_path = geo_dir .. "/geosite.dat" local geosite_path = geo_dir .. "/geosite.dat"
local geoip_path = geo_dir .. "/geoip.dat" local geoip_path = geo_dir .. "/geoip.dat"
if fs.access(geosite_path) and fs.access(geoip_path) then if fs.access(geosite_path) and fs.access(geoip_path) then
f = SimpleForm(api.c_config) f = SimpleForm(api.c_config)
f.reset = false f.reset = false
f.submit = false f.submit = false
local obj = Template(api.appname .. "/rule/geoview") local obj = Template(api.appname .. "/rule/geoview")
obj.api = api obj.api = api
f:append(obj) f:append(obj)
end end
return f return f
@@ -25,25 +25,25 @@ o:value("https://wifi.vivo.com.cn/generate_204", "VIVO (CN)")
o.default = o.keylist[3] o.default = o.keylist[3]
if true then if true then
m:appendTemplate("/node_list/node_list") m:appendTemplate("/node_list/node_list")
if luci.http.formvalue("cbi.submit") == "1" then if luci.http.formvalue("cbi.submit") == "1" then
local group_order = {} local group_order = {}
group_order = luci.http.formvaluetable("group.order") group_order = luci.http.formvaluetable("group.order")
if group_order then if group_order then
for k, v in pairs(group_order) do for k, v in pairs(group_order) do
if v and v~= "" then if v and v~= "" then
local new_order = {} local new_order = {}
string.gsub(v, "[^" .. " " .. "]+", function(w) string.gsub(v, "[^" .. " " .. "]+", function(w)
new_order[#new_order + 1] = w new_order[#new_order + 1] = w
end) end)
for idx, name in ipairs(new_order) do for idx, name in ipairs(new_order) do
m.uci:reorder(m.config, name, idx - 1) m.uci:reorder(m.config, name, idx - 1)
end end
end end
end end
end end
end end
end end
return api.return_map(m) return api.return_map(m)
@@ -112,8 +112,8 @@ end
o = s:option(DummyValue, "_update", translate("Manual subscription All")) o = s:option(DummyValue, "_update", translate("Manual subscription All"))
o.rawhtml = true o.rawhtml = true
o.cfgvalue = function(self, section) o.cfgvalue = function(self, section)
return string.format([[ return string.format([[
<input type="button" class="btn cbi-button cbi-button-apply" onclick="ManualSubscribeAll()" value="%s" />]], <input type="button" class="btn cbi-button cbi-button-apply" onclick="ManualSubscribeAll()" value="%s" />]],
translate("Manual subscription All")) translate("Manual subscription All"))
end end
@@ -210,8 +210,8 @@ end
o = s:option(DummyValue, "_update", translate("Manual subscription")) o = s:option(DummyValue, "_update", translate("Manual subscription"))
o.rawhtml = true o.rawhtml = true
o.cfgvalue = function(self, section) o.cfgvalue = function(self, section)
return string.format([[ return string.format([[
<input type="button" class="btn cbi-button cbi-button-apply" onclick="ManualSubscribe('%s')" value="%s" />]], <input type="button" class="btn cbi-button cbi-button-apply" onclick="ManualSubscribe('%s')" value="%s" />]],
section, translate("Manual subscription")) section, translate("Manual subscription"))
end end
@@ -39,7 +39,7 @@ for filename in api.fs.dir(types_dir) do
table.insert(type_table, filename) table.insert(type_table, filename)
end end
table.sort(type_table, function(a, b) table.sort(type_table, function(a, b)
return a < b return a < b
end) end)
for index, value in ipairs(type_table) do for index, value in ipairs(type_table) do
+8 -8
View File
@@ -464,14 +464,14 @@ datatypes.json = is_json
function is_timehhmm(str) function is_timehhmm(str)
local hour, minute = string.match(str, "^(%d?%d):(%d%d)$") local hour, minute = string.match(str, "^(%d?%d):(%d%d)$")
if hour and minute then if hour and minute then
hour = tonumber(hour) hour = tonumber(hour)
minute = tonumber(minute) minute = tonumber(minute)
if hour >= 0 and hour <= 23 and minute >= 0 and minute <= 59 then if hour >= 0 and hour <= 23 and minute >= 0 and minute <= 59 then
return true return true
end end
end end
return false return false
end end
datatypes.timehhmm = is_timehhmm datatypes.timehhmm = is_timehhmm
@@ -922,12 +922,12 @@ function gen_config(var)
if xray_settings.fragment == "1" then if xray_settings.fragment == "1" then
local lengths, delays = {}, {} local lengths, delays = {}, {}
api.trim(xray_settings.fragment_lengths):gsub("[^,]+", function(w) api.trim(xray_settings.fragment_lengths):gsub("[^,]+", function(w)
w = w:gsub("%s+", "") w = w:gsub("%s+", "")
if w ~= "" then lengths[#lengths+1] = w end if w ~= "" then lengths[#lengths+1] = w end
end) end)
api.trim(xray_settings.fragment_delays):gsub("[^,]+", function(w) api.trim(xray_settings.fragment_delays):gsub("[^,]+", function(w)
w = w:gsub("%s+", "") w = w:gsub("%s+", "")
if w ~= "" then delays[#delays+1] = w end if w ~= "" then delays[#delays+1] = w end
end) end)
fragment_table = { fragment_table = {
type = "fragment", type = "fragment",
@@ -534,7 +534,7 @@
//自定义框 //自定义框
function v_customEnter(cbid, labelSpan, hiddenInput, searchInput, panel, listContainer, customInput) { function v_customEnter(cbid, labelSpan, hiddenInput, searchInput, panel, listContainer, customInput) {
let inputValue = customInput.value.trim(); let inputValue = customInput.value.trim();
if (!inputValue) { if (!inputValue) {
return; return;
} }
const existingItems = listContainer.querySelectorAll('li[data-key="' + inputValue + '"]'); const existingItems = listContainer.querySelectorAll('li[data-key="' + inputValue + '"]');
@@ -3,28 +3,28 @@ local map = self.map
local api = map.api local api = map.api
-%> -%>
<style> <style>
.dns-con { .dns-con {
padding: 1rem; padding: 1rem;
} }
.faq-title { .faq-title {
color: var(--primary); color: var(--primary);
font-weight: bolder; font-weight: bolder;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
display: inline-block; display: inline-block;
} }
.reset-title { .reset-title {
color: var(--primary); color: var(--primary);
font-weight: bolder; font-weight: bolder;
margin-bottom: 0.3rem; margin-bottom: 0.3rem;
display: inline-block; display: inline-block;
margin-top: 1.2rem; margin-top: 1.2rem;
text-decoration: underline; text-decoration: underline;
} }
.dns-item { .dns-item {
margin-bottom: 0.8rem; margin-bottom: 0.8rem;
line-height:1.2rem; line-height:1.2rem;
} }
.dns-list { .dns-list {
text-indent:1rem; text-indent:1rem;
line-height: 1.2rem; line-height: 1.2rem;
} }
@@ -32,13 +32,13 @@ local api = map.api
<div class="dns-con"> <div class="dns-con">
<div id="faq_dns"> <div id="faq_dns">
<ul> <ul>
<b class="faq-title"><%:DNS related issues:%></b> <b class="faq-title"><%:DNS related issues:%></b>
<li class="dns-item">1. <span><%:Certain browsers such as Chrome have built-in DNS service, which may affect DNS resolution settings. You can go to 'Settings -> Privacy and security -> Use secure DNS' menu to turn it off.%></span></li> <li class="dns-item">1. <span><%:Certain browsers such as Chrome have built-in DNS service, which may affect DNS resolution settings. You can go to 'Settings -> Privacy and security -> Use secure DNS' menu to turn it off.%></span></li>
<li class="dns-item">2. <span><%:If you are unable to access the internet after reboot, please try clearing the cache of your terminal devices (make sure to close all open browser application windows first, this step is especially important):%></span> <li class="dns-item">2. <span><%:If you are unable to access the internet after reboot, please try clearing the cache of your terminal devices (make sure to close all open browser application windows first, this step is especially important):%></span>
<ul><li class="dns-list"> ◦ <span><%:For Windows systems, open Command Prompt and run the command 'ipconfig /flushdns'.%></span></li> <ul><li class="dns-list"> ◦ <span><%:For Windows systems, open Command Prompt and run the command 'ipconfig /flushdns'.%></span></li>
<li class="dns-list"> ◦ <span><%:For Mac systems, open Terminal and run the command 'sudo killall -HUP mDNSResponder'.%></span></li> <li class="dns-list"> ◦ <span><%:For Mac systems, open Terminal and run the command 'sudo killall -HUP mDNSResponder'.%></span></li>
<li class="dns-list"> ◦ <span><%:For mobile devices, you can clear it by reconnecting to the network, such as toggling Airplane Mode and reconnecting to WiFi.%></span></li> <li class="dns-list"> ◦ <span><%:For mobile devices, you can clear it by reconnecting to the network, such as toggling Airplane Mode and reconnecting to WiFi.%></span></li>
</ul> </ul>
</li> </li>
<li class="dns-item">3. <span><%:Please make sure your device's network settings point both the DNS server and default gateway to this router, to ensure DNS queries are properly routed.%></span></li> <li class="dns-item">3. <span><%:Please make sure your device's network settings point both the DNS server and default gateway to this router, to ensure DNS queries are properly routed.%></span></li>
</ul> </ul>
@@ -58,7 +58,7 @@ local api = map.api
} }
var dom = document.getElementById("faq_reset"); var dom = document.getElementById("faq_reset");
if (dom) { if (dom) {
var li = ""; var li = "";
li += "<a href='#' class='reset-title' onclick='hide()'>" + "<%: Hide in main menu:%>"+ "</a>" + "<br />" + "<%: Browser access: %>" + "<a href='#' onclick='hide()'>" + hide_url + "</a>" + "<br />"; li += "<a href='#' class='reset-title' onclick='hide()'>" + "<%: Hide in main menu:%>"+ "</a>" + "<br />" + "<%: Browser access: %>" + "<a href='#' onclick='hide()'>" + hide_url + "</a>" + "<br />";
li += "<a href='#' class='reset-title'>" + "<%: Show in main menu:%>"+ "</a>" + "<br />" +"<%: Browser access: %>" + "<a href='#'>" + show_url + "</a>" + "<br />"; li += "<a href='#' class='reset-title'>" + "<%: Show in main menu:%>"+ "</a>" + "<br />" +"<%: Browser access: %>" + "<a href='#'>" + show_url + "</a>" + "<br />";
@@ -29,8 +29,8 @@ table th, .table .th {
table td, .table .td { table td, .table .td {
text-align: center; text-align: center;
/* white-space: nowrap; */ /* white-space: nowrap; */
word-break: keep-all; word-break: keep-all;
} }
#set_node_div { #set_node_div {
@@ -41,7 +41,7 @@ table td, .table .td {
z-index: 99; z-index: 99;
text-align: center; text-align: center;
background: white; background: white;
box-shadow: darkgrey 10px 10px 30px 5px; box-shadow: darkgrey 10px 10px 30px 5px;
text-align: center; text-align: center;
padding: 0.5em; padding: 0.5em;
} }
@@ -53,8 +53,8 @@ table td, .table .td {
.ping a, .ping a,
.ping_value a, .ping_value a,
.tcping_value a { .tcping_value a {
text-decoration: none; text-decoration: none;
cursor: pointer; cursor: pointer;
} }
@media (prefers-color-scheme: dark) { @media (prefers-color-scheme: dark) {
@@ -74,7 +74,7 @@ local api = self.api
if (!value) { if (!value) {
alert("<%:Please enter query content!%>"); alert("<%:Please enter query content!%>");
return; return;
} }
lookup_btn.disabled = true; lookup_btn.disabled = true;
extract_btn.disabled = true; extract_btn.disabled = true;
btn.value = '<%:Querying%>'; btn.value = '<%:Querying%>';
@@ -11,8 +11,8 @@ table th, .table .th {
table td, .table .td { table td, .table .td {
text-align: center; text-align: center;
/* white-space: nowrap; */ /* white-space: nowrap; */
word-break: keep-all; word-break: keep-all;
} }
.td.cbi-section-actions { .td.cbi-section-actions {
@@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
if [ -e "/etc/config/ucitrack" ]; then if [ -e "/etc/config/ucitrack" ]; then
uci -q batch <<-EOF uci -q batch <<-EOF
delete ucitrack.@passwall2[-1] delete ucitrack.@passwall2[-1]
add ucitrack passwall2 add ucitrack passwall2
set ucitrack.@passwall2[-1].init=passwall2 set ucitrack.@passwall2[-1].init=passwall2
@@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
if [ -e "/etc/config/ucitrack" ]; then if [ -e "/etc/config/ucitrack" ]; then
uci -q batch <<-EOF uci -q batch <<-EOF
delete ucitrack.@passwall2_server[-1] delete ucitrack.@passwall2_server[-1]
add ucitrack passwall2_server add ucitrack passwall2_server
set ucitrack.@passwall2_server[-1].init=passwall2_server set ucitrack.@passwall2_server[-1].init=passwall2_server
@@ -1,6 +1,6 @@
if #arg > 0 then if #arg > 0 then
local api = require "luci.passwall2.api" local api = require "luci.passwall2.api"
local str = arg[1] local str = arg[1]
table.remove(arg, 1) table.remove(arg, 1)
print(api.i18n.translatef(str, unpack(arg))) print(api.i18n.translatef(str, unpack(arg)))
end end
@@ -891,7 +891,7 @@ add_firewall_rule() {
del_firewall_rule() { del_firewall_rule() {
for nft in "dstnat" "srcnat" "nat_output" "mangle_prerouting" "mangle_output"; do for nft in "dstnat" "srcnat" "nat_output" "mangle_prerouting" "mangle_output"; do
local handles=$(nft -a list chain $NFTABLE_NAME ${nft} 2>/dev/null | grep -E "PSW2_" | awk -F '# handle ' '{print$2}') local handles=$(nft -a list chain $NFTABLE_NAME ${nft} 2>/dev/null | grep -E "PSW2_" | awk -F '# handle ' '{print$2}')
for handle in $handles; do for handle in $handles; do
nft delete rule $NFTABLE_NAME ${nft} handle ${handle} 2>/dev/null nft delete rule $NFTABLE_NAME ${nft} handle ${handle} 2>/dev/null
done done