From 673afc80a1f0ab6996a8e5adb962af31197fcf41 Mon Sep 17 00:00:00 2001 From: Ben <43026681+bwp91@users.noreply.github.com> Date: Wed, 23 Oct 2024 18:47:02 +0100 Subject: [PATCH] add plugin config validation functionality --- CHANGELOG.md | 1 + package-lock.json | 102 +++++++----------- package.json | 12 +-- ui/package-lock.json | 6 +- .../custom-plugins.component.html | 21 ++-- .../custom-plugins.component.ts | 8 +- ...homebridge-google-smarthome.component.html | 2 +- .../plugin-config.component.html | 63 +++++++---- .../plugin-config/plugin-config.component.ts | 15 +++ .../users-2fa-enable.component.html | 2 +- ui/src/i18n/bg.json | 3 + ui/src/i18n/ca.json | 3 + ui/src/i18n/cs.json | 3 + ui/src/i18n/de.json | 3 + ui/src/i18n/en.json | 3 + ui/src/i18n/es.json | 3 + ui/src/i18n/fi.json | 3 + ui/src/i18n/fr.json | 3 + ui/src/i18n/he.json | 3 + ui/src/i18n/hu.json | 3 + ui/src/i18n/id.json | 3 + ui/src/i18n/it.json | 3 + ui/src/i18n/ja.json | 3 + ui/src/i18n/ko.json | 3 + ui/src/i18n/mk.json | 3 + ui/src/i18n/nl.json | 3 + ui/src/i18n/no.json | 3 + ui/src/i18n/pl.json | 3 + ui/src/i18n/pt-BR.json | 3 + ui/src/i18n/pt.json | 3 + ui/src/i18n/ru.json | 3 + ui/src/i18n/sl.json | 3 + ui/src/i18n/sv.json | 3 + ui/src/i18n/th.json | 3 + ui/src/i18n/tr.json | 3 + ui/src/i18n/uk.json | 3 + ui/src/i18n/zh-CN.json | 3 + ui/src/i18n/zh-TW.json | 3 + 38 files changed, 206 insertions(+), 110 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4fcf984df..2263636ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to `homebridge-config-ui-x` will be documented in this file. - implement and allow switching to scoped plugins - fix widget config saving on dashboard +- add plugin config validation functionality ### Other Changes diff --git a/package-lock.json b/package-lock.json index 9353204a4..7ef648f0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,14 +25,14 @@ "@homebridge/hap-client": "1.10.2", "@homebridge/node-pty-prebuilt-multiarch": "0.11.14", "@nestjs/axios": "3.1.0", - "@nestjs/common": "10.4.5", - "@nestjs/core": "10.4.5", + "@nestjs/common": "10.4.6", + "@nestjs/core": "10.4.6", "@nestjs/jwt": "10.2.0", "@nestjs/passport": "10.0.3", - "@nestjs/platform-fastify": "10.4.5", - "@nestjs/platform-socket.io": "10.4.5", + "@nestjs/platform-fastify": "10.4.6", + "@nestjs/platform-socket.io": "10.4.6", "@nestjs/swagger": "7.4.2", - "@nestjs/websockets": "10.4.5", + "@nestjs/websockets": "10.4.6", "axios": "1.7.7", "bash-color": "0.0.4", "buffer-shims": "1.0.0", @@ -66,7 +66,7 @@ }, "devDependencies": { "@antfu/eslint-config": "^3.8.0", - "@nestjs/testing": "^10.4.5", + "@nestjs/testing": "^10.4.6", "@types/fs-extra": "^11.0.4", "@types/lodash": "^4.17.12", "@types/node": "^22.7.9", @@ -1518,9 +1518,9 @@ } }, "node_modules/@nestjs/common": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.4.5.tgz", - "integrity": "sha512-N/yUyuYCBMb0+H6jHhntR7PURzji0usID/DByhOfooyk/aPGscI0aQKwOA6edlJlT92hHUvXYLJ5p3npj7KcjQ==", + "version": "10.4.6", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.4.6.tgz", + "integrity": "sha512-KkezkZvU9poWaNq4L+lNvx+386hpOxPJkfXBBeSMrcqBOx8kVr36TGN2uYkF4Ta4zNu1KbCjmZbc0rhHSg296g==", "license": "MIT", "dependencies": { "iterare": "1.2.1", @@ -1547,9 +1547,9 @@ } }, "node_modules/@nestjs/core": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.4.5.tgz", - "integrity": "sha512-wk0KJ+6tuidqAdeemsQ40BCp1BgMsSuSLG577aqXLxXYoa8FQYPrdxoSzd05znYLwJYM55fisZWb3FLF9HT2qw==", + "version": "10.4.6", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.4.6.tgz", + "integrity": "sha512-zXVPxCNRfO6gAy0yvEDjUxE/8gfZICJFpsl2lZAUH31bPb6m+tXuhUq2mVCTEltyMYQ+DYtRe+fEYM2v152N1g==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -1628,9 +1628,9 @@ } }, "node_modules/@nestjs/platform-fastify": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/@nestjs/platform-fastify/-/platform-fastify-10.4.5.tgz", - "integrity": "sha512-5kcLsloaKkG6i46qbHmz6m/XoEtwroBni3uwsNENw4OJ8fptllihOqG3PWKRfljfpH4twyKdtZfKvyjMHXNj4w==", + "version": "10.4.6", + "resolved": "https://registry.npmjs.org/@nestjs/platform-fastify/-/platform-fastify-10.4.6.tgz", + "integrity": "sha512-0KnpilaXnAAaBeNTYvP1p4iJU2JFJPk3c+gXWh/NAOLCe+MuaprgvkNX/YUOycirvWr3qVTCgICO+xejgJyhhw==", "license": "MIT", "dependencies": { "@fastify/cors": "9.0.1", @@ -1661,12 +1661,12 @@ } }, "node_modules/@nestjs/platform-socket.io": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/@nestjs/platform-socket.io/-/platform-socket.io-10.4.5.tgz", - "integrity": "sha512-dHkHJQArhrpkX6qBdTW2ghuja3i3cCslwy4QHY6d46u+9UyANQlsNK9wt/lZnmXfCMaci8xAJvUpyODa6YtV7g==", + "version": "10.4.6", + "resolved": "https://registry.npmjs.org/@nestjs/platform-socket.io/-/platform-socket.io-10.4.6.tgz", + "integrity": "sha512-lGv99O7C00wtnGq9M0mcwrOpH2qmuqAXQyvo/d/I7rmaf3OO1Sg8qWDLAnPKHdaumwOL2mnET3kvCJ06MaL6WA==", "license": "MIT", "dependencies": { - "socket.io": "4.7.5", + "socket.io": "4.8.0", "tslib": "2.7.0" }, "funding": { @@ -1713,9 +1713,9 @@ } }, "node_modules/@nestjs/testing": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.4.5.tgz", - "integrity": "sha512-3NhmztE+fK3MuuOZhXihvMIhxm0QuDM2BneHvM5A0oVLG+STsAeGBqbDr/Ef2qsvqH5HaqvfGbVJ4N1DQnZE5A==", + "version": "10.4.6", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.4.6.tgz", + "integrity": "sha512-aiDicKhlGibVGNYuew399H5qZZXaseOBT/BS+ERJxxCmco7ZdAqaujsNjSaSbTK9ojDPf27crLT0C4opjqJe3A==", "dev": true, "license": "MIT", "dependencies": { @@ -1741,9 +1741,9 @@ } }, "node_modules/@nestjs/websockets": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-10.4.5.tgz", - "integrity": "sha512-LbL/HRLWQUBTUPY7swojOHdvokyVGINIiuP/VmRdhob4T751r+9i09z2RqRpP71psuom9mnRHYI1+vT2FABrAw==", + "version": "10.4.6", + "resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-10.4.6.tgz", + "integrity": "sha512-53YqDQylPAOudNFiiBvrN8QrRl/sZ9oEjKbD3wBVgrFREbaiuTySoyyy6HwVs60HW29uQwck+Bp7qkKGjhtQKg==", "license": "MIT", "dependencies": { "iterare": "1.2.1", @@ -1890,15 +1890,15 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.2.tgz", - "integrity": "sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz", + "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==", "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "picomatch": "^4.0.2" }, "engines": { "node": ">=14.0.0" @@ -1912,19 +1912,6 @@ } } }, - "node_modules/@rollup/pluginutils/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.24.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", @@ -3898,9 +3885,9 @@ } }, "node_modules/chai": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", - "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dev": true, "license": "MIT", "dependencies": { @@ -4660,9 +4647,9 @@ } }, "node_modules/engine.io": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", "license": "MIT", "dependencies": { "@types/cookie": "^0.4.1", @@ -4670,7 +4657,7 @@ "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", @@ -4689,15 +4676,6 @@ "node": ">=10.0.0" } }, - "node_modules/engine.io/node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/enhanced-resolve": { "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", @@ -9721,16 +9699,16 @@ "license": "ISC" }, "node_modules/socket.io": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", - "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", + "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", "license": "MIT", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.5.2", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" }, diff --git a/package.json b/package.json index 5cd8a8037..aafd1de3c 100644 --- a/package.json +++ b/package.json @@ -85,14 +85,14 @@ "@homebridge/hap-client": "1.10.2", "@homebridge/node-pty-prebuilt-multiarch": "0.11.14", "@nestjs/axios": "3.1.0", - "@nestjs/common": "10.4.5", - "@nestjs/core": "10.4.5", + "@nestjs/common": "10.4.6", + "@nestjs/core": "10.4.6", "@nestjs/jwt": "10.2.0", "@nestjs/passport": "10.0.3", - "@nestjs/platform-fastify": "10.4.5", - "@nestjs/platform-socket.io": "10.4.5", + "@nestjs/platform-fastify": "10.4.6", + "@nestjs/platform-socket.io": "10.4.6", "@nestjs/swagger": "7.4.2", - "@nestjs/websockets": "10.4.5", + "@nestjs/websockets": "10.4.6", "axios": "1.7.7", "bash-color": "0.0.4", "buffer-shims": "1.0.0", @@ -122,7 +122,7 @@ }, "devDependencies": { "@antfu/eslint-config": "^3.8.0", - "@nestjs/testing": "^10.4.5", + "@nestjs/testing": "^10.4.6", "@types/fs-extra": "^11.0.4", "@types/lodash": "^4.17.12", "@types/node": "^22.7.9", diff --git a/ui/package-lock.json b/ui/package-lock.json index bceb81f9c..96e9d5206 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -3920,9 +3920,9 @@ } }, "node_modules/engine.io-client": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.1.tgz", - "integrity": "sha512-aYuoak7I+R83M/BBPIOs2to51BmFIpC1wZe6zZzMrT2llVsHy5cvcmdsJgP2Qz6smHu+sD9oexiSUAVd8OfBPw==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.2.tgz", + "integrity": "sha512-TAr+NKeoVTjEVW8P3iHguO1LO6RlUz9O5Y8o7EY0fU+gY1NYqas7NN3slpFtbXEsLMHk0h90fJMfKjRkQ0qUIw==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", diff --git a/ui/src/app/core/manage-plugins/custom-plugins/custom-plugins.component.html b/ui/src/app/core/manage-plugins/custom-plugins/custom-plugins.component.html index d421ef493..767433459 100644 --- a/ui/src/app/core/manage-plugins/custom-plugins/custom-plugins.component.html +++ b/ui/src/app/core/manage-plugins/custom-plugins/custom-plugins.component.html @@ -33,6 +33,7 @@
{{ block.name }}
- +
@@ -94,28 +115,24 @@
{{ block.name }}
-
- - - diff --git a/ui/src/app/core/manage-plugins/plugin-config/plugin-config.component.ts b/ui/src/app/core/manage-plugins/plugin-config/plugin-config.component.ts index b1811b8d7..cc213276d 100644 --- a/ui/src/app/core/manage-plugins/plugin-config/plugin-config.component.ts +++ b/ui/src/app/core/manage-plugins/plugin-config/plugin-config.component.ts @@ -32,6 +32,9 @@ export class PluginConfigComponent implements OnInit { public saveInProgress: boolean public childBridges: any[] = [] public isFirstSave = false + public formBlocksValid: { [key: number]: boolean } = {} + public formIsValid = true + public strictValidation = false constructor( public $activeModal: NgbActiveModal, @@ -46,6 +49,7 @@ export class PluginConfigComponent implements OnInit { ngOnInit() { this.pluginAlias = this.schema.pluginAlias this.pluginType = this.schema.pluginType + this.strictValidation = this.schema.strictValidation this.loadPluginConfig() } @@ -152,12 +156,18 @@ export class PluginConfigComponent implements OnInit { }, }) + this.formBlocksValid[this.pluginConfig.length - 1] = false this.blockShown(__uuid__) } removeBlock(__uuid__: string) { const pluginConfigIndex = this.pluginConfig.findIndex(x => x.__uuid__ === __uuid__) this.pluginConfig.splice(pluginConfigIndex, 1) + + delete this.formBlocksValid[pluginConfigIndex] + if (!Object.keys(this.formBlocksValid).length) { + this.formIsValid = true + } } async getChildBridges(): Promise { @@ -194,4 +204,9 @@ export class PluginConfigComponent implements OnInit { } } } + + onIsValid($event: boolean, index: number) { + this.formBlocksValid[index] = $event + this.formIsValid = Object.values(this.formBlocksValid).every(x => x) + } } diff --git a/ui/src/app/modules/users/users-2fa-enable/users-2fa-enable.component.html b/ui/src/app/modules/users/users-2fa-enable/users-2fa-enable.component.html index 9540caebd..635138dd3 100644 --- a/ui/src/app/modules/users/users-2fa-enable/users-2fa-enable.component.html +++ b/ui/src/app/modules/users/users-2fa-enable/users-2fa-enable.component.html @@ -25,7 +25,7 @@

