luci-mod-network: switch hostname configuration to client side js
authorJo-Philipp Wich <jo@mein.io>
Sun, 7 Jul 2019 18:14:18 +0000 (20:14 +0200)
committerJo-Philipp Wich <jo@mein.io>
Sun, 7 Jul 2019 18:14:18 +0000 (20:14 +0200)
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js [new file with mode: 0644]
modules/luci-mod-network/luasrc/controller/admin/network.lua
modules/luci-mod-network/luasrc/model/cbi/admin_network/hosts.lua [deleted file]

diff --git a/modules/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js b/modules/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js
new file mode 100644 (file)
index 0000000..2a49b04
--- /dev/null
@@ -0,0 +1,41 @@
+'use strict';
+'require rpc';
+'require form';
+
+return L.view.extend({
+       callHostHints: rpc.declare({
+               object: 'luci',
+               method: 'host_hints'
+       }),
+
+       load: function() {
+               return this.callHostHints();
+       },
+
+       render: function(hosts) {
+               var m, s, o;
+
+               m = new form.Map('dhcp', _('Hostnames'));
+
+               s = m.section(form.GridSection, 'domain', _('Host entries'));
+               s.addremove = true;
+               s.anonymous = true;
+               s.sortable  = true;
+
+               o = s.option(form.Value, 'name', _('Hostname'));
+               o.datatype = 'hostname';
+               o.rmempty = true;
+
+               o = s.option(form.Value, 'ip', _('IP address'));
+               o.datatype = 'ipaddr';
+               o.rmempty = true;
+               L.sortedKeys(hosts, 'ipv4', 'addr').forEach(function(mac) {
+                       o.value(hosts[mac].ipv4, '%s (%s)'.format(
+                               hosts[mac].ipv4,
+                               hosts[mac].name || mac
+                       ));
+               });
+
+               return m.render();
+       }
+});
index 6bd92b2d1a7bb76ff6caceada08bd38ba04db7cd..fac8d95a2052fe4f923643b7a0628055f0e068af 100644 (file)
@@ -108,7 +108,7 @@ function index()
                        page.order  = 30
 
                        page = node("admin", "network", "hosts")
-                       page.target = cbi("admin_network/hosts")
+                       page.target = view("network/hosts")
                        page.title  = _("Hostnames")
                        page.order  = 40
                end
diff --git a/modules/luci-mod-network/luasrc/model/cbi/admin_network/hosts.lua b/modules/luci-mod-network/luasrc/model/cbi/admin_network/hosts.lua
deleted file mode 100644 (file)
index 46945af..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2010-2015 Jo-Philipp Wich <jow@openwrt.org>
--- Licensed to the public under the Apache License 2.0.
-
-local ipc = require "luci.ip"
-local sys = require "luci.sys"
-
-m = Map("dhcp", translate("Hostnames"))
-
-s = m:section(TypedSection, "domain", translate("Host entries"))
-s.addremove = true
-s.anonymous = true
-s.template = "cbi/tblsection"
-
-hn = s:option(Value, "name", translate("Hostname"))
-hn.datatype = "hostname"
-hn.rmempty  = true
-
-ip = s:option(Value, "ip", translate("IP address"))
-ip.datatype = "ipaddr"
-ip.rmempty  = true
-
-sys.net.host_hints(function(mac, v4, v6, name)
-       v6 = v6 and ipc.IPv6(v6)
-
-       if v4 or (v6 and not v6:is6linklocal()) then
-               ip:value(tostring(v4 or v6), "%s (%s)" %{ tostring(v4 or v6), name or mac })
-       end
-end)
-
-return m