summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-app-dcwapd/htdocs/luci-static/resources/view/dcwapd
diff options
context:
space:
mode:
authorPaul Donald <newtwen+github@gmail.com>2024-10-18 04:54:58 +0200
committerPaul Donald <newtwen+github@gmail.com>2024-10-18 05:00:04 +0200
commit82e5c888408a9728576f584088432289809fa293 (patch)
treee4174dc7207c1b41bc83654b4935ff3f7dbfaf75 /applications/luci-app-dcwapd/htdocs/luci-static/resources/view/dcwapd
parent5c6b08cf89f5dd4dd0bc0ee4d0c643a19a34c9b8 (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.js212
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();
+ },
+});