{{ 'users.setup_2fa_cannot_setup_2fa' | translate }}

- +
diff --git a/ui/src/i18n/bg.json b/ui/src/i18n/bg.json index de2083a8a..d686fc814 100644 --- a/ui/src/i18n/bg.json +++ b/ui/src/i18n/bg.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Unlock", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Вписване", "login.invalid_credentials": "Грешно потребителско име или парола", diff --git a/ui/src/i18n/ca.json b/ui/src/i18n/ca.json index 861fd5e50..a4a29381d 100644 --- a/ui/src/i18n/ca.json +++ b/ui/src/i18n/ca.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Desbloquejar", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Iniciar Sesión", "login.invalid_credentials": "Usuari o contrasenya incorrecte", diff --git a/ui/src/i18n/cs.json b/ui/src/i18n/cs.json index c523fc052..c18f0546c 100644 --- a/ui/src/i18n/cs.json +++ b/ui/src/i18n/cs.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Unlock", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Přihlásit se", "login.invalid_credentials": "Neplatné uživatelské jméno a heslo", diff --git a/ui/src/i18n/de.json b/ui/src/i18n/de.json index f64dac5fa..952c024d2 100644 --- a/ui/src/i18n/de.json +++ b/ui/src/i18n/de.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Freischalten", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Anmeldung", "login.invalid_credentials": "Ungültiger Benutzername und / oder Passwort", diff --git a/ui/src/i18n/en.json b/ui/src/i18n/en.json index 2e8fd68ee..564338335 100644 --- a/ui/src/i18n/en.json +++ b/ui/src/i18n/en.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Unlock", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Log in", "login.invalid_credentials": "Invalid Username or Password", diff --git a/ui/src/i18n/es.json b/ui/src/i18n/es.json index bdf32ea3c..e29fb5112 100644 --- a/ui/src/i18n/es.json +++ b/ui/src/i18n/es.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Desbloquear", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Iniciar sesión", "login.invalid_credentials": "Usuario o contraseña incorrectos", diff --git a/ui/src/i18n/fi.json b/ui/src/i18n/fi.json index c0c3b51ea..e2f711135 100644 --- a/ui/src/i18n/fi.json +++ b/ui/src/i18n/fi.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Poista lukitus", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automattinen (Käytä selaimen asetuksia)", "login.button_login": "Kirjaudu", "login.invalid_credentials": "Väärä käyttäjätunnus tai salasana", diff --git a/ui/src/i18n/fr.json b/ui/src/i18n/fr.json index 8495e8b4f..628fc5f29 100644 --- a/ui/src/i18n/fr.json +++ b/ui/src/i18n/fr.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Déverrouiller", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Connexion", "login.invalid_credentials": "Nom d'utilisateur ou mot de passe incorrect", diff --git a/ui/src/i18n/he.json b/ui/src/i18n/he.json index 5bc66252e..a7f0b1e6b 100644 --- a/ui/src/i18n/he.json +++ b/ui/src/i18n/he.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Unlock", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "התחבר", "login.invalid_credentials": "שם משתמש וסיסמה לא תקינים", diff --git a/ui/src/i18n/hu.json b/ui/src/i18n/hu.json index 9d798b84e..060891f5b 100644 --- a/ui/src/i18n/hu.json +++ b/ui/src/i18n/hu.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Unlock", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Bejelentkezés", "login.invalid_credentials": "Hibás felhasználónév vagy jelszó", diff --git a/ui/src/i18n/id.json b/ui/src/i18n/id.json index 767d7916b..ef4a86ecf 100644 --- a/ui/src/i18n/id.json +++ b/ui/src/i18n/id.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Unlock", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Masuk", "login.invalid_credentials": "Nama Pengguna dan Kata Sandi Salah", diff --git a/ui/src/i18n/it.json b/ui/src/i18n/it.json index 79b8149e5..9d102a0ad 100644 --- a/ui/src/i18n/it.json +++ b/ui/src/i18n/it.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Unlock", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Accedi", "login.invalid_credentials": "Utente o password non validi", diff --git a/ui/src/i18n/ja.json b/ui/src/i18n/ja.json index 7ed5a1125..d021fe8ea 100644 --- a/ui/src/i18n/ja.json +++ b/ui/src/i18n/ja.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "ロック解除", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "ログイン", "login.invalid_credentials": "ユーザー名・パスワードが間違っています", diff --git a/ui/src/i18n/ko.json b/ui/src/i18n/ko.json index 4dfafe5de..a4712f6eb 100644 --- a/ui/src/i18n/ko.json +++ b/ui/src/i18n/ko.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Unlock", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "로그인", "login.invalid_credentials": "유효하지 않은 사용자명 또는 비밀번호입니다", diff --git a/ui/src/i18n/mk.json b/ui/src/i18n/mk.json index 6689713ed..652a1ec2e 100644 --- a/ui/src/i18n/mk.json +++ b/ui/src/i18n/mk.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Unlock", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Најави се", "login.invalid_credentials": "Погрешно корисничко име или лозинка", diff --git a/ui/src/i18n/nl.json b/ui/src/i18n/nl.json index 5fe9ef24a..1af5ae9a8 100644 --- a/ui/src/i18n/nl.json +++ b/ui/src/i18n/nl.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Unlock", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Inloggen", "login.invalid_credentials": "Ongeldige gebruikersnaam of wachtwoord.", diff --git a/ui/src/i18n/no.json b/ui/src/i18n/no.json index ae3c3104a..4c365d05d 100644 --- a/ui/src/i18n/no.json +++ b/ui/src/i18n/no.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Unlock", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Logg inn", "login.invalid_credentials": "Ugyldig brukernavn eller passord", diff --git a/ui/src/i18n/pl.json b/ui/src/i18n/pl.json index f2f70863d..f844b6168 100644 --- a/ui/src/i18n/pl.json +++ b/ui/src/i18n/pl.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Odblokuj", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatycznie (użyj ustawień przeglądarki)", "login.button_login": "Zaloguj", "login.invalid_credentials": "Nieprawidłowa nazwa lub hasło użytkownika", diff --git a/ui/src/i18n/pt-BR.json b/ui/src/i18n/pt-BR.json index d6e3855b1..32f191c9b 100644 --- a/ui/src/i18n/pt-BR.json +++ b/ui/src/i18n/pt-BR.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Unlock", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Entrar", "login.invalid_credentials": "Utilizador e/ou Senha Inválida", diff --git a/ui/src/i18n/pt.json b/ui/src/i18n/pt.json index 0c0175cfd..3027b460b 100644 --- a/ui/src/i18n/pt.json +++ b/ui/src/i18n/pt.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Unlock", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Entrar", "login.invalid_credentials": "Utilizador e/ou Palavra-passe Inválida", diff --git a/ui/src/i18n/ru.json b/ui/src/i18n/ru.json index 288cf0954..c34a0c7d7 100644 --- a/ui/src/i18n/ru.json +++ b/ui/src/i18n/ru.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Разблокировать", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Автоматически (Использовать настройки браузера)", "login.button_login": "Войти", "login.invalid_credentials": "Неверное имя пользователя и пароль.", diff --git a/ui/src/i18n/sl.json b/ui/src/i18n/sl.json index d744163e7..cab67e297 100644 --- a/ui/src/i18n/sl.json +++ b/ui/src/i18n/sl.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Unlock", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Vpiši se", "login.invalid_credentials": "Neveljavno uporabniško ime in geslo", diff --git a/ui/src/i18n/sv.json b/ui/src/i18n/sv.json index 0747c3668..896d00300 100644 --- a/ui/src/i18n/sv.json +++ b/ui/src/i18n/sv.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Lås upp", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Logga in", "login.invalid_credentials": "Ogiltigt användarnamn och lösenord", diff --git a/ui/src/i18n/th.json b/ui/src/i18n/th.json index d126ed099..adb842baa 100644 --- a/ui/src/i18n/th.json +++ b/ui/src/i18n/th.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "ปลดล๊อค", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "เข้าสู่ระบบ", "login.invalid_credentials": "ชื่อผู้ใช้และรหัสผ่านไม่ถูกต้อง", diff --git a/ui/src/i18n/tr.json b/ui/src/i18n/tr.json index 54338a054..07492565c 100644 --- a/ui/src/i18n/tr.json +++ b/ui/src/i18n/tr.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Unlock", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Oturum Aç", "login.invalid_credentials": "Geçersiz Kullanıcı Adı ve Parola", diff --git a/ui/src/i18n/uk.json b/ui/src/i18n/uk.json index ae1ca9f98..599a3a3fd 100644 --- a/ui/src/i18n/uk.json +++ b/ui/src/i18n/uk.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Розблокувати", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "Увійти", "login.invalid_credentials": "Неправильне ім'я користувача або пароль.", diff --git a/ui/src/i18n/zh-CN.json b/ui/src/i18n/zh-CN.json index c22ba59f9..b34261c13 100644 --- a/ui/src/i18n/zh-CN.json +++ b/ui/src/i18n/zh-CN.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "Unlock", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "登录", "login.invalid_credentials": "无效的用户名或密码", diff --git a/ui/src/i18n/zh-TW.json b/ui/src/i18n/zh-TW.json index 119014ce9..f40785f6c 100644 --- a/ui/src/i18n/zh-TW.json +++ b/ui/src/i18n/zh-TW.json @@ -129,6 +129,9 @@ "form.button_show": "Show", "form.button_unlock": "解鎖", "form.button_unpair": "Unpair", + "form.label_invalid": "Config validation failed - you can still save your changes.", + "form.label_invalid_strict": "Config validation failed - please review the form before saving.", + "form.label_valid": "Config validation passed.", "form.select.auto": "Automatic (Use Browser Settings)", "login.button_login": "登錄", "login.invalid_credentials": "無效的使用者名稱和密碼",