diff options
author | Paul Donald <newtwen+github@gmail.com> | 2024-10-18 04:54:58 +0200 |
---|---|---|
committer | Paul Donald <newtwen+github@gmail.com> | 2024-10-18 05:00:04 +0200 |
commit | 82e5c888408a9728576f584088432289809fa293 (patch) | |
tree | e4174dc7207c1b41bc83654b4935ff3f7dbfaf75 /applications/luci-app-dcwapd/htdocs/luci-static/resources/view/dcwapd | |
parent | 5c6b08cf89f5dd4dd0bc0ee4d0c643a19a34c9b8 (diff) |
luci-app-dcwapd: Convert to JS
Signed-off-by: Paul Donald <newtwen+github@gmail.com>
Diffstat (limited to 'applications/luci-app-dcwapd/htdocs/luci-static/resources/view/dcwapd')
-rw-r--r-- | applications/luci-app-dcwapd/htdocs/luci-static/resources/view/dcwapd/dcwapd.js | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/applications/luci-app-dcwapd/htdocs/luci-static/resources/view/dcwapd/dcwapd.js b/applications/luci-app-dcwapd/htdocs/luci-static/resources/view/dcwapd/dcwapd.js new file mode 100644 index 0000000000..df14494236 --- /dev/null +++ b/applications/luci-app-dcwapd/htdocs/luci-static/resources/view/dcwapd/dcwapd.js @@ -0,0 +1,212 @@ +'use strict'; + +'require form'; +'require rpc'; +'require uci'; +'require tools.widgets as widgets'; +'require view'; + +return view.extend({ + + callLuciWirelessDevices: rpc.declare({ + object: 'luci-rpc', + method: 'getWirelessDevices', + expect: { '': {} } + }), + + load: function() { + return Promise.all([ + L.resolveDefault(L.uci.load('dcwapd'), {}), + this.callLuciWirelessDevices(), + ]); + }, + + render: function(data) { + var wireless_devices = data[1]; + + var m = new form.Map('dcwapd', _('Dual Channel Wi-Fi AP Daemon'), + _('With %s you can use two simultaneous Wi-Fi connections to decrease wireless traffic congestion and increase throughput.').format('<abbr title="%s">%s</abbr>').format(_('Dual Channel Wi-Fi AP Daemon'), _('Dual Channel WiFi'))); + + // General section + var s = m.section(form.NamedSection, 'general', _('General'), _('General Settings')); + s.addremove = false; + s.dynamic = false; + s.optional = false; + s.anonymous = true; + + // Enabled state option + var enable = s.option(form.Flag, 'enabled', _('Enable')); + enable.default = false; + enable.optional = false; + enable.rmempty = false; + + // Temp dir option + var tmpdir = s.option(form.Value, 'tmpdir', _('Temp Directory'), _('Specify the temporary directory for dcwapd file storage.')); + tmpdir.optional = false; + tmpdir.rmempty = false; + + // Data channels section + s = m.section(form.TypedSection, 'datachannel', _('Data Channels'), _('Define data channels over which outbound filtered packets will flow.')); + s.anonymous = false; + s.addremove = true; + + // SSID option + var dat_ssid = s.option(form.Value, 'ssid', _('SSID')); + dat_ssid.optional = false; + dat_ssid.rmempty = false; + if (wireless_devices.length > 0) { + Object.values(wireless_devices).forEach(function (radio) { + radio?.interfaces?.forEach(function(_if) { + dat_ssid.value(_if?.config?.ssid ?? 'unknown_ssid'); + }); + }); + } else { + dat_ssid.value('-'); + } + + // Data bridge option + var dat_bridge = s.option(widgets.DeviceSelect, 'bridge', _('Bridge')); + dat_bridge.optional = false; + dat_bridge.rmempty = false; + dat_bridge.nocreate = false; + dat_bridge.noaliases = true; + dat_bridge.filter = function(section, value) { + if(value.startsWith('br-')) + return true; + } + + // Data interfaces list + var ifaces = s.option(form.MultiValue, 'interfaces', _('Interfaces')); + ifaces.optional = true; + ifaces.rmempty = false; + if (wireless_devices.length > 0) { + Object.values(wireless_devices).forEach(function (radio) { + radio?.interfaces?.forEach(function(_if) { + ifaces.value(_if?.ifname ?? 'unknown_if_name'); + }); + }); + } else { + ifaces.value('lo'); + } + + // Channel sets section + s = m.section(form.TypedSection, 'channel-set', _('Channel Sets'), _('Define primary channels and their corresponding data channels.')); + s.addremove = true; + s.dynamic = false; + s.optional = false; + s.anonymous = false; + + // Enabled state option + var enable = s.option(form.Flag, 'enabled', _('Enable')); + enable.default = false; + enable.optional = false; + enable.rmempty = false; + + // SSID option + var pri_ssid = s.option(form.Value, 'ssid', _('SSID')); + pri_ssid.optional = false; + pri_ssid.rmempty = false; + if (wireless_devices.length > 0) { + Object.values(wireless_devices).forEach(function (radio) { + radio?.interfaces?.forEach(function(_if) { + pri_ssid.value(_if?.config?.ssid ?? 'unknown_ssid'); + }); + }); + } else { + pri_ssid.value('-'); + } + + // Primary bridge option + var pri_bridge = s.option(widgets.DeviceSelect, 'bridge', _('Bridge')); + pri_bridge.optional = false; + pri_bridge.rmempty = false; + pri_bridge.nocreate = true; + pri_bridge.noaliases = true; + pri_bridge.filter = function(section, value) { + if (value.startsWith('br-')) + return true; + } + + // Data channels list + var data_channels = s.option(form.MultiValue, 'data_channels', _('Data Channels')); + data_channels.optional = false; + data_channels.rmempty = false; + const dataChannels = L.uci.sections('dcwapd', 'datachannel'); + if (dataChannels.length > 0) { + Object.values(dataChannels).forEach(function (dc) { + if(dc['.name']) + data_channels.value(dc['.name']); + }); + } else { + data_channels.value('err: no data_channels'); + } + + // Filters section + s = m.section(form.TableSection, 'filter', _('Filters'), _('Define filter rules to apply to outbound packets. Matching packets will flow over the data channel.')); + s.anonymous = false; + s.addremove = true; + s.sortable = true; + + // Packet Size + var packetsize = s.option(form.Value, 'packet_size', _('Packet size')); + packetsize.rmempty = false; + packetsize.value('*'); + packetsize.default = '*'; + + // Source IP + var srcip = s.option(form.Value, 'source_ip', _('Source IP')); + srcip.rmempty = false; + srcip.value('*'); + srcip.default = '*'; + + // Source Port + var srcport = s.option(form.Value, 'source_port', _('Source port')); + srcport.rmempty = false; + srcport.value('*'); + srcport.default = '*'; + + // Protocol + var proto = s.option(form.Value, 'protocol', _('Protocol')); + proto.value('*'); + proto.value('tcp', 'TCP'); + proto.value('udp', 'UDP'); + proto.value('icmp', 'ICMP'); + proto.rmempty = false; + proto.default = '*'; + + // Destination Port + var dstport = s.option(form.Value, 'dest_port', _('Destination port')); + dstport.rmempty = false; + dstport.value('*'); + dstport.default = '*'; + + // Filter sets section + s = m.section(form.TypedSection, 'filter-set', _('Filter Sets'), _('Select filters to apply to matching MAC addresses.')); + s.addremove = true; + s.dynamic = false; + s.anonymous = false; + s.optional = false; + + // MAC address option + var mac = s.option(form.Value, 'mac', _('MAC Address')); + mac.optional = false; + mac.rmempty = false; + mac.datatype = 'or(macaddr,"*")'; + + // Filters list + var filters = s.option(form.MultiValue, 'filters', _('Filters')); + filters.optional = false; + filters.rmempty = false; + const filterSections = L.uci.sections('dcwapd', 'filter'); + if (filterSections.length > 0) { + Object.values(filterSections).forEach(function (element) { + if(element['.name']) + filters.value(element['.name']); + }); + } else { + filters.value('err: no filters'); + } + + return m.render(); + }, +}); |