summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--applications/luci-app-nut/po/en/nut.po603
-rw-r--r--applications/luci-app-rp-pppoe-server/po/en/rp-pppoe-server.po101
-rw-r--r--applications/luci-app-uhttpd/po/en/uhttpd.po265
-rwxr-xr-xbuild/i18n-add-language.sh37
-rw-r--r--modules/luci-base/po/zh-cn/base.po38
-rw-r--r--themes/luci-theme-rosy/htdocs/luci-static/rosy/cascade.css335
-rw-r--r--themes/luci-theme-rosy/htdocs/luci-static/rosy/js/ScrollY.js1
-rwxr-xr-xthemes/luci-theme-rosy/htdocs/luci-static/rosy/js/script.js48
-rwxr-xr-xthemes/luci-theme-rosy/luasrc/view/themes/rosy/footer.htm4
-rw-r--r--themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm5
10 files changed, 1367 insertions, 70 deletions
diff --git a/applications/luci-app-nut/po/en/nut.po b/applications/luci-app-nut/po/en/nut.po
new file mode 100644
index 0000000000..0f22c26ae0
--- /dev/null
+++ b/applications/luci-app-nut/po/en/nut.po
@@ -0,0 +1,603 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2019-01-09 06:58-0500\n"
+"Last-Translator: Daniel F. Dickinson <cshored@thecshore.com>\n"
+"Language-Team: English\n"
+"Language: en\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:216
+msgid "Additional Shutdown Time(s)"
+msgstr "Additional Shutdown Time(s)"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:37
+msgid "Addresses on which to listen"
+msgstr "Addresses on which to listen"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:23
+msgid "Allowed actions"
+msgstr "Allowed actions"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:20
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:188
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:217
+msgid "As configured by NUT"
+msgstr "As configured by NUT"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:150
+msgid "Bytes to read from interrupt pipe"
+msgstr "Bytes to read from interrupt pipe"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:174
+msgid "CA Certificate path"
+msgstr "CA Certificate path"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:73
+msgid "Certificate file (SSL)"
+msgstr "Certificate file (SSL)"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:63
+msgid "Communications lost message"
+msgstr "Communications lost message"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:60
+msgid "Communications restored message"
+msgstr "Communications restored message"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:35
+msgid "Control UPS via CGI"
+msgstr "Control UPS via CGI"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:43
+msgid "Deadtime"
+msgstr "Deadtime"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:87
+msgid "Default for UPSes without this field."
+msgstr "Default for UPSes without this field."
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:177
+msgid "Delay for kill power command"
+msgstr "Delay for kill power command"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:181
+msgid "Delay to power on UPS if power returns after kill power"
+msgstr "Delay to power on UPS if power returns after kill power"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:129
+msgid "Description (Display)"
+msgstr "Description (Display)"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:32
+msgid "Display name"
+msgstr "Display name"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:169
+msgid "Don't lock port when starting driver"
+msgstr "Don't lock port when starting driver"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:132
+msgid "Driver"
+msgstr "Driver"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:114
+msgid "Driver Configuration"
+msgstr "Driver Configuration"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:77
+msgid "Driver Global Settings"
+msgstr "Driver Global Settings"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:83
+msgid "Driver Path"
+msgstr "Driver Path"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:212
+msgid "Driver Shutdown Order"
+msgstr "Driver Shutdown Order"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:106
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:244
+msgid "Driver waits for data to be consumed by upsd before publishing more."
+msgstr "Driver waits for data to be consumed by upsd before publishing more."
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:59
+msgid "Drop privileges to this user"
+msgstr "Drop privileges to this user"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:40
+msgid "Enable"
+msgstr "Enable"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:138
+msgid ""
+"Enables a hotplug script that makes all ttyUSB devices (e.g. serial USB) "
+"group read-write as user 'nut'"
+msgstr ""
+"Enables a hotplug script that makes all ttyUSB devices (e.g. serial USB) "
+"group read-write as user 'nut'"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:93
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:102
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:110
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:118
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:126
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:134
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:142
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:150
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:158
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:166
+msgid "Execute notify command"
+msgstr "Execute notify command"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:26
+msgid "Forced Shutdown"
+msgstr "Forced Shutdown"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:57
+msgid "Forced shutdown message"
+msgstr "Forced shutdown message"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:10
+msgid "Global Settings"
+msgstr "Global Settings"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:13
+msgid "Go to NUT CGI"
+msgstr "Go to NUT CGI"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:16
+msgid "Host"
+msgstr "Host"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:23
+msgid "Hostname or IP address"
+msgstr "Hostname or IP address"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:191
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:220
+msgid "Hostname or address of UPS"
+msgstr "Hostname or address of UPS"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:39
+msgid "Hot Sync"
+msgstr "Hot Sync"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:41
+msgid "IP Address"
+msgstr "IP Address"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:95
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:104
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:112
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:120
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:128
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:136
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:144
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:152
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:160
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:168
+msgid "Ignore"
+msgstr "Ignore"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:142
+msgid "Ignore Low Battery"
+msgstr "Ignore Low Battery"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:29
+msgid "Instant commands"
+msgstr "Instant commands"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:146
+msgid "Interrupt Only"
+msgstr "Interrupt Only"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:150
+msgid "Interrupt Size"
+msgstr "Interrupt Size"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:54
+msgid "Low battery message"
+msgstr "Low battery message"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:163
+msgid "Manufacturer (Display)"
+msgstr "Manufacturer (Display)"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:34
+msgid "Master"
+msgstr "Master"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:154
+msgid "Max USB HID Length Reported"
+msgstr "Max USB HID Length Reported"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:54
+msgid "Maximum Age of Data"
+msgstr "Maximum Age of Data"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:87
+msgid "Maximum Start Delay"
+msgstr "Maximum Start Delay"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:67
+msgid "Maximum connections"
+msgstr "Maximum connections"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:91
+msgid "Maximum number of times to try starting a driver."
+msgstr "Maximum number of times to try starting a driver."
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:101
+msgid "Maximum time in seconds between refresh of UPS status"
+msgstr "Maximum time in seconds between refresh of UPS status"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:91
+msgid "Maxium Retries"
+msgstr "Maxium Retries"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:158
+msgid "Maxium Start Delay"
+msgstr "Maxium Start Delay"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:17
+msgid "Minimum required number or power supplies"
+msgstr "Minimum required number or power supplies"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:166
+msgid "Model (Display)"
+msgstr "Model (Display)"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:9
+msgid "NUT CGI Access"
+msgstr "NUT CGI Access"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:12
+msgid "NUT Users"
+msgstr "NUT Users"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:188
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:217
+msgid "Name of UPS"
+msgstr "Name of UPS"
+
+#: applications/luci-app-nut/luasrc/controller/nut.lua:11
+msgid "Network UPS Tools"
+msgstr "Network UPS Tools"
+
+#: applications/luci-app-nut/luasrc/controller/nut.lua:22
+#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:6
+msgid "Network UPS Tools (CGI)"
+msgstr "Network UPS Tools (CGI)"
+
+#: applications/luci-app-nut/luasrc/controller/nut.lua:18
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:7
+msgid "Network UPS Tools (Monitor)"
+msgstr "Network UPS Tools (Monitor)"
+
+#: applications/luci-app-nut/luasrc/controller/nut.lua:14
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:9
+msgid "Network UPS Tools (Server)"
+msgstr "Network UPS Tools (Server)"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:7
+msgid "Network UPS Tools CGI Configuration"
+msgstr "Network UPS Tools CGI Configuration"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:8
+msgid "Network UPS Tools Monitoring Configuration"
+msgstr "Network UPS Tools Monitoring Configuration"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:10
+msgid "Network UPS Tools Server Configuration"
+msgstr "Network UPS Tools Server Configuration"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:169
+msgid "No Lock"
+msgstr "No Lock"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:72
+msgid "No communications message"
+msgstr "No communications message"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:173
+msgid "No low/high voltage transfer OIDs"
+msgstr "No low/high voltage transfer OIDs"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:75
+msgid "No parent message"
+msgstr "No parent message"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:90
+msgid "Notification defaults"
+msgstr "Notification defaults"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:26
+msgid "Notify command"
+msgstr "Notify command"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:99
+msgid "Notify when back online"
+msgstr "Notify when back online"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:163
+msgid "Notify when battery needs replacing"
+msgstr "Notify when battery needs replacing"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:147
+msgid "Notify when communications lost"
+msgstr "Notify when communications lost"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:139
+msgid "Notify when communications restored"
+msgstr "Notify when communications restored"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:131
+msgid "Notify when force shutdown"
+msgstr "Notify when force shutdown"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:115
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:123
+msgid "Notify when low battery"
+msgstr "Notify when low battery"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:107
+msgid "Notify when on battery"
+msgstr "Notify when on battery"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:155
+msgid "Notify when shutting down"
+msgstr "Notify when shutting down"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:177
+msgid "Off Delay(s)"
+msgstr "Off Delay(s)"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:181
+msgid "On Delay(s)"
+msgstr "On Delay(s)"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:51
+msgid "On battery message"
+msgstr "On battery message"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:48
+msgid "Online message"
+msgstr "Online message"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:208
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:237
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:19
+msgid "Password"
+msgstr "Password"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:174
+msgid "Path containing ca certificates to match against host certificate"
+msgstr "Path containing ca certificates to match against host certificate"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:83
+msgid "Path to drivers (instead of default)"
+msgstr "Path to drivers (instead of default)"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:63
+msgid "Path to state file"
+msgstr "Path to state file"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:54
+msgid "Period after which data is considered stale"
+msgstr "Period after which data is considered stale"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:101
+msgid "Poll Interval"
+msgstr "Poll Interval"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:29
+msgid "Poll frequency"
+msgstr "Poll frequency"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:34
+msgid "Poll frequency alert"
+msgstr "Poll frequency alert"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:197
+msgid "Polling Frequency(s)"
+msgstr "Polling Frequency(s)"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:27
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:195
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:224
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:46
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:202
+msgid "Port"
+msgstr "Port"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:200
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:229
+msgid "Power value"
+msgstr "Power value"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:206
+msgid "Product (regex)"
+msgstr "Product (regex)"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:69
+msgid "Replace battery message"
+msgstr "Replace battery message"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:178
+msgid "Require SSL and make sure server CN matches hostname"
+msgstr "Require SSL and make sure server CN matches hostname"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:96
+msgid "Retry Delay"
+msgstr "Retry Delay"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:32
+msgid "Role"
+msgstr "Role"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:80
+msgid "Run drivers in a chroot(2) environment"
+msgstr "Run drivers in a chroot(2) environment"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:14
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:59
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:110
+msgid "RunAs User"
+msgstr "RunAs User"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:125
+msgid "SNMP Community"
+msgstr "SNMP Community"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:222
+msgid "SNMP retries"
+msgstr "SNMP retries"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:226
+msgid "SNMP timeout(s)"
+msgstr "SNMP timeout(s)"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:230
+msgid "SNMP version"
+msgstr "SNMP version"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:232
+msgid "SNMPv1"
+msgstr "SNMPv1"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:233
+msgid "SNMPv2c"
+msgstr "SNMPv2c"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:234
+msgid "SNMPv3"
+msgstr "SNMPv3"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:219
+msgid "Serial Number"
+msgstr "Serial Number"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:138
+msgid "Set USB serial port permissions"
+msgstr "Set USB serial port permissions"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:25
+msgid "Set variables"
+msgstr "Set variables"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:22
+msgid "Shutdown command"
+msgstr "Shutdown command"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:66
+msgid "Shutdown message"
+msgstr "Shutdown message"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:33
+msgid "Slave"
+msgstr "Slave"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:106
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:244
+msgid "Synchronous Communication"
+msgstr "Synchronous Communication"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:115
+msgid "The name of this section will be used as UPS name elsewhere"
+msgstr "The name of this section will be used as UPS name elsewhere"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:96
+msgid "Time in seconds between driver start retry attempts."
+msgstr "Time in seconds between driver start retry attempts."
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:158
+msgid "Time in seconds that upsdrvctl will wait for driver to finish starting"
+msgstr "Time in seconds that upsdrvctl will wait for driver to finish starting"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:183
+msgid "UPS Master"
+msgstr "UPS Master"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:51
+msgid "UPS Server Global Settings"
+msgstr "UPS Server Global Settings"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:212
+msgid "UPS Slave"
+msgstr "UPS Slave"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_cgi.lua:20
+msgid "UPS name"
+msgstr "UPS name"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:121
+msgid "USB Bus(es) (regex)"
+msgstr "USB Bus(es) (regex)"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:209
+msgid "USB Product Id"
+msgstr "USB Product Id"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:241
+msgid "USB Vendor Id"
+msgstr "USB Vendor Id"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:29
+msgid ""
+"Use upscmd -l to see full list which the commands your UPS supports "
+"(requires upscmd package)"
+msgstr ""
+"Use upscmd -l to see full list which the commands your UPS supports "
+"(requires upscmd package)"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:110
+msgid ""
+"User as which to execute driver; requires device file accessed by driver to "
+"be read-write for that user."
+msgstr ""
+"User as which to execute driver; requires device file accessed by driver to "
+"be read-write for that user."
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:205
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:234
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:16
+msgid "Username"
+msgstr "Username"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:238
+msgid "Vendor (regex)"
+msgstr "Vendor (regex)"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:178
+msgid "Verify all connection with SSL"
+msgstr "Verify all connection with SSL"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:154
+msgid "Workaround for buggy firmware"
+msgstr "Workaround for buggy firmware"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:94
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:103
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:111
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:119
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:127
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:135
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:143
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:151
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:159
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:167
+msgid "Write to syslog"
+msgstr "Write to syslog"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_server.lua:80
+msgid "chroot"
+msgstr "chroot"
+
+#: applications/luci-app-nut/luasrc/model/cbi/nut_monitor.lua:14
+msgid "upsmon drops privileges to this user"
+msgstr "upsmon drops privileges to this user"
diff --git a/applications/luci-app-rp-pppoe-server/po/en/rp-pppoe-server.po b/applications/luci-app-rp-pppoe-server/po/en/rp-pppoe-server.po
new file mode 100644
index 0000000000..451e44de1e
--- /dev/null
+++ b/applications/luci-app-rp-pppoe-server/po/en/rp-pppoe-server.po
@@ -0,0 +1,101 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2019-01-09 07:01-0500\n"
+"Last-Translator: Daniel F. Dickinson <cshored@thecshore.com>\n"
+"Language-Team: English\n"
+"Language: en\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:19
+msgid "Access Concentrator Name"
+msgstr "Access Concentrator Name"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:32
+msgid "First remote IP"
+msgstr "First remote IP"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:29
+msgid "IP of listening side"
+msgstr "IP of listening side"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:44
+msgid ""
+"Instead of starting at beginning and going to end, randomize session number"
+msgstr ""
+"Instead of starting at beginning and going to end, randomize session number"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:15
+msgid "Interface"
+msgstr "Interface"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:15
+msgid "Interface on which to listen."
+msgstr "Interface on which to listen."
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:62
+msgid "MSS"
+msgstr "MSS"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:35
+msgid "Maximum sessions"
+msgstr "Maximum sessions"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:25
+msgid "Maximum sessions per peer"
+msgstr "Maximum sessions per peer"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:52
+msgid "Offset"
+msgstr "Offset"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:40
+msgid "Options file"
+msgstr "Options file"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:52
+msgid "PPP offset"
+msgstr "PPP offset"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:47
+msgid "PPP unit number"
+msgstr "PPP unit number"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:9
+msgid "PPPoE Server Configuration"
+msgstr "PPPoE Server Configuration"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/controller/rp-pppoe-server.lua:11
+msgid "RP PPPoE Server"
+msgstr "RP PPPoE Server"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:44
+msgid "Random session selection"
+msgstr "Random session selection"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:8
+msgid "Roaring Penguin PPPoE Server"
+msgstr "Roaring Penguin PPPoE Server"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:11
+msgid "Server Configuration"
+msgstr "Server Configuration"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:22
+msgid "Service Name"
+msgstr "Service Name"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:68
+msgid "Sync"
+msgstr "Sync"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:57
+msgid "Timeout"
+msgstr "Timeout"
+
+#: applications/luci-app-rp-pppoe-server/luasrc/model/cbi/rp-pppoe-server.lua:47
+msgid "Unit"
+msgstr "Unit"
diff --git a/applications/luci-app-uhttpd/po/en/uhttpd.po b/applications/luci-app-uhttpd/po/en/uhttpd.po
new file mode 100644
index 0000000000..67c06d8547
--- /dev/null
+++ b/applications/luci-app-uhttpd/po/en/uhttpd.po
@@ -0,0 +1,265 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2019-01-09 07:00-0500\n"
+"Last-Translator: Daniel F. Dickinson <cshored@theshore.com>\n"
+"Language-Team: English\n"
+"Language: en\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:135
+msgid ""
+"(/old/path=/new/path) or (just /old/path which becomes /cgi-prefix/old/path)"
+msgstr ""
+"(/old/path=/new/path) or (just /old/path which becomes /cgi-prefix/old/path)"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:145
+msgid "404 Error"
+msgstr "404 Error"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:7
+msgid "A lightweight single-threaded HTTP(S) server"
+msgstr "A lightweight single-threaded HTTP(S) server"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:20
+msgid "Advanced Settings"
+msgstr "Advanced Settings"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:135
+msgid "Aliases"
+msgstr "Aliases"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:149
+msgid "Base directory for files to be served"
+msgstr "Base directory for files to be served"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:22
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:50
+msgid "Bind to specific interface:port (by specifying interface address"
+msgstr "Bind to specific interface:port (by specifying interface address"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:126
+msgid "CGI filetype handler"
+msgstr "CGI filetype handler"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:153
+msgid "CGI is disabled if not present."
+msgstr "CGI is disabled if not present."
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:142
+msgid "Config file (e.g. for credentials for Basic Auth)"
+msgstr "Config file (e.g. for credentials for Basic Auth)"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:187
+msgid "Connection reuse"
+msgstr "Connection reuse"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:221
+msgid "Country"
+msgstr "Country"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:173
+msgid "Disable JSON-RPC authorization via ubus session API"
+msgstr "Disable JSON-RPC authorization via ubus session API"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:129
+msgid "Do not follow symlinks outside document root"
+msgstr "Do not follow symlinks outside document root"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:132
+msgid "Do not generate directory listings."
+msgstr "Do not generate directory listings."
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:148
+msgid "Document root"
+msgstr "Document root"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:122
+msgid "E.g specify with index.html and index.php when using PHP"
+msgstr "E.g specify with index.html and index.php when using PHP"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:160
+msgid "Embedded Lua interpreter is disabled if not present."
+msgstr "Embedded Lua interpreter is disabled if not present."
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:169
+msgid "Enable JSON-RPC Cross-Origin Resource Support"
+msgstr "Enable JSON-RPC Cross-Origin Resource Support"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:19
+msgid "For settings primarily geared to serving more than the web UI"
+msgstr "For settings primarily geared to serving more than the web UI"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:19
+msgid "Full Web Server Settings"
+msgstr "Full Web Server Settings"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:160
+msgid "Full real path to handler for Lua scripts"
+msgstr "Full real path to handler for Lua scripts"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:18
+msgid "General Settings"
+msgstr "General Settings"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:22
+msgid "HTTP listeners (address:port)"
+msgstr "HTTP listeners (address:port)"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:94
+msgid "HTTPS Certificate (DER Encoded)"
+msgstr "HTTPS Certificate (DER Encoded)"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:96
+msgid "HTTPS Private Key (DER Encoded)"
+msgstr "HTTPS Private Key (DER Encoded)"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:50
+msgid "HTTPS listener (address:port)"
+msgstr "HTTPS listener (address:port)"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:90
+msgid "Ignore private IPs on public interface"
+msgstr "Ignore private IPs on public interface"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:122
+msgid "Index page(s)"
+msgstr "Index page(s)"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:126
+msgid ""
+"Interpreter to associate with file endings ('suffix=handler', e.g. '.php=/"
+"usr/bin/php-cgi')"
+msgstr ""
+"Interpreter to associate with file endings ('suffix=handler', e.g. '.php=/"
+"usr/bin/php-cgi')"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:214
+msgid "Length of key in bits"
+msgstr "Length of key in bits"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:227
+msgid "Location"
+msgstr "Location"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:197
+msgid "Maximum number of connections"
+msgstr "Maximum number of connections"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:201
+msgid "Maximum number of script requests"
+msgstr "Maximum number of script requests"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:177
+msgid "Maximum wait time for Lua, CGI, or ubus execution"
+msgstr "Maximum wait time for Lua, CGI, or ubus execution"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:182
+msgid "Maximum wait time for network activity"
+msgstr "Maximum wait time for network activity"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:166
+msgid "Override path for ubus socket"
+msgstr "Override path for ubus socket"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:153
+msgid "Path prefix for CGI scripts"
+msgstr "Path prefix for CGI scripts"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:90
+msgid ""
+"Prevent access from private (RFC1918) IPs on an interface if it has an "
+"public IP address"
+msgstr ""
+"Prevent access from private (RFC1918) IPs on an interface if it has an "
+"public IP address"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:138
+msgid "Realm for Basic Auth"
+msgstr "Realm for Basic Auth"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:86
+msgid "Redirect all HTTP to HTTPS"
+msgstr "Redirect all HTTP to HTTPS"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:109
+msgid "Remove configuration for certificate and key"
+msgstr "Remove configuration for certificate and key"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:98
+msgid "Remove old certificate and key"
+msgstr "Remove old certificate and key"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:218
+msgid "Server Hostname"
+msgstr "Server Hostname"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:20
+msgid ""
+"Settings which are either rarely needed or which affect serving the WebUI"
+msgstr ""
+"Settings which are either rarely needed or which affect serving the WebUI"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:224
+msgid "State"
+msgstr "State"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:192
+msgid "TCP Keepalive"
+msgstr "TCP Keepalive"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:110
+msgid "This permanently deletes the cert, key, and configuration to use same."
+msgstr "This permanently deletes the cert, key, and configuration to use same."
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:210
+msgid "Valid for # of Days"
+msgstr "Valid for # of Days"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:145
+msgid ""
+"Virtual URL or CGI script to display on status '404 Not Found'. Must begin "
+"with '/'"
+msgstr ""
+"Virtual URL or CGI script to display on status '404 Not Found'. Must begin "
+"with '/'"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:156
+msgid "Virtual path prefix for Lua scripts"
+msgstr "Virtual path prefix for Lua scripts"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:163
+msgid "Virtual path prefix for ubus via JSON-RPC integration"
+msgstr "Virtual path prefix for ubus via JSON-RPC integration"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:142
+msgid "Will not use HTTP authentication if not present"
+msgstr "Will not use HTTP authentication if not present"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:218
+msgid "a.k.a CommonName"
+msgstr "a.k.a CommonName"
+
+#: applications/luci-app-uhttpd/luasrc/controller/uhttpd/uhttpd.lua:13
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:6
+msgid "uHTTPd"
+msgstr "uHTTPd"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:205
+msgid "uHTTPd Self-signed Certificate Parameters"
+msgstr "uHTTPd Self-signed Certificate Parameters"
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:99
+msgid ""
+"uHTTPd will generate a new self-signed certificate using the configuration "
+"shown below."
+msgstr ""
+"uHTTPd will generate a new self-signed certificate using the configuration "
+"shown below."
+
+#: applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua:163
+msgid "ubus integration is disabled if not present"
+msgstr "ubus integration is disabled if not present"
diff --git a/build/i18n-add-language.sh b/build/i18n-add-language.sh
new file mode 100755
index 0000000000..24203c2331
--- /dev/null
+++ b/build/i18n-add-language.sh
@@ -0,0 +1,37 @@
+#!/usr/bin/env bash
+
+LANG=$1
+
+case "$LANG" in
+ [a-z][a-z]|[a-z][a-z]-[a-z][a-z]) : ;;
+ *)
+ echo "Usage: $0 <ISO_CODE>\n" >&2
+ exit 1
+ ;;
+esac
+
+ADDED=0
+
+for podir in ./*/*/po; do
+ [ -d "$podir/templates" ] || continue
+
+ mkdir "$podir/$LANG"
+ for catalog in $(cd "$podir/templates"; echo *.pot); do
+ if [ -f "$podir/templates/$catalog" -a ! -f "$podir/$LANG/${catalog%.pot}.po" ]; then
+ msginit --no-translator -l "$LANG" -i "$podir/templates/$catalog" -o "$podir/$LANG/${catalog%.pot}.po"
+ git add "$podir/$LANG/${catalog%.pot}.po"
+ ADDED=$((ADDED + 1))
+ fi
+ done
+done
+
+if [ $ADDED -gt 0 ]; then
+ echo ""
+ echo "Added $ADDED new translation catalogs for language '$LANG'."
+ echo "Please also edit 'luci.mk' and add"
+ echo ""
+ echo " LUCI_LANG.$LANG=Native Language Name"
+ echo ""
+ echo "to properly package the translation files."
+ echo ""
+fi
diff --git a/modules/luci-base/po/zh-cn/base.po b/modules/luci-base/po/zh-cn/base.po
index ac57c19da5..5fce99935c 100644
--- a/modules/luci-base/po/zh-cn/base.po
+++ b/modules/luci-base/po/zh-cn/base.po
@@ -1,10 +1,10 @@
#
# Yangfl <mmyangfl@gmail.com>, 2018.
-# Zheng Qian <sotux82@gmail.com>, 2018.
+# Zheng Qian <sotux82@gmail.com>, 2019.
#
msgid ""
msgstr ""
-"PO-Revision-Date: 2018-12-14 09:11+0800\n"
+"PO-Revision-Date: 2019-01-10 16:10+0800\n"
"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
"Language-Team: <debian-l10n-chinese@lists.debian.org>\n"
"Language: \n"
@@ -493,11 +493,11 @@ msgstr "总是通告默认路由"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:50
msgid "Always off (%s)"
-msgstr ""
+msgstr "总是关闭(%s)"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:48
msgid "Always on (%s)"
-msgstr ""
+msgstr "总是开启(%s)"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi.lua:258
msgid ""
@@ -920,7 +920,7 @@ msgstr "更改访问设备的管理员密码"
#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/password.js:10
msgid "Changing password…"
-msgstr "正在更改密码……"
+msgstr "正在更改密码…"
#: modules/luci-base/luasrc/view/cbi/wireless_modefreq.htm:157
#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/wifi_status.js:45
@@ -1184,7 +1184,7 @@ msgstr ""
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:52
msgid "Custom flash intervall (%s)"
-msgstr ""
+msgstr "自定义闪烁间隔(%s)"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:4
msgid ""
@@ -1935,7 +1935,7 @@ msgstr "正在刷写…"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:60
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:62
msgid "Flashmemory write access (%s)"
-msgstr ""
+msgstr "闪存写访问(%s)"
#: modules/luci-mod-network/luasrc/model/cbi/admin_network/ifaces.lua:498
msgid "Force"
@@ -2128,7 +2128,7 @@ msgstr "请求头错误代码错误(HEC)"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:56
msgid "Heartbeat intervall (%s)"
-msgstr ""
+msgstr "心跳间隔(%s)"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/system.lua:14
msgid ""
@@ -2850,7 +2850,7 @@ msgstr "加载中"
#: modules/luci-mod-system/luasrc/view/admin_system/sshkeys.htm:35
msgid "Loading SSH keys…"
-msgstr "正在加载 SSH 密钥……"
+msgstr "正在加载 SSH 密钥…"
#: modules/luci-base/luasrc/model/network.lua:30
msgid "Local IP address is invalid"
@@ -3266,7 +3266,7 @@ msgstr "网络启动镜像"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:54
msgid "Network device activity (%s)"
-msgstr ""
+msgstr "网络设备活动(%s)"
#: modules/luci-base/luasrc/model/network.lua:33
msgid "Network device is not present"
@@ -3467,7 +3467,7 @@ msgstr "一个或多个必选项值为空!"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/backupfiles.lua:19
msgid "Open list..."
-msgstr "打开列表……"
+msgstr "打开列表…"
#: protocols/luci-proto-openconnect/luasrc/model/network/proto_openconnect.lua:9
msgid "OpenConnect (CISCO AnyConnect)"
@@ -4398,7 +4398,7 @@ msgstr "保存 mtdblock 内容"
#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:120
msgid "Saving keys…"
-msgstr "正在保存密钥……"
+msgstr "正在保存密钥…"
#: modules/luci-mod-network/luasrc/view/admin_network/wifi_overview.htm:15
msgid "Scan"
@@ -4770,7 +4770,7 @@ msgstr "切换到 CIDR 列表记法"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:64
msgid "Switchport activity (%s)"
-msgstr ""
+msgstr "交换口活动(%s)"
#: modules/luci-mod-system/luasrc/view/admin_system/clock_status.htm:25
#: modules/luci-mod-system/luasrc/view/admin_system/clock_status.htm:34
@@ -5167,7 +5167,7 @@ msgstr "时区"
#: modules/luci-base/htdocs/luci-static/resources/xhr.js:47
msgid "To login…"
-msgstr "登录……"
+msgstr "去登录…"
#: modules/luci-mod-system/luasrc/view/admin_system/flashops.htm:32
msgid ""
@@ -5665,23 +5665,23 @@ msgstr ""
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:74
msgid "Wi-Fi activity (%s)"
-msgstr ""
+msgstr "Wi-Fi 活动(%s)"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:70
msgid "Wi-Fi client association (%s)"
-msgstr ""
+msgstr "Wi-Fi 客户端关联(%s)"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:66
msgid "Wi-Fi data reception (%s)"
-msgstr ""
+msgstr "Wi-Fi 数据接收(%s)"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:68
msgid "Wi-Fi data transmission (%s)"
-msgstr ""
+msgstr "Wi-Fi 数据传输(%s)"
#: modules/luci-mod-system/luasrc/model/cbi/admin_system/leds.lua:72
msgid "Wi-Fi on (%s)"
-msgstr ""
+msgstr "Wi-Fi 开启(%s)"
#: modules/luci-base/luasrc/view/cbi/wireless_modefreq.htm:161
msgid "Width"
diff --git a/themes/luci-theme-rosy/htdocs/luci-static/rosy/cascade.css b/themes/luci-theme-rosy/htdocs/luci-static/rosy/cascade.css
index 77f0ecf3e2..ab7cac626c 100644
--- a/themes/luci-theme-rosy/htdocs/luci-static/rosy/cascade.css
+++ b/themes/luci-theme-rosy/htdocs/luci-static/rosy/cascade.css
@@ -23,25 +23,32 @@
font-weight: normal;
font-style: normal;
}
+
strong {
font-weight: normal;
}
+
.table {
display: table;
position: relative;
}
+
.tr {
display: table-row;
}
+
.thead {
display: table-header-group;
}
+
.tbody {
display: table-row-group;
}
+
.tfoot {
display: table-footer-group;
}
+
.td,
.th {
vertical-align: middle;
@@ -49,13 +56,16 @@ strong {
display: table-cell;
padding: .8em;
}
+
.th {
font-weight: normal;
}
+
.tr.placeholder {
height: 4em;
background-color: #f9f9f9;
}
+
.tr.placeholder>.td {
position: absolute;
left: 0;
@@ -65,56 +75,69 @@ strong {
line-height: 3em;
background: #f9f9f9;
}
+
.table[width="33%"],
.th[width="33%"],
.td[width="33%"] {
width: 33%;
}
+
.table[width="100%"],
.th[width="100%"],
.td[width="100%"] {
width: 100%;
}
+
.col-1 {
flex: 1 1 30px !important;
-webkit-flex: 1 1 30px !important;
}
+
.col-2 {
flex: 2 2 60px !important;
-webkit-flex: 2 2 60px !important;
}
+
.col-3 {
flex: 3 3 90px !important;
-webkit-flex: 3 3 90px !important;
}
+
.col-4 {
flex: 4 4 120px !important;
-webkit-flex: 4 4 120px !important;
}
+
.col-5 {
flex: 5 5 150px !important;
-webkit-flex: 5 5 150px !important;
}
+
.col-6 {
flex: 6 6 180px !important;
-webkit-flex: 6 6 180px !important;
}
+
.col-7 {
flex: 7 7 210px !important;
-webkit-flex: 7 7 210px !important;
}
+
.col-8 {
flex: 8 8 240px !important;
-webkit-flex: 8 8 240px !important;
}
+
.col-9 {
flex: 9 9 270px !important;
-webkit-flex: 9 9 270px !important;
}
+
.col-10 {
flex: 10 10 300px !important;
-webkit-flex: 10 10 300px !important;
}
+
.cbi-button-up,
.cbi-button-down,
.cbi-value-helpicon,
@@ -129,26 +152,42 @@ strong {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
+
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
-.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 {
+
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
font-family: inherit;
font-weight: normal;
line-height: 1.1;
color: inherit;
}
+
html {
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
position: relative;
}
+
body {
font-size: 0.8rem;
background-color: #EEE;
}
+
html,
body {
margin: 0px;
@@ -157,6 +196,7 @@ body {
min-height: 100%;
font-family: Microsoft Yahei, WenQuanYi Micro Hei, sans-serif, "Helvetica Neue", Helvetica, Hiragino Sans GB;
}
+
select {
padding: 0.36rem 0.8rem;
color: #555;
@@ -164,6 +204,7 @@ select {
background-image: none;
border: 1px solid #ccc;
}
+
select,
input,
.cbi-dropdown {
@@ -179,30 +220,37 @@ input,
height: auto;
font-size: 0.8rem;
}
+
select:not([multiple="multiple"]):focus,
input:focus {
border-color: #0099CC;
}
+
select[multiple="multiple"] {
height: auto;
}
+
code {
color: #0099CC;
}
+
abbr {
color: #005470;
text-decoration: underline;
cursor: help;
}
+
hr {
margin: 1rem 0;
border-color: #EEE;
opacity: 0.1;
}
+
footer>a {
color: #aaa;
text-decoration: none;
}
+
.main>.loading {
position: fixed;
width: 100%;
@@ -212,6 +260,7 @@ footer>a {
background-color: #354057;
top: 0;
}
+
.main>.loading>span {
display: block;
text-align: center;
@@ -220,27 +269,34 @@ footer>a {
font-size: 1.2rem;
line-height: 45px;
}
+
.main>.loading>span>.loading-img {
margin-right: 0.2rem;
display: inline-block;
}
+
.main>.loading>span>.loading-img img {
vertical-align: middle;
}
+
.pull-right {
float: right;
}
+
.pull-left {
float: left;
}
+
li {
list-style-type: none;
}
+
h1 {
font-size: 2rem;
padding-bottom: 10px;
border-bottom: 1px solid #eee;
}
+
h2 {
margin: 2rem 0 0 0;
color: #354057;
@@ -248,23 +304,28 @@ h2 {
padding-bottom: 10px;
border-bottom: 1px solid #eee;
}
+
h3 {
margin: 2rem 0 0 0;
font-size: 1.4rem;
padding-bottom: 10px;
}
+
h4 {
margin: 2rem 0 0 0;
font-size: 1.2rem;
padding-bottom: 10px;
}
+
.mobile-hide {
display: inline-block;
}
+
.PC-hide {
width: 100%;
display: none;
}
+
.cbi-section {
margin: 1rem 0 0 0;
padding: 2rem;
@@ -278,9 +339,11 @@ h4 {
background-color: #FFF;
-webkit-overflow-scrolling: touch;
}
+
.cbi-section>legend {
display: none !important;
}
+
.cbi-section>h3:first-child,
.panel-title {
width: 100%;
@@ -291,10 +354,12 @@ h4 {
padding-bottom: 1rem;
margin: 0;
}
+
.table {
width: 100%;
border-radius: 20px;
}
+
.table>.tbody>.tr>.td,
.table>.tbody>.tr>.th,
.table>.tfoot>.tr>.td,
@@ -305,65 +370,63 @@ h4 {
border-top: 1px solid #ddd;
white-space: nowrap;
}
+
.cbi-section-table-cell {
white-space: nowrap;
align-self: flex-end;
flex: 1 1 auto;
}
+
.cbi-section-table {
border: none;
}
+
.cbi-section-table-row {
text-align: center;
margin-bottom: 1rem;
background: #f4f4f4;
}
+
.cbi-section-table-row:last-child {
margin-bottom: 0;
}
+
.cbi-section-table-row>.cbi-value-field .cbi-input-select,
.cbi-section-table-row>.cbi-value-field .cbi-input-text,
.cbi-section-table-row>.cbi-value-field .cbi-input-password,
.cbi-section-table-row>.cbi-value-field .cbi-dropdown {
width: 100%;
}
+
.cbi-section-table-row>.cbi-value-field [data-dynlist]>input,
.cbi-section-table-row>.cbi-value-field input.cbi-input-password {
width: calc(100% - 1.5rem);
}
-div>table>tbody>tr:nth-of-type(2n),
-div>.table>.tbody>.tr:nth-of-type(2n) {
- background-color: #f9f9f9;
-}
-div>table>tbody>tr:nth-of-type(2n),
-div>.table>.tbody>.tr:nth-of-type(2n) {
- background-color: #f9f9f9;
-}
-.cbi-section .table .tr.table-titles {
- background-color: #eee;
-}
+
.table .tr:first-child .td:first-child,
.table .tr:first-child::before,
.table .tr:first-child .th:first-child {
border-top-left-radius: 10px;
}
+
.table .tr:first-child .td:last-child,
.table .tr:first-child .th:last-child {
border-top-right-radius: 10px;
}
+
.table .tr:last-child .td:first-child,
.table .tr:last-child::before {
border-bottom-left-radius: 10px;
}
+
.table .tr:last-child .td:last-child {
border-bottom-right-radius: 10px;
}
+
.table .tr.placeholder:last-child {
background-color: transparent;
}
-.cbi-section .table .cbi-section-table-titles {
- background-color: #e0e0e0;
-}
+
/* fix progress bar */
.cbi-progressbar {
background-color: #9bc1cc;
@@ -371,11 +434,13 @@ div>.table>.tbody>.tr:nth-of-type(2n) {
overflow: hidden;
position: relative;
}
+
.cbi-progressbar div {
background-color: #468ea4;
height: 20px;
border-radius: 20px;
}
+
.cbi-progressbar::after {
content: attr(title);
position: absolute;
@@ -387,34 +452,39 @@ div>.table>.tbody>.tr:nth-of-type(2n) {
line-height: 1.2rem;
color: #fff;
}
+
/* fix multiple table */
table table,
.table .table {
border: none;
}
+
.cbi-value-field table,
.cbi-value-field .table {
border: none;
}
+
td>table>tbody>tr>td,
.td>.table>.tbody>.tr>.td {
border: none;
}
+
.cbi-value-field>table>tbody>tr>td,
.cbi-value-field>.table>.tbody>.tr>.td {
border: none;
}
+
/* button style */
.btn,
.cbi-button {
margin: 0 .8rem .5rem 0;
-webkit-appearance: none;
- color: #354057;
- background-color: transparent;
+ color: rgba(0, 0, 0, 0.87);
+ background-color: #F0F0F0;
transition: all 0.2s ease-in-out;
display: inline-block;
padding: .5rem .8rem;
- border: 1px solid;
+ border: none;
border-radius: 25px;
cursor: pointer;
-ms-touch-action: manipulation;
@@ -432,6 +502,7 @@ td>table>tbody>tr>td,
display: inline-block;
text-decoration: none;
}
+
.btn:disabled,
.cbi-button:disabled {
cursor: not-allowed;
@@ -439,6 +510,7 @@ td>table>tbody>tr>td,
opacity: 0.60;
box-shadow: none;
}
+
.cbi-page-actions .cbi-button-apply,
.cbi-section-actions .cbi-button-edit,
.cbi-button-edit.important,
@@ -450,6 +522,7 @@ td>table>tbody>tr>td,
background-color: #337ab7;
border: none;
}
+
.cbi-button-add.important,
.cbi-button-save.important,
.cbi-button-positive.important,
@@ -459,6 +532,7 @@ td>table>tbody>tr>td,
background-color: transparent;
border: 1px solid #337ab7;
}
+
.cbi-button-remove.important,
.cbi-button-reset.important,
.cbi-button-negative.important {
@@ -466,6 +540,7 @@ td>table>tbody>tr>td,
background-color: #d9534f;
border: none;
}
+
.cbi-button-find,
.cbi-button-link,
.cbi-button-up,
@@ -475,6 +550,7 @@ td>table>tbody>tr>td,
background-color: transparent;
border: 1px solid #468ea4;
}
+
.cbi-button-edit,
.cbi-button-reload,
.cbi-button-action {
@@ -482,6 +558,7 @@ td>table>tbody>tr>td,
background-color: transparent;
border: 1px solid #468ea4;
}
+
.cbi-page-actions .cbi-button-apply+.cbi-button-save,
.cbi-button-add,
.cbi-button-save,
@@ -490,6 +567,7 @@ td>table>tbody>tr>td,
background-color: transparent;
border: 1px solid #354057;
}
+
.cbi-section-remove>.cbi-button,
.cbi-button-remove,
.cbi-button-reset,
@@ -498,12 +576,15 @@ td>table>tbody>tr>td,
background-color: transparent;
border: 1px solid #F24C7C;
}
+
.cbi-page-actions .cbi-button-link:first-child {
float: left;
}
+
.a-to-btn {
text-decoration: none;
}
+
/* table */
.container>.tabs,
.container>.tabs>li[class~="active"],
@@ -513,78 +594,91 @@ td>table>tbody>tr>td,
.container>.cbi-tabmenu>li:hover {
border-radius: 20px;
}
+
.container .cbi-map .cbi-tabmenu,
.container .cbi-map .cbi-tabmenu>li[class~="cbi-tab"],
.container .cbi-map .cbi-tabmenu>li:hover {
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
+
.container .cbi-map .cbi-tabmenu,
.container>.tabs,
.container>.cbi-tabmenu {
overflow: hidden;
}
+
.container .cbi-map .cbi-tabmenu+div {
border-radius: 0;
border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
}
+
.tabs {
background-color: #FFFFFF;
margin-top: 1rem;
}
+
.cbi-tabmenu>li,
.tabs>li {
margin-right: .4rem;
display: inline-block;
padding: 0.6rem 0rem;
}
+
.cbi-tabmenu>li>a,
.tabs>li>a {
text-decoration: none;
color: #404040;
padding: 0.5rem 0.8rem;
}
+
.tabs>li[class~="active"],
.tabs>li:hover {
cursor: pointer;
background-color: #337ab7;
}
+
.tabs>li[class~="active"]>a,
.tabs>li:hover>a {
color: #fff;
}
+
.cbi-tabmenu {
border-top: 1px solid #D4D4D4;
border-left: 1px solid #D4D4D4;
border-right: 1px solid #D4D4D4;
}
+
.cbi-tabmenu>li:hover {
background-color: #F1F1F1;
}
+
.cbi-tabmenu>li[class~="cbi-tab"] {
background-color: #fff;
}
+
.cbi-tabmenu {
background-color: #D4D4D4;
}
[data-tab-title] {
- height: 0;
- opacity: 0;
- overflow: hidden;
+ height: 0;
+ opacity: 0;
+ overflow: hidden;
}
[data-tab-active="true"] {
- opacity: 1;
- height: auto;
- overflow: visible;
- transition: opacity .25s ease-in;
+ opacity: 1;
+ height: auto;
+ overflow: visible;
+ transition: opacity .25s ease-in;
}
.cbi-section-remove:nth-of-type(2n) {
background-color: #f9f9f9;
}
+
.cbi-section-node-tabbed {
padding: 0;
margin-top: 0;
@@ -592,20 +686,25 @@ td>table>tbody>tr>td,
border-left: 1px solid #D4D4D4;
border-right: 1px solid #D4D4D4;
}
+
.cbi-tabcontainer>.cbi-value:nth-of-type(2n) {
background-color: #f9f9f9;
}
+
.cbi-value-field,
.cbi-value-description {
display: table-cell;
line-height: 1.25;
}
+
.cbi-value-helpicon>img {
display: none;
}
+
.cbi-value-helpicon:before {
content: "\f059";
}
+
.cbi-value-description {
font-size: small;
opacity: 0.5;
@@ -659,12 +758,19 @@ td>table>tbody>tr>td,
vertical-align: middle;
}
-.cbi-rowstyle-1 {
+.table .tr.cbi-rowstyle-2,
+.table .tr:nth-child(n) {
+ background-color: #eee;
+}
+
+.table .tr.cbi-rowstyle-1,
+.table .tr:nth-child(2n) {
background-color: #f9f9f9;
}
-.cbi-rowstyle-2 {
- background-color: #eee;
+.table .tr.table-titles,
+.table .tr.cbi-section-table-titles {
+ background-color: #ddd;
}
.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell {
@@ -1370,10 +1476,6 @@ header>.container>.pull-right>* {
.node-status-processes .cbi-section {
overflow-x: scroll;
}
-.node-status-iptables #iptables .table-titles,
-.node-system-opkg #packages .cbi-section-table-titles {
- background-color: #eee;
-}
/* fix status realtime traffic and wireless */
@@ -1418,6 +1520,7 @@ header>.container>.pull-right>* {
.node-services-samba.lang_enNetwork #cbi-samba-sambashare .table-container {
overflow-x: scroll;
}
+
.node-services-samba>.main .cbi-tabcontainer:nth-child(3) .cbi-value-title {
margin-bottom: 1rem;
width: auto;
@@ -1645,8 +1748,7 @@ header .logout a {
float: right;
width: calc(100% + 10px);
height: calc(100% - 110px);
- overflow-y: scroll;
- overflow-x: hidden;
+ overflow: hidden;
}
.main>.main-left .nav {
@@ -1784,6 +1886,25 @@ footer {
right: 0;
}
+.modal-overlay-active #modal_overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ width: 100%;
+ background-color: #000000b8;
+ z-index: 2000;
+}
+
+.modal-overlay-active #modal_overlay .modal {
+ width: 50%;
+ background-color: #fff;
+ margin: 150px auto;
+ border-radius: 20px;
+ color: #333;
+}
+
/* The style of the prompt message */
.alert-message {
@@ -1837,20 +1958,25 @@ footer {
min-height: 100%;
background: #fff url(./loginBG.png) no-repeat center center / cover;
}
+
.node-main-login header {
display: none;
}
+
.node-main-login .main {
height: auto;
}
+
.node-main-login>.main>.main-left {
display: none;
}
+
.node-main-login>.main>.main-right {
width: 100%;
height: auto;
min-height: 100%;
}
+
.node-main-login>.main #maincontent {
position: absolute;
min-width: 492px;
@@ -1861,12 +1987,14 @@ footer {
height: auto;
text-align: center;
}
+
.node-main-login>.main .container {
padding: 0;
width: 30%;
max-width: 492px;
display: inline-block;
}
+
.node-main-login>.main .logoImg a {
margin: 0 0 18px 0;
display: block;
@@ -1874,13 +2002,16 @@ footer {
color: #fff;
text-decoration: none;
}
+
.node-main-login>.main .logoImg img:first-child {
width: 72px;
}
+
.node-main-login .warning {
background-color: #3E4A62;
color: #fff;
}
+
.node-main-login>.main form h2 {
margin: 17px 0;
padding: 0;
@@ -1889,32 +2020,38 @@ footer {
font-weight: normal;
border: 0;
}
+
.node-main-login>.main form .cbi-map-descr {
margin: 0 0 12px;
padding: 0;
font-size: 12px;
color: #B1B6BB;
}
+
.node-main-login>.main form .cbi-section {
margin: 0;
padding: 0;
background-color: transparent;
box-shadow: none;
}
+
.node-main-login>.main form .cbi-value {
display: block;
}
+
.node-main-login>.main form .cbi-value-title {
margin: 0;
padding: 0;
display: none;
}
-.node-main-login>.main form .cbi-value-field {
+
+.node-main-login>.main form .cbi-value .cbi-value-field {
margin-bottom: 16px;
display: block;
width: 100%;
position: relative;
}
+
.node-main-login>.main form .cbi-value-field input {
padding-left: 48px;
width: 100%;
@@ -1924,6 +2061,7 @@ footer {
font-size: 20px;
color: #9c9fa1;
}
+
.node-main-login form .cbi-value-field .iconpwd,
.node-main-login form .cbi-value-field .iconuser,
.node-main-login form .cbi-value-field .iconeye {
@@ -1934,28 +2072,35 @@ footer {
left: 16px;
transform: translateY(-50%);
}
+
.node-main-login form .cbi-value-field .iconpwd {
background: transparent url(./pwd.png) no-repeat center center / 100%;
}
+
.node-main-login form .cbi-value-field .iconuser {
background: transparent url(./user.png) no-repeat center center / 100%;
}
+
.node-main-login form .cbi-value-field .iconeye {
left: auto;
right: 16px;
background: transparent url(./op-eye.png) no-repeat center center / 100%;
}
+
.node-main-login form .cbi-value-field .cleye {
background-image: url(./cl-eye.png);
}
+
.node-main-login form .cbi-value-field .opeye {
background-image: url(./op-eye.png);
}
+
.node-main-login form .cbi-page-actions {
padding: 0;
border: 0;
text-align: center;
}
+
.node-main-login form .cbi-page-actions input {
margin: 0 0 0 -4px;
padding: 9px 0;
@@ -1965,38 +2110,47 @@ footer {
width: 50%;
font-size: 18px;
}
+
.node-main-login form .cbi-page-actions .cbi-button-apply {
background-color: #F24C7C;
border-top-left-radius: 50px;
border-bottom-left-radius: 50px;
}
+
.node-main-login form .cbi-page-actions .cbi-button-reset {
background-color: #8a4568;
color: #fff;
border-top-right-radius: 50px;
border-bottom-right-radius: 50px;
}
+
.node-main-login input.cbi-input-text {
box-shadow: 0 0 0 1000px white inset;
}
+
/* Interface after login */
.logged-in {
background-color: #EBF1F6;
}
+
.logged-in header {
height: 70px;
}
+
.logged-in .main {
overflow: hidden;
}
+
.logged-in .main-right {
padding: 0 1rem 3rem 0;
margin-top: 90px;
float: right;
}
+
.logged-in .main .logoImg {
display: none;
}
+
.logged-in .main .main-left .nav-container {
background-color: #354057;
border-radius: 20px;
@@ -2006,6 +2160,7 @@ footer {
right: -10px;
bottom: 10px;
}
+
.logged-in .main .main-left .brand {
margin: 0 auto;
padding: 44px 0 23px;
@@ -2023,11 +2178,13 @@ footer {
-webkit-text-overflow: ellipsis;
-o-text-overflow: ellipsis;
}
+
.logged-in .alert-message {
padding: 20px 2rem;
border: none;
background-color: #fff;
}
+
.logged-in .alert-message a {
padding: 8px 2rem;
width: auto;
@@ -2035,65 +2192,81 @@ footer {
background-color: #468EA4;
color: #fff;
}
+
@media screen and (max-width: 1600px) {
.main-left {
width: calc(0% + 13rem);
}
+
.btn,
.cbi-button {
padding: 0.3rem 0.6rem;
font-size: 0.8rem;
}
+
header>.container>.pull-right>* {
top: 0.35rem;
}
+
.label {
padding: 0.2rem 0.6rem;
}
+
.cbi-value-title {
width: 15rem;
padding-right: 0.6rem;
}
+
.cbi-input-textarea {
font-size: small;
}
}
+
@media screen and (max-width: 1280px) {
.node-main-login>.main .container {
width: 50%;
}
+
.cbi-tabmenu>li>a,
.tabs>li>a {
padding: 0.2rem 0.5rem;
}
+
.panel-title {
font-size: 1.1rem;
padding-bottom: 1rem;
}
+
table {
font-size: 0.7rem !important;
width: 100% !important;
}
+
.main>.main-left .nav>li,
.main>.main-left .nav>li a,
.main>.main-left .nav>.slide>.menu {
font-size: 0.9rem;
}
+
.main>.main-left .nav>.slide>.slide-menu>li>a {
font-size: 0.7rem;
}
}
+
@media screen and (max-width: 992px) {
.logged-in header {
padding: 0 .8rem;
height: 45px;
}
+
header .brand {
display: none;
}
+
header .btn-con {
line-height: 45px;
}
+
.main-left {
width: auto;
height: auto;
@@ -2108,35 +2281,49 @@ footer {
min-width: 0;
overflow: hidden;
}
+
+ .main>.main-left .navbar-container {
+ overflow-y: scroll;
+ overflow-x: hidden;
+ }
+
.main>.main-left .nav>.slide>.slide-menu>li {
width: 90%;
}
+
header .container {
line-height: 43px;
}
+
.main-right {
width: 100%;
}
+
.node-main-login>.main .container {
width: 60%;
}
+
.showSide {
padding: 0.1rem;
display: inline-block;
vertical-align: middle;
}
+
.cbi-value-title {
width: 9rem;
padding-right: 1rem;
}
+
#diag-rc-output>pre {
font-size: 1rem;
}
+
.tr {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
+
.th,
.td {
flex: 2 2 25%;
@@ -2145,48 +2332,57 @@ footer {
word-wrap: break-word;
display: inline-block;
}
+
.td select,
.td input[type="text"] {
word-wrap: normal;
width: 100%;
}
+
.td [data-dynlist]>input,
.td input.cbi-input-password {
width: calc(100% - 1.5rem);
}
+
.td[data-type="button"],
.td[data-type="fvalue"] {
flex: 1 1 12.5%;
text-align: left;
}
+
.th.cbi-value-field,
.td.cbi-value-field,
.th.cbi-section-table-cell,
.td.cbi-section-table-cell {
flex-basis: auto;
}
+
.cbi-section-table-row {
display: flex;
flex-wrap: wrap;
flex-direction: row;
justify-content: space-between;
}
+
.td.cbi-value-field,
.cbi-section-table-cell {
text-align: center;
display: inline-block;
flex: 10 10 auto;
}
+
.td.cbi-section-actions {
text-align: right;
align-self: flex-end;
vertical-align: bottom;
}
+
.tr.table-titles,
.tr.cbi-section-table-titles,
.tr.cbi-section-table-descr {
display: none;
}
+
.tr[data-title]::before,
.tr.cbi-section-table-titles.named::before {
display: block;
@@ -2195,24 +2391,30 @@ footer {
font-size: .9rem;
border-bottom: 1px solid rgba(0, 0, 0, .26);
}
+
.td[data-title] {
text-align: left;
font-size: 12px;
}
+
.td[data-title]::before {
display: block;
}
+
.hide-sm,
.hide-xs {
display: none;
}
+
/* All styles of the login interface */
.node-main-login .showSide {
display: none !important;
}
+
.logged-in .main {
padding-bottom: .8rem;
}
+
.logged-in .main .main-left .nav-container {
background-color: #354057;
border-radius: 0;
@@ -2222,6 +2424,7 @@ footer {
right: 20%;
bottom: 0;
}
+
.logged-in .main-right {
padding: 0 .8rem;
margin-top: calc(45px + .8rem);
@@ -2229,69 +2432,86 @@ footer {
max-width: unset;
float: unset;
}
+
.logged-in .alert-message {
padding: 8px .8rem;
}
+
.cbi-section {
margin: .8rem 0 0 0;
padding: .8rem;
}
+
small {
font-size: 10px;
line-height: 0;
}
+
.cbi-section>h3:first-child,
.panel-title {
font-size: 1rem;
}
+
.network-status-table .ifacebox-body>span {
font-size: 12px;
}
+
.cbi-section .ifacebox-body .ifacebadge>span {
font-size: 12px;
}
+
.table .tr.cbi-rowstyle-1:nth-child(n),
.table .tr:nth-child(n) {
font-size: 12px;
}
+
.node-network-firewall .table .tr.cbi-rowstyle-1:nth-child(n),
.node-network-firewall .table .tr:nth-child(n) {
border-radius: 20px;
overflow: hidden;
}
+
h2 {
margin: 1rem 0 0 0;
font-size: 1.4rem;
padding-bottom: 0;
border-bottom: none;
}
+
h4 {
font-size: 1rem;
}
+
.cbi-section-node-tabbed {
padding: 0 .5rem;
}
+
.cbi-button,
.cbi-button-action.important {
margin-right: .3rem;
}
+
select {
border-bottom: 1px solid rgba(0, 0, 0, .26);
}
+
.node-status-processes .table .tr.cbi-rowstyle-1:nth-child(n),
.node-status-processes .table .tr:nth-child(n) {
border-radius: 20px;
}
}
+
@media screen and (max-width: 768px) {
.node-main-login {
background: none;
}
+
.node-main-login>.main .logoImg a {
font-size: 30px;
margin: 12px 0 22px 0;
color: #354057;
}
+
.node-main-login>.main #maincontent {
padding-top: 0;
padding-bottom: 1rem;
@@ -2299,49 +2519,61 @@ footer {
top: 0;
transform: translateY(0) translateX(-50%);
}
+
.alert-message {
padding: 8px 15%;
}
+
.alert-message>h4 {
font-size: 14px;
}
+
.alert-message>p,
.alert-message a {
font-size: 12px;
}
+
.a lert-message>h4 {
padding: 8px 0 8px 36px;
}
+
.alert-message a {
padding: 8px 0;
margin-top: 8px;
}
+
.node-main-login .warning {
background-color: #F5F5F6;
color: #354057;
}
+
.alert-message a {
color: #f24c7c;
background: #fff;
}
+
.node-main-login>.main form h2 {
font-size: 16px;
margin: 20px 0 16px;
color: #354057;
}
+
.node-main-login>.main form .cbi-value-field input {
padding-left: 34px;
height: 36px;
background-size: 16px;
font-size: 16px;
}
+
.node-main-login>.main form .cbi-value-field {
margin-bottom: 20px;
}
+
.node-main-login form .cbi-page-actions input {
padding: 6px 0;
font-size: 16px;
}
+
.node-main-login form .cbi-value-field .iconpwd,
.node-main-login form .cbi-value-field .iconuser,
.node-main-login form .cbi-value-field .iconeye {
@@ -2349,21 +2581,26 @@ footer {
width: 16px;
left: 12px;
}
+
.node-main-login form .cbi-value-field .iconeye {
left: auto;
right: 12px;
}
+
.mobile-hide {
display: none;
}
+
.PC-hide {
display: inline-block;
}
}
+
@media screen and (max-width: 480px) {
body {
font-size: 1rem;
}
+
.cbi-value-title {
width: 100%;
min-width: 0rem !important;
@@ -2372,42 +2609,53 @@ footer {
margin-bottom: 0.5rem;
text-align: left;
}
+
.cbi-value-field,
.cbi-value-description {
width: 100%;
}
+
.cbi-value>.cbi-value-field {
display: inline-block;
}
+
.cbi-tabmenu>li,
.tabs>li {
padding: 0.6rem 0rem;
}
+
.cbi-tabmenu>li>a,
.tabs>li>a {
padding: 0.2rem 0.3rem;
font-size: 0.9rem;
}
+
.cbi-page-actions>div>input {
display: none;
}
+
.tabs>li>a {
font-size: 0.9rem;
}
+
select,
input {
font-size: 10px;
}
+
.panel-title {
font-size: 1.4rem;
padding-bottom: 1rem;
}
+
.node-system-packages>.main .cbi-value.cbi-value-last>div {
width: 100% !important;
}
+
.node-system-packages>.main .cbi-value .cbi-value-field input {
width: 100%;
}
+
.node-status-iptables>.main div>.cbi-map>form {
position: static !important;
margin: 0 0 2rem 0;
@@ -2422,66 +2670,83 @@ footer {
border-radius: 20px;
-webkit-overflow-scrolling: touch;
}
+
.node-status-iptables>.main div>.cbi-map>form input[type="submit"] {
width: 100% !important;
margin: 0;
}
+
.node-status-iptables>.main div>.cbi-map>form input[type="submit"]+input[type="submit"] {
margin-top: 1rem;
}
+
.node-main-login>.main .container {
min-width: 90%;
}
+
.th,
.td {
flex-basis: 50%;
}
+
.td.cbi-value-field {
flex-basis: 100%;
}
+
.td.cbi-value-field[data-type="dvalue"] {
flex-basis: 50%;
}
+
.td.cbi-value-field[data-type="button"],
.td.cbi-value-field[data-type="fvalue"] {
flex-basis: 25%;
text-align: left;
}
+
.tr[data-title]::before,
.tr.cbi-section-table-titles.named::before {
font-size: 1rem;
}
+
.hide-xs {
display: none;
}
+
/* All styles of the login interface */
.node-main-login>.main .cbi-value {
padding: 0;
}
+
.alert-message {
padding: 8px 10%;
}
}
+
@media screen and (min-width: 992px) {
.cbi-value-field .cbi-input-select {
width: 20rem;
}
+
.cbi-value-field .cbi-dropdown {
min-width: 20rem;
}
}
+
@media screen and (min-width: 1280px) {
.cbi-value-field .cbi-input-select {
width: 22rem;
}
+
.cbi-value-field .cbi-dropdown {
min-width: 22rem;
}
}
+
@media screen and (min-width: 1600px) {
.cbi-value-field .cbi-input-select {
width: 25rem;
}
+
.cbi-value-field .cbi-dropdown {
min-width: 25rem;
}
diff --git a/themes/luci-theme-rosy/htdocs/luci-static/rosy/js/ScrollY.js b/themes/luci-theme-rosy/htdocs/luci-static/rosy/js/ScrollY.js
new file mode 100644
index 0000000000..38d82d103e
--- /dev/null
+++ b/themes/luci-theme-rosy/htdocs/luci-static/rosy/js/ScrollY.js
@@ -0,0 +1 @@
+!function(win,dom){function MyScrollBar(o){this.init(o)}function getStyle(obj,name){return win.getComputedStyle?getComputedStyle(obj,null)[name]:obj.currentStyle[name]}function setStyle(obj,oStyle){for(var i in oStyle)obj.style[i]=oStyle[i]}function getOffsetSize(obj){var sDisplay=getStyle(obj,"display"),res={};if("none"!=sDisplay)res.width=obj.offsetWidth,res.height=obj.offsetHeight;else{var oldStyle={position:getStyle(obj,"position"),visibility:getStyle(obj,"visibility"),display:sDisplay},newStyle;setStyle(obj,{position:"absolute",visibility:"hidden",display:"inline-block"}),res.width=obj.offsetWidth,res.height=obj.offsetHeight,setStyle(obj,oldStyle)}return res}function getClientSize(obj){var iTopW=parseInt(getStyle(obj,"borderTopWidth")),iRightW=parseInt(getStyle(obj,"borderRightWidth")),iBottomW=parseInt(getStyle(obj,"borderBottomWidth")),iLeftW=parseInt(getStyle(obj,"borderLeftWidth")),oOffset=getOffsetSize(obj);return{width:oOffset.width<=0?oOffset.width:oOffset.width-iLeftW-iRightW,height:oOffset.height<=0?oOffset.height:oOffset.height-iTopW-iBottomW}}function canSelectText(bCan){bCan?(dom.body.style.mozUserSelect="text",dom.body.style.webkitUserSelect="text",dom.body.style.msUserSelect="text",dom.body.style.khtmlUserSelect="text",dom.body.style.userSelect="text"):(dom.body.style.mozUserSelect="none",dom.body.style.webkitUserSelect="none",dom.body.style.msUserSelect="none",dom.body.style.khtmlUserSelect="none",dom.body.style.userSelect="none")}function getPosition(obj,goal){var oPos={top:obj.offsetTop,left:obj.offsetLeft};if(obj.parentNode==goal)return oPos;var obj=getPosition(obj.parentNode,goal);oPos.top+=obj.top,oPos.left+=obj.left}MyScrollBar.prototype.init=function(o){this.bYBar=!1,this.iScrollTop=0,this.iScrollLeft=0,this.bYShow=!1,this.oWrapper=dom.getElementById(o.selId),this.oScroll=this.oWrapper.firstElementChild,this.setParam(o),this.addScrollBar(),this.initState(),this.initEvent()},MyScrollBar.prototype.initState=function(){var sWPosition;"static"==getStyle(this.oWrapper,"position")&&setStyle(this.oWrapper,{position:"relative"}),setStyle(this.oScroll,{position:"relative"}),this.bYBar&&(setStyle(this.oYBox,{display:this.enterShow?"none":"block",position:"absolute",top:0,right:0,zIndex:10,width:this.width+"px",height:"100%",backgroundColor:this.bgColor}),setStyle(this.oYBar,{position:"absolute",top:0,left:0,width:"100%",backgroundColor:this.barColor,borderRadius:this.borderRadius+"px",transition:"all "+this.time+"ms"})),this.setSize()},MyScrollBar.prototype.initEvent=function(){var _this=this,sUserAgent;-1!=win.navigator.userAgent.toLowerCase().indexOf("firefox")?this.oWrapper.addEventListener("DOMMouseScroll",function(e){_this.bYBar&&_this.bYShow&&(e.preventDefault(),_this.iScrollTop+=e.detail>0?60:-60,_this.iScrollTop=_this.iScrollTop<=0?0:_this.iScrollTop>=_this.iScrollH-_this.iWrapperH?_this.iScrollH-_this.iWrapperH:_this.iScrollTop,_this.setTransLate(),_this.setYTop(_this.iScrollTop/_this.iScrollH*_this.iYBoxH))}):this.oWrapper.onmousewheel=function(evt){if(_this.bYBar&&_this.bYShow){var e=evt||win.event;evt?e.preventDefault():e.returnValue=!1,_this.iScrollTop+=e.wheelDelta<0?60:-60,_this.iScrollTop=_this.iScrollTop<=0?0:_this.iScrollTop>=_this.iScrollH-_this.iWrapperH?_this.iScrollH-_this.iWrapperH:_this.iScrollTop,_this.setTransLate(),_this.setYTop(_this.iScrollTop/_this.iScrollH*_this.iYBoxH)}};var isInWrapper=!1;this.oWrapper.onmouseenter=function(){isInWrapper=!0,_this.enterShow&&_this.bYBar&&_this.bYShow&&setStyle(_this.oYBox,{display:"block"})},this.oWrapper.onmouseleave=function(){isInWrapper=!1,_this.enterShow&&_this.bYBar&&!bYDown&&_this.bYShow&&setStyle(_this.oYBox,{display:"none"})};var bYDown=!1,bYLeave=!0,iDownPageY=0,iYBarTop=0;this.bYBar&&(this.enterColor&&(this.oYBar.onmouseenter=function(){bYLeave=!1,setStyle(this,{backgroundColor:_this.enterColor})},this.oYBar.onmouseleave=function(){bYLeave=!0,bYDown||setStyle(this,{backgroundColor:_this.barColor})}),this.oYBar.onmousedown=function(e){_this.bYShow&&(bYDown=!0,iDownPageY=e.clientY+dom.documentElement.scrollTop||dom.body.scrollTop,iYBarTop=parseInt(getStyle(this,"top")),_this.setYTime(0),canSelectText(!1))},dom.addEventListener("mouseup",function(){bYDown&&_this.bYShow&&(bYDown=!1,_this.setYTime(_this.time),canSelectText(!0),!isInWrapper&&_this.enterShow&&setStyle(_this.oYBox,{display:"none"})),!bYDown&&bYLeave&&setStyle(_this.oYBar,{backgroundColor:_this.barColor})}),dom.addEventListener("mousemove",function(e){if(bYDown&&_this.bYShow){var iNowPageY=e.clientY+dom.documentElement.scrollTop||dom.body.scrollTop,iNowTop=iYBarTop+iNowPageY-iDownPageY;iNowTop=iNowTop<=0?0:iNowTop>=_this.iYBoxH-_this.iYBarH?_this.iYBoxH-_this.iYBarH:iNowTop,_this.iScrollTop=iNowTop/_this.iYBoxH*_this.iScrollH,_this.setTransLate(),_this.setYTop(iNowTop)}}),this.oYBar.ondrag=function(e){var e=evt||win.event;evt?e.preventDefault():e.returnValue=!1})},MyScrollBar.prototype.setParam=function(o){this.width=o.width?o.width:10,this.bgColor=o.bgColor?o.bgColor:"#eaeaea",this.barColor=o.barColor?o.barColor:"#ccc",this.enterColor=o.enterColor||!1,this.enterShow=!1!==o.enterShow,this.hasY=!1!==o.hasY,this.borderRadius=o.borderRadius>=0?o.borderRadius:this.width/2,this.time=o.time||0},MyScrollBar.prototype.addScrollBar=function(){this.getSize(),this.hasY&&(this.bYBar=!0,this.oYBox=dom.createElement("div"),this.oYBar=dom.createElement("div"),this.oYBox.appendChild(this.oYBar),this.oWrapper.insertBefore(this.oYBox,this.oScroll))},MyScrollBar.prototype.getSize=function(){var oWrapperSize=getClientSize(this.oWrapper),oScrollSize=getClientSize(this.oScroll);this.iWrapperClientH=oWrapperSize.height,this.iPaddingT=parseInt(getStyle(this.oWrapper,"paddingTop")),this.iPaddingR=parseInt(getStyle(this.oWrapper,"paddingRight")),this.iPaddingB=parseInt(getStyle(this.oWrapper,"paddingBottom")),this.iPaddingL=parseInt(getStyle(this.oWrapper,"paddingLeft")),this.iWrapperH=oWrapperSize.height-this.iPaddingT-this.iPaddingB,this.iScrollH=oScrollSize.height,this.bYBar&&(this.iYBoxH=oWrapperSize.height,this.iYBarH=this.iWrapperH/this.iScrollH*this.iYBoxH)},MyScrollBar.prototype.setSize=function(time){var _this=this;time=time||100,setTimeout(function(){_this.getSize(),_this.iScrollTop>=_this.iScrollH-_this.iWrapperH&&(_this.iScrollTop=_this.iScrollH-_this.iWrapperH),_this.bYBar&&(_this.iWrapperH>=_this.iScrollH?(setStyle(_this.oYBox,{display:"none"}),_this.bYShow=!1):(_this.enterShow||setStyle(_this.oYBox,{display:"block"}),setStyle(_this.oYBar,{height:_this.iYBarH+"px",top:_this.iScrollTop/_this.iScrollH*_this.iYBoxH+"px"},0),_this.bYShow=!0))},time)},MyScrollBar.prototype.setTransLate=function(iTime){var sTranslate="translate(-"+this.iScrollLeft+"px, -"+this.iScrollTop+"px)";setStyle(this.oScroll,{transition:"all "+(iTime>=0?iTime:this.time)+"ms",transform:sTranslate,msTransform:sTranslate,mozTransform:sTranslate,webkitTransform:sTranslate,oTransform:sTranslate})},MyScrollBar.prototype.setYTime=function(iTime){setStyle(this.oYBar,{transition:"all "+(iTime>=0?iTime:this.time)+"ms"})},MyScrollBar.prototype.setYTop=function(iTop){setStyle(this.oYBar,{top:iTop+"px"})},MyScrollBar.prototype.jump=function(o){o=o||{};var oPos={top:0,left:0},iTop=0,iBottome=this.iScrollH-this.iWrapperClientH+this.iPaddingT+this.iPaddingB>0?this.iScrollH-this.iWrapperClientH+this.iPaddingT+this.iPaddingB:0,iLeft=0,iRight=this.iScrollW-this.iWrapperClientW+this.iPaddingL+this.iPaddingR>0?this.iScrollW-this.iWrapperClientW+this.iPaddingL+this.iPaddingR:0,obj;if(o.id)oPos=getPosition(document.getElementById(o.id),this.oScroll),this.bYBar&&(oPos.top+=this.iPaddingT);else if(o.pos)if("string"==typeof o.pos)switch(o.pos){case"top":oPos.top=0;break;case"bottom":oPos.top=iBottome;break;case"left":oPos.left=0;break;case"right":oPos.left=iRight}else"object"==typeof o.pos&&(oPos=o.pos);oPos.top=oPos.top>iBottome?iBottome:oPos.top>=0?oPos.top:0,this.iScrollTop=oPos.top,this.setTransLate(o.time),this.bYBar&&(this.setYTime(o.time),this.setYTop(this.iScrollTop/this.iScrollH*this.iYBoxH))},"function"==typeof define&&define.amd&&define([],function(){return MyScrollBar}),win.MyScrollBar=MyScrollBar}(window,document); \ No newline at end of file
diff --git a/themes/luci-theme-rosy/htdocs/luci-static/rosy/js/script.js b/themes/luci-theme-rosy/htdocs/luci-static/rosy/js/script.js
index 76ee383ccb..c1a3dcd000 100755
--- a/themes/luci-theme-rosy/htdocs/luci-static/rosy/js/script.js
+++ b/themes/luci-theme-rosy/htdocs/luci-static/rosy/js/script.js
@@ -81,6 +81,17 @@
/**
* menu click
*/
+ if ($('.nav').length > 0 && $(window).width() > 992) {
+ var oScroll = new MyScrollBar({
+ selId: 'navBox',
+ time: 100,
+ bgColor: 'transprent',
+ barColor: '#839dd67a',
+ enterColor: '#839dd6cc',
+ enterShow: false
+ });
+ }
+
$(".main > .main-left .nav > .slide > .menu").click(function () {
var ul = $(this).next(".slide-menu");
var menu = $(this);
@@ -94,6 +105,14 @@
ul.removeClass("active");
});
}
+ if ($('.nav').length > 0 && $(window).width() > 992) {
+ oScroll.setSize(200);
+ }
+ setInterval(function(){
+ if($('.nav').height() < $('.navbar-container').height()){
+ $('.nav').css('transform', 'translate(0px, 0px)');
+ }
+ }, 300);
return false;
});
@@ -259,10 +278,10 @@
}else {
$('.node-main-login form .cbi-value-last input[type="text"]').prop('type', 'password');
$('.node-main-login form .cbi-value-field .iconeye').removeClass('cleye').addClass('opeye');
- num = true
+ num = true;
}
- })
+ });
$('body.logged-in').css('min-height', $(window).height());
@@ -271,21 +290,26 @@
$('.logged-in .main-right').outerWidth( $(window).width() - $('.logged-in .main-left').width() - 50 );
}
- $('.cbi-section .table').each(function(){
- var thisTr = $(this).children('.tr').get(0);
- var td = $(thisTr).children('.td').get(0);
- var th = $(thisTr).children('.th').get(0)
- var a = window.getComputedStyle(thisTr, ':before').getPropertyValue('content');
- console.log(td, th);
+ $('.cbi-section .table').each(function () {
+ var firTr = $(this).children('.tr').get(0);
+ var firTd = $(firTr).children('.td').get(0);
+ var th = $(firTr).children('.th').get(0);
- if( th && a != 'none' ){
+ var laTr = $(this).children('.tr').get($(this).children('.tr').length - 1);
+ var laTd = $(laTr).children('.td').get(0);
+ var a = window.getComputedStyle(firTr, ':before').getPropertyValue('content');
+
+ if (th && a != 'none') {
$(th).css('border-top-left-radius', '0');
- }else if( td && a != 'none' ){
- $(td).css('border-top-left-radius', '0');
+ } else if (firTd && a != 'none') {
+ $(firTd).css('border-top-left-radius', '0');
+ }
+ if (laTd && a != 'none') {
+ $(laTd).css('border-bottom-left-radius', '0');
}
});
});
- $('.lang_enNetwork #cbi-samba-sambashare .table').wrap('<div class="table-container"></div>');
+ $('#iptables').prev().css('margin-top', '10px');
})(jQuery);
diff --git a/themes/luci-theme-rosy/luasrc/view/themes/rosy/footer.htm b/themes/luci-theme-rosy/luasrc/view/themes/rosy/footer.htm
index f0cbe4e968..4377e1ca98 100755
--- a/themes/luci-theme-rosy/luasrc/view/themes/rosy/footer.htm
+++ b/themes/luci-theme-rosy/luasrc/view/themes/rosy/footer.htm
@@ -43,8 +43,8 @@
<script>
var luciLocation = <%= luci.http.write_json(luci.dispatcher.context.path) %>;
</script>
-<script src="<%=media%>/js/jquery.min.js?v=git-18.247.71242-9541751"></script>
-<script src="<%=media%>/js/script.js?v=git-18.247.71242-9541751"></script>
+<script src="<%=media%>/js/jquery.min.js"></script>
+<script src="<%=media%>/js/script.js"></script>
</body>
</html>
diff --git a/themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm b/themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm
index 21fa78e3c6..a6aafbed61 100644
--- a/themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm
+++ b/themes/luci-theme-rosy/luasrc/view/themes/rosy/header.htm
@@ -123,7 +123,7 @@
local function render_topmenu()
local childs = disp.node_childs(cattree)
if #childs > 0 then
- write('<ul class="nav">')
+ write('<ul class="nav scroll">')
for i, r in ipairs(childs) do
local nnode = cattree.nodes[r]
@@ -231,6 +231,7 @@
<% end -%>
<script src="<%=resource%>/cbi.js"></script>
<script src="<%=resource%>/xhr.js"></script>
+ <script src="<%=media%>/js/ScrollY.js"></script>
</head>
<body class="lang_<%=luci.i18n.context.lang%> <%- if node then %><%= striptags( node.title ) %><%- end %> <% if luci.dispatcher.context.authsession then %>logged-in<% end %>">
@@ -264,7 +265,7 @@
<div class="nav-container">
<a class="brand" href="#">
<%=boardinfo.hostname or "?"%></a>
- <div class="navbar-container">
+ <div class="navbar-container" id="navBox">
<% render_topmenu() %>
</div>
</div>