diff --git a/meshchatx/src/frontend/components/interfaces/AddInterfacePage.vue b/meshchatx/src/frontend/components/interfaces/AddInterfacePage.vue index 17df717..8480cd3 100644 --- a/meshchatx/src/frontend/components/interfaces/AddInterfacePage.vue +++ b/meshchatx/src/frontend/components/interfaces/AddInterfacePage.vue @@ -1117,6 +1117,48 @@ placeholder="e.g. eth0, wlan0" class="input-field" /> +
+

+ {{ $t("interfaces.auto_iface_ifname_chips_hint") }} +

+
+ {{ $t("interfaces.kernel_iface_loading") }} +
+
+ +
+
+
+

+ {{ $t("interfaces.auto_iface_ifname_chips_hint") }} +

+
+ {{ $t("interfaces.kernel_iface_loading") }} +
+
+ +
+
Configured Bitrate (bps) @@ -2118,6 +2202,32 @@ export default { } return rest; }, + autoInterfaceChipActive(fieldKey, token) { + const raw = this[fieldKey]; + if (raw == null || raw === "") { + return false; + } + return String(raw) + .split(",") + .map((s) => s.trim()) + .includes(token); + }, + toggleAutoInterfaceCommaToken(fieldKey, token) { + const raw = this[fieldKey]; + let str = raw == null || raw === "" ? "" : String(raw); + const tokens = str + .split(",") + .map((s) => s.trim()) + .filter(Boolean); + const i = tokens.indexOf(token); + if (i === -1) { + tokens.push(token); + } else { + tokens.splice(i, 1); + } + const next = tokens.join(", "); + this[fieldKey] = next === "" ? null : next; + }, async loadHostKernelInterfaces() { this.hostKernelInterfacesLoading = true; this.hostKernelInterfacesUnavailable = null; diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json index 040cee6..a173cb8 100644 --- a/meshchatx/src/frontend/locales/de.json +++ b/meshchatx/src/frontend/locales/de.json @@ -960,7 +960,8 @@ "listen_ip_required": "Listen-IP ist erforderlich.", "kernel_iface_picker_title": "Schnittstellen auf diesem Rechner", "kernel_iface_loading": "Laden…", - "kernel_iface_picker_help": "Optional ein Kernel-Interface-Name, oder leer lassen und nur über Listen-IP binden. Klick füllt das Feld." + "kernel_iface_picker_help": "Optional ein Kernel-Interface-Name, oder leer lassen und nur über Listen-IP binden. Klick füllt das Feld.", + "auto_iface_ifname_chips_hint": "Schnittstellen dieses Rechners: Klicken zum Hinzufügen oder Entfernen im Feld darüber." }, "map": { "title": "Karte", diff --git a/meshchatx/src/frontend/locales/en.json b/meshchatx/src/frontend/locales/en.json index 39d8b5f..203ed56 100644 --- a/meshchatx/src/frontend/locales/en.json +++ b/meshchatx/src/frontend/locales/en.json @@ -908,7 +908,8 @@ "listen_ip_required": "Listen IP is required.", "kernel_iface_picker_title": "Interfaces on this host", "kernel_iface_loading": "Loading…", - "kernel_iface_picker_help": "Device is optional: one kernel interface name, or leave empty to bind using Listen IP only. Click a row to fill the field." + "kernel_iface_picker_help": "Device is optional: one kernel interface name, or leave empty to bind using Listen IP only. Click a row to fill the field.", + "auto_iface_ifname_chips_hint": "This host's interfaces: click to add or remove names in the field above." }, "map": { "title": "Map", diff --git a/meshchatx/src/frontend/locales/es.json b/meshchatx/src/frontend/locales/es.json index a4ec0db..84778f1 100644 --- a/meshchatx/src/frontend/locales/es.json +++ b/meshchatx/src/frontend/locales/es.json @@ -908,7 +908,8 @@ "listen_ip_required": "La IP de escucha es obligatoria.", "kernel_iface_picker_title": "Interfaces en este equipo", "kernel_iface_loading": "Cargando…", - "kernel_iface_picker_help": "“Dispositivo” es opcional: un nombre de interfaz del kernel, o vacío para enlazar solo con la IP de escucha. Pulse una fila para rellenar." + "kernel_iface_picker_help": "“Dispositivo” es opcional: un nombre de interfaz del kernel, o vacío para enlazar solo con la IP de escucha. Pulse una fila para rellenar.", + "auto_iface_ifname_chips_hint": "Interfaces de este equipo: pulse para añadir o quitar nombres en el campo de arriba." }, "map": { "title": "Mapa", diff --git a/meshchatx/src/frontend/locales/fr.json b/meshchatx/src/frontend/locales/fr.json index 785a9e1..8f50ea2 100644 --- a/meshchatx/src/frontend/locales/fr.json +++ b/meshchatx/src/frontend/locales/fr.json @@ -908,7 +908,8 @@ "listen_ip_required": "L'adresse IP d'écoute est obligatoire.", "kernel_iface_picker_title": "Interfaces sur cette machine", "kernel_iface_loading": "Chargement…", - "kernel_iface_picker_help": "Le champ Périphérique est optionnel : un seul nom d'interface noyau, ou laisser vide pour lier via l'IP d'écoute uniquement. Cliquez sur une ligne pour remplir." + "kernel_iface_picker_help": "Le champ Périphérique est optionnel : un seul nom d'interface noyau, ou laisser vide pour lier via l'IP d'écoute uniquement. Cliquez sur une ligne pour remplir.", + "auto_iface_ifname_chips_hint": "Interfaces sur cette machine : cliquez pour ajouter ou retirer des noms dans le champ ci-dessus." }, "map": { "title": "Carte", diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json index 7223b74..8b87708 100644 --- a/meshchatx/src/frontend/locales/it.json +++ b/meshchatx/src/frontend/locales/it.json @@ -960,7 +960,8 @@ "listen_ip_required": "L'IP di ascolto è obbligatoria.", "kernel_iface_picker_title": "Interfacce su questo host", "kernel_iface_loading": "Caricamento…", - "kernel_iface_picker_help": "Il dispositivo è facoltativo: un solo nome di interfaccia del kernel, o lascia vuoto e lega solo con l'IP di ascolto. Clic su una riga per compilare." + "kernel_iface_picker_help": "Il dispositivo è facoltativo: un solo nome di interfaccia del kernel, o lascia vuoto e lega solo con l'IP di ascolto. Clic su una riga per compilare.", + "auto_iface_ifname_chips_hint": "Interfacce su questo host: clic per aggiungere o rimuovere nomi nel campo sopra." }, "map": { "title": "Mappa", diff --git a/meshchatx/src/frontend/locales/nl.json b/meshchatx/src/frontend/locales/nl.json index 5ebe426..790b728 100644 --- a/meshchatx/src/frontend/locales/nl.json +++ b/meshchatx/src/frontend/locales/nl.json @@ -908,7 +908,8 @@ "listen_ip_required": "Listen-IP is verplicht.", "kernel_iface_picker_title": "Interfaces op deze host", "kernel_iface_loading": "Laden…", - "kernel_iface_picker_help": "Apparaat is optioneel: één kernelinterfacenaam, of leeg laten en alleen via listen-IP binden. Klik op een regel om in te vullen." + "kernel_iface_picker_help": "Apparaat is optioneel: één kernelinterfacenaam, of leeg laten en alleen via listen-IP binden. Klik op een regel om in te vullen.", + "auto_iface_ifname_chips_hint": "Interfaces op deze host: klik om namen in het veld erboven toe te voegen of te verwijderen." }, "map": { "title": "Kaart", diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json index 215743f..2242d9d 100644 --- a/meshchatx/src/frontend/locales/ru.json +++ b/meshchatx/src/frontend/locales/ru.json @@ -960,7 +960,8 @@ "listen_ip_required": "Укажите IP для прослушивания.", "kernel_iface_picker_title": "Интерфейсы на этом узле", "kernel_iface_loading": "Загрузка…", - "kernel_iface_picker_help": "Поле «устройство» необязательно: одно имя интерфейса ядра или пусто — привязка только по Listen IP. Нажмите строку, чтобы подставить имя." + "kernel_iface_picker_help": "Поле «устройство» необязательно: одно имя интерфейса ядра или пусто — привязка только по Listen IP. Нажмите строку, чтобы подставить имя.", + "auto_iface_ifname_chips_hint": "Интерфейсы этого узла: нажмите, чтобы добавить или убрать имя в поле выше." }, "map": { "title": "Карта", diff --git a/meshchatx/src/frontend/locales/zh.json b/meshchatx/src/frontend/locales/zh.json index b1950a9..57e744c 100644 --- a/meshchatx/src/frontend/locales/zh.json +++ b/meshchatx/src/frontend/locales/zh.json @@ -908,7 +908,8 @@ "listen_ip_required": "Listen IP 为必填项。", "kernel_iface_picker_title": "本机网络接口", "kernel_iface_loading": "加载中…", - "kernel_iface_picker_help": "“设备”为可选,填写一个内核网卡名,或留空仅按 Listen IP 绑定。点击一行填入输入框。" + "kernel_iface_picker_help": "“设备”为可选,填写一个内核网卡名,或留空仅按 Listen IP 绑定。点击一行填入输入框。", + "auto_iface_ifname_chips_hint": "本机接口:点击可在上方字段中添加或移除名称。" }, "map": { "title": "地图",