update 2023-03-12 16:22:02
@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-passwall2
|
||||
PKG_VERSION:=1.10
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=4
|
||||
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
CONFIG_PACKAGE_$(PKG_NAME)_Transparent_Proxy \
|
||||
|
@ -512,7 +512,13 @@ tlsflow.default = ""
|
||||
tlsflow:value("", translate("Disable"))
|
||||
tlsflow:value("xtls-rprx-vision")
|
||||
tlsflow:value("xtls-rprx-vision-udp443")
|
||||
tlsflow:depends({ type = "Xray", protocol = "vless", tls = true })
|
||||
tlsflow:depends({ type = "Xray", protocol = "vless", tls = true, transport = "tcp" })
|
||||
|
||||
reality = s:option(Flag, "reality", translate("REALITY"), translate("Only recommend to use with VLESS-TCP-XTLS-Vision."))
|
||||
reality.default = 0
|
||||
reality:depends({ type = "Xray", tls = true, transport = "tcp" })
|
||||
reality:depends({ type = "Xray", tls = true, transport = "h2" })
|
||||
reality:depends({ type = "Xray", tls = true, transport = "grpc" })
|
||||
|
||||
alpn = s:option(ListValue, "alpn", translate("alpn"))
|
||||
alpn.default = "default"
|
||||
@ -521,7 +527,7 @@ alpn:value("h2,http/1.1")
|
||||
alpn:value("h2")
|
||||
alpn:value("http/1.1")
|
||||
alpn:depends({ type = "V2ray", tls = true })
|
||||
alpn:depends({ type = "Xray", tls = true })
|
||||
alpn:depends({ type = "Xray", tls = true, reality = false })
|
||||
|
||||
tls_serverName = s:option(Value, "tls_serverName", translate("Domain"))
|
||||
tls_serverName:depends("tls", true)
|
||||
@ -529,10 +535,10 @@ tls_serverName:depends("type", "Hysteria")
|
||||
|
||||
tls_allowInsecure = s:option(Flag, "tls_allowInsecure", translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
|
||||
tls_allowInsecure.default = "0"
|
||||
tls_allowInsecure:depends("tls", true)
|
||||
tls_allowInsecure:depends({ tls = true, reality = false })
|
||||
tls_allowInsecure:depends("type", "Hysteria")
|
||||
|
||||
xray_fingerprint = s:option(Value, "xray_fingerprint", translate("Finger Print"))
|
||||
xray_fingerprint = s:option(Value, "xray_fingerprint", translate("Finger Print"), translate("Avoid using randomized, unless you have to."))
|
||||
xray_fingerprint:value("", translate("Disable"))
|
||||
xray_fingerprint:value("chrome")
|
||||
xray_fingerprint:value("firefox")
|
||||
@ -545,7 +551,7 @@ xray_fingerprint:value("qq")
|
||||
xray_fingerprint:value("random")
|
||||
xray_fingerprint:value("randomized")
|
||||
xray_fingerprint.default = ""
|
||||
xray_fingerprint:depends({ type = "Xray", tls = true })
|
||||
xray_fingerprint:depends({ type = "Xray", tls = true, reality = false })
|
||||
function xray_fingerprint.cfgvalue(self, section)
|
||||
return m:get(section, "fingerprint")
|
||||
end
|
||||
@ -556,6 +562,38 @@ function xray_fingerprint.remove(self, section)
|
||||
m:del(section, "fingerprint")
|
||||
end
|
||||
|
||||
|
||||
-- [[ REALITY部分 ]] --
|
||||
reality_publicKey = s:option(Value, "reality_publicKey", translate("Public Key"))
|
||||
reality_publicKey:depends({ type = "Xray", tls = true, reality = true })
|
||||
|
||||
reality_shortId = s:option(Value, "reality_shortId", translate("Short Id"))
|
||||
reality_shortId:depends({ type = "Xray", tls = true, reality = true })
|
||||
|
||||
reality_spiderX = s:option(Value, "reality_spiderX", translate("Spider X"))
|
||||
reality_spiderX.placeholder = "/"
|
||||
reality_spiderX:depends({ type = "Xray", tls = true, reality = true })
|
||||
|
||||
reality_fingerprint = s:option(Value, "reality_fingerprint", translate("Finger Print"), translate("Avoid using randomized, unless you have to."))
|
||||
reality_fingerprint:value("chrome")
|
||||
reality_fingerprint:value("firefox")
|
||||
reality_fingerprint:value("safari")
|
||||
reality_fingerprint:value("ios")
|
||||
reality_fingerprint:value("android")
|
||||
reality_fingerprint:value("edge")
|
||||
reality_fingerprint:value("360")
|
||||
reality_fingerprint:value("qq")
|
||||
reality_fingerprint:value("random")
|
||||
reality_fingerprint:value("randomized")
|
||||
reality_fingerprint.default = "chrome"
|
||||
reality_fingerprint:depends({ type = "Xray", tls = true, reality = true })
|
||||
function reality_fingerprint.cfgvalue(self, section)
|
||||
return m:get(section, "fingerprint")
|
||||
end
|
||||
function reality_fingerprint.write(self, section, value)
|
||||
m:set(section, "fingerprint", value)
|
||||
end
|
||||
|
||||
transport = s:option(ListValue, "transport", translate("Transport"))
|
||||
transport:value("tcp", "TCP")
|
||||
transport:value("mkcp", "mKCP")
|
||||
@ -618,6 +656,7 @@ tcp_guise_http_host:depends("tcp_guise", "http")
|
||||
|
||||
-- HTTP路径
|
||||
tcp_guise_http_path = s:option(DynamicList, "tcp_guise_http_path", translate("HTTP Path"))
|
||||
tcp_guise_http_path.placeholder = "/"
|
||||
tcp_guise_http_path:depends("tcp_guise", "http")
|
||||
|
||||
-- [[ mKCP部分 ]]--
|
||||
@ -662,6 +701,7 @@ ws_host:depends("transport", "ws")
|
||||
ws_host:depends("ss_transport", "ws")
|
||||
|
||||
ws_path = s:option(Value, "ws_path", translate("WebSocket Path"))
|
||||
ws_path.placeholder = "/"
|
||||
ws_path:depends("transport", "ws")
|
||||
ws_path:depends("ss_transport", "ws")
|
||||
ws_path:depends({ type = "Brook", brook_protocol = "wsclient" })
|
||||
@ -682,6 +722,7 @@ h2_host:depends("transport", "h2")
|
||||
h2_host:depends("ss_transport", "h2")
|
||||
|
||||
h2_path = s:option(Value, "h2_path", translate("HTTP/2 Path"))
|
||||
h2_path.placeholder = "/"
|
||||
h2_path:depends("transport", "h2")
|
||||
h2_path:depends("ss_transport", "h2")
|
||||
|
||||
@ -751,7 +792,7 @@ mux:depends({ type = "V2ray", protocol = "socks" })
|
||||
mux:depends({ type = "V2ray", protocol = "shadowsocks" })
|
||||
mux:depends({ type = "V2ray", protocol = "trojan" })
|
||||
mux:depends({ type = "Xray", protocol = "vmess" })
|
||||
mux:depends({ type = "Xray", protocol = "vless" })
|
||||
mux:depends({ type = "Xray", protocol = "vless", tlsflow = "" })
|
||||
mux:depends({ type = "Xray", protocol = "http" })
|
||||
mux:depends({ type = "Xray", protocol = "socks" })
|
||||
mux:depends({ type = "Xray", protocol = "shadowsocks" })
|
||||
|
@ -94,6 +94,9 @@ function gen_outbound(flag, node, tag, proxy_table)
|
||||
else
|
||||
if node.tls and node.tls == "1" then
|
||||
node.stream_security = "tls"
|
||||
if node.type == "Xray" and node.reality and node.reality == "1" then
|
||||
node.stream_security = "reality"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -121,6 +124,13 @@ function gen_outbound(flag, node, tag, proxy_table)
|
||||
allowInsecure = (node.tls_allowInsecure == "1") and true or false,
|
||||
fingerprint = (node.type == "Xray" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or nil
|
||||
} or nil,
|
||||
realitySettings = (node.stream_security == "reality") and {
|
||||
serverName = node.tls_serverName,
|
||||
publicKey = node.reality_publicKey,
|
||||
shortId = node.reality_shortId or "",
|
||||
spiderX = node.reality_spiderX or "/",
|
||||
fingerprint = (node.type == "Xray" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or "chrome"
|
||||
} or nil,
|
||||
tcpSettings = (node.transport == "tcp" and node.protocol ~= "socks") and {
|
||||
header = {
|
||||
type = node.tcp_guise or "none",
|
||||
@ -144,14 +154,14 @@ function gen_outbound(flag, node, tag, proxy_table)
|
||||
header = {type = node.mkcp_guise}
|
||||
} or nil,
|
||||
wsSettings = (node.transport == "ws") and {
|
||||
path = node.ws_path or "",
|
||||
path = node.ws_path or "/",
|
||||
headers = (node.ws_host ~= nil) and
|
||||
{Host = node.ws_host} or nil,
|
||||
maxEarlyData = tonumber(node.ws_maxEarlyData) or nil,
|
||||
earlyDataHeaderName = (node.ws_earlyDataHeaderName) and node.ws_earlyDataHeaderName or nil
|
||||
} or nil,
|
||||
httpSettings = (node.transport == "h2") and {
|
||||
path = node.h2_path,
|
||||
path = node.h2_path or "/",
|
||||
host = node.h2_host,
|
||||
read_idle_timeout = tonumber(node.h2_read_idle_timeout) or nil,
|
||||
health_check_timeout = tonumber(node.h2_health_check_timeout) or nil
|
||||
@ -957,20 +967,38 @@ function gen_config(var)
|
||||
}
|
||||
})
|
||||
local direct_type_dns = {
|
||||
address = direct_dns_udp_server,
|
||||
port = tonumber(direct_dns_port) or 53,
|
||||
network = "udp",
|
||||
settings = {
|
||||
address = direct_dns_udp_server,
|
||||
port = tonumber(direct_dns_port) or 53,
|
||||
network = "udp"
|
||||
},
|
||||
proxySettings = {
|
||||
tag = "direct"
|
||||
}
|
||||
}
|
||||
local remote_type_dns = {
|
||||
address = remote_dns_udp_server,
|
||||
port = tonumber(remote_dns_port) or 53,
|
||||
network = _remote_dns_proto or "tcp",
|
||||
settings = {
|
||||
address = remote_dns_udp_server,
|
||||
port = tonumber(remote_dns_port) or 53,
|
||||
network = _remote_dns_proto or "tcp"
|
||||
},
|
||||
proxySettings = {
|
||||
tag = "direct"
|
||||
}
|
||||
}
|
||||
local type_dns = direct_type_dns
|
||||
local custom_type_dns = {
|
||||
settings = {
|
||||
address = "1.1.1.1",
|
||||
port = 53,
|
||||
network = "tcp",
|
||||
}
|
||||
}
|
||||
local type_dns = remote_type_dns
|
||||
table.insert(outbounds, {
|
||||
tag = "dns-out",
|
||||
protocol = "dns",
|
||||
settings = type_dns
|
||||
proxySettings = type_dns.proxySettings,
|
||||
settings = type_dns.settings
|
||||
})
|
||||
table.insert(routing.rules, 1, {
|
||||
type = "field",
|
||||
@ -1386,6 +1414,9 @@ function gen_dns_config(var)
|
||||
table.insert(outbounds, {
|
||||
tag = "dns-out",
|
||||
protocol = "dns",
|
||||
proxySettings = {
|
||||
tag = dns_out_tag
|
||||
},
|
||||
settings = {
|
||||
address = other_type_dns_server or "1.1.1.1",
|
||||
port = other_type_dns_port or 53,
|
||||
|
@ -370,6 +370,9 @@ msgstr "证书路径"
|
||||
msgid "Finger Print"
|
||||
msgstr "指纹伪造"
|
||||
|
||||
msgid "Avoid using randomized, unless you have to."
|
||||
msgstr "避免使用 randomized , 除非你必须要。"
|
||||
|
||||
msgid "Original"
|
||||
msgstr "原版"
|
||||
|
||||
@ -850,8 +853,8 @@ msgstr "从文件中加载 IP: 形如'ext:file:tag',必须以ext:(小写)
|
||||
msgid "Clear logs"
|
||||
msgstr "清空日志"
|
||||
|
||||
msgid "Need node support required"
|
||||
msgstr "需要节点支持"
|
||||
msgid "Only recommend to use with VLESS-TCP-XTLS-Vision."
|
||||
msgstr "只推荐与 VLESS-TCP-XTLS-Vision 搭配使用。"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "密码"
|
||||
@ -874,9 +877,6 @@ msgstr "本地端口"
|
||||
msgid "Fast Open"
|
||||
msgstr "快速打开"
|
||||
|
||||
msgid "Need node support required"
|
||||
msgstr "需要节点支持"
|
||||
|
||||
msgid "plugin"
|
||||
msgstr "插件"
|
||||
|
||||
|
@ -1,7 +1,23 @@
|
||||
#!/bin/sh
|
||||
|
||||
[[ "$ACTION" == "ifup" && "$INTERFACE" == "wan" && $(uci get "passwall2.@global[0].enabled") == "1" ]] && {
|
||||
/etc/init.d/passwall2 restart
|
||||
echo "passwall2: restart when wan ifup" > /dev/kmsg
|
||||
[[ "$ACTION" == "ifup" && $(uci get "passwall2.@global[0].enabled") == "1" ]] && {
|
||||
default_device=$(ip route | grep default | awk -F 'dev ' '{print $2}' | awk '{print $1}')
|
||||
[ "$default_device" == "$DEVICE" ] && {
|
||||
LOCK_FILE_DIR=/var/lock
|
||||
[ ! -d ${LOCK_FILE_DIR} ] && mkdir -p ${LOCK_FILE_DIR}
|
||||
LOCK_FILE="${LOCK_FILE_DIR}/passwall2_ifup.lock"
|
||||
if [ -s ${LOCK_FILE} ]; then
|
||||
SPID=$(cat ${LOCK_FILE})
|
||||
if [ -e /proc/${SPID}/status ]; then
|
||||
exit 1
|
||||
fi
|
||||
cat /dev/null > ${LOCK_FILE}
|
||||
fi
|
||||
echo $$ > ${LOCK_FILE}
|
||||
|
||||
/etc/init.d/passwall2 restart
|
||||
echo "passwall2: restart when $INTERFACE ifup" > /dev/kmsg
|
||||
|
||||
rm -rf ${LOCK_FILE}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,12 @@ unlock() {
|
||||
}
|
||||
|
||||
boot() {
|
||||
$APP_FILE boot
|
||||
local delay=$(uci -q get ${CONFIG}.@global_delay[0].start_delay || echo 1)
|
||||
if [ "$delay" -gt 0 ]; then
|
||||
$APP_FILE echolog "执行启动延时 $delay 秒后再启动!"
|
||||
sleep $delay
|
||||
fi
|
||||
restart
|
||||
}
|
||||
|
||||
start() {
|
||||
|
@ -308,6 +308,7 @@ run_v2ray() {
|
||||
[ -n "$dns_listen_port" ] && {
|
||||
V2RAY_DNS_DIRECT_CONFIG="${TMP_PATH}/${flag}_dns_direct.json"
|
||||
V2RAY_DNS_DIRECT_LOG="${TMP_PATH}/${flag}_dns_direct.log"
|
||||
V2RAY_DNS_DIRECT_LOG="/dev/null"
|
||||
V2RAY_DNS_DIRECT_ARGS="-dns_out_tag direct"
|
||||
dns_direct_listen_port=$(get_new_port $(expr $dns_listen_port + 1) udp)
|
||||
V2RAY_DNS_DIRECT_ARGS="${V2RAY_DNS_DIRECT_ARGS} -dns_listen_port ${dns_direct_listen_port}"
|
||||
@ -351,6 +352,7 @@ run_v2ray() {
|
||||
[ "$remote_dns_protocol" != "fakedns" ] && {
|
||||
V2RAY_DNS_REMOTE_CONFIG="${TMP_PATH}/${flag}_dns_remote.json"
|
||||
V2RAY_DNS_REMOTE_LOG="${TMP_PATH}/${flag}_dns_remote.log"
|
||||
V2RAY_DNS_REMOTE_LOG="/dev/null"
|
||||
V2RAY_DNS_REMOTE_ARGS="-dns_out_tag remote"
|
||||
dns_remote_listen_port=$(get_new_port $(expr $dns_listen_port + 2) udp)
|
||||
V2RAY_DNS_REMOTE_ARGS="${V2RAY_DNS_REMOTE_ARGS} -dns_listen_port ${dns_remote_listen_port}"
|
||||
@ -781,16 +783,6 @@ kill_all() {
|
||||
kill -9 $(pidof "$@") >/dev/null 2>&1
|
||||
}
|
||||
|
||||
boot() {
|
||||
local delay=$(config_t_get global_delay start_delay 1)
|
||||
if [ "$delay" -gt 0 ]; then
|
||||
echolog "执行启动延时 $delay 秒后再启动!"
|
||||
sleep $delay && start >/dev/null 2>&1 &
|
||||
else
|
||||
start
|
||||
fi
|
||||
}
|
||||
|
||||
acl_app() {
|
||||
local items=$(uci show ${CONFIG} | grep "=acl_rule" | cut -d '.' -sf 2 | cut -d '=' -sf 1)
|
||||
[ -n "$items" ] && {
|
||||
@ -1016,7 +1008,4 @@ stop)
|
||||
start)
|
||||
start
|
||||
;;
|
||||
boot)
|
||||
boot
|
||||
;;
|
||||
esac
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_VERSION:=1.0.2-20230123
|
||||
PKG_VERSION:=1.0.3-20230312
|
||||
PKG_RELEASE:=
|
||||
|
||||
LUCI_TITLE:=LuCI support for SysTools
|
||||
|
@ -1,62 +1,24 @@
|
||||
#!/bin/sh
|
||||
ISTORE_REPO=https://istore.linkease.com/repo/all/store
|
||||
FCURL="curl --fail --show-error"
|
||||
|
||||
version="1.0"
|
||||
APP_URL='https://istore.linkease.com/repo/all/store'
|
||||
luci_store=luci-app-store_0.1.12-9_all.ipk
|
||||
luci_taskd=luci-lib-taskd_1.0.17_all.ipk
|
||||
xterm=luci-lib-xterm_4.18.0_all.ipk
|
||||
task=taskd_1.0.3-1_all.ipk
|
||||
|
||||
setup_color() {
|
||||
# Only use colors if connected to a terminal
|
||||
if [ -t 1 ]; then
|
||||
RED=$(printf '\033[31m')
|
||||
GREEN=$(printf '\033[32m')
|
||||
YELLOW=$(printf '\033[33m')
|
||||
BLUE=$(printf '\033[34m')
|
||||
BOLD=$(printf '\033[1m')
|
||||
RESET=$(printf '\033[m')
|
||||
else
|
||||
RED=""
|
||||
GREEN=""
|
||||
YELLOW=""
|
||||
BLUE=""
|
||||
BOLD=""
|
||||
RESET=""
|
||||
fi
|
||||
}
|
||||
setup_color
|
||||
command_exists() {
|
||||
command -v "$@" >/dev/null 2>&1
|
||||
}
|
||||
error() {
|
||||
echo ${RED}"Error: $@"${RESET} >&2
|
||||
curl -V >/dev/null 2>&1 || {
|
||||
echo "prereq: install curl"
|
||||
opkg info curl | grep -Fqm1 curl || opkg update
|
||||
opkg install curl
|
||||
}
|
||||
|
||||
Download_Files(){
|
||||
local URL=$1
|
||||
local FileName=$2
|
||||
if command_exists curl; then
|
||||
curl -sSLk ${URL} -o ${FileName}
|
||||
elif command_exists wget; then
|
||||
wget -c --no-check-certificate ${URL} -O ${FileName}
|
||||
fi
|
||||
}
|
||||
IPK=`$FCURL "$ISTORE_REPO/Packages.gz" | zcat | grep -m1 '^Filename: luci-app-store.*\.ipk$' | sed -n -e 's/^Filename: \(.\+\)$/\1/p'`
|
||||
|
||||
clean_app(){
|
||||
rm -f /tmp/${luci_store} /tmp/${luci_taskd} /tmp/${xterm} /tmp/${task}
|
||||
}
|
||||
[ -n "$IPK" ] || exit 1
|
||||
|
||||
command_exists opkg || {
|
||||
error "The program only supports Openwrt."
|
||||
clean_app
|
||||
exit 1
|
||||
}
|
||||
$FCURL "$ISTORE_REPO/$IPK" | tar -xzO ./data.tar.gz | tar -xzO ./bin/is-opkg > /tmp/is-opkg
|
||||
|
||||
( set -x; Download_Files ${APP_URL}/${luci_store} /tmp/${luci_store};
|
||||
Download_Files ${APP_URL}/${luci_taskd} /tmp/${luci_taskd};
|
||||
Download_Files ${APP_URL}/${task} /tmp/${task};
|
||||
Download_Files ${APP_URL}/${xterm} /tmp/${xterm}; )
|
||||
|
||||
opkg install --force-reinstall /tmp/${task} /tmp/${xterm} /tmp/${luci_taskd} /tmp/${luci_store}
|
||||
[ -s "/tmp/is-opkg" ] || exit 1
|
||||
|
||||
chmod 755 /tmp/is-opkg
|
||||
/tmp/is-opkg update
|
||||
# /tmp/is-opkg install taskd
|
||||
/tmp/is-opkg opkg install --force-reinstall luci-lib-taskd luci-lib-xterm
|
||||
/tmp/is-opkg opkg install --force-reinstall luci-app-store
|
||||
[ -s "/etc/init.d/tasks" ] || /tmp/is-opkg opkg install --force-reinstall taskd
|
||||
|
@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=Design Theme
|
||||
LUCI_DEPENDS:=
|
||||
PKG_VERSION:=5.4.6
|
||||
PKG_VERSION:=5.4.8
|
||||
PKG_RELEASE:=20230312
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
@ -48,7 +48,7 @@
|
||||
--alertBackground: rgb(230 230 230);
|
||||
--scrollbarColor:#d0d0d0;
|
||||
--ifaceboxBorderColor: #b8b8b8bd;
|
||||
--ifaceboxFontColor: #1a1a1a;
|
||||
--ifaceboxFontColor: #404040;
|
||||
--liSelectedColor: #c5c5c5;
|
||||
--vssrStatusColor: #525f7f;
|
||||
--vssrBoxShadow: 0 0 2rem 0 rgb(136 152 170 / 30%);
|
||||
@ -92,7 +92,7 @@
|
||||
--alertBackground: rgb(30 30 30);
|
||||
--scrollbarColor:#222;
|
||||
--ifaceboxBorderColor: #636363bd;
|
||||
--ifaceboxFontColor: #1a1a1a;
|
||||
--ifaceboxFontColor: #404040;
|
||||
--liSelectedColor: #2f2f2f;
|
||||
--vssrStatusColor: rgb(204, 204, 204);
|
||||
--vssrBoxShadow: 0 0 1rem 0 rgb(0 0 0 / 30%);
|
||||
@ -356,7 +356,7 @@ label.zonebadge{
|
||||
/* background-color: #5bdeae !important; */
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
color: #fefefe;
|
||||
color: #666666;
|
||||
}
|
||||
.zonebadge {
|
||||
/* background-color: var(--tabmenubgColor) !important; */
|
||||
@ -2001,7 +2001,7 @@ div > .cbi-value:nth-of-type(2n) {
|
||||
align-items: center;
|
||||
border-radius: 5px;
|
||||
border: var(--badgeBorder);
|
||||
color: rgb(132,119,116);
|
||||
color: #666666
|
||||
}
|
||||
|
||||
#content_syslog {
|
||||
@ -2418,9 +2418,21 @@ header > .container > .pull-right > * {
|
||||
|
||||
.node-main-login > .main .cbi-input-user,
|
||||
.node-main-login > .main .cbi-input-password {
|
||||
appearance: none;
|
||||
outline: 0;
|
||||
padding: 0 0 0 35px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: 10px 10px;
|
||||
background-size: 18px 18px;
|
||||
min-width: 15rem;
|
||||
}
|
||||
|
||||
.node-main-login > .main .cbi-input-user {
|
||||
background-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="24" height="24" viewBox="0 0 24 24"%3E%3Cpath fill="%23627386" d="M12 4a4 4 0 0 1 4 4a4 4 0 0 1-4 4a4 4 0 0 1-4-4a4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"%2F%3E%3C%2Fsvg%3E');
|
||||
}
|
||||
.node-main-login > .main .cbi-input-password {
|
||||
background-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="24" height="24" viewBox="0 0 24 24"%3E%3Cpath fill="%23627386" d="M12 17a2 2 0 0 0 2-2a2 2 0 0 0-2-2a2 2 0 0 0-2 2a2 2 0 0 0 2 2m6-9a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V10a2 2 0 0 1 2-2h1V6a5 5 0 0 1 5-5a5 5 0 0 1 5 5v2h1m-6-5a3 3 0 0 0-3 3v2h6V6a3 3 0 0 0-3-3Z"%2F%3E%3C%2Fsvg%3E');
|
||||
}
|
||||
.node-main-login footer {
|
||||
bottom: 0;
|
||||
position: absolute;
|
||||
@ -3297,7 +3309,10 @@ form[action="/cgi-bin/luci/admin/network/wireless_join"] input[class="cbi-button
|
||||
color: var(--ifaceboxFontColor);
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.node-network-firewall .zonebadge strong,
|
||||
.node-network-firewall label strong {
|
||||
color: var(--ifaceboxFontColor);
|
||||
}
|
||||
/* fix new version luci-app-openclash style */
|
||||
.node-services-openclash ul li.selected {
|
||||
background-color: var(--liSelectedColor) !important;
|
||||
@ -3327,4 +3342,5 @@ form[action="/cgi-bin/luci/admin/network/wireless_join"] input[class="cbi-button
|
||||
/* adaption plug-in luci-app-watchcat-plus */
|
||||
.node-services-watchcat-plus select[id*="cbi.opt.watchcat"] {
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 310 KiB After Width: | Height: | Size: 117 KiB |
Before Width: | Height: | Size: 293 KiB After Width: | Height: | Size: 301 KiB |
Before Width: | Height: | Size: 462 KiB After Width: | Height: | Size: 442 KiB |
Before Width: | Height: | Size: 326 KiB After Width: | Height: | Size: 330 KiB |
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 117 KiB |