mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-08-03 16:19:32 +08:00
🐤 Sync 2026-07-30 00:01:42
This commit is contained in:
parent
93288fe344
commit
c7db60401c
@ -6,8 +6,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=headscale
|
||||
PKG_VERSION:=0.29.2
|
||||
PKG_RELEASE:=6
|
||||
PKG_VERSION:=0.29.3
|
||||
PKG_RELEASE:=7
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/juanfont/headscale/tar.gz/v$(PKG_VERSION)?
|
||||
|
||||
@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-log-viewer
|
||||
PKG_VERSION:=1.5.0
|
||||
PKG_RELEASE:=3
|
||||
PKG_RELEASE:=4
|
||||
LUCI_TITLE:=Advanced syslog and kernel log (tail, search, etc)
|
||||
LUCI_DEPENDS:=+ucode +ucode-mod-fs
|
||||
LUCI_PKGARCH:=all
|
||||
|
||||
@ -11,29 +11,29 @@ Supported LuCI themes: luci-theme-bootstrap, luci-theme-material, luci-theme-ope
|
||||
|
||||
**OpenWrt >= 25.12:**
|
||||
|
||||
wget --no-check-certificate -O /tmp/luci-app-log-viewer-1.5.0-r3.apk https://github.com/gSpotx2f/packages-openwrt/raw/master/25.12/luci-app-log-viewer-1.5.0-r3.apk
|
||||
apk --allow-untrusted add /tmp/luci-app-log-viewer-1.5.0-r3.apk
|
||||
rm /tmp/luci-app-log-viewer-1.5.0-r3.apk
|
||||
wget --no-check-certificate -O /tmp/luci-app-log-viewer-1.5.0-r4.apk https://github.com/gSpotx2f/packages-openwrt/raw/master/25.12/luci-app-log-viewer-1.5.0-r4.apk
|
||||
apk --allow-untrusted add /tmp/luci-app-log-viewer-1.5.0-r4.apk
|
||||
rm /tmp/luci-app-log-viewer-1.5.0-r4.apk
|
||||
service rpcd restart
|
||||
|
||||
i18n-ru:
|
||||
|
||||
wget --no-check-certificate -O /tmp/luci-i18n-log-viewer-ru-1.5.0-r3.apk https://github.com/gSpotx2f/packages-openwrt/raw/master/25.12/luci-i18n-log-viewer-ru-1.5.0-r3.apk
|
||||
apk --allow-untrusted add /tmp/luci-i18n-log-viewer-ru-1.5.0-r3.apk
|
||||
rm /tmp/luci-i18n-log-viewer-ru-1.5.0-r3.apk
|
||||
wget --no-check-certificate -O /tmp/luci-i18n-log-viewer-ru-1.5.0-r4.apk https://github.com/gSpotx2f/packages-openwrt/raw/master/25.12/luci-i18n-log-viewer-ru-1.5.0-r4.apk
|
||||
apk --allow-untrusted add /tmp/luci-i18n-log-viewer-ru-1.5.0-r4.apk
|
||||
rm /tmp/luci-i18n-log-viewer-ru-1.5.0-r4.apk
|
||||
|
||||
**OpenWrt <= 24.10:**
|
||||
|
||||
wget --no-check-certificate -O /tmp/luci-app-log-viewer_1.5.0-r3_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/24.10/luci-app-log-viewer_1.5.0-r3_all.ipk
|
||||
opkg install /tmp/luci-app-log-viewer_1.5.0-r3_all.ipk
|
||||
rm /tmp/luci-app-log-viewer_1.5.0-r3_all.ipk
|
||||
wget --no-check-certificate -O /tmp/luci-app-log-viewer_1.5.0-r4_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/24.10/luci-app-log-viewer_1.5.0-r4_all.ipk
|
||||
opkg install /tmp/luci-app-log-viewer_1.5.0-r4_all.ipk
|
||||
rm /tmp/luci-app-log-viewer_1.5.0-r4_all.ipk
|
||||
service rpcd restart
|
||||
|
||||
i18n-ru:
|
||||
|
||||
wget --no-check-certificate -O /tmp/luci-i18n-log-viewer-ru_1.5.0-r3_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/24.10/luci-i18n-log-viewer-ru_1.5.0-r3_all.ipk
|
||||
opkg install /tmp/luci-i18n-log-viewer-ru_1.5.0-r3_all.ipk
|
||||
rm /tmp/luci-i18n-log-viewer-ru_1.5.0-r3_all.ipk
|
||||
wget --no-check-certificate -O /tmp/luci-i18n-log-viewer-ru_1.5.0-r4_all.ipk https://github.com/gSpotx2f/packages-openwrt/raw/master/24.10/luci-i18n-log-viewer-ru_1.5.0-r4_all.ipk
|
||||
opkg install /tmp/luci-i18n-log-viewer-ru_1.5.0-r4_all.ipk
|
||||
rm /tmp/luci-i18n-log-viewer-ru_1.5.0-r4_all.ipk
|
||||
|
||||
## Screenshots:
|
||||
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
"file": {
|
||||
"/sbin/logread*": [ "exec" ],
|
||||
"/usr/sbin/logread*": [ "exec" ],
|
||||
"/usr/libexec/logread-ubox*": [ "exec" ],
|
||||
"/bin/dmesg -r": [ "exec" ],
|
||||
"/var/log/messages": [ "read" ],
|
||||
"/var/log/secure": [ "read" ],
|
||||
|
||||
@ -6,7 +6,8 @@
|
||||
"file": {
|
||||
"/sbin/logread*": [ "exec" ],
|
||||
"/usr/sbin/logread*": [ "exec" ],
|
||||
"/bin/dmesg -r": [ "exec" ]
|
||||
"/bin/dmesg -r": [ "exec" ],
|
||||
"/usr/libexec/logread-ubox*": [ "exec" ]
|
||||
},
|
||||
"ubus": {
|
||||
"system": [ "info" ],
|
||||
|
||||
@ -6,8 +6,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-openlist2
|
||||
PKG_VERSION:=1.0.2
|
||||
PKG_RELEASE:=4
|
||||
PKG_VERSION:=1.0.3
|
||||
PKG_RELEASE:=5
|
||||
|
||||
LUCI_TITLE:=LuCI support for openlist
|
||||
LUCI_DEPENDS:=+openlist2
|
||||
|
||||
@ -215,6 +215,7 @@ return view.extend({
|
||||
s.tab('s3', _('Object Storage'));
|
||||
s.tab('ftp', _('FTP'));
|
||||
s.tab('sftp', _('SFTP'));
|
||||
s.tab('mcp', _('MCP'));
|
||||
|
||||
// init
|
||||
o = s.taboption('basic', form.Flag, 'enabled', _('Enabled'));
|
||||
@ -646,6 +647,11 @@ return view.extend({
|
||||
o.default = 5222;
|
||||
o.rmempty = false;
|
||||
|
||||
// mcp
|
||||
o = s.taboption('mcp', form.Flag, 'mcp', _('Enabled MCP'),
|
||||
_('Enable MCP (Model Context Protocol) server.'));
|
||||
o.rmempty = false;
|
||||
|
||||
return m.render();
|
||||
}
|
||||
});
|
||||
|
||||
@ -116,6 +116,10 @@ msgstr ""
|
||||
msgid "SFTP"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:218
|
||||
msgid "MCP"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:220
|
||||
msgid "Enabled"
|
||||
msgstr ""
|
||||
@ -608,6 +612,14 @@ msgstr ""
|
||||
msgid "SFTP Port"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:651
|
||||
msgid "Enabled MCP"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:652
|
||||
msgid "Enable MCP (Model Context Protocol) server."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:20
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:29
|
||||
msgid "No log data."
|
||||
|
||||
@ -117,6 +117,10 @@ msgstr "FTP"
|
||||
msgid "SFTP"
|
||||
msgstr "SFTP"
|
||||
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:218
|
||||
msgid "MCP"
|
||||
msgstr "MCP"
|
||||
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:220
|
||||
msgid "Enabled"
|
||||
msgstr "启用"
|
||||
@ -614,6 +618,14 @@ msgstr "启用 SFTP"
|
||||
msgid "SFTP Port"
|
||||
msgstr "SFTP 端口"
|
||||
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:651
|
||||
msgid "Enabled MCP"
|
||||
msgstr "启用 MCP"
|
||||
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:652
|
||||
msgid "Enable MCP (Model Context Protocol) server."
|
||||
msgstr "启用 MCP(模型上下文协议)服务器。"
|
||||
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:20
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:29
|
||||
msgid "No log data."
|
||||
|
||||
@ -117,6 +117,10 @@ msgstr "FTP"
|
||||
msgid "SFTP"
|
||||
msgstr "SFTP"
|
||||
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:218
|
||||
msgid "MCP"
|
||||
msgstr "MCP"
|
||||
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:220
|
||||
msgid "Enabled"
|
||||
msgstr "啟用"
|
||||
@ -616,6 +620,14 @@ msgstr "啟用 SFTP"
|
||||
msgid "SFTP Port"
|
||||
msgstr "SFTP 埠"
|
||||
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:651
|
||||
msgid "Enabled MCP"
|
||||
msgstr "啟用 MCP"
|
||||
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/basic.js:652
|
||||
msgid "Enable MCP (Model Context Protocol) server."
|
||||
msgstr "啟用 MCP(模型上下文協定)伺服器。"
|
||||
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:20
|
||||
#: luci-app-openlist2/htdocs/luci-static/resources/view/openlist2/logs.js:29
|
||||
msgid "No log data."
|
||||
|
||||
@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-passwall
|
||||
PKG_VERSION:=26.7.24
|
||||
PKG_RELEASE:=195
|
||||
PKG_RELEASE:=196
|
||||
PKG_PO_VERSION:=$(PKG_VERSION)
|
||||
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
|
||||
@ -592,10 +592,6 @@ if singbox_tags:find("with_utls") then
|
||||
o:depends({ [_n("reality")] = true })
|
||||
end
|
||||
|
||||
o = s:option(Flag, _n("anytls_disable_reuse"), translate("Disable TLS Reuse"))
|
||||
o.default = 0
|
||||
o:depends({ [_n("protocol")] = "anytls" })
|
||||
|
||||
o = s:option(ListValue, _n("transport"), translate("Transport"))
|
||||
o:value("tcp", "TCP")
|
||||
o:value("http", "HTTP")
|
||||
|
||||
@ -613,7 +613,6 @@ function gen_outbound(flag, node, tag, proxy_table)
|
||||
idle_session_check_interval = "30s",
|
||||
idle_session_timeout = "30s",
|
||||
min_idle_session = 5,
|
||||
disable_reuse = (node.anytls_disable_reuse == "1") and true or nil,
|
||||
tls = tls
|
||||
}
|
||||
end
|
||||
|
||||
@ -2198,6 +2198,3 @@ msgstr "Gecko 包大小(最大)"
|
||||
|
||||
msgid "valid time (hh:mm)"
|
||||
msgstr "有效时间(hh:mm)"
|
||||
|
||||
msgid "Disable TLS Reuse"
|
||||
msgstr "禁用 TLS 连接复用"
|
||||
|
||||
@ -478,8 +478,6 @@ local function encode_anytls(node)
|
||||
table.insert(p, "insecure=" .. (o.tls.insecure and "1" or "0"))
|
||||
end
|
||||
|
||||
if node["disable-reuse"] then table.insert(p, "disable_reuse=1") end
|
||||
|
||||
if #p > 0 then
|
||||
link = link .. "?" .. table.concat(p, "&")
|
||||
end
|
||||
|
||||
@ -1580,7 +1580,6 @@ local function processData(szType, content, add_mode, group, sub_cfg)
|
||||
end
|
||||
result.port = port
|
||||
result.tls_allowInsecure = params.allowinsecure or params.insecure
|
||||
result.anytls_disable_reuse = params.disable_reuse
|
||||
end
|
||||
elseif szType == 'naive+https' or szType == 'naive+quic' then
|
||||
if has_singbox then
|
||||
|
||||
@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_NAME:=luci-app-tinyfilemanager
|
||||
PKG_VERSION:=2.6
|
||||
PKG_RELEASE:=3
|
||||
PKG_RELEASE:=4
|
||||
|
||||
LUCI_TITLE:=LuCI Tiny File Manager
|
||||
LUCI_DEPENDS:=+php8 +php8-cgi +php8-fastcgi +php8-fpm +php8-mod-session +php8-mod-ctype +php8-mod-fileinfo +php8-mod-zip +php8-mod-iconv +php8-mod-mbstring +coreutils-stat +zoneinfo-asia +bash +curl +tar +inotifywait
|
||||
@ -22,7 +22,7 @@ define Package/$(LUCI_NAME)/conffiles
|
||||
/etc/config/tinyfilemanager
|
||||
endef
|
||||
|
||||
define Package/$(LUCI_NAME)/postinst
|
||||
define Package/$(LUCI_NAME)/preinst
|
||||
#!/bin/sh
|
||||
mkdir -p "$${IPKG_INSTROOT}/www/tinyfilemanager" 2>/dev/null
|
||||
[ ! -d "$${IPKG_INSTROOT}/www/tinyfilemanager/rootfs" ] && ln -s / "$${IPKG_INSTROOT}/www/tinyfilemanager/rootfs"
|
||||
@ -35,9 +35,6 @@ sed -Ei "s|^(memory_limit) *=.*$$|\1 = $$memory_limit|; \
|
||||
s|^(upload_max_filesize) *=.*$$|\1 = $$single_size_limit|; \
|
||||
s|^(max_file_uploads) *=.*$$|\1 = $$otime_uploads_limit|" \
|
||||
"$${IPKG_INSTROOT}/etc/php.ini"
|
||||
# unpack
|
||||
tar -C "$${IPKG_INSTROOT}/www/tinyfilemanager" -xzf "$${IPKG_INSTROOT}/www/tinyfilemanager/index.tgz"
|
||||
rm -f "$${IPKG_INSTROOT}/www/tinyfilemanager/index.tgz"
|
||||
endef
|
||||
|
||||
define Package/$(LUCI_NAME)/prerm
|
||||
|
||||
@ -60,6 +60,21 @@ return view.extend({
|
||||
o.retain = true;
|
||||
o.depends('use_auth', '1');
|
||||
|
||||
o = s.option(form.ListValue, 'autologin_user', _('Auto login user'),
|
||||
_('Automatically login/logout of the specified user based on LuCI credentials.'));
|
||||
o.load = function(section_id) {
|
||||
delete this.keylist;
|
||||
delete this.vallist;
|
||||
|
||||
const users = uci.get(this.config, section_id, 'auth_users');
|
||||
this.value('', _('none'));
|
||||
for (const userpw of users)
|
||||
this.value(userpw.split(':')[0]);
|
||||
|
||||
return this.super('load', section_id);
|
||||
}
|
||||
o.depends('use_auth', '1');
|
||||
|
||||
o = s.option(form.Flag, 'global_readonly', _('Global Readonly'));
|
||||
o.default = o.disabled;
|
||||
o.rmempty = false;
|
||||
|
||||
@ -10,8 +10,10 @@ return view.extend({
|
||||
},
|
||||
|
||||
render() {
|
||||
const sid = L.env.sessionid || '';
|
||||
const url = window.location.protocol + '//' + window.location.hostname + '/tinyfilemanager/' + `?luci_sid=${sid}`;
|
||||
return E('iframe', {
|
||||
src: window.location.protocol + '//' + window.location.hostname + '/tinyfilemanager/',
|
||||
src: url,
|
||||
style: 'width: 100%; min-height: 100vh; border: none; border-radius: 3px;'
|
||||
});
|
||||
}
|
||||
|
||||
@ -1,197 +1,206 @@
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:150
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:151
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:63
|
||||
msgid "Auto login user"
|
||||
msgstr ""
|
||||
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:64
|
||||
msgid ""
|
||||
"Automatically login/logout of the specified user based on LuCI credentials."
|
||||
msgstr ""
|
||||
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:161
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:162
|
||||
msgid "Check update"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:30
|
||||
#: root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:30
|
||||
msgid "Config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:80
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:93
|
||||
msgid "D-M-YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:79
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:92
|
||||
msgid "D.M.YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:81
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:94
|
||||
msgid "D/M/YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:77
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:90
|
||||
msgid "DD-MM-YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:76
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:89
|
||||
msgid "DD.MM.YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:78
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:91
|
||||
msgid "DD/MM/YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:75
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:88
|
||||
msgid "Date format"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:118
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:129
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:44
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:42
|
||||
msgid "Enable Authentication"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:130
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:141
|
||||
msgid "Enable proxy for updater"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:111
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:121
|
||||
msgid "Exclude Files/Folders"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:105
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:118
|
||||
msgid "Favicon path"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:65
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:78
|
||||
msgid "Global Readonly"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:119
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:130
|
||||
msgid "Google Docs"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/root/usr/share/rpcd/acl.d/luci-app-tinyfilemanager.json:3
|
||||
#: root/usr/share/rpcd/acl.d/luci-app-tinyfilemanager.json:3
|
||||
msgid "Grant access to tinyfilemanager procedures"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:93
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:106
|
||||
msgid "H:mm:ss"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:92
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:105
|
||||
msgid "HH:mm:ss"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:69
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:82
|
||||
msgid "Home path"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:47
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:45
|
||||
msgid "Login user name and passwd hash"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:124
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:135
|
||||
msgid "Max upload size (MBytes)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:120
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:131
|
||||
msgid "Microsoft Web Apps"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:3
|
||||
#: root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:3
|
||||
msgid "NAS"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:116
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:127
|
||||
msgid "Online Docs viewer"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:133
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:144
|
||||
msgid "Proxy Protocol"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:143
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:154
|
||||
msgid "Proxy Server"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:57
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:55
|
||||
msgid "Readonly users"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:163
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:171
|
||||
msgid "Releases list"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:34
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:35
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:34
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:35
|
||||
msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:117
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:128
|
||||
msgid "Requires running on open network"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:101
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:114
|
||||
msgid "Show seconds in time"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:95
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:108
|
||||
msgid "TT h:mm:ss"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:94
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:107
|
||||
msgid "TT hh:mm:ss"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:91
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:104
|
||||
msgid "Time format"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:170
|
||||
#: applications/luci-app-tinyfilemanager/root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:11
|
||||
#: applications/luci-app-tinyfilemanager/root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:22
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:178
|
||||
#: root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:11
|
||||
#: root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:22
|
||||
msgid "Tiny File Manager"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:42
|
||||
msgid "To enable SSL support, you may need to install <b>%s</b><br/>"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:170
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:171
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:178
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:179
|
||||
msgid "Uprgade"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:86
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:99
|
||||
msgid "YYYY-M-D"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:83
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:96
|
||||
msgid "YYYY-MM-DD"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:85
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:98
|
||||
msgid "YYYY.M.D"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:82
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:95
|
||||
msgid "YYYY.MM.DD"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:87
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:100
|
||||
msgid "YYYY/M/D"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:84
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:97
|
||||
msgid "YYYY/MM/DD"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:48
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:46
|
||||
msgid ""
|
||||
"You can generate new passwd in <b>File Manager -> Admin -> Help -> Generate "
|
||||
"new</b> or <a href=\"%s\" target=\"_blank\"><b>Here</b></a>."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:97
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:110
|
||||
msgid "h:mm:ss TT"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:96
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:109
|
||||
msgid "hh:mm:ss TT"
|
||||
msgstr ""
|
||||
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:70
|
||||
msgid "none"
|
||||
msgstr ""
|
||||
|
||||
@ -12,199 +12,211 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.12.1-dev\n"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:150
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:151
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:63
|
||||
msgid "Auto login user"
|
||||
msgstr "自动登入用户"
|
||||
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:64
|
||||
msgid ""
|
||||
"Automatically login/logout of the specified user based on LuCI credentials."
|
||||
msgstr "根据 LuCI 凭据自动登入/登出指定用户。"
|
||||
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:161
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:162
|
||||
msgid "Check update"
|
||||
msgstr "检查更新"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:30
|
||||
#: root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:30
|
||||
msgid "Config"
|
||||
msgstr "配置"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:80
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:93
|
||||
msgid "D-M-YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:79
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:92
|
||||
msgid "D.M.YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:81
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:94
|
||||
msgid "D/M/YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:77
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:90
|
||||
msgid "DD-MM-YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:76
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:89
|
||||
msgid "DD.MM.YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:78
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:91
|
||||
msgid "DD/MM/YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:75
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:88
|
||||
msgid "Date format"
|
||||
msgstr "日期格式"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:118
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:129
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:44
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:42
|
||||
msgid "Enable Authentication"
|
||||
msgstr "启用用户验证"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:130
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:141
|
||||
msgid "Enable proxy for updater"
|
||||
msgstr "为更新器启用代理"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:111
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:121
|
||||
msgid "Exclude Files/Folders"
|
||||
msgstr "排除 文件/目录"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:105
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:118
|
||||
msgid "Favicon path"
|
||||
msgstr "Favicon 路径"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:65
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:78
|
||||
msgid "Global Readonly"
|
||||
msgstr "全局只读"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:119
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:130
|
||||
msgid "Google Docs"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/root/usr/share/rpcd/acl.d/luci-app-tinyfilemanager.json:3
|
||||
#: root/usr/share/rpcd/acl.d/luci-app-tinyfilemanager.json:3
|
||||
msgid "Grant access to tinyfilemanager procedures"
|
||||
msgstr "授予访问 LuCI 应用 tinyfilemanager 的权限"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:93
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:106
|
||||
msgid "H:mm:ss"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:92
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:105
|
||||
msgid "HH:mm:ss"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:69
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:82
|
||||
msgid "Home path"
|
||||
msgstr "家目录"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:47
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:45
|
||||
msgid "Login user name and passwd hash"
|
||||
msgstr "登入用户名和密码哈希"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:124
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:135
|
||||
msgid "Max upload size (MBytes)"
|
||||
msgstr "上传大小限制 (MBytes)"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:120
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:131
|
||||
msgid "Microsoft Web Apps"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:3
|
||||
#: root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:3
|
||||
msgid "NAS"
|
||||
msgstr "存储"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:116
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:127
|
||||
msgid "Online Docs viewer"
|
||||
msgstr "在线文档预览器"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:133
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:144
|
||||
msgid "Proxy Protocol"
|
||||
msgstr "代理协议"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:143
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:154
|
||||
msgid "Proxy Server"
|
||||
msgstr "代理服务器"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:57
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:55
|
||||
msgid "Readonly users"
|
||||
msgstr "只读用户组"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:163
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:171
|
||||
msgid "Releases list"
|
||||
msgstr "发布版列表"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:34
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:35
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:34
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:35
|
||||
msgid "Reload"
|
||||
msgstr "重载"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:117
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:128
|
||||
msgid "Requires running on open network"
|
||||
msgstr "需要运行在开放网络"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:101
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:114
|
||||
msgid "Show seconds in time"
|
||||
msgstr "显示秒"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:95
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:108
|
||||
msgid "TT h:mm:ss"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:94
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:107
|
||||
msgid "TT hh:mm:ss"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:91
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:104
|
||||
msgid "Time format"
|
||||
msgstr "时间格式"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:170
|
||||
#: applications/luci-app-tinyfilemanager/root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:11
|
||||
#: applications/luci-app-tinyfilemanager/root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:22
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:178
|
||||
#: root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:11
|
||||
#: root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:22
|
||||
msgid "Tiny File Manager"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:42
|
||||
msgid "To enable SSL support, you may need to install <b>%s</b><br/>"
|
||||
msgstr "要启用 SSL 支持可能需先安装 <b>%s</b><br/>"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:170
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:171
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:178
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:179
|
||||
msgid "Uprgade"
|
||||
msgstr "升级"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:86
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:99
|
||||
msgid "YYYY-M-D"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:83
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:96
|
||||
msgid "YYYY-MM-DD"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:85
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:98
|
||||
msgid "YYYY.M.D"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:82
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:95
|
||||
msgid "YYYY.MM.DD"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:87
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:100
|
||||
msgid "YYYY/M/D"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:84
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:97
|
||||
msgid "YYYY/MM/DD"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:48
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:46
|
||||
msgid ""
|
||||
"You can generate new passwd in <b>File Manager -> Admin -> Help -> Generate "
|
||||
"new</b> or <a href=\"%s\" target=\"_blank\"><b>Here</b></a>."
|
||||
msgstr ""
|
||||
"你可以在 <b>文件管理器 -> Admin -> 帮助 -> 生成新的</b> or <a href=\"%s\" target=\"_blank\"><b>"
|
||||
"这里</b></a>。"
|
||||
"你可以在 <b>文件管理器 -> Admin -> 帮助 -> 生成新的</b> or <a href=\"%s\" "
|
||||
"target=\"_blank\"><b>这里</b></a>。"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:97
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:110
|
||||
msgid "h:mm:ss TT"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:96
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:109
|
||||
msgid "hh:mm:ss TT"
|
||||
msgstr ""
|
||||
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:70
|
||||
msgid "none"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "To enable SSL support, you may need to install <b>%s</b><br/>"
|
||||
#~ msgstr "要启用 SSL 支持可能需先安装 <b>%s</b><br/>"
|
||||
|
||||
@ -12,199 +12,211 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.12.1-dev\n"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:150
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:151
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:63
|
||||
msgid "Auto login user"
|
||||
msgstr "自動登入用戶"
|
||||
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:64
|
||||
msgid ""
|
||||
"Automatically login/logout of the specified user based on LuCI credentials."
|
||||
msgstr "根據 LuCI 憑證自動登入/登出指定用戶。"
|
||||
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:161
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:162
|
||||
msgid "Check update"
|
||||
msgstr "檢查更新"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:30
|
||||
#: root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:30
|
||||
msgid "Config"
|
||||
msgstr "組態"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:80
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:93
|
||||
msgid "D-M-YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:79
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:92
|
||||
msgid "D.M.YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:81
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:94
|
||||
msgid "D/M/YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:77
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:90
|
||||
msgid "DD-MM-YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:76
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:89
|
||||
msgid "DD.MM.YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:78
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:91
|
||||
msgid "DD/MM/YYYY"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:75
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:88
|
||||
msgid "Date format"
|
||||
msgstr "日期格式"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:118
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:129
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:44
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:42
|
||||
msgid "Enable Authentication"
|
||||
msgstr "啟用用戶認證"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:130
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:141
|
||||
msgid "Enable proxy for updater"
|
||||
msgstr "為更新器啟用代理"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:111
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:121
|
||||
msgid "Exclude Files/Folders"
|
||||
msgstr "排除 文件/目錄"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:105
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:118
|
||||
msgid "Favicon path"
|
||||
msgstr "Favicon 路徑"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:65
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:78
|
||||
msgid "Global Readonly"
|
||||
msgstr "全局只讀"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:119
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:130
|
||||
msgid "Google Docs"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/root/usr/share/rpcd/acl.d/luci-app-tinyfilemanager.json:3
|
||||
#: root/usr/share/rpcd/acl.d/luci-app-tinyfilemanager.json:3
|
||||
msgid "Grant access to tinyfilemanager procedures"
|
||||
msgstr "授予訪問 LuCI 應用 tinyfilemanager 的權限"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:93
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:106
|
||||
msgid "H:mm:ss"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:92
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:105
|
||||
msgid "HH:mm:ss"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:69
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:82
|
||||
msgid "Home path"
|
||||
msgstr "家目錄"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:47
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:45
|
||||
msgid "Login user name and passwd hash"
|
||||
msgstr "登入用戶名和密碼雜湊"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:124
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:135
|
||||
msgid "Max upload size (MBytes)"
|
||||
msgstr "上傳大小限制 (MBytes)"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:120
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:131
|
||||
msgid "Microsoft Web Apps"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:3
|
||||
#: root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:3
|
||||
msgid "NAS"
|
||||
msgstr "存儲"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:116
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:127
|
||||
msgid "Online Docs viewer"
|
||||
msgstr "在線文檔預覽器"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:133
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:144
|
||||
msgid "Proxy Protocol"
|
||||
msgstr "代理協議"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:143
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:154
|
||||
msgid "Proxy Server"
|
||||
msgstr "代理伺服器"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:57
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:55
|
||||
msgid "Readonly users"
|
||||
msgstr "只讀用戶組"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:163
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:171
|
||||
msgid "Releases list"
|
||||
msgstr "發佈版本列表"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:34
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:35
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:34
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:35
|
||||
msgid "Reload"
|
||||
msgstr "重載"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:117
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:128
|
||||
msgid "Requires running on open network"
|
||||
msgstr "需要運行在開放網路"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:101
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:114
|
||||
msgid "Show seconds in time"
|
||||
msgstr "顯示秒"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:95
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:108
|
||||
msgid "TT h:mm:ss"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:94
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:107
|
||||
msgid "TT hh:mm:ss"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:91
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:104
|
||||
msgid "Time format"
|
||||
msgstr "時間格式"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:170
|
||||
#: applications/luci-app-tinyfilemanager/root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:11
|
||||
#: applications/luci-app-tinyfilemanager/root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:22
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:178
|
||||
#: root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:11
|
||||
#: root/usr/share/luci/menu.d/luci-app-tinyfilemanager.json:22
|
||||
msgid "Tiny File Manager"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:42
|
||||
msgid "To enable SSL support, you may need to install <b>%s</b><br/>"
|
||||
msgstr "要啟用 SSL 支援可能需先安裝 <b>%s</b><br/>"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:170
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:171
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:178
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:179
|
||||
msgid "Uprgade"
|
||||
msgstr "升級"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:86
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:99
|
||||
msgid "YYYY-M-D"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:83
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:96
|
||||
msgid "YYYY-MM-DD"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:85
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:98
|
||||
msgid "YYYY.M.D"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:82
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:95
|
||||
msgid "YYYY.MM.DD"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:87
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:100
|
||||
msgid "YYYY/M/D"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:84
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:97
|
||||
msgid "YYYY/MM/DD"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:48
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:46
|
||||
msgid ""
|
||||
"You can generate new passwd in <b>File Manager -> Admin -> Help -> Generate "
|
||||
"new</b> or <a href=\"%s\" target=\"_blank\"><b>Here</b></a>."
|
||||
msgstr ""
|
||||
"你可以在 <b>檔案管理器 -> Admin -> 幫助 -> 建立新的</b> or <a href=\"%s\" target=\"_blank\"><b>"
|
||||
"這裡</b></a>。"
|
||||
"你可以在 <b>檔案管理器 -> Admin -> 幫助 -> 建立新的</b> or <a href=\"%s\" "
|
||||
"target=\"_blank\"><b>這裡</b></a>。"
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:97
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:110
|
||||
msgid "h:mm:ss TT"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-tinyfilemanager/htdocs/luci-static/resources/view/tinyfilemanager/config.js:96
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:109
|
||||
msgid "hh:mm:ss TT"
|
||||
msgstr ""
|
||||
|
||||
#: htdocs/luci-static/resources/view/tinyfilemanager/config.js:70
|
||||
msgid "none"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "To enable SSL support, you may need to install <b>%s</b><br/>"
|
||||
#~ msgstr "要啟用 SSL 支援可能需先安裝 <b>%s</b><br/>"
|
||||
|
||||
@ -32,6 +32,7 @@ validate_section() {
|
||||
'use_auth:bool:0' \
|
||||
'auth_users:list(string)' \
|
||||
'readonly_users:list(string)' \
|
||||
'autologin_user:string' \
|
||||
'global_readonly:bool:0' \
|
||||
'root_path:directory' \
|
||||
'date_format:or("d.m.o", "d-m-o", "d/m/o", "j.n.o", "j-n-o", "j/n/o", "o.m.d", "o-m-d", "o/m/d", "o.n.j", "o-n-j", "o/n/j"):d.m.o' \
|
||||
@ -50,6 +51,7 @@ init_config() {
|
||||
s|// --- EDIT BELOW CONFIGURATION CAREFULLY ---|\<?php\n$defconf|; \
|
||||
s|// --- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL ---|?\>|; \
|
||||
/\/\/ if User has the external config file, try to use it to override the default config above/,/^}/d; \
|
||||
/^define(/d; \
|
||||
p \
|
||||
}" "$WORKDIR/index.php" > "$1"
|
||||
|
||||
@ -72,6 +74,7 @@ apply_config() {
|
||||
|
||||
[ -n "$defconf" ] && sed -Ei "s|^\\\$CONFIG\s*=.*|\$CONFIG = '$defconf'\;|" "$_conf"
|
||||
[ "$use_auth" -eq "1" ] && sed -Ei "s|(^\\\$use_auth =)(.+)|\1 true;|" "$_conf" || sed -Ei "s|(^\\\$use_auth =)(.+)|\1 false;|" "$_conf"
|
||||
[ -n "$autologin_user" ] && sed -Ei "s|\?>|\$luci_autologin_user = '$autologin_user';\ninclude '/usr/share/tinyfilemanager/auto-login-base-luci.php';\n\n?>|" "$_conf"
|
||||
[ "$global_readonly" -eq "1" ] && sed -Ei "s|(^\\\$global_readonly =)(.+)|\1 true;|" "$_conf" || sed -Ei "s|(^\\\$global_readonly =)(.+)|\1 false;|" "$_conf"
|
||||
sed -Ei "/^\\\$auth_users /,/\);/{/^ /d}" "$_conf" && sed -Ei "/^\\\$auth_users /a\ $auth_users" "$_conf"
|
||||
sed -Ei "/^\\\$readonly_users /,/\);/{/^ /d}" "$_conf" && sed -Ei "/^\\\$readonly_users /a\ $readonly_users" "$_conf"
|
||||
|
||||
@ -1,5 +1,9 @@
|
||||
#!/bin/sh
|
||||
|
||||
# unpack
|
||||
tar -C /www/tinyfilemanager -xzf /www/tinyfilemanager/index.tgz
|
||||
rm -f /www/tinyfilemanager/index.tgz
|
||||
|
||||
# uhttpd
|
||||
uci -q get uhttpd.main.index_page|grep -i 'index.php' >/dev/null || uci add_list uhttpd.main.index_page='index.php'
|
||||
uci -q get uhttpd.main.interpreter|grep -i '.php=/usr/bin/php-cgi' >/dev/null || uci add_list uhttpd.main.interpreter='.php=/usr/bin/php-cgi'
|
||||
|
||||
@ -0,0 +1,49 @@
|
||||
<?php
|
||||
// Validates LuCI session via ubus on every request.
|
||||
// Auto-login when accessed from LuCI menu (luci_sid passed in URL).
|
||||
// Forces logout when LuCI session expires.
|
||||
|
||||
if (!defined('FM_SESSION_ID')) define('FM_SESSION_ID', 'filemanager');
|
||||
session_name('filemanager');
|
||||
session_start();
|
||||
|
||||
function luci_validate_sid($sid) {
|
||||
if (empty($sid) || !preg_match('/^[a-f0-9]{32}$/', $sid)) return false;
|
||||
$out = shell_exec('ubus call session get \'{"ubus_rpc_session":"' . $sid . '"}\' 2>/dev/null');
|
||||
return $out && strpos($out, '"username"') !== false;
|
||||
}
|
||||
|
||||
// Step 1: luci_sid in URL → validate and auto-login
|
||||
if (!empty($_GET['luci_sid'])) {
|
||||
$sid = preg_replace('/[^a-f0-9]/', '', $_GET['luci_sid']);
|
||||
if (luci_validate_sid($sid)) {
|
||||
$_SESSION['filemanager']['logged'] = $luci_autologin_user;
|
||||
$_SESSION['filemanager']['luci_sid'] = $sid;
|
||||
session_write_close();
|
||||
header('Location: /tinyfilemanager/');
|
||||
exit;
|
||||
} else {
|
||||
unset($_SESSION['filemanager']['logged']);
|
||||
unset($_SESSION['filemanager']['luci_sid']);
|
||||
session_write_close();
|
||||
http_response_code(403);
|
||||
die('LuCI session invalid or expired.');
|
||||
}
|
||||
}
|
||||
|
||||
// Step 2: On every request, re-validate stored LuCI session
|
||||
if (!empty($_SESSION['filemanager']['logged'])) {
|
||||
$sid = $_SESSION['filemanager']['luci_sid'] ?? '';
|
||||
if (!luci_validate_sid($sid)) {
|
||||
// LuCI session expired → force logout
|
||||
unset($_SESSION['filemanager']['logged']);
|
||||
unset($_SESSION['filemanager']['luci_sid']);
|
||||
session_write_close();
|
||||
header('Location: /tinyfilemanager/');
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
session_write_close();
|
||||
|
||||
?>
|
||||
@ -21,10 +21,12 @@
|
||||
styling from _layout.css still applies.
|
||||
|
||||
Chosen design (user-picked variant "彩色级别词", Vercel/Axiom style):
|
||||
fixed-width time · level · source columns so messages start flush; the
|
||||
level is a short uppercase word colored per severity (facility lives in
|
||||
its tooltip), source neutral, err-and-above rows tinted, whole lines with
|
||||
sideways scrolling (the stock textarea's wrap="off" model). Fields are
|
||||
min-width time · level · source columns so messages start flush while
|
||||
every token renders verbatim — year, timezone, colons, ctime padding all
|
||||
kept, nothing truncated — so a copied row is byte-identical to the source
|
||||
line; the level token is colored per severity, source neutral,
|
||||
err-and-above rows tinted, whole lines with sideways scrolling (the stock
|
||||
textarea's wrap="off" model). Fields are
|
||||
inline-blocks inside inline flow (not grid/flex) so the real spaces
|
||||
between them survive into copied text.
|
||||
*/
|
||||
@ -43,6 +45,9 @@
|
||||
@apply font-mono text-xs leading-relaxed;
|
||||
/* Whole lines, sideways scroll (the stock textarea's wrap="off" model). */
|
||||
@apply overflow-x-auto;
|
||||
/* Focusable (tabIndex in the companion JS) so select-all stays inside the
|
||||
log; only keyboard focus draws the ring — a click into the log must not. */
|
||||
@apply focus-visible:ring-focus-ring outline-none focus-visible:ring-2;
|
||||
|
||||
& .log-row {
|
||||
/* max-content width so hover/tint backgrounds span the scrolled width. */
|
||||
@ -61,17 +66,20 @@
|
||||
|
||||
& .log-time {
|
||||
@apply text-text-subtle;
|
||||
@apply md:inline-block md:w-[15ch] md:overflow-hidden md:align-bottom md:whitespace-nowrap;
|
||||
/* ctime stamps are a fixed 24ch; RPC datestrs run longer but uniform. */
|
||||
@apply md:inline-block md:min-w-[24ch] md:align-bottom;
|
||||
}
|
||||
|
||||
& .log-sev {
|
||||
@apply font-semibold tracking-wide uppercase;
|
||||
@apply md:inline-block md:w-[7ch] md:overflow-hidden md:align-bottom md:whitespace-nowrap;
|
||||
/* "authpriv.notice:" is 16ch — the longest real fac.sev token. */
|
||||
@apply font-semibold;
|
||||
@apply md:inline-block md:min-w-[16ch] md:align-bottom;
|
||||
}
|
||||
|
||||
& .log-tag {
|
||||
@apply text-text-muted;
|
||||
@apply md:inline-block md:max-w-[18ch] md:overflow-hidden md:align-bottom md:text-ellipsis md:whitespace-nowrap;
|
||||
/* min-width, not a clamp: long tags extend rather than truncate. */
|
||||
@apply md:inline-block md:min-w-[18ch] md:align-bottom;
|
||||
}
|
||||
|
||||
& .lv-info .log-sev {
|
||||
|
||||
@ -70,61 +70,56 @@
|
||||
return m ? { tag: m[1], msg: m[2] } : { tag: "", msg: rest };
|
||||
}
|
||||
|
||||
// Compress "Jul 24, 2026, 10:59:50 PM UTC"-style stamps (master's RPC path
|
||||
// formats with the *browser* locale). Only en-style patterns are recognized;
|
||||
// anything else is shown untouched rather than guessed at.
|
||||
function shortenTime(datestr) {
|
||||
const m = datestr.match(
|
||||
/^(\w{3}) (\d{1,2}), \d{4}, (\d{1,2}):(\d{2}):(\d{2})\s*(AM|PM)?/,
|
||||
);
|
||||
if (!m) return datestr;
|
||||
let h = parseInt(m[3], 10);
|
||||
if (m[6] === "PM" && h < 12) h += 12;
|
||||
if (m[6] === "AM" && h === 12) h = 0;
|
||||
const hh = (h < 10 ? "0" : "") + h;
|
||||
return `${m[1]} ${m[2].padStart(2, "0")} ${hh}:${m[4]}:${m[5]}`;
|
||||
}
|
||||
|
||||
/* System log line, two shapes:
|
||||
A (master RPC): [<locale datestr>] fac.sev: tag[pid]: msg
|
||||
B (classic logread, Www Mmm dd hh:mm:ss yyyy fac.sev tag[pid]: msg
|
||||
23.05 + 24.10 syslog-wrapper + master's RPC-failure fallback) */
|
||||
23.05 + 24.10 syslog-wrapper + master's RPC-failure fallback)
|
||||
Every captured token is kept verbatim — year, timezone, 12-hour clock,
|
||||
ctime's padded day, the colons — so rejoining the rendered fields with
|
||||
single spaces reproduces the source line byte for byte. The enhancement
|
||||
aligns and colors; it never rewrites. */
|
||||
function parseSyslogLine(line) {
|
||||
let m = line.match(/^\[(.+?)\]\s+(\w+)\.(\w+):\s+([\s\S]*)$/);
|
||||
if (m && FACILITIES.has(m[2]) && SEVERITIES.has(m[3]))
|
||||
return {
|
||||
time: shortenTime(m[1]),
|
||||
fullTime: m[1],
|
||||
time: `[${m[1]}]`,
|
||||
fac: m[2],
|
||||
sev: m[3],
|
||||
sevTok: `${m[2]}.${m[3]}:`,
|
||||
...splitTag(m[4]),
|
||||
};
|
||||
m = line.match(
|
||||
/^\w{3} (\w{3}) +(\d{1,2}) (\d{2}:\d{2}:\d{2}) (\d{4}) (\w+)\.(\w+) ([\s\S]*)$/,
|
||||
/^(\w{3} \w{3} +\d{1,2} \d{2}:\d{2}:\d{2} \d{4}) (\w+)\.(\w+) ([\s\S]*)$/,
|
||||
);
|
||||
if (m && FACILITIES.has(m[5]) && SEVERITIES.has(m[6]))
|
||||
if (m && FACILITIES.has(m[2]) && SEVERITIES.has(m[3]))
|
||||
return {
|
||||
time: `${m[1]} ${m[2].padStart(2, "0")} ${m[3]}`,
|
||||
fullTime: line.slice(0, line.indexOf(` ${m[5]}.${m[6]} `)),
|
||||
fac: m[5],
|
||||
sev: m[6],
|
||||
...splitTag(m[7]),
|
||||
time: m[1],
|
||||
fac: m[2],
|
||||
sev: m[3],
|
||||
sevTok: `${m[2]}.${m[3]}`,
|
||||
...splitTag(m[4]),
|
||||
};
|
||||
return null;
|
||||
}
|
||||
|
||||
/* Kernel log line: `[ 73412.882110] msg`. No severity survives into the
|
||||
text on any LuCI version (both eras strip/drop the <N> prefix), so dmesg
|
||||
gets time/tag/typography only — no level colors, no keyword guessing. */
|
||||
text on any LuCI version (master runs `dmesg -r` and strips the <N>
|
||||
prefix after filtering on it; the classic pages never had it), and kernel
|
||||
messages have no uniform tag grammar — drivers print "name addr.dev
|
||||
port:", bare text, indented continuations — which is why upstream renders
|
||||
dmesg as plain unstyled text. A partial tag split styled only some lines
|
||||
and ate only their colons, so the message stays verbatim: time dimming
|
||||
and typography only. */
|
||||
function parseDmesgLine(line) {
|
||||
const m = line.match(/^\[\s*(\d+\.\d+)\]\s?([\s\S]*)$/);
|
||||
const m = line.match(/^(\[\s*\d+\.\d+\])\s?([\s\S]*)$/);
|
||||
if (!m) return null;
|
||||
return {
|
||||
time: `[${m[1]}]`,
|
||||
fullTime: "",
|
||||
time: m[1],
|
||||
fac: "",
|
||||
sev: "",
|
||||
...splitTag(m[2]),
|
||||
sevTok: "",
|
||||
tag: "",
|
||||
msg: m[2],
|
||||
};
|
||||
}
|
||||
|
||||
@ -140,7 +135,6 @@
|
||||
parseSyslogLine,
|
||||
parseDmesgLine,
|
||||
splitTag,
|
||||
shortenTime,
|
||||
evaluate,
|
||||
PARSE_GATE,
|
||||
};
|
||||
@ -175,18 +169,16 @@
|
||||
const p = entry.parsed;
|
||||
row.className = "log-row" + (p.sev ? ` lv-${SEV_CLASS[p.sev]}` : "");
|
||||
// Real space text nodes between plain inline spans: the row wraps like
|
||||
// terminal output and selection copies clean text. The level is the short
|
||||
// severity word (CSS uppercases and colors it; facility lives in its
|
||||
// tooltip); the source keeps its full name in a tooltip for when the
|
||||
// aligned column truncates it.
|
||||
row.appendChild(span("log-time", p.time, p.fullTime));
|
||||
if (p.sev) {
|
||||
// terminal output, and because every field renders verbatim (punctuation
|
||||
// included) a copied row is byte-identical to the source line.
|
||||
row.appendChild(span("log-time", p.time));
|
||||
if (p.sevTok) {
|
||||
row.appendChild(document.createTextNode(" "));
|
||||
row.appendChild(span("log-sev", p.sev, `${p.fac}.${p.sev}`));
|
||||
row.appendChild(span("log-sev", p.sevTok));
|
||||
}
|
||||
if (p.tag) {
|
||||
row.appendChild(document.createTextNode(" "));
|
||||
row.appendChild(span("log-tag", p.tag, p.tag));
|
||||
row.appendChild(span("log-tag", p.tag + ":"));
|
||||
}
|
||||
row.appendChild(document.createTextNode(" "));
|
||||
row.appendChild(span("log-msg", p.msg));
|
||||
@ -209,6 +201,21 @@
|
||||
if (!viewer) {
|
||||
viewer = document.createElement("div");
|
||||
viewer.className = "syslog-view";
|
||||
// The stock textarea contained Ctrl+A for free — a focused form control
|
||||
// is its own selection context. A plain div is not (the standard switch,
|
||||
// user-select:contain, ships in no browser), so reproduce it: clicking
|
||||
// the log focuses the viewer, and select-all inside it stays inside it.
|
||||
viewer.tabIndex = 0;
|
||||
viewer.addEventListener("keydown", function (e) {
|
||||
if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === "a") {
|
||||
e.preventDefault();
|
||||
const sel = window.getSelection();
|
||||
sel.removeAllRanges();
|
||||
const range = document.createRange();
|
||||
range.selectNodeContents(viewer);
|
||||
sel.addRange(range);
|
||||
}
|
||||
});
|
||||
textarea.insertAdjacentElement("afterend", viewer);
|
||||
container.classList.add("log-enhanced");
|
||||
}
|
||||
@ -227,8 +234,18 @@
|
||||
if (viewer && selectionInside(viewer)) return;
|
||||
lastValue = value;
|
||||
const { rows, ratio } = evaluate(value, parseLine);
|
||||
if (ratio >= PARSE_GATE) render(textarea, container, rows);
|
||||
else teardown(container);
|
||||
if (ratio >= PARSE_GATE) {
|
||||
// Tail-follow: a reader already pinned to the bottom stays pinned as new
|
||||
// lines arrive; any other scroll position is never touched. The content
|
||||
// area scrolls the window (main uses min-h, no inner scroller), and the
|
||||
// `viewer &&` guard keeps the first paint from jumping — same as stock.
|
||||
const follow =
|
||||
viewer &&
|
||||
window.innerHeight + window.scrollY >=
|
||||
document.documentElement.scrollHeight - 40;
|
||||
render(textarea, container, rows);
|
||||
if (follow) window.scrollTo(0, document.documentElement.scrollHeight);
|
||||
} else teardown(container);
|
||||
}
|
||||
|
||||
// Content updates: LuCI's poll rewrites .value, which fires nothing — a
|
||||
|
||||
@ -18,29 +18,29 @@ new Function("module", "exports", "document", "window", source)(
|
||||
undefined,
|
||||
undefined,
|
||||
);
|
||||
const { parseSyslogLine, parseDmesgLine, shortenTime, evaluate, PARSE_GATE } =
|
||||
mod.exports;
|
||||
const { parseSyslogLine, parseDmesgLine, evaluate, PARSE_GATE } = mod.exports;
|
||||
|
||||
test("classic logread format (23.05 syslog, 24.10 syslog-wrapper) parses", () => {
|
||||
const r = parseSyslogLine(
|
||||
"Sat Jul 26 03:14:15 2026 daemon.info dnsmasq-dhcp[1]: DHCPACK(br-lan) 192.168.1.140",
|
||||
);
|
||||
assert.deepEqual(
|
||||
{ time: r.time, fac: r.fac, sev: r.sev, tag: r.tag },
|
||||
{ time: r.time, fac: r.fac, sev: r.sev, sevTok: r.sevTok, tag: r.tag },
|
||||
{
|
||||
time: "Jul 26 03:14:15",
|
||||
time: "Sat Jul 26 03:14:15 2026",
|
||||
fac: "daemon",
|
||||
sev: "info",
|
||||
sevTok: "daemon.info",
|
||||
tag: "dnsmasq-dhcp[1]",
|
||||
},
|
||||
);
|
||||
assert.equal(r.msg, "DHCPACK(br-lan) 192.168.1.140");
|
||||
|
||||
// ctime() pads single-digit days with a space.
|
||||
// ctime() pads single-digit days with a space — kept verbatim.
|
||||
const padded = parseSyslogLine(
|
||||
"Sun Jul 6 09:05:07 2026 daemon.warn odhcpd[2029]: No default route present",
|
||||
);
|
||||
assert.equal(padded.time, "Jul 06 09:05:07");
|
||||
assert.equal(padded.time, "Sun Jul 6 09:05:07 2026");
|
||||
|
||||
// Kernel lines routed through logread; hostapd logs without a pid.
|
||||
assert.equal(
|
||||
@ -58,18 +58,19 @@ test("classic logread format (23.05 syslog, 24.10 syslog-wrapper) parses", () =>
|
||||
});
|
||||
|
||||
test("master RPC bracket format parses across browser locales", () => {
|
||||
// The datestr renders verbatim, brackets and timezone included — the
|
||||
// stamp is UTC-formatted upstream and hiding the zone read as local time.
|
||||
const en = parseSyslogLine(
|
||||
"[Jul 24, 2026, 10:59:50 PM UTC] daemon.info: dnsmasq-dhcp[1]: DHCPREQUEST(br-lan) 192.168.1.140",
|
||||
);
|
||||
assert.equal(en.time, "Jul 24 22:59:50");
|
||||
assert.equal(en.fullTime, "Jul 24, 2026, 10:59:50 PM UTC");
|
||||
assert.equal(en.time, "[Jul 24, 2026, 10:59:50 PM UTC]");
|
||||
assert.equal(en.sevTok, "daemon.info:");
|
||||
|
||||
// timeStyle "full" spells the zone out; still en-shaped, still shortened.
|
||||
assert.equal(
|
||||
parseSyslogLine(
|
||||
"[Jul 24, 2026, 10:59:50 PM Coordinated Universal Time] daemon.warn: odhcpd[2029]: No default route present",
|
||||
).time,
|
||||
"Jul 24 22:59:50",
|
||||
"[Jul 24, 2026, 10:59:50 PM Coordinated Universal Time]",
|
||||
);
|
||||
|
||||
// Non-en datestrs parse fine and display untouched — never guessed at.
|
||||
@ -77,7 +78,26 @@ test("master RPC bracket format parses across browser locales", () => {
|
||||
"[2026年7月24日 GMT 22:59:50] daemon.err: odhcpd[2029]: Failed to send RA",
|
||||
);
|
||||
assert.equal(zh.sev, "err");
|
||||
assert.equal(zh.time, "2026年7月24日 GMT 22:59:50");
|
||||
assert.equal(zh.time, "[2026年7月24日 GMT 22:59:50]");
|
||||
});
|
||||
|
||||
test("rendered tokens rejoin into the source line byte for byte", () => {
|
||||
const lines = [
|
||||
"[Jul 24, 2026, 10:59:50 PM UTC] daemon.info: dnsmasq-dhcp[1]: DHCPREQUEST(br-lan) 192.168.1.140",
|
||||
"[Jul 25, 2026, 4:30:55 PM UTC] kern.info: [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x51af8014]",
|
||||
"Sun Jul 6 09:05:07 2026 daemon.warn odhcpd[2029]: No default route present",
|
||||
"Sat Jul 26 03:14:16 2026 kern.info kernel: [73412.882110] br-lan: port 3(lan3) entered forwarding state",
|
||||
];
|
||||
for (const line of lines) {
|
||||
const p = parseSyslogLine(line);
|
||||
const parts = [p.time, p.sevTok];
|
||||
if (p.tag) parts.push(p.tag + ":");
|
||||
parts.push(p.msg);
|
||||
assert.equal(parts.join(" "), line, line);
|
||||
}
|
||||
const dm = "[ 12.345678] br-lan: port 3(lan3) entered forwarding state";
|
||||
const d = parseDmesgLine(dm);
|
||||
assert.equal([d.time, d.msg].join(" "), dm);
|
||||
});
|
||||
|
||||
test("severity comes from the field, never from message content", () => {
|
||||
@ -105,15 +125,19 @@ test("unknown facility/severity and foreign formats are rejected", () => {
|
||||
assert.equal(parseSyslogLine(""), null);
|
||||
});
|
||||
|
||||
test("dmesg lines: uptime stamp and safe tag split, no severity", () => {
|
||||
test("dmesg lines: uptime stamp only, message verbatim, no severity", () => {
|
||||
// Kernel lines have no uniform tag grammar (upstream renders them as plain
|
||||
// text for the same reason) — a partial split styled only some lines and
|
||||
// ate only their colons, so no tag is ever extracted and the message keeps
|
||||
// its punctuation untouched.
|
||||
const r = parseDmesgLine(
|
||||
"[ 12.345678] br-lan: port 3(lan3) entered forwarding state",
|
||||
);
|
||||
assert.equal(r.time, "[12.345678]");
|
||||
assert.equal(r.tag, "br-lan");
|
||||
assert.equal(r.time, "[ 12.345678]");
|
||||
assert.equal(r.tag, "");
|
||||
assert.equal(r.sev, "");
|
||||
assert.equal(r.msg, "br-lan: port 3(lan3) entered forwarding state");
|
||||
|
||||
// A device path with spaces must not be mistaken for a tag.
|
||||
const pci = parseDmesgLine(
|
||||
"[75821.004518] mt7921e 0000:01:00.0: Message 00000010 timeout",
|
||||
);
|
||||
@ -123,15 +147,6 @@ test("dmesg lines: uptime stamp and safe tag split, no severity", () => {
|
||||
assert.equal(parseDmesgLine("no bracket prefix here"), null);
|
||||
});
|
||||
|
||||
test("shortenTime handles 12-hour edges and leaves unknown shapes alone", () => {
|
||||
assert.equal(shortenTime("Jul 24, 2026, 12:05:01 AM UTC"), "Jul 24 00:05:01");
|
||||
assert.equal(shortenTime("Jul 24, 2026, 12:15:09 PM UTC"), "Jul 24 12:15:09");
|
||||
assert.equal(
|
||||
shortenTime("2026年7月24日 GMT 22:59:50"),
|
||||
"2026年7月24日 GMT 22:59:50",
|
||||
);
|
||||
});
|
||||
|
||||
test("parse gate: mixed content falls back, empty value stays calm", () => {
|
||||
const good = "Sat Jul 26 03:14:15 2026 daemon.info dnsmasq[1]: ok";
|
||||
const bad = "Jul 26 10:00:00 OpenWrt dnsmasq[123]: syslog-ng style";
|
||||
|
||||
@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk
|
||||
LUCI_TITLE:=Aurora Theme (A modern browser theme built with Vite and Tailwind CSS)
|
||||
LUCI_DEPENDS:=+luci-base
|
||||
|
||||
PKG_VERSION:=1.1.8
|
||||
PKG_RELEASE:=60
|
||||
PKG_VERSION:=1.1.10
|
||||
PKG_RELEASE:=61
|
||||
PKG_LICENSE:=Apache-2.0
|
||||
|
||||
LUCI_MINIFY_CSS:=
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
"use strict";!function(){const e=new Set(["kern","user","mail","daemon","auth","syslog","lpr","news","uucp","cron","authpriv","ftp","ntp","security","console","local0","local1","local2","local3","local4","local5","local6","local7","unknown"]),t=new Set(["emerg","alert","crit","err","warn","notice","info","debug"]),n={emerg:"crit",alert:"crit",crit:"crit",err:"err",warn:"warn",notice:"notice",info:"info",debug:"debug"};function o(e){const t=e.match(/^([A-Za-z0-9_.\/-]+(?:\[\d+\])?):\s+([\s\S]*)$/);return t?{tag:t[1],msg:t[2]}:{tag:"",msg:e}}function s(e){const t=e.match(/^(\w{3}) (\d{1,2}), \d{4}, (\d{1,2}):(\d{2}):(\d{2})\s*(AM|PM)?/);if(!t)return e;let n=parseInt(t[3],10);"PM"===t[6]&&n<12&&(n+=12),"AM"===t[6]&&12===n&&(n=0);const o=(n<10?"0":"")+n;return`${t[1]} ${t[2].padStart(2,"0")} ${o}:${t[4]}:${t[5]}`}function c(n){let c=n.match(/^\[(.+?)\]\s+(\w+)\.(\w+):\s+([\s\S]*)$/);return c&&e.has(c[2])&&t.has(c[3])?{time:s(c[1]),fullTime:c[1],fac:c[2],sev:c[3],...o(c[4])}:(c=n.match(/^\w{3} (\w{3}) +(\d{1,2}) (\d{2}:\d{2}:\d{2}) (\d{4}) (\w+)\.(\w+) ([\s\S]*)$/),c&&e.has(c[5])&&t.has(c[6])?{time:`${c[1]} ${c[2].padStart(2,"0")} ${c[3]}`,fullTime:n.slice(0,n.indexOf(` ${c[5]}.${c[6]} `)),fac:c[5],sev:c[6],...o(c[7])}:null)}function l(e){const t=e.match(/^\[\s*(\d+\.\d+)\]\s?([\s\S]*)$/);return t?{time:`[${t[1]}]`,fullTime:"",fac:"",sev:"",...o(t[2])}:null}function a(e,t){const n=(e?e.split(/\n/):[]).map(e=>({line:e,parsed:t(e)})),o=n.reduce((e,t)=>e+(t.parsed?1:0),0);return{rows:n,ratio:n.length?o/n.length:1}}if("undefined"!=typeof module&&module.exports&&(module.exports={parseSyslogLine:c,parseDmesgLine:l,splitTag:o,shortenTime:s,evaluate:a,PARSE_GATE:.8}),"undefined"==typeof document)return;const r=document.body?.dataset?.page||"",d=/(^|-)dmesg(-|$)/.test(r)?l:c;let i=null,u=null;function m(e,t,n){const o=document.createElement("span");return o.className=e,o.textContent=t,n&&(o.title=n),o}function g(e){const t=document.createElement("div");if(!e.parsed)return t.className="log-row",t.textContent=e.line,t;const o=e.parsed;return t.className="log-row"+(o.sev?` lv-${n[o.sev]}`:""),t.appendChild(m("log-time",o.time,o.fullTime)),o.sev&&(t.appendChild(document.createTextNode(" ")),t.appendChild(m("log-sev",o.sev,`${o.fac}.${o.sev}`))),o.tag&&(t.appendChild(document.createTextNode(" ")),t.appendChild(m("log-tag",o.tag,o.tag))),t.appendChild(document.createTextNode(" ")),t.appendChild(m("log-msg",o.msg)),t}function f(){const e=document.getElementById("syslog"),t=document.getElementById("content_syslog");if(!e||!t)return;const n=e.value;if(n===u)return;if(i&&function(e){const t=window.getSelection&&window.getSelection();return!(!t||t.isCollapsed)&&(e.contains(t.anchorNode)||e.contains(t.focusNode))}(i))return;u=n;const{rows:o,ratio:s}=a(n,d);s>=.8?function(e,t,n){i||(i=document.createElement("div"),i.className="syslog-view",e.insertAdjacentElement("afterend",i),t.classList.add("log-enhanced"));const o=document.createDocumentFragment();for(const e of n)o.appendChild(g(e));i.replaceChildren(o)}(e,t,o):function(e){i&&i.remove(),i=null,e.classList.remove("log-enhanced")}(t)}if(setInterval(f,1e3),document.getElementById("syslog"))f();else{const e=new MutationObserver(function(){document.getElementById("syslog")&&(e.disconnect(),f())});e.observe(document.documentElement,{childList:!0,subtree:!0})}}();
|
||||
"use strict";!function(){const e=new Set(["kern","user","mail","daemon","auth","syslog","lpr","news","uucp","cron","authpriv","ftp","ntp","security","console","local0","local1","local2","local3","local4","local5","local6","local7","unknown"]),t=new Set(["emerg","alert","crit","err","warn","notice","info","debug"]),n={emerg:"crit",alert:"crit",crit:"crit",err:"err",warn:"warn",notice:"notice",info:"info",debug:"debug"};function o(e){const t=e.match(/^([A-Za-z0-9_.\/-]+(?:\[\d+\])?):\s+([\s\S]*)$/);return t?{tag:t[1],msg:t[2]}:{tag:"",msg:e}}function s(n){let s=n.match(/^\[(.+?)\]\s+(\w+)\.(\w+):\s+([\s\S]*)$/);return s&&e.has(s[2])&&t.has(s[3])?{time:`[${s[1]}]`,fac:s[2],sev:s[3],sevTok:`${s[2]}.${s[3]}:`,...o(s[4])}:(s=n.match(/^(\w{3} \w{3} +\d{1,2} \d{2}:\d{2}:\d{2} \d{4}) (\w+)\.(\w+) ([\s\S]*)$/),s&&e.has(s[2])&&t.has(s[3])?{time:s[1],fac:s[2],sev:s[3],sevTok:`${s[2]}.${s[3]}`,...o(s[4])}:null)}function c(e){const t=e.match(/^(\[\s*\d+\.\d+\])\s?([\s\S]*)$/);return t?{time:t[1],fac:"",sev:"",sevTok:"",tag:"",msg:t[2]}:null}function l(e,t){const n=(e?e.split(/\n/):[]).map(e=>({line:e,parsed:t(e)})),o=n.reduce((e,t)=>e+(t.parsed?1:0),0);return{rows:n,ratio:n.length?o/n.length:1}}if("undefined"!=typeof module&&module.exports&&(module.exports={parseSyslogLine:s,parseDmesgLine:c,splitTag:o,evaluate:l,PARSE_GATE:.8}),"undefined"==typeof document)return;const a=document.body?.dataset?.page||"",d=/(^|-)dmesg(-|$)/.test(a)?c:s;let r=null,i=null;function u(e,t,n){const o=document.createElement("span");return o.className=e,o.textContent=t,n&&(o.title=n),o}function m(e){const t=document.createElement("div");if(!e.parsed)return t.className="log-row",t.textContent=e.line,t;const o=e.parsed;return t.className="log-row"+(o.sev?` lv-${n[o.sev]}`:""),t.appendChild(u("log-time",o.time)),o.sevTok&&(t.appendChild(document.createTextNode(" ")),t.appendChild(u("log-sev",o.sevTok))),o.tag&&(t.appendChild(document.createTextNode(" ")),t.appendChild(u("log-tag",o.tag+":"))),t.appendChild(document.createTextNode(" ")),t.appendChild(u("log-msg",o.msg)),t}function g(){const e=document.getElementById("syslog"),t=document.getElementById("content_syslog");if(!e||!t)return;const n=e.value;if(n===i)return;if(r&&function(e){const t=window.getSelection&&window.getSelection();return!(!t||t.isCollapsed)&&(e.contains(t.anchorNode)||e.contains(t.focusNode))}(r))return;i=n;const{rows:o,ratio:s}=l(n,d);if(s>=.8){const n=r&&window.innerHeight+window.scrollY>=document.documentElement.scrollHeight-40;!function(e,t,n){r||(r=document.createElement("div"),r.className="syslog-view",r.tabIndex=0,r.addEventListener("keydown",function(e){if((e.ctrlKey||e.metaKey)&&"a"===e.key.toLowerCase()){e.preventDefault();const t=window.getSelection();t.removeAllRanges();const n=document.createRange();n.selectNodeContents(r),t.addRange(n)}}),e.insertAdjacentElement("afterend",r),t.classList.add("log-enhanced"));const o=document.createDocumentFragment();for(const e of n)o.appendChild(m(e));r.replaceChildren(o)}(e,t,o),n&&window.scrollTo(0,document.documentElement.scrollHeight)}else!function(e){r&&r.remove(),r=null,e.classList.remove("log-enhanced")}(t)}if(setInterval(g,1e3),document.getElementById("syslog"))g();else{const e=new MutationObserver(function(){document.getElementById("syslog")&&(e.disconnect(),g())});e.observe(document.documentElement,{childList:!0,subtree:!0})}}();
|
||||
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
||||
PKG_NAME:=openlist2
|
||||
PKG_VERSION:=4.2.4
|
||||
PKG_WEB_VERSION:=4.2.4
|
||||
PKG_RELEASE:=11
|
||||
PKG_RELEASE:=12
|
||||
|
||||
PKG_SOURCE:=openlist-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/OpenListTeam/OpenList/tar.gz/v$(PKG_VERSION)?
|
||||
@ -28,7 +28,7 @@ define Download/openlist-frontend
|
||||
HASH:=skip
|
||||
endef
|
||||
|
||||
PKG_BUILD_DEPENDS:=golang/host fuse
|
||||
PKG_BUILD_DEPENDS:=golang/host
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
PKG_BUILD_FLAGS:=no-mips16
|
||||
@ -42,8 +42,9 @@ GO_PKG_LDFLAGS:= \
|
||||
-X '$(GO_PKG)/internal/conf.GitCommit=tarball/$(shell echo $(PKG_HASH) | cut -c 1-7)' \
|
||||
-X '$(GO_PKG)/internal/conf.Version=v$(PKG_VERSION) (OpenWrt $(ARCH_PACKAGES))' \
|
||||
-X '$(GO_PKG)/internal/conf.WebVersion=v$(PKG_WEB_VERSION)'
|
||||
GO_PKG_EXCLUDES:=internal/fuse
|
||||
ifneq ($(CONFIG_ARCH_64BIT),y)
|
||||
GO_PKG_EXCLUDES:=drivers/lark
|
||||
GO_PKG_EXCLUDES+=drivers/lark
|
||||
endif
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
@ -75,10 +76,6 @@ ifeq ($(ARCH),arm)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(CONFIG_USE_MUSL),)
|
||||
TARGET_CFLAGS += -D_LARGEFILE64_SOURCE
|
||||
endif
|
||||
|
||||
define Build/Prepare
|
||||
$(call Build/Prepare/Default)
|
||||
mkdir -p $(PKG_BUILD_DIR)/public/dist
|
||||
|
||||
@ -76,3 +76,4 @@ config openlist2
|
||||
option enable_pasv_conn_ip_check '1'
|
||||
option sftp '0'
|
||||
option sftp_port '5222'
|
||||
option mcp '0'
|
||||
|
||||
@ -184,6 +184,9 @@ get_config() {
|
||||
config_get sftp "$1" sftp 0
|
||||
config_get sftp_port "$1" sftp_port 5222
|
||||
|
||||
# mcp
|
||||
config_get mcp "$1" mcp 0
|
||||
|
||||
# init jwt_secret
|
||||
if [ -z "$jwt_secret" ]; then
|
||||
jwt_secret=$(tr -cd "a-zA-Z0-9" < "/dev/urandom" | head -c16)
|
||||
@ -419,6 +422,11 @@ start_service() {
|
||||
json_add_string "listen" ":$sftp_port"
|
||||
json_close_object
|
||||
|
||||
# mcp
|
||||
json_add_object "mcp"
|
||||
json_add_boolean "enable" "$mcp"
|
||||
json_close_object
|
||||
|
||||
json_add_string "last_launched_version" "$last_launched_version"
|
||||
json_add_string "proxy_address" "$proxy_address"
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user