From 82b7cb077c95c810f480cf504eb40defb98b79cb Mon Sep 17 00:00:00 2001 From: viktorxda <35473052+viktorxda@users.noreply.github.com> Date: Mon, 7 Apr 2025 15:12:08 +0200 Subject: [PATCH] [no ci] Package: update wifibroadcast-ng --- .../wifibroadcast-ext/0001-unix-socket.patch | 127 -------------- .../package/wifibroadcast-ext/files/wfb.yaml | 17 -- .../wifibroadcast-ext/files/wifibroadcast | 162 ------------------ .../wifibroadcast-ext/wifibroadcast-ext.mk | 12 +- .../package/wifibroadcast-ng/files/wfb-cli | 2 - .../wifibroadcast-ng/wifibroadcast-ng.mk | 6 +- .../package/wifibroadcast-ng/www/index.html | 156 ----------------- .../wifibroadcast-ng/www/js-yaml.min.js | 2 - .../package/wifibroadcast-ng/www/logo.webp | Bin 11720 -> 0 bytes .../package/wifibroadcast-ng/www/script.js | 96 ----------- .../package/wifibroadcast-ng/www/style.css | 111 ------------ 11 files changed, 4 insertions(+), 687 deletions(-) delete mode 100644 general/package/wifibroadcast-ext/0001-unix-socket.patch delete mode 100644 general/package/wifibroadcast-ext/files/wfb.yaml delete mode 100644 general/package/wifibroadcast-ext/files/wifibroadcast delete mode 100755 general/package/wifibroadcast-ng/files/wfb-cli delete mode 100644 general/package/wifibroadcast-ng/www/index.html delete mode 100644 general/package/wifibroadcast-ng/www/js-yaml.min.js delete mode 100644 general/package/wifibroadcast-ng/www/logo.webp delete mode 100644 general/package/wifibroadcast-ng/www/script.js delete mode 100644 general/package/wifibroadcast-ng/www/style.css diff --git a/general/package/wifibroadcast-ext/0001-unix-socket.patch b/general/package/wifibroadcast-ext/0001-unix-socket.patch deleted file mode 100644 index 722d4e13..00000000 --- a/general/package/wifibroadcast-ext/0001-unix-socket.patch +++ /dev/null @@ -1,127 +0,0 @@ -diff --git a/src/tx.cpp b/src/tx.cpp -index 4dcfd87..b1a9d94 100644 ---- a/src/tx.cpp -+++ b/src/tx.cpp -@@ -1347,7 +1347,7 @@ int open_control_fd(int control_port) - void local_loop(int argc, char* const* argv, int optind, int srv_port, int rcv_buf, int log_interval, - int udp_port, int debug_port, int k, int n, const string &keypair, int fec_timeout, - uint64_t epoch, uint32_t channel_id, uint32_t fec_delay, bool use_qdisc, uint32_t fwmark, -- radiotap_header_t &radiotap_header, uint8_t frame_type, int control_port, bool mirror) -+ radiotap_header_t &radiotap_header, uint8_t frame_type, int control_port, int socket_type, bool mirror) - { - vector rx_fd; - vector wlans; -@@ -1357,7 +1357,7 @@ void local_loop(int argc, char* const* argv, int optind, int srv_port, int rcv_b - for(int i = 0; optind + i < argc; i++) - { - int bind_port = udp_port != 0 ? udp_port + i : 0; -- int fd = open_udp_socket_for_rx(bind_port, rcv_buf); -+ int fd = open_udp_socket_for_rx(bind_port, rcv_buf, INADDR_ANY, socket_type); - - if (udp_port == 0) - { -@@ -1371,7 +1371,15 @@ void local_loop(int argc, char* const* argv, int optind, int srv_port, int rcv_b - bind_port = ntohs(saddr.sin_port); - IPC_MSG("%" PRIu64 "\tLISTEN_UDP\t%d:%x\n", get_time_ms(), bind_port, i); - } -- WFB_INFO("Listen on %d for %s\n", bind_port, argv[optind + i]); -+ -+ if (socket_type == SOCK_SEQPACKET) -+ { -+ WFB_INFO("Listen on %s for %s\n", UNIX_SOCKET, argv[optind + i]); -+ } -+ else -+ { -+ WFB_INFO("Listen on %d for %s\n", bind_port, argv[optind + i]); -+ } - rx_fd.push_back(fd); - wlans.push_back(string(argv[optind + i])); - } -@@ -1499,8 +1507,9 @@ int main(int argc, char * const *argv) - bool use_qdisc = false; - uint32_t fwmark = 0; - tx_mode_t tx_mode = LOCAL; -+ int socket_type = SOCK_DGRAM; - -- while ((opt = getopt(argc, argv, "dI:K:k:n:u:p:F:l:B:G:S:L:M:N:D:T:i:e:R:f:mVQP:C:")) != -1) { -+ while ((opt = getopt(argc, argv, "dI:K:k:n:u:p:F:l:B:G:S:L:M:N:D:T:i:e:R:f:mVQUP:C:")) != -1) { - switch (opt) { - case 'I': - tx_mode = INJECTOR; -@@ -1599,10 +1608,13 @@ int main(int argc, char * const *argv) - case 'C': - control_port = atoi(optarg); - break; -+ case 'U': -+ socket_type = SOCK_SEQPACKET; -+ break; - default: /* '?' */ - show_usage: - WFB_INFO("Local TX: %s [-K tx_key] [-k RS_K] [-n RS_N] [-u udp_port] [-R rcv_buf] [-p radio_port] [-F fec_delay] [-B bandwidth] [-G guard_interval] [-S stbc] [-L ldpc] [-M mcs_index] [-N VHT_NSS]\n" -- " [-T fec_timeout] [-l log_interval] [-e epoch] [-i link_id] [-f { data | rts }] [-m] [-V] [-Q] [-P fwmark] [-C control_port] interface1 [interface2] ...\n", -+ " [-T fec_timeout] [-l log_interval] [-e epoch] [-i link_id] [-f { data | rts }] [-m] [-V] [-Q] [-U] [-P fwmark] [-C control_port] interface1 [interface2] ...\n", - argv[0]); - WFB_INFO("TX distributor: %s -d [-K tx_key] [-k RS_K] [-n RS_N] [-u udp_port] [-R rcv_buf] [-p radio_port] [-F fec_delay] [-B bandwidth] [-G guard_interval] [-S stbc] [-L ldpc] [-M mcs_index] [-N VHT_NSS]\n" - " [-T fec_timeout] [-l log_interval] [-e epoch] [-i link_id] [-f { data | rts }] [-m] [-V] [-Q] [-P fwmark] [-C control_port] host1:port1,port2,... [host2:port1,port2,...] ...\n", -@@ -1658,7 +1670,7 @@ int main(int argc, char * const *argv) - local_loop(argc, argv, optind, srv_port, rcv_buf, log_interval, - udp_port, debug_port, k, n, keypair, fec_timeout, - epoch, channel_id, fec_delay, use_qdisc, fwmark, -- radiotap_header, frame_type, control_port, mirror); -+ radiotap_header, frame_type, control_port, socket_type, mirror); - break; - - -diff --git a/src/wifibroadcast.cpp b/src/wifibroadcast.cpp -index d082958..a1f9f76 100644 ---- a/src/wifibroadcast.cpp -+++ b/src/wifibroadcast.cpp -@@ -18,6 +18,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -65,9 +66,26 @@ uint64_t get_time_us(void) // in microseconds - int open_udp_socket_for_rx(int port, int rcv_buf_size, uint32_t bind_addr, int socket_type, int socket_protocol) - { - struct sockaddr_in saddr; -- int fd = socket(AF_INET, socket_type, socket_protocol); -+ struct sockaddr_un uaddr; -+ -+ int socket_family = (socket_type == SOCK_SEQPACKET) ? AF_UNIX : AF_INET; -+ int fd = socket(socket_family, socket_type, socket_protocol); - if (fd < 0) throw runtime_error(string_format("Error opening socket: %s", strerror(errno))); - -+ if (socket_family == AF_UNIX) -+ { -+ memset(&uaddr, '\0', sizeof(uaddr)); -+ uaddr.sun_family = socket_family; -+ strcpy(uaddr.sun_path, UNIX_SOCKET); -+ -+ if (::connect(fd, (struct sockaddr *) &uaddr, sizeof(uaddr)) < 0) -+ { -+ close(fd); -+ throw runtime_error(string_format("Unable to connect to %s : %s", uaddr.sun_path, strerror(errno))); -+ } -+ return fd; -+ } -+ - const int optval = 1; - if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const void *)&optval , sizeof(optval)) !=0) - { -diff --git a/src/wifibroadcast.hpp b/src/wifibroadcast.hpp -index 0947a76..9bc8e1d 100644 ---- a/src/wifibroadcast.hpp -+++ b/src/wifibroadcast.hpp -@@ -286,6 +286,8 @@ typedef struct { - #define IPC_MSG_SEND() fflush(stdout) - #endif - -+#define UNIX_SOCKET "/tmp/wfb_stream" -+ - int open_udp_socket_for_rx(int port, int rcv_buf_size, uint32_t bind_addr = INADDR_ANY, int socket_type = SOCK_DGRAM, int socket_protocol = 0); - uint64_t get_time_ms(void); - uint64_t get_time_us(void); diff --git a/general/package/wifibroadcast-ext/files/wfb.yaml b/general/package/wifibroadcast-ext/files/wfb.yaml deleted file mode 100644 index a11cbf1b..00000000 --- a/general/package/wifibroadcast-ext/files/wfb.yaml +++ /dev/null @@ -1,17 +0,0 @@ -wireless: - txpower: 1 - channel: 161 - width: 20 -broadcast: - mcs_index: 2 - tun_index: 1 - fec_k: 8 - fec_n: 12 - stbc: 0 - ldpc: 0 - link_id: 7669206 - jumbo_frames: false -telemetry: - router: msposd - serial: ttyS2 - osd_fps: 20 diff --git a/general/package/wifibroadcast-ext/files/wifibroadcast b/general/package/wifibroadcast-ext/files/wifibroadcast deleted file mode 100644 index 84ba7d64..00000000 --- a/general/package/wifibroadcast-ext/files/wifibroadcast +++ /dev/null @@ -1,162 +0,0 @@ -#!/bin/sh -wfb_key=/etc/drone.key -wfb_dev=wlan0 - -echo_log() { - echo "$1" | logger -s -t wifibroadcast -} - -wfb_yaml() { - if [ -e "$1" ]; then - while IFS=: read -r key value; do - key=$(eval echo "$key") - value=$(eval echo "$value") - export "$key=$value" - done < "$1" - fi -} - -load_config() { - wfb_yaml /etc/wfb.yaml - [ ! -e "$wfb_key" ] && wfb_key=/rom/etc/drone.key -} - -load_modules() { - for card in $(lsusb | awk '{print $6}' | uniq); do - case "$card" in - "0bda:8812" | "0bda:881a" | "0b05:17d2" | "2357:0101" | "2604:0012") - driver=88XXau - modprobe "$driver" - ;; - - "0bda:a81a") - driver=8812eu - modprobe "$driver" rtw_regd_src=1 rtw_tx_pwr_by_rate=0 rtw_tx_pwr_lmt_enable=0 - ;; - - "0bda:f72b" | "0bda:b733") - driver=8733bu - modprobe "$driver" rtw_regd_src=1 rtw_tx_pwr_by_rate=0 rtw_tx_pwr_lmt_enable=0 - ;; - esac - done - - if [ -z "$driver" ]; then - echo_log "Wireless module not detected!" - exit 1 - fi - - echo_log "Detected driver: $driver" - if ! ifconfig "$wfb_dev" up; then - echo_log "Wireless driver not found!" - exit 1 - fi -} - -load_interface() { - iw "$wfb_dev" set monitor none - - [ "$width" = "40" ] && wfb_width=HT40+ || wfb_width=HT20 - iw "$wfb_dev" set channel "$channel" "$wfb_width" - iw reg set 00 - - [ "$driver" = "88XXau" ] && wfb_power=$((txpower * -100)) || wfb_power=$((txpower * 50)) - iw "$wfb_dev" set txpower fixed "$wfb_power" - - if [ "$jumbo_frames" = "true" ]; then - ip link set dev "$wfb_dev" mtu 3994 - fi -} - -start_broadcast() { - echo_log "Starting wfb_tx" - wfb_tx -K "$wfb_key" -M "$mcs_index" -B "$width" -k "$fec_k" -n "$fec_n" \ - -S "$stbc" -L "$ldpc" -i "$link_id" -C 8000 -G short "$wfb_dev" &> /dev/null & -} - -start_tunnel() { - echo_log "Starting wfb_tun" - wfb_rx -K "$wfb_key" -i "$link_id" -p 160 -u 5800 "$wfb_dev" &> /dev/null & - wfb_tx -K "$wfb_key" -M "$tun_index" -B "$width" -k "$fec_k" -n "$fec_n" \ - -S "$stbc" -L "$ldpc" -i "$link_id" -p 32 -u 5801 "$wfb_dev" &> /dev/null & - wfb_tun -a 10.5.0.10/24 > /dev/null & -} - -start_telemetry() { - chipset=$(ipcinfo -c) - [ "$chipset" = "ssc33x" ] && devmem 0x1F207890 16 0x8 - - echo_log "Starting $router" - if [ "$router" = "mavfwd" ]; then - mavfwd -b 115200 -c 8 -p 100 -a 15 -t -m /dev/"$serial" \ - -i 0.0.0.0:14550 -o 10.5.0.1:14551 > /dev/null & - else - if [ "$router" = "msposd" ]; then - size=$(curl -s localhost/api/v1/config.json | jsonfilter -e "@.video0.size") - fi - msposd -b 115200 -c 8 -r "$osd_fps" -m /dev/"$serial" \ - -o 10.5.0.1:14551 -z "$size" > /dev/null & - fi -} - -video_settings() { - sensor=$(ipcinfo -s) - cli -s .isp.sensorConfig /etc/sensors/"$sensor"_fpv.bin - cli -s .isp.exposure 5 - cli -s .video0.fps 60 - cli -s .video0.bitrate 8192 - cli -s .video0.codec h265 - cli -s .video0.rcMode cbr - cli -s .outgoing.enabled true - cli -s .outgoing.server udp://0.0.0.0:5600 - cli -s .fpv.enabled true - cli -s .fpv.noiseLevel 1 -} - -start() { - load_config - load_modules - load_interface - - if [ ! -e /etc/system.ok ]; then - sleep 1 - video_settings - touch /etc/system.ok - killall -1 majestic - fi - - stop - start_broadcast - start_tunnel - start_telemetry -} - -stop() { - for process in wfb_rx wfb_tx wfb_tun msposd mavfwd; do - if [ -n "$(pidof $process)" ]; then - echo_log "Stopping $process" - killall -q "$process" - fi - done -} - -case "$1" in - start|stop) - $1 - ;; - - resetv) - cp -f /rom/etc/majestic.yaml /etc/majestic.yaml - video_settings - ;; - - resetw) - cp -f /rom/etc/wfb.yaml /etc/wfb.yaml - start - ;; - - *) - echo "Usage: $0 {start|stop|resetv|resetw}" - exit 1 - ;; -esac diff --git a/general/package/wifibroadcast-ext/wifibroadcast-ext.mk b/general/package/wifibroadcast-ext/wifibroadcast-ext.mk index 13d15bf6..d15e0c34 100644 --- a/general/package/wifibroadcast-ext/wifibroadcast-ext.mk +++ b/general/package/wifibroadcast-ext/wifibroadcast-ext.mk @@ -5,18 +5,12 @@ ################################################################################ define WIFIBROADCAST_EXT_INSTALL_TARGET_CMDS - $(INSTALL) -m 755 -d $(TARGET_DIR)/etc - $(INSTALL) -m 644 -t $(TARGET_DIR)/etc $(WIFIBROADCAST_NG_PKGDIR)/files/wfb.yaml - $(INSTALL) -m 755 -d $(TARGET_DIR)/etc/init.d - $(INSTALL) -m 755 -t $(TARGET_DIR)/etc/init.d $(WIFIBROADCAST_EXT_PKGDIR)/files/S75generate_vtx_info - $(INSTALL) -m 755 -t $(TARGET_DIR)/etc/init.d $(WIFIBROADCAST_NG_PKGDIR)/files/S991temp_monitor + $(INSTALL) -m 755 -t $(TARGET_DIR)/etc/init.d $(WIFIBROADCAST_EXT_PKGDIR)/files/S991temp_monitor $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin - $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(WIFIBROADCAST_EXT_PKGDIR)/files/generate_vtx_info - $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(WIFIBROADCAST_NG_PKGDIR)/files/wifibroadcast - $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(WIFIBROADCAST_NG_PKGDIR)/files/temp_monitor - $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(WIFIBROADCAST_NG_PKGDIR)/files/channels.sh + $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(WIFIBROADCAST_EXT_PKGDIR)/files/temp_monitor + $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(WIFIBROADCAST_EXT_PKGDIR)/files/channels.sh endef $(eval $(generic-package)) diff --git a/general/package/wifibroadcast-ng/files/wfb-cli b/general/package/wifibroadcast-ng/files/wfb-cli deleted file mode 100755 index 0892658b..00000000 --- a/general/package/wifibroadcast-ng/files/wfb-cli +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -yaml-cli -i /etc/wfb.yaml "$@" diff --git a/general/package/wifibroadcast-ng/wifibroadcast-ng.mk b/general/package/wifibroadcast-ng/wifibroadcast-ng.mk index 13cfacd5..708954bb 100644 --- a/general/package/wifibroadcast-ng/wifibroadcast-ng.mk +++ b/general/package/wifibroadcast-ng/wifibroadcast-ng.mk @@ -4,7 +4,7 @@ # ################################################################################ -WIFIBROADCAST_NG_VERSION = 6c5febf31c713beacd63221bfd74dfe30031c44d +WIFIBROADCAST_NG_VERSION = fd3042d27d6f5ef9e1d4f4bf49a8efec307bc4d1 WIFIBROADCAST_NG_SITE = $(call github,svpcom,wfb-ng,$(WIFIBROADCAST_NG_VERSION)) WIFIBROADCAST_NG_LICENSE = GPL-3.0 @@ -30,11 +30,7 @@ define WIFIBROADCAST_NG_INSTALL_TARGET_CMDS $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(@D)/wfb_tx $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(@D)/wfb_tx_cmd $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(@D)/wfb_tun - $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(WIFIBROADCAST_NG_PKGDIR)/files/wfb-cli $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(WIFIBROADCAST_NG_PKGDIR)/files/wifibroadcast - - $(INSTALL) -m 755 -d $(TARGET_DIR)/var/www - $(INSTALL) -m 644 -t $(TARGET_DIR)/var/www $(WIFIBROADCAST_NG_PKGDIR)/www/* endef $(eval $(generic-package)) diff --git a/general/package/wifibroadcast-ng/www/index.html b/general/package/wifibroadcast-ng/www/index.html deleted file mode 100644 index 9ff4bf31..00000000 --- a/general/package/wifibroadcast-ng/www/index.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - OpenIPC - - - -
- -
- -
- -
- -
-
-
-

Video

-
- - -
-
- - -
-
- - -
-
- - -
- -
- -

Audio

-
- - -
-
- - -
-
- -
- -
- - -
-
- -
-
-

Wireless

-
- - -
-
- - -
- -
- -

Broadcast

-
- - -
- -
- -

Telemetry

-
- - -
-
- - -
-
- -
- -
- - -
-
-
- - - - - - diff --git a/general/package/wifibroadcast-ng/www/js-yaml.min.js b/general/package/wifibroadcast-ng/www/js-yaml.min.js deleted file mode 100644 index bdd8eef5..00000000 --- a/general/package/wifibroadcast-ng/www/js-yaml.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).jsyaml={})}(this,(function(e){"use strict";function t(e){return null==e}var n={isNothing:t,isObject:function(e){return"object"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:t(e)?[]:[e]},repeat:function(e,t){var n,i="";for(n=0;nl&&(t=i-l+(o=" ... ").length),n-i>l&&(n=i+l-(a=" ...").length),{str:o+e.slice(t,n).replace(/\t/g,"→")+a,pos:i-t+o.length}}function l(e,t){return n.repeat(" ",t-e.length)+e}var c=function(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2);for(var i,r=/\r?\n|\r|\0/g,o=[0],c=[],s=-1;i=r.exec(e.buffer);)c.push(i.index),o.push(i.index+i[0].length),e.position<=i.index&&s<0&&(s=o.length-2);s<0&&(s=o.length-1);var u,p,f="",d=Math.min(e.line+t.linesAfter,c.length).toString().length,h=t.maxLength-(t.indent+d+3);for(u=1;u<=t.linesBefore&&!(s-u<0);u++)p=a(e.buffer,o[s-u],c[s-u],e.position-(o[s]-o[s-u]),h),f=n.repeat(" ",t.indent)+l((e.line-u+1).toString(),d)+" | "+p.str+"\n"+f;for(p=a(e.buffer,o[s],c[s],e.position,h),f+=n.repeat(" ",t.indent)+l((e.line+1).toString(),d)+" | "+p.str+"\n",f+=n.repeat("-",t.indent+d+3+p.pos)+"^\n",u=1;u<=t.linesAfter&&!(s+u>=c.length);u++)p=a(e.buffer,o[s+u],c[s+u],e.position-(o[s]-o[s+u]),h),f+=n.repeat(" ",t.indent)+l((e.line+u+1).toString(),d)+" | "+p.str+"\n";return f.replace(/\n$/,"")},s=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],u=["scalar","sequence","mapping"];var p=function(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===s.indexOf(t))throw new o('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')})),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function(e){var t={};return null!==e&&Object.keys(e).forEach((function(n){e[n].forEach((function(e){t[String(e)]=n}))})),t}(t.styleAliases||null),-1===u.indexOf(this.kind))throw new o('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')};function f(e,t){var n=[];return e[t].forEach((function(e){var t=n.length;n.forEach((function(n,i){n.tag===e.tag&&n.kind===e.kind&&n.multi===e.multi&&(t=i)})),n[t]=e})),n}function d(e){return this.extend(e)}d.prototype.extend=function(e){var t=[],n=[];if(e instanceof p)n.push(e);else if(Array.isArray(e))n=n.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new o("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach((function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(e.loadKind&&"scalar"!==e.loadKind)throw new o("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(e.multi)throw new o("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),n.forEach((function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var i=Object.create(d.prototype);return i.implicit=(this.implicit||[]).concat(t),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=f(i,"implicit"),i.compiledExplicit=f(i,"explicit"),i.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function i(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),x=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var I=/^[-+]?[0-9]+e/;var S=new p("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!x.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n;return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||n.isNegativeZero(e))},represent:function(e,t){var i;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(n.isNegativeZero(e))return"-0.0";return i=e.toString(10),I.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),O=b.extend({implicit:[A,v,C,S]}),j=O,T=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),N=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var F=new p("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==T.exec(e)||null!==N.exec(e))},construct:function(e){var t,n,i,r,o,a,l,c,s=0,u=null;if(null===(t=T.exec(e))&&(t=N.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],i=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(n,i,r));if(o=+t[4],a=+t[5],l=+t[6],t[7]){for(s=t[7].slice(0,3);s.length<3;)s+="0";s=+s}return t[9]&&(u=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(u=-u)),c=new Date(Date.UTC(n,i,r,o,a,l,s)),u&&c.setTime(c.getTime()-u),c},instanceOf:Date,represent:function(e){return e.toISOString()}});var E=new p("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}}),M="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var L=new p("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,i=0,r=e.length,o=M;for(n=0;n64)){if(t<0)return!1;i+=6}return i%8==0},construct:function(e){var t,n,i=e.replace(/[\r\n=]/g,""),r=i.length,o=M,a=0,l=[];for(t=0;t>16&255),l.push(a>>8&255),l.push(255&a)),a=a<<6|o.indexOf(i.charAt(t));return 0===(n=r%4*6)?(l.push(a>>16&255),l.push(a>>8&255),l.push(255&a)):18===n?(l.push(a>>10&255),l.push(a>>2&255)):12===n&&l.push(a>>4&255),new Uint8Array(l)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){var t,n,i="",r=0,o=e.length,a=M;for(t=0;t>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]),r=(r<<8)+e[t];return 0===(n=o%3)?(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]):2===n?(i+=a[r>>10&63],i+=a[r>>4&63],i+=a[r<<2&63],i+=a[64]):1===n&&(i+=a[r>>2&63],i+=a[r<<4&63],i+=a[64],i+=a[64]),i}}),_=Object.prototype.hasOwnProperty,D=Object.prototype.toString;var U=new p("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,i,r,o,a=[],l=e;for(t=0,n=l.length;t>10),56320+(e-65536&1023))}for(var ie=new Array(256),re=new Array(256),oe=0;oe<256;oe++)ie[oe]=te(oe)?1:0,re[oe]=te(oe);function ae(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||K,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function le(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return n.snippet=c(n),new o(t,n)}function ce(e,t){throw le(e,t)}function se(e,t){e.onWarning&&e.onWarning.call(null,le(e,t))}var ue={YAML:function(e,t,n){var i,r,o;null!==e.version&&ce(e,"duplication of %YAML directive"),1!==n.length&&ce(e,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&ce(e,"ill-formed argument of the YAML directive"),r=parseInt(i[1],10),o=parseInt(i[2],10),1!==r&&ce(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&se(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var i,r;2!==n.length&&ce(e,"TAG directive accepts exactly two arguments"),i=n[0],r=n[1],G.test(i)||ce(e,"ill-formed tag handle (first argument) of the TAG directive"),P.call(e.tagMap,i)&&ce(e,'there is a previously declared suffix for "'+i+'" tag handle'),V.test(r)||ce(e,"ill-formed tag prefix (second argument) of the TAG directive");try{r=decodeURIComponent(r)}catch(t){ce(e,"tag prefix is malformed: "+r)}e.tagMap[i]=r}};function pe(e,t,n,i){var r,o,a,l;if(t1&&(e.result+=n.repeat("\n",t-1))}function be(e,t){var n,i,r=e.tag,o=e.anchor,a=[],l=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),i=e.input.charCodeAt(e.position);0!==i&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,ce(e,"tab characters must not be used in indentation")),45===i)&&z(e.input.charCodeAt(e.position+1));)if(l=!0,e.position++,ge(e,!0,-1)&&e.lineIndent<=t)a.push(null),i=e.input.charCodeAt(e.position);else if(n=e.line,we(e,t,3,!1,!0),a.push(e.result),ge(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)ce(e,"bad indentation of a sequence entry");else if(e.lineIndentt?g=1:e.lineIndent===t?g=0:e.lineIndentt?g=1:e.lineIndent===t?g=0:e.lineIndentt)&&(y&&(a=e.line,l=e.lineStart,c=e.position),we(e,t,4,!0,r)&&(y?g=e.result:m=e.result),y||(de(e,f,d,h,g,m,a,l,c),h=g=m=null),ge(e,!0,-1),s=e.input.charCodeAt(e.position)),(e.line===o||e.lineIndent>t)&&0!==s)ce(e,"bad indentation of a mapping entry");else if(e.lineIndent=0))break;0===o?ce(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?ce(e,"repeat of an indentation width identifier"):(p=t+o-1,u=!0)}if(Q(a)){do{a=e.input.charCodeAt(++e.position)}while(Q(a));if(35===a)do{a=e.input.charCodeAt(++e.position)}while(!J(a)&&0!==a)}for(;0!==a;){for(he(e),e.lineIndent=0,a=e.input.charCodeAt(e.position);(!u||e.lineIndentp&&(p=e.lineIndent),J(a))f++;else{if(e.lineIndent0){for(r=a,o=0;r>0;r--)(a=ee(l=e.input.charCodeAt(++e.position)))>=0?o=(o<<4)+a:ce(e,"expected hexadecimal character");e.result+=ne(o),e.position++}else ce(e,"unknown escape sequence");n=i=e.position}else J(l)?(pe(e,n,i,!0),ye(e,ge(e,!1,t)),n=i=e.position):e.position===e.lineStart&&me(e)?ce(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}ce(e,"unexpected end of the stream within a double quoted scalar")}(e,d)?y=!0:!function(e){var t,n,i;if(42!==(i=e.input.charCodeAt(e.position)))return!1;for(i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!z(i)&&!X(i);)i=e.input.charCodeAt(++e.position);return e.position===t&&ce(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),P.call(e.anchorMap,n)||ce(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],ge(e,!0,-1),!0}(e)?function(e,t,n){var i,r,o,a,l,c,s,u,p=e.kind,f=e.result;if(z(u=e.input.charCodeAt(e.position))||X(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1;if((63===u||45===u)&&(z(i=e.input.charCodeAt(e.position+1))||n&&X(i)))return!1;for(e.kind="scalar",e.result="",r=o=e.position,a=!1;0!==u;){if(58===u){if(z(i=e.input.charCodeAt(e.position+1))||n&&X(i))break}else if(35===u){if(z(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&me(e)||n&&X(u))break;if(J(u)){if(l=e.line,c=e.lineStart,s=e.lineIndent,ge(e,!1,-1),e.lineIndent>=t){a=!0,u=e.input.charCodeAt(e.position);continue}e.position=o,e.line=l,e.lineStart=c,e.lineIndent=s;break}}a&&(pe(e,r,o,!1),ye(e,e.line-l),r=o=e.position,a=!1),Q(u)||(o=e.position+1),u=e.input.charCodeAt(++e.position)}return pe(e,r,o,!1),!!e.result||(e.kind=p,e.result=f,!1)}(e,d,1===i)&&(y=!0,null===e.tag&&(e.tag="?")):(y=!0,null===e.tag&&null===e.anchor||ce(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===g&&(y=c&&be(e,h))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&ce(e,'unacceptable node kind for ! tag; it should be "scalar", not "'+e.kind+'"'),s=0,u=e.implicitTypes.length;s"),null!==e.result&&f.kind!==e.kind&&ce(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+f.kind+'", not "'+e.kind+'"'),f.resolve(e.result,e.tag)?(e.result=f.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):ce(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||y}function ke(e){var t,n,i,r,o=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(r=e.input.charCodeAt(e.position))&&(ge(e,!0,-1),r=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==r));){for(a=!0,r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!z(r);)r=e.input.charCodeAt(++e.position);for(i=[],(n=e.input.slice(t,e.position)).length<1&&ce(e,"directive name must not be less than one character in length");0!==r;){for(;Q(r);)r=e.input.charCodeAt(++e.position);if(35===r){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&!J(r));break}if(J(r))break;for(t=e.position;0!==r&&!z(r);)r=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}0!==r&&he(e),P.call(ue,n)?ue[n](e,n,i):se(e,'unknown document directive "'+n+'"')}ge(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,ge(e,!0,-1)):a&&ce(e,"directives end mark is expected"),we(e,e.lineIndent-1,4,!1,!0),ge(e,!0,-1),e.checkLineBreaks&&H.test(e.input.slice(o,e.position))&&se(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&me(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,ge(e,!0,-1)):e.position=55296&&i<=56319&&t+1=56320&&n<=57343?1024*(i-55296)+n-56320+65536:i}function Re(e){return/^\n* /.test(e)}function Be(e,t,n,i,r,o,a,l){var c,s,u=0,p=null,f=!1,d=!1,h=-1!==i,g=-1,m=De(s=Ye(e,0))&&s!==Oe&&!_e(s)&&45!==s&&63!==s&&58!==s&&44!==s&&91!==s&&93!==s&&123!==s&&125!==s&&35!==s&&38!==s&&42!==s&&33!==s&&124!==s&&61!==s&&62!==s&&39!==s&&34!==s&&37!==s&&64!==s&&96!==s&&function(e){return!_e(e)&&58!==e}(Ye(e,e.length-1));if(t||a)for(c=0;c=65536?c+=2:c++){if(!De(u=Ye(e,c)))return 5;m=m&&qe(u,p,l),p=u}else{for(c=0;c=65536?c+=2:c++){if(10===(u=Ye(e,c)))f=!0,h&&(d=d||c-g-1>i&&" "!==e[g+1],g=c);else if(!De(u))return 5;m=m&&qe(u,p,l),p=u}d=d||h&&c-g-1>i&&" "!==e[g+1]}return f||d?n>9&&Re(e)?5:a?2===o?5:2:d?4:3:!m||a||r(e)?2===o?5:2:1}function Ke(e,t,n,i,r){e.dump=function(){if(0===t.length)return 2===e.quotingType?'""':"''";if(!e.noCompatMode&&(-1!==Te.indexOf(t)||Ne.test(t)))return 2===e.quotingType?'"'+t+'"':"'"+t+"'";var a=e.indent*Math.max(1,n),l=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-a),c=i||e.flowLevel>-1&&n>=e.flowLevel;switch(Be(t,c,e.indent,l,(function(t){return function(e,t){var n,i;for(n=0,i=e.implicitTypes.length;n"+Pe(t,e.indent)+We(Me(function(e,t){var n,i,r=/(\n+)([^\n]*)/g,o=(l=e.indexOf("\n"),l=-1!==l?l:e.length,r.lastIndex=l,He(e.slice(0,l),t)),a="\n"===e[0]||" "===e[0];var l;for(;i=r.exec(e);){var c=i[1],s=i[2];n=" "===s[0],o+=c+(a||n||""===s?"":"\n")+He(s,t),a=n}return o}(t,l),a));case 5:return'"'+function(e){for(var t,n="",i=0,r=0;r=65536?r+=2:r++)i=Ye(e,r),!(t=je[i])&&De(i)?(n+=e[r],i>=65536&&(n+=e[r+1])):n+=t||Fe(i);return n}(t)+'"';default:throw new o("impossible error: invalid scalar style")}}()}function Pe(e,t){var n=Re(e)?String(t):"",i="\n"===e[e.length-1];return n+(i&&("\n"===e[e.length-2]||"\n"===e)?"+":i?"":"-")+"\n"}function We(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function He(e,t){if(""===e||" "===e[0])return e;for(var n,i,r=/ [^ ]/g,o=0,a=0,l=0,c="";n=r.exec(e);)(l=n.index)-o>t&&(i=a>o?a:l,c+="\n"+e.slice(o,i),o=i+1),a=l;return c+="\n",e.length-o>t&&a>o?c+=e.slice(o,a)+"\n"+e.slice(a+1):c+=e.slice(o),c.slice(1)}function $e(e,t,n,i){var r,o,a,l="",c=e.tag;for(r=0,o=n.length;r tag resolver accepts not "'+s+'" style');i=c.represent[s](t,s)}e.dump=i}return!0}return!1}function Ve(e,t,n,i,r,a,l){e.tag=null,e.dump=n,Ge(e,n,!1)||Ge(e,n,!0);var c,s=Ie.call(e.dump),u=i;i&&(i=e.flowLevel<0||e.flowLevel>t);var p,f,d="[object Object]"===s||"[object Array]"===s;if(d&&(f=-1!==(p=e.duplicates.indexOf(n))),(null!==e.tag&&"?"!==e.tag||f||2!==e.indent&&t>0)&&(r=!1),f&&e.usedDuplicates[p])e.dump="*ref_"+p;else{if(d&&f&&!e.usedDuplicates[p]&&(e.usedDuplicates[p]=!0),"[object Object]"===s)i&&0!==Object.keys(e.dump).length?(!function(e,t,n,i){var r,a,l,c,s,u,p="",f=e.tag,d=Object.keys(n);if(!0===e.sortKeys)d.sort();else if("function"==typeof e.sortKeys)d.sort(e.sortKeys);else if(e.sortKeys)throw new o("sortKeys must be a boolean or a function");for(r=0,a=d.length;r1024)&&(e.dump&&10===e.dump.charCodeAt(0)?u+="?":u+="? "),u+=e.dump,s&&(u+=Le(e,t)),Ve(e,t+1,c,!0,s)&&(e.dump&&10===e.dump.charCodeAt(0)?u+=":":u+=": ",p+=u+=e.dump));e.tag=f,e.dump=p||"{}"}(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(!function(e,t,n){var i,r,o,a,l,c="",s=e.tag,u=Object.keys(n);for(i=0,r=u.length;i1024&&(l+="? "),l+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),Ve(e,t,a,!1,!1)&&(c+=l+=e.dump));e.tag=s,e.dump="{"+c+"}"}(e,t,e.dump),f&&(e.dump="&ref_"+p+" "+e.dump));else if("[object Array]"===s)i&&0!==e.dump.length?(e.noArrayIndent&&!l&&t>0?$e(e,t-1,e.dump,r):$e(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(!function(e,t,n){var i,r,o,a="",l=e.tag;for(i=0,r=n.length;i",e.dump=c+" "+e.dump)}return!0}function Ze(e,t){var n,i,r=[],o=[];for(Je(e,r,o),n=0,i=o.length;n*v@VzId{qiB!vbGQkM#J zH->zwGNfwCG5U*nUT~mMumY>OM)yQHA1U{fOJu_^R{d&Ej(pGYfNi@orP=2#Zbbhjv5n+NQsnNQKLYDrSC{K~FoTg#^~iU>oV;jb(%IXosn0pjOijIe z{=nwNQ{x7-uj$VeVHJ%WG-dlOu2c8-Odr;vw9<=r#OP&LIG}E=iR(~E$^CEbe%P1A z5tMW2w=VulEkV(1GB~1glH^@~`!kS3<^~;AC|1`%r}yck31#r={eW z!fGnj$ER|FN}s8qIyGHm<5ZO#<)V_}+W$Bwt&5*~DWiWEb)J*gy*NJ=6u0OrTnODA z=B<3v={y%kH=`{|C*ixeP&(C7-K5lf8y8I*Dyf;6qaJbrl@;%yU{d#AE~qZFQ7$X2 z|CqzY)vQ8FCAE%lp>?Z+LRrNoE{h8;+azyAl5%^w1azjh8d=BYA(w(OV$?@m;&Qnx zv{ZHM=dtJxE)kupsy3E2xy+@a)Yb|kUDLT_lrutA#Pp?&%SSU@)x-v{=Wr=$o4F3I;S2s>lbpGOG^)$DTXw@$0erBUP>X>=NzqUaS9*tf^xUfW5t>P7|DC+#$APUY+R1UWRA~AB zcZ-tfxa25)|ItL_BivduqN%%{$7ZP!H7&(Pf#J&EN7;qVlf^xNhD}$b%d7|3Oj7{c z899T=!?{+_E^#eQiWVDBO-OhxI7^ zqEF%kb{)dhK=rc0v$LxUYVK*|s$6iMHDIcszJli8mITJqI5!8lX{a6wVSiwAK{?Tx z#zU>S2G3CW^V{CQ|&>#_0pe z&_MP_Vm#o;N7@Y4Ms>6A_oTfrJxN}*-y>urmakMuzw31b8XfvUU4|;8Us4I7Ch2gc z4nt+pZ)<)m6KuMJEb*ER6-K`^+AW1})YxvH`skPav4{^j^06jE#nDfbrH`n=a6Eb% zERDqEmxd~(Vv|Y;JT2`j-)2fBCU>S#>;L^{^FN#a+5FGufBsKV%1CxPwbZ_eZ_0Q> zru4A=sqRgKlglK|A6Awp%`!RPR7laocU_)=Ef$mJlpo&96Y6_;HSc2_d1Zu0?sBBa zxmRYJC0xOy!EOGE{x(T*@Vnddx#pH#lsn$acYZ(OWEf1tJcVy2Bx7>(50SdB{P>#Z zuRmRsI!n9LZqrhJhIU7YR7jz-)G(1vm1SqBVYGMUl{rgIlTcAiZibpB94=guv(z{m zb9bp3YEpU^HO^9_KKERp_Uoac!dYt80TAR|rE|2{wd8jE2tm7!ekz;gTAfp5_`(Nj zaa86kwfND2+8h-*OBwow08GkLdKV?mQmY>ssNGS4vy`Eqo1F_spw2m3CUPhput0Ur z(Z{Z(F26S_P_LuHW~tYY3DoTvri@YNI`9OsKNEovj*6NkgdYzG<2cet7(W^i%yEK| z82Z|?fPjv}jD+(;0YM!{8A<7VW9Q2AC~}VVZzEo~eX*H>c(J`YDP)#+oM(F%d1St- zGmg^U&weicCVLb0wN1&glzZAm?YxzQ90*76aXob#JulE{NS%sF=i9L+&(hfLdW^09`~tsDE7{Lrt#|0W7V z1~eJ)%d(_f8XCcPe(m3dU-xMgkguiecd*CGN#rHY@Ewc2^W(P1y2}QgTQI1R%l{IN z-79+>x!&ftV{lDlJzgCX;=EF27A+0cJ^%jG zXz7>lMts`8WuRFcst#VC4tTvk*MAyfIF?NpJ**2K!JmPRtLdcDg45C#y(}hrJ@L=1 z9oJfb#Ocs+ClRh4^SDYzV%c;tECK71?xu_=UH}ALW&it2GZSG7eSC-`Y2QFUqp)nb z=w?M-s8lZ!8y5ILTh|ln5~bR7)P*nbD87^-Saw|W`|>Ww){a&MJdoGHZe|IsVa3cD z!4kH#yGw1j=skkQY8~3wsvr~2FUGjjqGlqepsa*KVkT1vk^L4;QMc*r2dWoj!ujQ% zl#YfM+Q=+_!f3P1Egf&iMh7_|z4+0)AQR4aQaOTgjd{!oXB`CDdq*IsMDbZn()V6ktw^MQ`E5v z23U^HQtRV+DcM}Ja?d9YZs_XBI2KvQi7LHsfhOGclNt51ahvKg%4lJ5mgPQJ4w9qr zd}B;yfgN*i0iOhOK_;9pa>Zj<4yURYZyH#A@8FT3XAoz<33WsqU!%PQe3p9^Xu{Wc z;2kRxR!$#-vh*2%P~$pfNKr?_v110OtpkM%G~t`Qaf)ZH=A@O~%ZMtaRGaz)sbtWi zh7N^ek1S4Ihl&IG+?WZ{b2|zT7RF-Qpzmw3{(I7QMwq)3*hhq!oc-6cNOPGU49=Fq(@;PN&U2Ap5S}1gvOeWh1@!?f^E+Klv%2l%o>kU zGe*bu9G1PEbQT2~@c{TV(p(V4b;#VSHcKG?#X)`h+B3jeU&DL}MbOt(rk2cg6BkG+ z{!BE-V`4h~3(EOc0L3waGw5G8z(n@z4_TC;BcA0o@#0PY zlnbWcMGP-ZJRo~?e%K1E+UiUWsHO#PurlYMSgmJe*+b?4j)Xe)Hcy6Yb#=6emSz34 z6R*T^6k|r`SQT&sr9ei#IXDN7m9#0|#5!n9e0=w6!M_&Pp5 z{`(Q1^lV$Vs08q-*{0v{(ed%|V~0ieY*@t5VS!LtICpih1CINEedL<{07?m3UQXzua`&Zr{?UR{qqyEGoV;-bxNDTw3=))Iyddxrx_`_rTzU|ZHTsLis(hHwEb3mXnx#Rb#} z55(z0WE4H&N|K&~9`?w)a7Pd0Xok7cYF3)|B>sQCYhj^E&B5!^bZ6c#`y^O6Ts!{# zSjWlPS3w2``oVZN%}fX5MipYqLvL3zF)hpTp|~wC8ku7hhvE+Wuu(_CeI2>zV{S5l zmS`wGI^>G(C;o5M2!7lqzg+=~wDr3hSR91-6li$0E&BC+y{GXz`??r1?Qla5@p%Hp z6Yvz05;t}3imZs1heT`yDdd@$=ey7g#!3D};R}Tn=d`eH;L(g&h!J%Yu3Ta(LR~D)%|d9*=GW39 z(Cr3Tx?(fqh0THCDsr_4lq|rh+7mocU&PzKYUwq7SMPCQ_04}Z{0+GjC7f8kUqBS+pJt9w_TS8i5GM)>pb?iSGlVe2=#7u@n`E(#w zk-_o{!rppA5$pmxQZ%NS9FbSy`op-|^CczMsiLLE|j5y4{_$Iz8}s5BwakH-9>#8{Be9xx3d z73eKvr2-KBv{g`pYN;75I`O{te)oCrpEhwVB~paDpsl$`;!YrDGc?LV)nsi?1Fs!e zX&>zoE3*8ML!z0;mNcpJ5GOonL&YD6A(|LYJTwcJtNG>|{e)ekwic=-a)yzOi>)5m zR|^7549Et`=)#>Isgyna#!QKY`L8fMguiWKr1(KKjg42D zHoY)`X+VB4G4BBTMYY6bBNv==FSlAC(F*j~cc4!898@|n3FcvTHQihEQP`~UBZnW_ z$T=TWHd639MlYNV!yJZ3P~II>ZereHISOovyQ>jidB${|N1O!22dIw>YT%=R1Q?1N z6+jmZdS-G$I$0J9up;p$#Qdui4+90S0nZ*B2GlA7+h6|OqRRNqIE+WNtj=QbIr_4z z!8~FL&|4P~U{c5X;S-*X-1=8IJRjw9Qo34&7Q;EBeswhXQ&XiF7_M7hg80T;^5(9K zYgwHN)J9WLc>eA*VsW56hxN!eRwodDq2qo6JwLG&G$S}Q-K|cES}#x&>svS&%+pe4E2C2>G!A^<{YhoiPM%^aqRRy=dI2LWI8= zb3vZDhKnAK1=G-usX8!xiEAk^ogr@bWI#57OC|3jAIBensD;dYpi(VGkSYF{<7)^g z{YVynx?F+=iwV4X4Rdt1mz@1WZ!ah{ovq~1avGCC3G*Ht5GdU@F|xBA4iYFBw`n^ zTA|ni3UA^JF8hh_zz>K&IbEJsBEXX2oPY)!BSAp)w@+mbLp?mqNh+;k$b#RajwV@) z^{6oth){Iq0c8`rW0FQDV{t50C#{tAj|)Ca&r#rl*$}A@RUjDYEpt5NY)Pk83;_iC zA{|7W4OFz(9i34eMm6+d)BQnz2#OLPrPbH?+~Fh?X^6A~LPJgRSfB$*fh`{+TDmeK zbm#velXvzOKcmF~819JDm2X!Wz++*`I?^VqvR+(jks{-^8Obl;Nt-mCygB74fP%Yo`Yk5w7n{Zfn(uH1AHI_?wE{^Jx~Sfu}Z4M zO4pJS6J)~oaWCakh@SxQGd?C849`fBaeCL1#JP!^Prsmc6x$0f8%0wOt?r*gRp2~t zCdPvkd)CZPT=6e-VU)^-M-L7}6{L^FhfCFRx+^2aKAG@${6*pv;7-N(UQ->cfG;8ZLmDi*QSs8B-HOcTI->3;BKg~9@8Ov+qf?ICD4`Xy68C|{f&;0 zRH%$?4bPupKzt@1(b-fi2^1y z1L6w;+ySC70iJ&!ptZG{`H(Es7da$Q$6Cd7eJuk;`Baw#m$ioF6?O@V6l3FcxZ++z z(Ms`uAW=(t;}nt$dX1iz720vHFsXe|Uy)t#*`_CEvJMa7c<6#%MCX#uPHPImWQEQl zfNi3;_L5HLp?>4u21eOG0Y7~eHLwW^X<8BtnEaExNTzY95aMac@IE%VqfGkF2LT)2 zYo>#rVe(LQcM8-v2P99|8=dF6+VTp8N`k6uRQPvX0NFwENxYEcK9Hp4W{R`b{*yR> z)_V#e-joc3k;(3=yPc53_{~CFZi0~CvcN_S&fJR4Go2%)7z;#q0~!b8`@?^jee%_k z19-);uR|eCOM)cIg(G>}2`~u9CoqY{#ny|?ENmUejdd}}3~-VRQt%@YnOwa!8$E$? zE539H#+F-O3s0e-Bq_36F5G^l!&^geH08qNCtQ9bG_!HG!kSqCvr{2*fgjVoG$V4n zM;r_bBm&F(g63Q(5J{@BaL9$MR|Xhv2#!7+CX-RQyluf&3^4@9;<8~bDm|gb`-poi+=5PPG|7mc0-H*2 zSdw6(iEsc&_0p7N1_mKXl}yR-%GNam$1<{EAttw6fvA*?+TiJTbRsqy4N`~#lO!t9 zR6Q{^3O@;084PSvp}7kB;55Zx2#$fWAyG3@y-2gnw>@pjJvIdsBsGe3f$44 z_~H%*Jz4n$H`(w?$m_CkOt9bt03sV!V*)t*t$z>)d)F1DwhdTEmzzPlbHL*soi2vL zjGiaOH8uiJaKJlmsU{oNBk~k-6zPane-c3Ep@Y(>t54&x>pzIRVN(O6^c-~!W%3V^ zk7aaYWV<;+|L`ee#{Q>k)Hd}bwD>7zf-w-}h|3p^6?Q-^k>1kaxvsS#fhJOUlTgGN zz}n*Yy~$+6H|fZX{$HP=))VMvw0P7;l4|L!0p2(m>CEtLdx1cmqu)ky`9P(TIhsy7 zdLL*#>IX9XcRNLGG*K7PK1Y4Qs0Y)902*^(7!JZ)#?EBzL$Z@hjT`S(h!wo+Q{|3i z@Fhx63TllT!zjls24BG>V!2`U%-WjNEAub3`4}d&Hbdu<_I*oTFr2Q07c^z`Aj(O( z@WMoshM2Y3eVK98jTD1^XbEd$L4X_aRtcDpA@HEH@%tJ%S+D5`A^@7e;!e46Q$DV! zXKm7HZ$u1Q!O&a_i%5mwRtSV^wCU>TFpz1ds(fH=B;&Z)VQp>Ilnav|#h@k(Z)0`# z97?LVYpyG4+BrDGQEOH#xl#fW(J8tDXjQ3%`XIOKHp(ygO|R8IcNfl?c~B|hSJmS zDcSVjCK6KET zuY1efg(7&5aMGkgahX`=>1T)_UbJ;f}FHSvEy7 zu{#9|15Wcw{RQNAN1R7*K@?O5j@=1T+-z8pOKy~qrNL0jzY(Sx0w0O+uM|REnc{$x z90U@c0dPEgiN&5WA=X%;0sdGnF{Y+7iEvm0Lj~k7hnwfIZZJ~@0i2_hSS&9STFT5) zx0~VPMTy%wMHH|$!B_$L+tFql)KrAU0>^C)Dt0II;IGSrY#)h-ELnIux;fyW6|LJK z6V7Y75?}(d(y`{;+i=a*0FQ+rviO%g*e!L-x^7c!!lw=pQ)R+cEuruU$RqpN!;$e6v_Kn>VjCfw1$L;>0AIJ5sPGw6tPfv2@2vKWvp4eA=r zh((itX8#$VccEtgUKFqfyfD>iyOWbXO40m5du05s{uyW`3%ek2Qik)WmK+yK==X8};N@oqBVvIgRvO`aWJ z5!)Q;z-Kj3(&&@-Y*i!(?pQ2a64V#pQZAjLCesX^qcEIe;(*h0Z=91u`ZO?2iH{u~ z-MeWi)Rv!NBislrZk7WVOu}30C0L9rU1`aHVTmwcg>F5+Y7yuiS7TF^!!S}9uyUee3J$0b)_A_?swK3e+g&MCw<&EvGnKVTi1}|C2-S+M zFkoGivgm>X++ToBz=2Ua{v-od3T`Qy?}R85xe#gu0#adzmKJXc4q!mL-YoPs>#Z(Q zkG{QZmIQcRY)jR=2{p|=BJ@3Wo(Th1ADu0nM4VbE?u1MYp3+)m$MiSxFGR5T92DD9 zHbrd$G%;I~!!T1Eu;wPS5)3KHQZ>bC;XUlu)b2RLQY%9w?ieOM-G!d>72!Golrd0T zfP|gC;(#^4Ixnbsg3>Cdg-Sr&u;3Pjex7%AWBJM3ah>R#wMfL$@Z=C5p>iIG^2m^j zENuu@sMGbFW7t*P!GhnpN!MG^W?2txqn=H0tTMM07%cuSOd4?*E;3=L1axA7b%8xFE5A;U8pzslx!4>ti)$&KLNB1+nS8d!1aYVXLwha2T&eHYjyynr@T?dj zpXHxaJ-d{g9V@;Nnl|EE%GWj^7LcC==eFX|4y~~Qn65VaI?0rRN>ca%@o4g{y%HdC z9@vhigBtx^WLAl5sh>emiS!|8BtShIJ;+jZ=u8Q$YD1%(WLOeZYH3k4e$`NLwzG^K z{qGAL18^l7T8a;dU@jIx&w*IMu%WgidxDnCKiyeo45!^ebv;cx^i9wf!$2(S zI%aUhLOGJbr{36{1H_z)H++sWAngjfKFDDwz`jylQ20fAn?ErY*^U=FC|yi)n@Z5K z^w}qe@O7>%d8gEba`lFoD97?embja27g40~Kj?rQgZw!}Ds(vkG zbKAgUhKqB!9Xc5nIL0B)fAvV1*vy?}0&QSlsa@=WKcO0Hf+XvhC?bd4q%;}fj`Njx zFA$tq4#iaqIy@Mz9q{uoG{rj$IA=n^^i#NFi}ysQJPC!S4i!{fZ9>R9Bucs#8l zrlnO=zxUv}+9?gp`!+DXWca{^pBw>{gY2#GXy_r;e>5fVTcw>Y`fxDa0sd7CBH{f; zlu4#Dt=uqEG;H0B@9Js)2H50EN!ap1xqz3Fg8;K>U5KmWm?x2m2$-k8Y$U+dA%y9D zD*muOXxV3=(qBmp#dL&R?BSn;v~)|QT#Da~-%O)&A=eHF0iOB+(G;rms#XTTq=?o6 z$8}!bO8gEtPN!2zZAvNOVTMoM`bl+avwV+=!;NwhyA<)h zQ)_z#AiDQ}3Ar4S&NSfbA#!*kbAWi}id%%{VFj$&(!5^M$)XN$kWk;~FDg<3H13^K z7P+=QQv8%C+^=DjE4(C{E)BTorAa?BU&g2bwmH`5IPwO1-AgG1xV}fT z>;%y0=3K#`*Q?RpF#-CHsJ?xQv3ff!MYLTL^C-+XS53?=@SKfdWi_AHMa+82fz^Rg zfybM4Qu{84;v?)!PQ|x+L-m|#KW@3nP8Q+d-Kjj8_J-zT@G$7r>yrFxR7#v;@MRH5 zYb2nhZ<--g?B5;N%Kok}q~8pLh3vJT(Sa}X*LMh$%E2g)Uwn5zOgo#MwWP}paIRoW zF(QMU9u;E0-Ol>n$K&Sh zyN8qN)|?Xjx{g;^w{f|EUjxw z%J1WxN~!Y7xsZ#|yS{eH$Li>MXrG%@FxuN#(k9>@E#T)&oOTt6U1v~cy{~|l?(w}Q zBqJFJ6}S1ved@lF=i*oI!@r>~1mI~xiK559Z>C{~?^bujZhfyZ)0`^U2O@GL-D z#b~m9@7fYv40wrIw-b@0u0Yh(^J^E+TzbS2G)yOTp`Tb;M`nNZe*4B@RjM_J==$#1 z#U}wGg&XKpVcsbonf7Achh44s@T){qp}Goq)!`9pj(B9(V=$OKDoTnT>RVQGX9^bd zloACarw0~`t)j?*N&+tC5{4AME?}pa5@MPD3}5;IRNN}k8lRq);VNWyB$q9Ig>$*6Yp`Yycd}D`t(ai_(p8B{V6p`LgR1gP-;ms5p#sTkY@nX6gU-89u~WiBE+JDM01abeUE zRqIS4_{WD4Bb-QTN2oMrqwYcprwZmK#0P&;hjy;mcp;Y|WR=N}aLAaSXVADJS~67+ z5&RDOGitDHB=}YuvwU=~GIOqAo;w9-mPh|8rDWa=j~0T(JZM=<`;S`8*@Ag*BL7FL{I?vCSXt$V9e^a|t7;C&&7{%pIdOLRGJ>$x z!mKnf#5K;IHbtWJdx@zaB|g@E@@jP>!B-g|(SLS_G>M*! zB$b|{GY&fU`X9PeE?tQ^V=&89(p4gx8s6$4FxMP7=XjQmL+P`B$Ar7coUx;amSA~{S<*}79s#tc27EX%C3X;t8U``vX^?j;`48;XHADJMDl_={IP$D?E zbb#h*J~X~{W)9Ni_>oGCF0ABj)NoQzUb0PbG{0dAJ8`fwJ4mv?-dwVPiOs))Yr<3L zk^8#`qYP_;_)NG}8EbL>JR`=5TFkkFSz@!u@%-Y%q{a|QuOJ@GavhOHts+Sa#%RMj zW#cWaBfJ?CIZBD_cz5Q=Aq&+^BF5=jevi1?*POOHjj7%~QpY9ZJQ;ad_bjAL^D>x~ zE&j+Q!=BoVIe{?CphuJr8GiK^ay~-jb4y})ldNU3UI9h_h#LfewMX$=g?y_FH71fa zb*+bqIU$(0Cdv=lUy|vBB6SQmLO*VK#oQvn-q#tU4Q79ynL|wIX;XvK2vo8e{NHJg zqlZ*feNiq2ZhvThnFj|IIY{F2{^BNj(d`ZY)fo^5R%|nL%O@nRURbd|GH|&u)Qd64 z56P(7{48wl4)v0C)}NtRLYJ#`KPH)T|JwA$?rYK{A!B{!4@AT~H@kJ;li;lX16KwMMmuZSl zDU7*WS0lZ7?z+wv32e05PTm~`>DFl$c-CFo=QtG6z&DfcqT3RcAa_# zux9Mm&oq{Ez!h(X8GvPq@@pTr?w;=CrQs|+^i3HI(P;h%=%+gCa`JZ6y`)kzOA~dyAzT>dzJI-g=KYqWlZ^_RCniXSCxlDnr zKb^2T`L@k2SvL-?`DMUsMGU9*x7;mrUDdP=BidX4(>oC@>IC9m>r&;}s&FayT0~cC z*NDcogN3^j5dAAu4QtUh&u67&z2E>7D+rKl(Td>_k=FmzC8A|mb^Z57mH3WM>|Ky7 zH2Js4% z2|Osvo@e=qH_J*V_>QL_mR-;46Q9(P&z5SR17O+qEHDw$5W~}N+4rn45zbH|etIn% zpEV`|8A`=ZpXF=|d+QmDp2p|COZhcsu?epP$sExCvP}oA7df0L1YeiDU$ddNB$;kB(mJ{iDo4d*UkBV z6E+feMZ12hAfkK0LM4?HcZpyQR3Qy{{sMLs+i+i55elTCG=9p4sE>Z(TE0d?5)DDVc{dQmdLQB*7*`Mt zVU{^kWpV?&gSi~i`#qJzcKby9VN7d|hFba{OU#O)A>f4_i!zZRLc>+fn33KL*abT9 zI+4i&fxTE-@2P}_;Fl?`6@g};5^dZ*Gt#r>B3y*X9&V`V;vF~GIJDBLDT9VM7q~FK zJX)J3F&DWODUyCcXjjWFdr4~-gtu?mldepJt(vtEdguK4wn zc2(W&oF`O_9QfmsLv$`CduCb1@7HVO);7V5)GMcxw{J~Oxs;kg?&{9Jqx}72@F^}y z-EXP@zGJ|4IdZZBQvu~RTZU}$XNsU=a;3*iSB0=gFm?K;JuPF6?#hhJo=h!N@F{s( z4rVdMuH|4BxB4>`QKqpr2{GN3DT?awST^L0VCtemFUf_65lm%N(Va5kM2Ir|6aIXj z4^ti$aYq_IHQQB4mEA1^PS;{;q+G_l5Wazt@m@@sRLw(TbETzP`Tv~?-(?H@Z>Re) z#ZtBRi^};(re4Yv^+3p?CUJ`9bPko6YZH!jAxzm+m|#t?rgUIRry`Dv!;NSQQ#|F; z|AH9Y8sy0oP?@b~>2q&{7gI##()S4Q0)d};GL=+K6LZM2*J@#^sjB?`fFe()*Hfkc z4=E(tm#M1?9(|Nhs`$5|Om$V&uSgW_zVK5RQ)3kvo%jT`r}Mod!k9`c&(`1U&O{lK zUDD5;{Fs6(&)2_5ya-xNePwJLU#9XZAmX!0TdwIIi0+PQL)(>Pim*JZw2T@%al!ii er>~}_rgNT=ntJ_g(#AzozUm)YUG)k>fdK$@`CnQ9 diff --git a/general/package/wifibroadcast-ng/www/script.js b/general/package/wifibroadcast-ng/www/script.js deleted file mode 100644 index 74976c21..00000000 --- a/general/package/wifibroadcast-ng/www/script.js +++ /dev/null @@ -1,96 +0,0 @@ -let configData = { majestic: {}, wfb: {} }; - -async function loadYAML(url, setter) { - const response = await fetch(url); - const text = await response.text(); - setter(jsyaml.load(text)); -} - -async function uploadYAML(data, location) { - const yamlData = jsyaml.dump(data); - await fetch('/upload', { - method: 'POST', - headers: { 'File-Location': location }, - body: yamlData - }); -} - -async function runCommand(command) { - await fetch('/command', { - method: 'POST', - headers: { 'Run-Command': command } - }); -} - -if (navigator.userAgent.includes("Android")) { - document.querySelector('.video-section').style.display = 'none'; -} - -function syncForm(data, formPrefix, mode) { - Object.keys(data).forEach((section) => { - Object.keys(data[section]).forEach((key) => { - const field = document.getElementsByName(formPrefix + '.' + section + '.' + key)[0]; - if (!field) { - return; - } - - const isCheckbox = field.type === "checkbox"; - if (mode === "setup") { - isCheckbox ? - field.checked = data[section][key] === true : field.value = data[section][key]; - } else if (mode === "update") { - data[section][key] = isCheckbox ? - field.checked : (isNaN(field.value) ? field.value : Number(field.value)); - } - }); - }); -} - -function executeDelay(button, command) { - button.disabled = true; - runCommand(command); - setTimeout(() => { - button.disabled = false; - location.reload(); - }, 1000); -} - -function addClickListener(buttonId, command, configKey) { - document.getElementById(buttonId).addEventListener('click', function () { - if (configKey && configData[configKey]) { - syncForm(configData[configKey], configKey, "update"); - var yamlPath = '/etc/' + configKey + '.yaml'; - uploadYAML(configData[configKey], yamlPath); - } - executeDelay(this, command); - }); -} - -addClickListener('apply-video-button', 'killall -1 majestic', 'majestic'); -addClickListener('apply-wfb-button', 'wifibroadcast start', 'wfb'); -addClickListener('reset-video-button', 'wifibroadcast resetv'); -addClickListener('reset-wfb-button', 'wifibroadcast resetw'); - -function populateSelect(id, start, end, step) { - const select = document.getElementById(id); - for (let i = start; i <= end; i += step) { - const option = document.createElement('option'); - option.value = i; - option.textContent = i; - select.appendChild(option); - } -} - -populateSelect('bitrate', 1024, 20480, 1024); -populateSelect('txpower', 1, 58, 1); -populateSelect('mcs_index', 0, 8, 1); - -loadYAML('/etc/majestic.yaml', (data) => { - configData.majestic = data; - syncForm(configData.majestic, 'majestic', "setup"); -}); - -loadYAML('/etc/wfb.yaml', (data) => { - configData.wfb = data; - syncForm(configData.wfb, 'wfb', "setup"); -}); diff --git a/general/package/wifibroadcast-ng/www/style.css b/general/package/wifibroadcast-ng/www/style.css deleted file mode 100644 index 845fbc53..00000000 --- a/general/package/wifibroadcast-ng/www/style.css +++ /dev/null @@ -1,111 +0,0 @@ -body { - font-family: Helvetica; - background-color: #1e1e1e; - color: #dcdcdc; - text-align: center; -} - -header { - background-color: #252526; - border-radius: 4px; - box-shadow: 0 2px 10px #00000080; - color: white; - padding: 15px 0; -} - -h3 { - font-size: 1.5rem; - margin-top: 1rem; - color: #dee2e6bf; -} - -.container { - display: flex; - justify-content: space-evenly; - width: 100%; -} - -.form-section .row { - display: flex; - justify-content: space-between; - margin: 10px 40px; -} - -.form-section { - width: 45%; - margin: 20px 0; - padding-top: 20px; - background-color: #2d2d2d; - border-radius: 4px; - box-shadow: 0 2px 10px #00000080; -} - -.form-section label { - width: 10vw; - margin: 10px 0 5px; - display: inline-block; - font-weight: bold; - color: #dee2e6; - font-size: 0.9rem; -} - -.form-section select { - width: 16vw; - padding: 10px; - margin-bottom: 15px; - background-color: #3c3c3c; - border-radius: 4px; - border: 1px solid #555; - color: #dcdcdc; - font-size: 0.9rem; -} - -.form-section input { - width: 16vw; - height: 26px; - margin-bottom: 25px; -} - -.form-section button { - width: 20vw; - padding: 10px; - margin: 10px; - border: none; - cursor: pointer; - font-size: 1rem; - color: white; - border-radius: 4px; - box-shadow: 0 2px 10px #00000040; -} - -.button-container { - display: flex; - flex-direction: column; - align-items: center; - margin: 25px; -} - -#preview { - width: 100%; - max-width: 70%; - margin-top: 25px; - background-color: #000; - border-radius: 4px; - box-shadow: 0 2px 10px #00000080; -} - -#apply-video-button, #apply-wfb-button { - background-color: #0d4aa5; -} - -#apply-video-button:hover, #apply-wfb-button:hover { - background-color: #115fd4; -} - -#reset-video-button, #reset-wfb-button { - background-color: #a11212; -} - -#reset-video-button:hover, #reset-wfb-button:hover { - background-color: #cf1717; -}