summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua2
-rw-r--r--applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/servers.lua7
-rw-r--r--applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua18
-rw-r--r--applications/luci-app-shadowsocks-libev/po/es/shadowsocks-libev.po32
-rw-r--r--applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot30
-rw-r--r--applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po47
-rw-r--r--modules/luci-base/luasrc/model/network.lua6
-rw-r--r--modules/luci-mod-network/luasrc/model/cbi/admin_network/vlan.lua29
-rwxr-xr-xthemes/luci-theme-rosy/htdocs/luci-static/rosy/js/script.js2
9 files changed, 125 insertions, 48 deletions
diff --git a/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua
index 195a31f2fd..c6323b4dfd 100644
--- a/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua
+++ b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua
@@ -27,7 +27,7 @@ ss.option_install_package(s, "general")
ss.options_common(s, "advanced")
if stype == "ss_server" then
- ss.options_server(s, "general")
+ ss.options_server(s, {tab="general"})
o = s:taboption("general", Value, "bind_address",
translate("Bind address"),
translate("The address ss-server will initiate connection from"))
diff --git a/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/servers.lua b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/servers.lua
index a0d0079278..ec601c4fe6 100644
--- a/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/servers.lua
+++ b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/servers.lua
@@ -19,13 +19,18 @@ if sname then
end
s = m:section(NamedSection, sname, "server")
m.title = m.title .. ' - ' .. sname
+ opts = {}
else
s = m:section(TypedSection, "server")
s.template = 'cbi/tblsection'
s.addremove = true
+ s.extedit = function(self, section)
+ return 'servers/' .. section
+ end
+ opts = {row=true}
end
s:option(Flag, "disabled", translate("Disable"))
-ss.options_server(s)
+ss.options_server(s, opts)
return m
diff --git a/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua b/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua
index 5e272e282e..abb6ce8d48 100644
--- a/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua
+++ b/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua
@@ -76,9 +76,11 @@ function options_client(s, tab)
o.datatype = "port"
end
-function options_server(s, tab)
+function options_server(s, opts)
local o
local optfunc
+ local tab = opts and opts.tab or nil
+ local row = opts and opts.row or false
if tab == nil then
optfunc = function(...) return s:option(...) end
@@ -96,13 +98,17 @@ function options_server(s, tab)
for _, m in ipairs(methods) do
o:value(m)
end
- o = optfunc(Value, "key", translate("Key (base64 encoding)"))
- o.datatype = "base64"
- o.password = true
- o.size = 12
o = optfunc(Value, "password", translate("Password"))
o.password = true
o.size = 12
+ if not row then
+ o = optfunc(Value, "key", translate("Key (base64)"))
+ o.datatype = "base64"
+ o.password = true
+ o.size = 12
+ optfunc(Value, "plugin", translate("Plugin"))
+ optfunc(Value, "plugin_opts", translate("Plugin Options"))
+ end
end
function options_common(s, tab)
@@ -211,6 +217,8 @@ names_options_server = {
"method",
"key",
"password",
+ "plugin",
+ "plugin_opts",
}
names_options_client = {
diff --git a/applications/luci-app-shadowsocks-libev/po/es/shadowsocks-libev.po b/applications/luci-app-shadowsocks-libev/po/es/shadowsocks-libev.po
index 16672d113a..bf46acc527 100644
--- a/applications/luci-app-shadowsocks-libev/po/es/shadowsocks-libev.po
+++ b/applications/luci-app-shadowsocks-libev/po/es/shadowsocks-libev.po
@@ -12,7 +12,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Language: es\n"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:170
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:172
msgid "<hidden>"
msgstr "<oculto>"
@@ -106,15 +106,15 @@ msgstr "Reenviar Dst ip/net"
msgid "Dst ip/net forward file"
msgstr "Reenviar archivo Dst ip/net"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:126
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:128
msgid "Enable SO_REUSEPORT"
msgstr "Habilitar SO_REUSEPORT"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:124
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:126
msgid "Enable TCP Fast Open"
msgstr "Habilitar TCP Fast Open"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:125
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:127
msgid "Enable TCP_NODELAY"
msgstr "Habilitar TCP_NODELAY"
@@ -170,7 +170,7 @@ msgstr ""
msgid "General Settings"
msgstr "Configuración general"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:123
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:125
msgid "IPv6 First"
msgstr "IPv6 primero"
@@ -178,7 +178,7 @@ msgstr "IPv6 primero"
msgid "Ingress interfaces"
msgstr "Interfaces de ingreso"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:197
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:199
msgid "Install package %q"
msgstr "Instalar paquete %q"
@@ -197,8 +197,8 @@ msgstr ""
"tanto la instancia como el servidor remoto al que hace referencia."
#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:99
-msgid "Key (base64 encoding)"
-msgstr "Clave (codificación base64)"
+msgid "Key (base64)"
+msgstr "Clave (base64)"
#: applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua:13
#: applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instances.lua:10
@@ -261,7 +261,7 @@ msgstr "Solo aplicar reglas en paquetes desde estas interfaces de red"
msgid "Overview"
msgstr "Visión general"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:196
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:198
msgid "Package is not installed"
msgstr "Paquete no instalado"
@@ -273,7 +273,15 @@ msgstr "Pasa argumentos adicionales a iptables. Utilizar con cuidado!"
msgid "Password"
msgstr "Contraseña"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:123
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:120
+msgid "Plugin"
+msgstr ""
+
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:121
+msgid "Plugin Options"
+msgstr ""
+
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:125
msgid "Prefer IPv6 addresses when resolving names"
msgstr "Preferir direcciones IPv6 al resolver nombres"
@@ -291,7 +299,7 @@ msgstr "Servidores remotos"
msgid "Remote server"
msgstr "Servidor remoto"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:120
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:122
msgid "Run as"
msgstr "Correr como"
@@ -347,7 +355,7 @@ msgstr "Tiempo de espera (seg)"
msgid "Tunnel address"
msgstr "Direccion del tunel"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:122
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:124
msgid "Verbose"
msgstr "Verboso"
diff --git a/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot b/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot
index 7444fd0fd5..a094e0aac0 100644
--- a/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot
+++ b/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot
@@ -1,7 +1,7 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:170
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:172
msgid "<hidden>"
msgstr ""
@@ -87,15 +87,15 @@ msgstr ""
msgid "Dst ip/net forward file"
msgstr ""
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:126
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:128
msgid "Enable SO_REUSEPORT"
msgstr ""
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:124
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:126
msgid "Enable TCP Fast Open"
msgstr ""
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:125
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:127
msgid "Enable TCP_NODELAY"
msgstr ""
@@ -143,7 +143,7 @@ msgstr ""
msgid "General Settings"
msgstr ""
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:123
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:125
msgid "IPv6 First"
msgstr ""
@@ -151,7 +151,7 @@ msgstr ""
msgid "Ingress interfaces"
msgstr ""
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:197
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:199
msgid "Install package %q"
msgstr ""
@@ -167,7 +167,7 @@ msgid ""
msgstr ""
#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:99
-msgid "Key (base64 encoding)"
+msgid "Key (base64)"
msgstr ""
#: applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua:13
@@ -222,7 +222,7 @@ msgstr ""
msgid "Overview"
msgstr ""
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:196
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:198
msgid "Package is not installed"
msgstr ""
@@ -234,7 +234,15 @@ msgstr ""
msgid "Password"
msgstr ""
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:123
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:120
+msgid "Plugin"
+msgstr ""
+
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:121
+msgid "Plugin Options"
+msgstr ""
+
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:125
msgid "Prefer IPv6 addresses when resolving names"
msgstr ""
@@ -252,7 +260,7 @@ msgstr ""
msgid "Remote server"
msgstr ""
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:120
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:122
msgid "Run as"
msgstr ""
@@ -308,7 +316,7 @@ msgstr ""
msgid "Tunnel address"
msgstr ""
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:122
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:124
msgid "Verbose"
msgstr ""
diff --git a/applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po b/applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po
index d6b84b913b..e3a80f01a8 100644
--- a/applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po
+++ b/applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po
@@ -6,7 +6,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:170
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:172
msgid "<hidden>"
msgstr "<已隐藏>"
@@ -56,7 +56,9 @@ msgstr "对于源地址不在列表中的报文的默认行为"
msgid ""
"Definition of remote shadowsocks servers. Disable any of them will also "
"disable instances referring to it."
-msgstr "在此页面设定访问远端shadowsocks服务器的参数。请注意,禁用远端服务器会同时停止与之关联的shadowsocks-libev组件"
+msgstr ""
+"在此页面设定访问远端shadowsocks服务器的参数。请注意,禁用远端服务器会同时停止"
+"与之关联的shadowsocks-libev组件"
#: applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua:33
msgid "Destination Settings"
@@ -92,15 +94,15 @@ msgstr "转发"
msgid "Dst ip/net forward file"
msgstr "转发(文件)"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:126
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:128
msgid "Enable SO_REUSEPORT"
msgstr "启用SO_REUSEPORT"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:124
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:126
msgid "Enable TCP Fast Open"
msgstr "启用TCP Fast Open"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:125
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:127
msgid "Enable TCP_NODELAY"
msgstr "启用TCP_NODELAY"
@@ -148,7 +150,7 @@ msgstr "对于源地址在列表中的报文,通过ss-redir转发"
msgid "General Settings"
msgstr "常规设置"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:123
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:125
msgid "IPv6 First"
msgstr "IPv6优先"
@@ -156,7 +158,7 @@ msgstr "IPv6优先"
msgid "Ingress interfaces"
msgstr "入口网卡"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:197
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:199
msgid "Install package %q"
msgstr "安装%q"
@@ -169,11 +171,14 @@ msgid ""
"Instances of shadowsocks-libev components, e.g. ss-local, ss-redir, ss-"
"tunnel, ss-server, etc. To enable an instance it is required to enable both "
"the instance itself and the remote server it refers to."
-msgstr "此页面展示本地运行的shadowsocks-libev各组件实例,如ss-local、ss-redir、ss-tunnel、ss-server等。请注意,实际启用一个实例要求实例本身及所关联的远端服务器都是启用状态。"
+msgstr ""
+"此页面展示本地运行的shadowsocks-libev各组件实例,如ss-local、ss-redir、ss-"
+"tunnel、ss-server等。请注意,实际启用一个实例要求实例本身及所关联的远端服务器"
+"都是启用状态。"
#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:99
-msgid "Key (base64 encoding)"
-msgstr "密钥(base64编码)"
+msgid "Key (base64)"
+msgstr "密钥(base64)"
#: applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua:13
#: applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instances.lua:10
@@ -217,7 +222,11 @@ msgid ""
"<em>Src ip/net checkdst</em> and if none matches <em>Src default</em> will "
"give the default action to be taken. If the prior check results in action "
"<em>checkdst</em>, packets will continue to have their dst addresses checked."
-msgstr "在此页面,您可以配置指定报文是否通过ss-redir转发。启用后,规则会先将报文的源地址与相应的地址集进行匹配,依次决定是否“绕过(<em>bypass</em>)”、“转发(<em>forward</em>)”,或“继续匹配目的地址(<em>checkdst</em>)”;若未在集合中找到匹配,则执行指定的默认动作。继续匹配目的地址时同理。"
+msgstr ""
+"在此页面,您可以配置指定报文是否通过ss-redir转发。启用后,规则会先将报文的源"
+"地址与相应的地址集进行匹配,依次决定是否“绕过(<em>bypass</em>)”、“转发"
+"(<em>forward</em>)”,或“继续匹配目的地址(<em>checkdst</em>)”;若未在集合"
+"中找到匹配,则执行指定的默认动作。继续匹配目的地址时同理。"
#: applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua:51
msgid "Only apply rules on packets from these network interfaces"
@@ -227,7 +236,7 @@ msgstr "仅对来自指定网卡的报文应用规则"
msgid "Overview"
msgstr "概览"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:196
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:198
msgid "Package is not installed"
msgstr "依赖包未安装"
@@ -239,7 +248,15 @@ msgstr "给iptables的额外参数。请小心使用"
msgid "Password"
msgstr "密码"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:123
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:120
+msgid "Plugin"
+msgstr "启用插件"
+
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:121
+msgid "Plugin Options"
+msgstr "插件选项"
+
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:125
msgid "Prefer IPv6 addresses when resolving names"
msgstr "名字解析时优先取用IPv6地址"
@@ -257,7 +274,7 @@ msgstr "远端服务器"
msgid "Remote server"
msgstr "服务器"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:120
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:122
msgid "Run as"
msgstr "运行时用户"
@@ -313,7 +330,7 @@ msgstr "超时时间(秒)"
msgid "Tunnel address"
msgstr "隧道对端地址"
-#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:122
+#: applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua:124
msgid "Verbose"
msgstr "记录详细日志"
diff --git a/modules/luci-base/luasrc/model/network.lua b/modules/luci-base/luasrc/model/network.lua
index 67a2de4ed2..a36a23f321 100644
--- a/modules/luci-base/luasrc/model/network.lua
+++ b/modules/luci-base/luasrc/model/network.lua
@@ -622,6 +622,12 @@ function del_network(self, n)
_uci:delete("wireless", s['.name'], "network")
end
end)
+
+ local ok, fw = pcall(require, "luci.model.firewall")
+ if ok then
+ fw.init()
+ fw:del_network(n)
+ end
end
return r
end
diff --git a/modules/luci-mod-network/luasrc/model/cbi/admin_network/vlan.lua b/modules/luci-mod-network/luasrc/model/cbi/admin_network/vlan.lua
index d79b3c4704..edeb193ef7 100644
--- a/modules/luci-mod-network/luasrc/model/cbi/admin_network/vlan.lua
+++ b/modules/luci-mod-network/luasrc/model/cbi/admin_network/vlan.lua
@@ -42,6 +42,8 @@ local update_interfaces = function(old_ifname, new_ifname)
end
end
+local vlan_already_created
+
m.uci:foreach("network", "switch",
function(x)
local sid = x['.name']
@@ -200,8 +202,29 @@ m.uci:foreach("network", "switch",
-- When creating a new vlan, preset it with the highest found vid + 1.
s.create = function(self, section, origin)
- -- Filter by switch
- if m:get(origin, "device") ~= switch_name then
+ -- VLAN has already been created for another switch
+ if vlan_already_created then
+ return
+
+ -- VLAN add button was pressed in an empty VLAN section so only
+ -- accept the create event if our switch is without existing VLANs
+ elseif origin == "" then
+ local is_empty_switch = true
+
+ m.uci:foreach("network", "switch_vlan",
+ function(s)
+ if s.device == switch_name then
+ is_empty_switch = false
+ return false
+ end
+ end)
+
+ if not is_empty_switch then
+ return
+ end
+
+ -- VLAN was created for another switch
+ elseif m:get(origin, "device") ~= switch_name then
return
end
@@ -227,6 +250,8 @@ m.uci:foreach("network", "switch",
m:set(sid, has_vlan4k, max_id + 1)
end
+ vlan_already_created = true
+
return sid
end
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 886e175cc4..bef272760a 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
@@ -276,6 +276,6 @@
});
- $('#cbi-network-switch_vlan .table').wrap('#vlan_table');
+ $('#cbi-network-switch_vlan .table').wrap('<div id="vlan_table"></div>');
})(window, jQuery);