mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-07-27 10:31:38 +08:00
176 lines
4.7 KiB
Lua
176 lines
4.7 KiB
Lua
|
||
local m, s, o
|
||
local openclash = "openclash"
|
||
local NXFS = require "nixio.fs"
|
||
local SYS = require "luci.sys"
|
||
local HTTP = require "luci.http"
|
||
local DISP = require "luci.dispatcher"
|
||
local UTIL = require "luci.util"
|
||
local fs = require "luci.openclash"
|
||
local uci = require "luci.model.uci".cursor()
|
||
|
||
-- 优化 CBI UI(新版 LuCI 专用)
|
||
local function optimize_cbi_ui()
|
||
luci.http.write([[
|
||
<script type="text/javascript">
|
||
// 修正上移、下移按钮名称
|
||
document.querySelectorAll("input.btn.cbi-button.cbi-button-up").forEach(function(btn) {
|
||
btn.value = "]] .. translate("Move up") .. [[";
|
||
});
|
||
document.querySelectorAll("input.btn.cbi-button.cbi-button-down").forEach(function(btn) {
|
||
btn.value = "]] .. translate("Move down") .. [[";
|
||
});
|
||
// 删除控件和说明之间的多余换行
|
||
document.querySelectorAll("div.cbi-value-description").forEach(function(descDiv) {
|
||
var prev = descDiv.previousSibling;
|
||
while (prev && prev.nodeType === Node.TEXT_NODE && prev.textContent.trim() === "") {
|
||
prev = prev.previousSibling;
|
||
}
|
||
if (prev && prev.nodeType === Node.ELEMENT_NODE && prev.tagName === "BR") {
|
||
prev.remove();
|
||
}
|
||
});
|
||
</script>
|
||
]])
|
||
end
|
||
|
||
font_red = [[<b style=color:red>]]
|
||
font_off = [[</b>]]
|
||
bold_on = [[<strong>]]
|
||
bold_off = [[</strong>]]
|
||
|
||
m = Map("openclash", translate("Config Subscribe"))
|
||
m.pageaction = false
|
||
|
||
s = m:section(TypedSection, "openclash")
|
||
s.anonymous = true
|
||
|
||
---- update Settings
|
||
o = s:option(Flag, "auto_update", translate("Auto Update"))
|
||
o.description = translate("Auto Update Server subscription")
|
||
o.default = 0
|
||
|
||
o = s:option(ListValue, "config_auto_update_mode", translate("Update Mode"))
|
||
o:depends("auto_update", "1")
|
||
o:value("0", translate("Appointment Mode"))
|
||
o:value("1", translate("Loop Mode"))
|
||
o.default = "0"
|
||
o.rmempty = true
|
||
|
||
o = s:option(ListValue, "config_update_week_time", translate("Update Time (Every Week)"))
|
||
o:depends("config_auto_update_mode", "0")
|
||
o:value("*", translate("Every Day"))
|
||
o:value("1", translate("Every Monday"))
|
||
o:value("2", translate("Every Tuesday"))
|
||
o:value("3", translate("Every Wednesday"))
|
||
o:value("4", translate("Every Thursday"))
|
||
o:value("5", translate("Every Friday"))
|
||
o:value("6", translate("Every Saturday"))
|
||
o:value("0", translate("Every Sunday"))
|
||
o.default = "1"
|
||
o.rmempty = true
|
||
|
||
o = s:option(ListValue, "auto_update_time", translate("Update time (every day)"))
|
||
o:depends("config_auto_update_mode", "0")
|
||
for t = 0,23 do
|
||
o:value(t, t..":00")
|
||
end
|
||
o.default = "0"
|
||
o.rmempty = true
|
||
|
||
o = s:option(Value, "config_update_interval", translate("Update Interval(min)"))
|
||
o.default = "60"
|
||
o.datatype = "integer"
|
||
o:depends("config_auto_update_mode", "1")
|
||
o.rmempty = true
|
||
|
||
-- [[ Edit Server ]] --
|
||
s = m:section(TypedSection, "config_subscribe", translate("Config Subscribe Edit"))
|
||
s.anonymous = true
|
||
s.addremove = true
|
||
s.sortable = true
|
||
s.template = "cbi/tblsection"
|
||
s.extedit = luci.dispatcher.build_url("admin/services/openclash/config-subscribe-edit/%s")
|
||
function s.create(...)
|
||
local sid = TypedSection.create(...)
|
||
if sid then
|
||
luci.http.redirect(s.extedit % sid)
|
||
return
|
||
end
|
||
end
|
||
s.render = function(self, ...)
|
||
Map.render(self, ...)
|
||
if type(optimize_cbi_ui) == "function" then
|
||
optimize_cbi_ui()
|
||
end
|
||
end
|
||
|
||
---- enable flag
|
||
o = s:option(Flag, "enabled", translate("Enable"))
|
||
o.rmempty = false
|
||
o.default = o.enabled
|
||
o.cfgvalue = function(...)
|
||
return Flag.cfgvalue(...) or "1"
|
||
end
|
||
|
||
---- name
|
||
o = s:option(DummyValue, "name", translate("Config Alias"))
|
||
function o.cfgvalue(...)
|
||
return Value.cfgvalue(...) or translate("config")
|
||
end
|
||
|
||
---- address
|
||
o = s:option(TextValue, "address", translate("Subscribe Address"))
|
||
function o.cfgvalue(...)
|
||
return Value.cfgvalue(...) or translate("None")
|
||
|
||
end
|
||
function o.validate(self, value)
|
||
if value then
|
||
value = value:gsub("\r\n?", "\n")
|
||
value = value:gsub("%c*$", "")
|
||
end
|
||
return value
|
||
end
|
||
|
||
---- template
|
||
o = s:option(DummyValue, "template", translate("Template Name"))
|
||
function o.cfgvalue(...)
|
||
if Value.cfgvalue(...) ~= "0" then
|
||
return Value.cfgvalue(...) or translate("None")
|
||
else
|
||
return translate("Custom Template")
|
||
end
|
||
end
|
||
|
||
---- update
|
||
o = s:option(DummyValue, "name", translate("Update"))
|
||
o.template = "openclash/update_config"
|
||
|
||
local t = {
|
||
{Commit, Apply}
|
||
}
|
||
|
||
a = m:section(Table, t)
|
||
|
||
o = a:option(Button, "Commit", " ")
|
||
o.inputtitle = translate("Commit Settings")
|
||
o.inputstyle = "apply"
|
||
o.write = function()
|
||
m.uci:commit("openclash")
|
||
end
|
||
|
||
o = a:option(Button, "Apply", " ")
|
||
o.inputtitle = translate("Update Config")
|
||
o.inputstyle = "apply"
|
||
o.write = function()
|
||
m.uci:set("openclash", "config", "enable", 1)
|
||
m.uci:commit("openclash")
|
||
SYS.call("/usr/share/openclash/openclash.sh >/dev/null 2>&1 &")
|
||
HTTP.redirect(DISP.build_url("admin", "services", "openclash"))
|
||
end
|
||
|
||
m:append(Template("openclash/toolbar_show"))
|
||
|
||
return m
|